001 /*
002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org
003 * Copyright (C) 2011 NightLabs Consulting GmbH
004 *
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program. If not, see <http://www.gnu.org/licenses/>.
017 */
018 package org.cumulus4j.store.model;
019
020 import javax.jdo.annotations.Column;
021 import javax.jdo.annotations.IdentityType;
022 import javax.jdo.annotations.NullValue;
023 import javax.jdo.annotations.PersistenceCapable;
024 import javax.jdo.annotations.Persistent;
025 import javax.jdo.annotations.PrimaryKey;
026
027 import org.cumulus4j.store.Cumulus4jIncrementGenerator;
028
029 /**
030 * Persistent sequence entity used by {@link Cumulus4jIncrementGenerator}.
031 *
032 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
033 * @deprecated This class did not support multitenancy-in-single-database and was therefore replaced by {@link Sequence2}.
034 */
035 @Deprecated
036 @PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true")
037 public class Sequence
038 {
039 // /**
040 // * Get the <code>Sequence</code> identified by the given <code>sequenceName</code>.
041 // * If no such <code>Sequence</code> exists, this method returns <code>null</code>.
042 // * @param pm the backend-<code>PersistenceManager</code> used to access the underlying datastore; must not be <code>null</code>.
043 // * @param sequenceName the name of the sequence; must not be <code>null</code>.
044 // * @return the <code>Sequence</code> identified by the given <code>sequenceName</code> or <code>null</code>, if no such
045 // * <code>Sequence</code> exists.
046 // */
047 // public static Sequence getSequence(PersistenceManager pm, String sequenceName)
048 // {
049 // StringIdentity id = new StringIdentity(Sequence.class, sequenceName);
050 // Sequence sequence;
051 // try {
052 // sequence = (Sequence) pm.getObjectById(id);
053 // } catch (JDOObjectNotFoundException x) {
054 // sequence = null;
055 // }
056 // return sequence;
057 // }
058 //
059 // /**
060 // * Get the <code>Sequence</code> identified by the given <code>sequenceName</code>.
061 // * If no such <code>Sequence</code> exists, this method creates & persists one.
062 // * @param pm the backend-<code>PersistenceManager</code> used to access the underlying datastore; must not be <code>null</code>.
063 // * @param sequenceName the name of the sequence; must not be <code>null</code>.
064 // * @return the <code>Sequence</code> identified by the given <code>sequenceName</code>; never <code>null</code>.
065 // */
066 // public static Sequence createSequence(PersistenceManager pm, String sequenceName)
067 // {
068 // Sequence sequence = getSequence(pm, sequenceName);
069 // if (sequence == null)
070 // sequence = pm.makePersistent(new Sequence(sequenceName));
071 //
072 // return sequence;
073 // }
074
075 @PrimaryKey
076 @Persistent(nullValue=NullValue.EXCEPTION)
077 @Column(length=255)
078 private String sequenceName;
079
080 private long nextValue = 1;
081
082 /**
083 * Default constructor. Should never be used by actual code! It exists only to fulfill the JDO requirements.
084 */
085 protected Sequence() { }
086
087 /**
088 * Constructor creating a <code>Sequence</code> with the given primary key.
089 * @param sequenceName the name of the sequence; must not be <code>null</code>.
090 */
091 protected Sequence(String sequenceName)
092 {
093 if (sequenceName == null)
094 throw new IllegalArgumentException("sequenceName == null");
095
096 this.sequenceName = sequenceName;
097 }
098
099 /**
100 * Get the name of the sequence.
101 * @return the name of the sequence.
102 */
103 public String getSequenceName() {
104 return sequenceName;
105 }
106
107 /**
108 * Get the next value (i.e. the first unused value) for this sequence.
109 * @return the next value (i.e. the first unused value) for this sequence.
110 */
111 public long getNextValue() {
112 return nextValue;
113 }
114
115 /**
116 * Set the next value (i.e. the first unused value) for this sequence.
117 * @param nextValue the next value (i.e. the first unused value) for this sequence.
118 */
119 public void setNextValue(long nextValue) {
120 this.nextValue = nextValue;
121 }
122 }