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     */
016    package 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     */
025    public 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    }