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