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 Honza
8    */
9   public class Freq {
10  
11      /**
12       * Compare two frequenties.
13       * @param freq1
14       * @param freq2
15       * @return -1 if freq1 < freq2
16       *          0 if freq1 == freq2
17       *          1 if freq1 > freq2
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  	 * Units for frequency
33  	 * @author Honza
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      * How long does one tick lasts
107      * @return length of tick in ms
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 }