net.schweerelos.timeline.model.IntervalChain.java Source code

Java tutorial

Introduction

Here is the source code for net.schweerelos.timeline.model.IntervalChain.java

Source

/*
 * 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();
    }
}