1 package com.atlassian.core.cron.parser;
2
3 import com.atlassian.core.util.DateUtils;
4 import org.apache.log4j.Logger;
5
6
7
8
9 public final class MeridianHour
10 {
11 private static final Logger log = Logger.getLogger(MeridianHour.class);
12
13 private static final int MERIDIAN_HOURS = 12;
14
15 private final int hour;
16 private final String meridian;
17
18 public MeridianHour(int hour, String meridian)
19 {
20 this.hour = hour;
21 this.meridian = meridian;
22 }
23
24 public int getHour()
25 {
26 return hour;
27 }
28
29 public String getMeridian()
30 {
31 return meridian;
32 }
33
34
35
36
37
38
39
40
41
42
43 public static MeridianHour parseMeridianHour(String twentyFourHour)
44 {
45 int hour;
46 String meridian = DateUtils.AM;
47 try
48 {
49 hour = Integer.parseInt(twentyFourHour);
50 if (hour < 0 || hour > 23)
51 {
52 log.debug("The hour of the cron entry is out of range (0-23): " + twentyFourHour);
53 return null;
54 }
55 else if (hour == 0)
56 {
57 hour = 12;
58 }
59 else if (hour == 12)
60 {
61 meridian = DateUtils.PM;
62 }
63 else if (hour >= MERIDIAN_HOURS)
64 {
65 meridian = DateUtils.PM;
66 hour -= MERIDIAN_HOURS;
67 }
68
69 return new MeridianHour(hour, meridian);
70 }
71 catch (NumberFormatException nfe)
72 {
73 log.debug("The hour of the cron entry must be an integer, instead it is: " + twentyFourHour);
74 }
75 return null;
76 }
77
78 public boolean equals(final Object o)
79 {
80 if (this == o)
81 {
82 return true;
83 }
84 if (o == null || getClass() != o.getClass())
85 {
86 return false;
87 }
88
89 final MeridianHour that = (MeridianHour) o;
90
91 if (hour != that.hour)
92 {
93 return false;
94 }
95 if (meridian != null ? !meridian.equals(that.meridian) : that.meridian != null)
96 {
97 return false;
98 }
99
100 return true;
101 }
102
103 public int hashCode()
104 {
105 int result;
106 result = hour;
107 result = 31 * result + (meridian != null ? meridian.hashCode() : 0);
108 return result;
109 }
110 }