001    // SECTION-START[License Header]
002    // <editor-fold defaultstate="collapsed" desc=" Generated License ">
003    /*
004     *   Copyright (c) 2010 The JOMC Project
005     *   Copyright (c) 2005 Christian Schulte <schulte2005@users.sourceforge.net>
006     *   All rights reserved.
007     *
008     *   Redistribution and use in source and binary forms, with or without
009     *   modification, are permitted provided that the following conditions
010     *   are met:
011     *
012     *     o Redistributions of source code must retain the above copyright
013     *       notice, this list of conditions and the following disclaimer.
014     *
015     *     o Redistributions in binary form must reproduce the above copyright
016     *       notice, this list of conditions and the following disclaimer in
017     *       the documentation and/or other materials provided with the
018     *       distribution.
019     *
020     *   THIS SOFTWARE IS PROVIDED BY THE JOMC PROJECT AND CONTRIBUTORS "AS IS"
021     *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
022     *   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
023     *   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JOMC PROJECT OR
024     *   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
025     *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
026     *   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
027     *   OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
028     *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
029     *   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
030     *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
031     *
032     *   $Id: Sequence.java 2244 2010-06-29 07:58:09Z schulte2005 $
033     *
034     */
035    // </editor-fold>
036    // SECTION-END
037    package org.jomc.sequences;
038    
039    import java.io.Serializable;
040    import java.util.Date;
041    
042    // SECTION-START[Documentation]
043    // <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
044    /**
045     * Sequence of numbers.
046     *
047     * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
048     * @version $Id: Sequence.java 2244 2010-06-29 07:58:09Z schulte2005 $
049     */
050    // </editor-fold>
051    // SECTION-END
052    // SECTION-START[Annotations]
053    // <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
054    @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
055    // </editor-fold>
056    // SECTION-END
057    public class Sequence implements Comparable<Sequence>, Cloneable, Serializable
058    {
059        // SECTION-START[Sequence]
060    
061        /** Constant for the name of property {@code name}. */
062        public static final String PROP_NAME = "org.jomc.sequences.Sequence.PROP_NAME";
063    
064        /** Constant for the name of property {@code minimum}. */
065        public static final String PROP_MINIMUM = "org.jomc.sequences.Sequence.PROP_MINIMUM";
066    
067        /** Constant for the name of property {@code maximum}. */
068        public static final String PROP_MAXIMUM = "org.jomc.sequences.Sequence.PROP_MAXIMUM";
069    
070        /** Constant for the name of property {@code increment}. */
071        public static final String PROP_INCREMENT = "org.jomc.sequences.Sequence.PROP_INCREMENT";
072    
073        /** Constant for the name of property {@code value}. */
074        public static final String PROP_VALUE = "org.jomc.sequences.Sequence.PROP_VALUE";
075    
076        /** Serial version UID for backwards compatibility with 1.0.x classes. */
077        private static final long serialVersionUID = 4782576402999874315L;
078    
079        /**
080         * Revision of the sequence.
081         * @serial
082         */
083        private long revision;
084    
085        /**
086         * Date of the revision.
087         * @serial
088         */
089        private long date;
090    
091        /**
092         * Logical name of the sequence.
093         * @serial
094         */
095        private String name;
096    
097        /**
098         * Minimum value of property {@code value}.
099         * @serial
100         */
101        private long minimum;
102    
103        /**
104         * Maximum value of property {@code value}.
105         * @serial
106         */
107        private long maximum;
108    
109        /**
110         * Delta to add to the value of property {@code value} for the next value in the sequence.
111         * @serial
112         */
113        private long increment;
114    
115        /**
116         * Current value of the sequence.
117         * @serial
118         */
119        private long value;
120    
121        /**
122         * Gets the revision of the entity.
123         *
124         * @return The revision of the entity.
125         */
126        public long getRevision()
127        {
128            return this.revision;
129        }
130    
131        /**
132         * Gets the date of the revision of the entity.
133         *
134         * @return The date of the revision of the entity.
135         */
136        public long getDate()
137        {
138            return this.date;
139        }
140    
141        /**
142         * Gets the logical name of the sequence.
143         *
144         * @return The logical name of the sequence.
145         */
146        public String getName()
147        {
148            return this.name;
149        }
150    
151        /**
152         * Sets the logical name of the sequence.
153         *
154         * @param value The new logical name of the sequence.
155         */
156        public void setName( final String value )
157        {
158            this.name = value;
159        }
160    
161        /**
162         * Gets the minimum value of property {@code value}.
163         *
164         * @return The minimum value of property {@code value}.
165         */
166        public long getMinimum()
167        {
168            return this.minimum;
169        }
170    
171        /**
172         * Sets the minimum value of property {@code value}.
173         *
174         * @param value The new minimum value of property {@code value}.
175         */
176        public void setMinimum( final long value )
177        {
178            this.minimum = value;
179        }
180    
181        /**
182         * Gets the maximum value of property {@code value}.
183         *
184         * @return The maximum value of property {@code value}.
185         */
186        public long getMaximum()
187        {
188            return this.maximum;
189        }
190    
191        /**
192         * Sets the maximum value of property {@code value}.
193         *
194         * @param value The new maximum value of property {@code value}.
195         */
196        public void setMaximum( final long value )
197        {
198            this.maximum = value;
199        }
200    
201        /**
202         * Gets the delta to add to the value of property {@code value} for the next value in the sequence.
203         *
204         * @return The the delta to add to the value of property {@code value} for the next value in the sequence.
205         */
206        public long getIncrement()
207        {
208            return this.increment;
209        }
210    
211        /**
212         * Sets the delta to add to the value of property {@code value} for the next value in the sequence.
213         *
214         * @param value The new delta to add to the value of property {@code value} for the next value in the sequence.
215         */
216        public void setIncrement( final long value )
217        {
218            this.increment = value;
219        }
220    
221        /**
222         * Gets the current value of the sequence.
223         *
224         * @return The current value of the sequence.
225         */
226        public long getValue()
227        {
228            return this.value;
229        }
230    
231        /**
232         * Sets the current value of the sequence.
233         *
234         * @param value The current value of the sequence.
235         */
236        public void setValue( final long value )
237        {
238            this.value = value;
239        }
240    
241        /**
242         * Creates a string representing the properties of the instance.
243         *
244         * @return A string representing the properties of the instance.
245         */
246        private String internalString()
247        {
248            return new StringBuffer( 150 ).append( '{' ).
249                append( "revision=" ).append( this.revision ).
250                append( ", date=" ).append( new Date( this.date ) ).
251                append( ", name=" ).append( this.name ).
252                append( ", minimum=" ).append( this.minimum ).
253                append( ", maximum=" ).append( this.maximum ).
254                append( ", increment=" ).append( this.increment ).
255                append( ", value=" ).append( this.value ).
256                append( '}' ).toString();
257    
258        }
259    
260        /**
261         * Compares this sequence with the specified sequence for order.
262         * <p>Returns a negative integer, zero, or a positive integer as this sequence is less than, equal to, or greater
263         * than the specified sequence.</p>
264         * <p><b>Note:</b><br/>This class has a natural ordering that is inconsistent with equals.</p>
265         *
266         * @param s The sequence to be compared.
267         *
268         * @return A negative integer, zero, or a positive integer as this sequence is less than, equal to, or greater than
269         * the specified sequence.
270         */
271        public int compareTo( final Sequence s )
272        {
273            int result = s == null ? 1 : 0;
274    
275            if ( result == 0 )
276            {
277                if ( this.getName() == null )
278                {
279                    result = s.getName() == null ? 0 : -1;
280                }
281                else
282                {
283                    result = s.getName() == null ? 1 : this.getName().compareTo( s.getName() );
284                }
285            }
286    
287            return result;
288        }
289    
290        /**
291         * Creates and returns a copy of this object.
292         *
293         * @return A clone of this instance.
294         */
295        @Override
296        public Sequence clone()
297        {
298            try
299            {
300                return (Sequence) super.clone();
301            }
302            catch ( final CloneNotSupportedException e )
303            {
304                throw new AssertionError( e );
305            }
306        }
307    
308        /**
309         * Indicates whether some other object is equal to this one by comparing the values of properties {@code name} and
310         * {@code revision}.
311         *
312         * @param o The reference object with which to compare.
313         *
314         * @return {@code true} if this object is the same as {@code o}; {@code false} otherwise.
315         */
316        @Override
317        public boolean equals( final Object o )
318        {
319            boolean ret = o == this;
320    
321            if ( !ret && o instanceof Sequence )
322            {
323                final Sequence that = (Sequence) o;
324                ret = ( this.getName() == null ? that.getName() == null : this.getName().equals( that.getName() ) ) &&
325                      ( this.getRevision() == that.getRevision() );
326    
327            }
328    
329            return ret;
330        }
331    
332        /**
333         * Returns a hash code value for this object.
334         *
335         * @return A hash code value for this object.
336         */
337        @Override
338        public int hashCode()
339        {
340            int hc = 23;
341            hc = 37 * hc + ( this.getName() == null ? 0 : this.getName().hashCode() );
342            hc = 37 * hc + (int) ( this.getRevision() ^ ( this.getRevision() >>> 32 ) );
343            return hc;
344        }
345    
346        /**
347         * Returns a string representation of the object.
348         *
349         * @return A string representation of the object.
350         */
351        @Override
352        public String toString()
353        {
354            return super.toString() + this.internalString();
355        }
356    
357        // SECTION-END
358        // SECTION-START[Constructors]
359        // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
360    
361        /** Creates a new {@code Sequence} instance. */
362        @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
363        public Sequence()
364        {
365            // SECTION-START[Default Constructor]
366            super();
367            // SECTION-END
368        }
369        // </editor-fold>
370        // SECTION-END
371        // SECTION-START[Dependencies]
372        // SECTION-END
373        // SECTION-START[Properties]
374        // SECTION-END
375        // SECTION-START[Messages]
376        // SECTION-END
377    }