View Javadoc

1   package cz.cuni.amis.pogamut.sposh.elements;
2   
3   /**
4    * Class for holding information about frequency of running various parts of
5    * POSH plan.
6    *
7    * @author HonzaH
8    */
9   public class Freq {
10  
11      /**
12       * Infinite frequency. In order for an event to have this frequency, it
13       * would have to occur each 1/inf ms.
14       */
15      public static Freq INFINITE = new Freq(0, FreqUnits.SECONDS);
16  
17      /**
18       * Compare two frequenties.
19       *
20       * @param freq1
21       * @param freq2
22       * @return -1 if freq1 < freq2 0 if freq1 == freq2 1 if freq1 > freq2
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  	 * Units for frequency
40  	 * @author HonzaH
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      * How long does one tick lasts
114      * @return length of tick in ms
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 }