/** * Vergleicht zwei Zeitspannen bezüglich Überschneidungsfreiheit * * @param vergleich Vergleichszeitspanne * @return Beide Zeitspannen sind überschneidungsfrei */ public boolean istUeberschneidungsfrei(Zeitspanne vergleich) { boolean back = true; if (startZeit.compareTo(vergleich.getStartZeit()) < 0) { if (endeZeit.compareTo(vergleich.getStartZeit()) > 0) { back = false; } } else if (startZeit.compareTo(vergleich.getStartZeit()) > 0) { if (startZeit.compareTo(vergleich.getEndeZeit()) < 0) { back = false; } } else if (startZeit.compareTo(vergleich.getStartZeit()) == 0) { back = false; } return back; }
/** {@inheritDoc} */ public boolean equals(Object obj) { boolean back = false; if (obj instanceof Zeitspanne) { Zeitspanne pruefling = (Zeitspanne) obj; if (startZeit.compareTo(pruefling.getStartZeit()) == 0) { if (endeZeit == null) { if (pruefling.getEndeZeit() == null) { back = true; } } else if (endeZeit.compareTo(pruefling.getEndeZeit()) == 0) { back = true; } } } return back; }
/** * Berechnet die Überschneidungszeit zweier Zeitspannen. * * @param vergleich Vergleichszeitspanne * @return Minuten */ public int berechneUebereschneidungsMinuten(Zeitspanne vergleich) { int back = 0; if (!istUeberschneidungsfrei(vergleich)) { if (startZeit.compareTo(vergleich.getStartZeit()) < 0) { if (endeZeit.compareTo(vergleich.getEndeZeit()) < 0) { back = new Zeitspanne(vergleich.getStartZeit(), endeZeit).berechneMinutenDifferenz(); } else { back = vergleich.berechneMinutenDifferenz(); } } else { if (endeZeit.compareTo(vergleich.getEndeZeit()) < 0) { back = berechneMinutenDifferenz(); } else { back = new Zeitspanne(startZeit, vergleich.getEndeZeit()).berechneMinutenDifferenz(); } } } return back; }
/** * Berechnet den Abstand zwischen Ende- und Anfangszeitpunkt in Minuten * * @return Minuten */ public int berechneMinutenDifferenz() { int minuten = 0; if (endeZeit != null) { if (startZeit.getStunde() == endeZeit.getStunde()) { minuten = endeZeit.getMinuten() - startZeit.getMinuten(); } else { minuten = endeZeit.getMinuten() + 60 - startZeit.getMinuten(); minuten += (endeZeit.getStunde() - startZeit.getStunde() - 1) * 60; } } else { throw new IllegalArgumentException("Keine Endezeit"); } return minuten; }
/** * Prüft die semantische Korrektheit einer Zeitspanne * * @param startZeit Anfangszeit der Zeitspanne * @param endeZeit Endezeit der Zeitspanne */ private void pruefeZeitspanne(Uhrzeit startZeit, Uhrzeit endeZeit) { if (startZeit.compareTo(endeZeit) >= 0) { throw new IllegalArgumentException("Startzeit muss vor Endezeit sein"); } }