/*
* Copyright (C) 2011 Andrea Schweer
*
* This file is part of the Digital Parrot.
*
* The Digital Parrot is free software; you can redistribute it and/or modify
* it under the terms of the Eclipse Public License as published by the Eclipse
* Foundation or its Agreement Steward, either version 1.0 of the License, or
* (at your option) any later version.
*
* The Digital Parrot is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License for
* more details.
*
* You should have received a copy of the Eclipse Public License along with the
* Digital Parrot. If not, see http://www.eclipse.org/legal/epl-v10.html.
*
*/
package net.schweerelos.timeline.model;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.Interval;
public class IntervalChain<T extends Object> implements Iterable<PayloadInterval<T>> {
private List<PayloadInterval<T>> intervals;
private DateTime firstStart;
private DateTime lastEnd;
public IntervalChain() {
intervals = new ArrayList<PayloadInterval<T>>();
}
public List<PayloadInterval<T>> getIntervals() {
return intervals;
}
public DateTime getFirstStart() {
return firstStart;
}
public DateTime getLastEnd() {
return lastEnd;
}
public void add(PayloadInterval<T> interval) {
intervals.add(interval);
if (firstStart == null || interval.getStart().isBefore(firstStart)) {
firstStart = interval.getStart();
}
if (lastEnd == null || interval.getEnd().isAfter(lastEnd)) {
lastEnd = interval.getEnd();
}
}
public boolean contains(Interval interval) {
if (interval.getStart().isBefore(firstStart) || interval.getEnd().isAfter(lastEnd)) {
return false;
}
for (PayloadInterval<T> chainInterval : intervals) {
if (chainInterval.contains(interval)) {
return true;
}
}
return false;
}
@Override
public Iterator<PayloadInterval<T>> iterator() {
return intervals.iterator();
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
result.append("interval between ");
result.append(firstStart);
result.append(" and ");
result.append(lastEnd);
result.append(": ");
boolean first = true;
for (PayloadInterval<T> interval : intervals) {
if (!first) {
result.append(" and ");
}
result.append(interval.getStart());
result.append(" to ");
result.append(interval.getEnd());
first = false;
}
return result.toString();
}
}