001/*
002 *  Copyright 2001-2005 Stephen Colebourne
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.joda.time;
017
018/**
019 * Writable interface for an interval.
020 *
021 * @author Stephen Colebourne
022 * @author Brian S O'Neill
023 * @since 1.0
024 */
025public interface ReadWritableInterval extends ReadableInterval {
026
027    /**
028     * Sets this interval from two millisecond instants.
029     *
030     * @param startInstant  the start of the time interval
031     * @param endInstant  the start of the time interval
032     * @throws IllegalArgumentException if the end is before the start
033     */
034    void setInterval(long startInstant, long endInstant);
035
036    /**
037     * Sets this interval to be the same as another.
038     *
039     * @param interval  the interval to copy
040     * @throws IllegalArgumentException if the end is before the start
041     */
042    void setInterval(ReadableInterval interval);
043
044    /**
045     * Sets this interval from two instants.
046     *
047     * @param startInstant  the start of the time interval
048     * @param endInstant  the start of the time interval
049     * @throws IllegalArgumentException if the end is before the start
050     */
051    void setInterval(ReadableInstant startInstant, ReadableInstant endInstant);
052
053    //-----------------------------------------------------------------------
054    /**
055     * Sets the chronology of this time interval.
056     *
057     * @param chrono  the chronology to use, null means ISO default
058     */
059    void setChronology(Chronology chrono);
060
061    //-----------------------------------------------------------------------
062    /**
063     * Sets the start of this time interval.
064     *
065     * @param millisInstant  the start of the time interval,
066     *  millisecond instant from 1970-01-01T00:00:00Z
067     * @throws IllegalArgumentException if the end is before the start
068     */
069    void setStartMillis(long millisInstant);
070
071    /**
072     * Sets the start of this time interval as an Instant.
073     *
074     * @param instant  the start of the time interval
075     * @throws IllegalArgumentException if the end is before the start
076     */
077    void setStart(ReadableInstant instant);
078
079    //-----------------------------------------------------------------------
080    /** 
081     * Sets the end of this time interval.
082     *
083     * @param millisInstant  the end of the time interval,
084     *  millisecond instant from 1970-01-01T00:00:00Z
085     * @throws IllegalArgumentException if the end is before the start
086     */
087    void setEndMillis(long millisInstant);
088
089    /** 
090     * Sets the end of this time interval as an Instant.
091     *
092     * @param instant  the end of the time interval
093     * @throws IllegalArgumentException if the end is before the start
094     */
095    void setEnd(ReadableInstant instant);
096
097    //-----------------------------------------------------------------------
098    /**
099     * Sets the duration of this time interval, preserving the start instant.
100     *
101     * @param duration  new duration for interval
102     * @throws IllegalArgumentException if the end is before the start
103     * @throws ArithmeticException if the end instant exceeds the capacity of a long
104     */
105    void setDurationAfterStart(ReadableDuration duration);
106
107    /**
108     * Sets the duration of this time interval, preserving the end instant.
109     *
110     * @param duration  new duration for interval
111     * @throws IllegalArgumentException if the end is before the start
112     * @throws ArithmeticException if the start instant exceeds the capacity of a long
113     */
114    void setDurationBeforeEnd(ReadableDuration duration);
115
116    //-----------------------------------------------------------------------
117    /**
118     * Sets the period of this time interval, preserving the start instant.
119     *
120     * @param period  new period for interval, null means zero length
121     * @throws IllegalArgumentException if the end is before the start
122     * @throws ArithmeticException if the end instant exceeds the capacity of a long
123     */
124    void setPeriodAfterStart(ReadablePeriod period);
125
126    /**
127     * Sets the period of this time interval, preserving the end instant.
128     *
129     * @param period  new period for interval, null means zero length
130     * @throws IllegalArgumentException if the end is before the start
131     * @throws ArithmeticException if the start instant exceeds the capacity of a long
132     */
133    void setPeriodBeforeEnd(ReadablePeriod period);
134
135}