Skip to contentMethod: Auslastung(ComparableQuantity, ComparableQuantity)
      1: package simulation.SimulationsHelper;
2: 
3: import com.google.common.base.Objects;
4: import tec.uom.se.ComparableQuantity;
5: import tec.uom.se.unit.Units;
6: import util.Fraction;
7: import util.Immutable;
8: 
9: import javax.measure.Unit;
10: import javax.measure.quantity.Time;
11: 
12: /**
13:  * Beschreibt die Auslastung einer Maschine oder eines Mitarbeiters.
14:  */
15: @Immutable
16: public final class Auslastung {
17: 
18:     private static final Unit<Time> DEFAULT_ZEITEINHEIT = Units.SECOND;
19:     public static final Auslastung NEUTRAL_AUSLASTUNG = Auslastung.create(SimulationsKonstanten.NEUTRALE_ZEIT, SimulationsKonstanten.NEUTRALE_ZEIT);
20: 
21:     private final ComparableQuantity<Time> geleisteteArbeitszeit;
22:     private final ComparableQuantity<Time> verfuegbareArbeitszeit;
23: 
24:     private Auslastung(final ComparableQuantity<Time> geleisteteArbeitszeit, final ComparableQuantity<Time> verfuegbareArbeitszeit) {
25:         this.geleisteteArbeitszeit = geleisteteArbeitszeit;
26:         this.verfuegbareArbeitszeit = verfuegbareArbeitszeit;
27:     }
28: 
29:     /**
30:      * @param geleisteteArbeitszeit die geleistete Arbeitszeit
31:      * @param verfuegbareArbeitszeit die maximal verfügbare Arbeitszeit
32:      * @return das erstellte Auslastungsobjekt
33:      */
34:     public static Auslastung create(final ComparableQuantity<Time> geleisteteArbeitszeit,
35:                                     final ComparableQuantity<Time> verfuegbareArbeitszeit) {
36:         return new Auslastung(geleisteteArbeitszeit, verfuegbareArbeitszeit);
37:     }
38: 
39:     /**
40:      * @return Auslastung als Bruch.
41:      */
42:     public Fraction asFraction() {
43:         return Fraction.valueOf(this.geleisteteArbeitszeit.to(Auslastung.DEFAULT_ZEITEINHEIT).getValue().longValue())
44:                 .divide(Fraction.valueOf(this.verfuegbareArbeitszeit.to(Auslastung.DEFAULT_ZEITEINHEIT).getValue().longValue()));
45:     }
46: 
47:     /**
48:      * @param auslastung eine Auslastung
49:      * @return die addierte Auslastung der beiden Auslastungen.
50:      */
51:     public Auslastung add(final Auslastung auslastung) {
52:         return Auslastung.create(this.geleisteteArbeitszeit.add(auslastung.geleisteteArbeitszeit),
53:                 this.verfuegbareArbeitszeit.add(auslastung.verfuegbareArbeitszeit));
54:     }
55: 
56:     @Override
57:     public boolean equals(final Object o) {
58:         if (this == o) {
59:             return true;
60:         }
61:         if (!(o instanceof Auslastung)) {
62:             return false;
63:         }
64:         final Auslastung that = (Auslastung) o;
65:         return Objects.equal(this.geleisteteArbeitszeit, that.geleisteteArbeitszeit)
66:                 && Objects.equal(this.verfuegbareArbeitszeit, that.verfuegbareArbeitszeit);
67:     }
68: 
69:     @Override
70:     public int hashCode() {
71:         return Objects.hashCode(this.geleisteteArbeitszeit, this.verfuegbareArbeitszeit);
72:     }
73: }