diff options
Diffstat (limited to 'spss.server/src/at/gv/egovernment/moa/spss/server/util/IdGenerator.java')
-rw-r--r-- | spss.server/src/at/gv/egovernment/moa/spss/server/util/IdGenerator.java | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/util/IdGenerator.java b/spss.server/src/at/gv/egovernment/moa/spss/server/util/IdGenerator.java new file mode 100644 index 000000000..92e8cb0f8 --- /dev/null +++ b/spss.server/src/at/gv/egovernment/moa/spss/server/util/IdGenerator.java @@ -0,0 +1,61 @@ +package at.gv.egovernment.moa.spss.server.util; + +import java.util.Set; + +/** + * Generate unique ID values for various objects in the response. + * + * @author Patrick Peck + * @version $Id$ + */ +public class IdGenerator { + /** The base value to append the counter to. */ + private String base; + /** The <code>Set</code> of reserved ID values. */ + private Set reserved; + /** The sequence number. */ + private int count; + + /** + * Create a new <code>IdGenerator</code>. + * + * @param base A base value to append the IDs to. The creator of this object + * should provide a base value, so that appending the counter leads to unique + * IDs. + * @param reserved The <code>Set</code> of reserved IDs. A call to + * <code>uniqueId()</code> will respect the reserved IDs. + */ + public IdGenerator(String base, Set reserved) { + this.base = base; + this.reserved = reserved; + count = 1; + } + + /** + * Create the next ID value in the sequence. + * + * @return The next ID value in the sequence. + */ + public String nextId() { + return base + "-" + count++; + } + + /** + * Create the next unique ID value which is unique in the reserved ID set. + * + * The created ID is added to the set of reserved IDs. + * + * @return The next ID value. + */ + public String uniqueId() { + String nextId; + + while (reserved.contains(nextId = nextId())); + + reserved.add(nextId); + + return nextId; + + } + +} |