View Javadoc

1   // SECTION-START[License Header]
2   // <editor-fold defaultstate="collapsed" desc=" Generated License ">
3   /*
4    *   Copyright (c) 2010 The JOMC Project
5    *   Copyright (c) 2005 Christian Schulte <schulte2005@users.sourceforge.net>
6    *   All rights reserved.
7    *
8    *   Redistribution and use in source and binary forms, with or without
9    *   modification, are permitted provided that the following conditions
10   *   are met:
11   *
12   *     o Redistributions of source code must retain the above copyright
13   *       notice, this list of conditions and the following disclaimer.
14   *
15   *     o Redistributions in binary form must reproduce the above copyright
16   *       notice, this list of conditions and the following disclaimer in
17   *       the documentation and/or other materials provided with the
18   *       distribution.
19   *
20   *   THIS SOFTWARE IS PROVIDED BY THE JOMC PROJECT AND CONTRIBUTORS "AS IS"
21   *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22   *   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23   *   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JOMC PROJECT OR
24   *   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25   *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26   *   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27   *   OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28   *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29   *   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30   *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31   *
32   *   $Id: SequenceDirectory.java 2244 2010-06-29 07:58:09Z schulte2005 $
33   *
34   */
35  // </editor-fold>
36  // SECTION-END
37  package org.jomc.sequences;
38  
39  import java.math.BigInteger;
40  import java.util.Set;
41  
42  // SECTION-START[Documentation]
43  // <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
44  /**
45   * Directory of sequences.
46   *
47   * <p>
48   *   This specification declares a multiplicity of {@code One}.
49   *   An application assembler may provide either no or one implementation of this specification.
50   * </p>
51   *
52   * <p>
53   *   Use of class {@link org.jomc.ObjectManager ObjectManager} is supported for accessing implementations.
54   *   <pre>
55   * SequenceDirectory object = ObjectManagerFactory.getObjectManager( getClass().getClassLoader() ).getObject( SequenceDirectory.class );
56   * SequenceDirectory object = ObjectManagerFactory.getObjectManager( getClass().getClassLoader() ).getObject( SequenceDirectory.class, "<i>implementation name</i>" );
57   *   </pre>
58   * </p>
59   *
60   * <p>
61   *   This specification applies to {@code Singleton} scope.
62   *   The same singleton object is returned whenever requested.
63   * </p>
64   *
65   * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
66   * @version $Id: SequenceDirectory.java 2244 2010-06-29 07:58:09Z schulte2005 $
67   */
68  // </editor-fold>
69  // SECTION-END
70  // SECTION-START[Annotations]
71  // <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
72  @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
73  // </editor-fold>
74  // SECTION-END
75  public interface SequenceDirectory
76  {
77      // SECTION-START[SequenceDirectory]
78  
79      /**
80       * Gets the total number of sequences stored in the directory.
81       *
82       * @return The total number of sequences stored in the directory.
83       *
84       * @throws SequencesSystemException if getting the total number of sequences fails.
85       */
86      BigInteger getSequenceCount() throws SequencesSystemException;
87  
88      /**
89       * Gets the capacity limit of the directory.
90       *
91       * @return The capacity limit of the directory.
92       *
93       * @throws SequencesSystemException if getting the capacity limit fails.
94       */
95      BigInteger getCapacityLimit() throws SequencesSystemException;
96  
97      /**
98       * Gets a sequence for a given name.
99       *
100      * @param name The name of the sequence to return.
101      *
102      * @return The sequence with name {@code name} or {@code null} if no sequence matching {@code name} exists in the
103      * directory.
104      *
105      * @throws SequencesSystemException if getting the sequence fails.
106      */
107     Sequence getSequence( String name ) throws SequencesSystemException;
108 
109     /**
110      * Adds a sequence to the directory.
111      *
112      * @param sequence The sequence to add to the directory.
113      *
114      * @return The data of the sequence from the directory.
115      *
116      * @throws SequenceVetoException if {@code sequence} holds illegal values.
117      * @throws SequenceExistsException if a sequence with the same name already exists.
118      * @throws CapacityLimitException if the directory's capacity limit has been reached.
119      * @throws SequencesSystemException if adding the sequence fails.
120      */
121     Sequence addSequence( Sequence sequence )
122         throws SequenceVetoException, SequenceExistsException, CapacityLimitException, SequencesSystemException;
123 
124     /**
125      * Updates a sequence in the directory.
126      *
127      * @param name The name of the sequence to update.
128      * @param revision The revision of the sequence to update.
129      * @param sequence The data to update the directory with.
130      *
131      * @return The data of the sequence from the directory.
132      *
133      * @throws SequenceVetoException if {@code sequence} holds illegal values.
134      * @throws SequenceNotFoundException if no sequence matching {@code name} exists in the directory.
135      * @throws ConcurrentModificationException if the same sequence got concurrently modified in the directory, that is,
136      * {@code revision} denotes outdated data.
137      * @throws SequencesSystemException if editing the sequence fails.
138      */
139     Sequence editSequence( String name, long revision, Sequence sequence )
140         throws SequenceVetoException, SequenceNotFoundException, ConcurrentModificationException,
141                SequencesSystemException;
142 
143     /**
144      * Removes a sequence from the directory.
145      *
146      * @param name The name of the sequence to remove.
147      * @param revision The revision of the sequence to remove.
148      *
149      * @return The data of the removed sequence from the directory.
150      *
151      * @throws SequenceNotFoundException if no sequence matching {@code name} exists in the directory.
152      * @throws ConcurrentModificationException if the same sequence got concurrently modified in the directory, that is,
153      * {@code revision} denotes outdated data.
154      * @throws SequencesSystemException if deleting the sequence fails.
155      */
156     Sequence deleteSequence( String name, long revision )
157         throws SequenceNotFoundException, ConcurrentModificationException, SequencesSystemException;
158 
159     /**
160      * Searches the directory for sequences matching the given arguments.
161      *
162      * @param name Text to select sequences whose {@code name} property matches the given text; {@code null} to ignore
163      * property {@code name} in the search.
164      *
165      * @return All sequences matching the given criteria.
166      *
167      * @throws SequencesSystemException if searching the directory fails.
168      */
169     Set<Sequence> searchSequences( String name ) throws SequencesSystemException;
170 
171     // SECTION-END
172 }