1 package cz.cuni.amis.pogamut.sposh.elements;
2
3
4
5
6
7
8
9 public class Freq {
10
11
12
13
14
15 public static Freq INFINITE = new Freq(0, FreqUnits.SECONDS);
16
17
18
19
20
21
22
23
24 public static int compare(long freq1, long freq2) {
25 if (freq1 < freq2) {
26 return -1;
27 }
28 if (freq1 == freq2) {
29 return 0;
30 }
31 return 1;
32 }
33
34 public static int compare(Freq freq1, Freq freq2) {
35 return compare(freq1.tick(), freq2.tick());
36 }
37
38
39
40
41
42 public enum FreqUnits {
43
44 HOURS("hours", 0),
45 MINUTES("minutes", 1),
46 SECONDS("seconds", 2),
47 NONE("none", 3),
48 HZ("hz", 4),
49 PM("pm", 5);
50
51 private final String name;
52 private final int id;
53
54 private FreqUnits(String name, int id) {
55 this.name = name;
56 this.id = id;
57 }
58
59 @Override
60 public String toString() {
61 return name;
62 }
63
64 public int getId() {
65 return id;
66 }
67 }
68
69
70 private FreqUnits units;
71 private double ammount;
72
73 Freq() {
74 this.ammount = 0;
75 this.units = FreqUnits.NONE;
76 }
77
78 Freq(double count, FreqUnits units) {
79 this.ammount = count;
80 this.units = units;
81 }
82
83 public Freq(Freq original) {
84 this.ammount = original.ammount;
85 this.units = original.units;
86 }
87
88 @Override
89 public String toString() {
90 if (!FreqUnits.NONE.equals(units)) {
91 return "(" + getUnits() + " " + getAmmount() + ")";
92 }
93 return "";
94 }
95
96 public FreqUnits getUnits() {
97 return units;
98 }
99
100 public void setUnits(FreqUnits units) {
101 this.units = units;
102 }
103
104 public double getAmmount() {
105 return ammount;
106 }
107
108 public void setAmmount(double ammount) {
109 this.ammount = ammount;
110 }
111
112
113
114
115
116 public long tick() {
117 switch (units) {
118 case HOURS:
119 return (long) (3600000L * ammount);
120 case MINUTES:
121 return (long) (60000L * ammount);
122 case SECONDS:
123 return (long) (1000L * ammount);
124 case HZ:
125 return (long) (1000L / ammount);
126 case PM:
127 return (long) (60000 / ammount);
128 case NONE:
129 return (long) ammount;
130 default:
131 throw new IllegalStateException("Invalid units.");
132 }
133 }
134 }