KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ojb > broker > util > sequence > AbstractSequenceManager


1 package org.apache.ojb.broker.util.sequence;
2
3 /* Copyright 2002-2005 The Apache Software Foundation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 import java.util.Properties JavaDoc;
19
20 import org.apache.ojb.broker.PersistenceBroker;
21 import org.apache.ojb.broker.accesslayer.JdbcAccess;
22 import org.apache.ojb.broker.metadata.ClassDescriptor;
23 import org.apache.ojb.broker.metadata.FieldDescriptor;
24 import org.apache.ojb.broker.metadata.SequenceDescriptor;
25 import org.apache.ojb.broker.platforms.Platform;
26
27 /**
28  * A base class for sequence manager implementations.
29  * <br/>
30  * All sequence manager implementations need a constructor
31  * with a PersistenceBroker argument used by the
32  * {@link org.apache.ojb.broker.util.sequence.SequenceManagerFactory}.
33  *
34  * @author <a HREF="mailto:armin@codeAuLait.de">Armin Waibel</a>
35  * @version $Id: AbstractSequenceManager.java,v 1.17.2.3 2005/12/21 22:28:41 tomdz Exp $
36  */

37 public abstract class AbstractSequenceManager implements SequenceManager
38 {
39     // private Logger log = LoggerFactory.getLogger(AbstractSequenceManager.class);
40
public static final String JavaDoc PROPERTY_AUTO_NAMING = "autoNaming";
41     protected static final String JavaDoc GLOBAL_SEQUENCE_NAME = "ojb.global.sequence";
42
43     private PersistenceBroker brokerForClass;
44     private Platform platform;
45     private Properties JavaDoc configurationProperties;
46
47     /**
48      * Constructor used by
49      * {@link org.apache.ojb.broker.util.sequence.SequenceManagerFactory}
50      *
51      * @param broker PB instance to perform the
52      * id generation.
53      */

54     public AbstractSequenceManager(PersistenceBroker broker)
55     {
56         this.brokerForClass = broker;
57         this.configurationProperties = new Properties JavaDoc();
58         this.platform = brokerForClass.serviceConnectionManager().getSupportedPlatform();
59         SequenceDescriptor sd = brokerForClass.serviceConnectionManager().
60                 getConnectionDescriptor().getSequenceDescriptor();
61         if (sd != null)
62         {
63             this.configurationProperties.putAll(sd.getConfigurationProperties());
64         }
65     }
66
67     /**
68      * returns a unique long value for field.
69      * the returned number is unique accross all tables in the extent of clazz.
70      */

71     abstract protected long getUniqueLong(FieldDescriptor field) throws SequenceManagerException;
72
73
74     public Platform getPlatform()
75     {
76         return platform;
77     }
78
79     public PersistenceBroker getBrokerForClass()
80     {
81         return brokerForClass;
82     }
83
84     public Properties JavaDoc getConfigurationProperties()
85     {
86         return this.configurationProperties;
87     }
88
89     public void setConfigurationProperties(Properties JavaDoc prop)
90     {
91         this.configurationProperties.putAll(prop);
92     }
93
94     public String JavaDoc getConfigurationProperty(String JavaDoc key, String JavaDoc defaultValue)
95     {
96         String JavaDoc result = this.configurationProperties.getProperty(key);
97         return result != null ? result : defaultValue;
98     }
99
100     public void setConfigurationProperty(String JavaDoc key, String JavaDoc value)
101     {
102         this.configurationProperties.setProperty(key, value);
103     }
104
105     public boolean useAutoNaming()
106     {
107         return (Boolean.valueOf(getConfigurationProperty(PROPERTY_AUTO_NAMING, "true"))).booleanValue();
108     }
109
110     public String JavaDoc calculateSequenceName(FieldDescriptor field) throws SequenceManagerException
111     {
112         String JavaDoc seqName;
113         seqName = field.getSequenceName();
114         /*
115         if we found no sequence name for the given field, we try to
116         assign a automatic generated sequence name.
117         */

118         if(seqName == null)
119         {
120             seqName = SequenceManagerHelper.buildSequenceName(getBrokerForClass(), field, useAutoNaming());
121             // already done in method above
122
// if(useAutoNaming()) field.setSequenceName(seqName);
123
}
124         return seqName;
125     }
126
127
128     //****************************************************************
129
// method implementations of SequenceManager interface
130
//****************************************************************
131
/**
132      * Returns a unique object for the given field attribute.
133      * The returned value takes in account the jdbc-type
134      * and the FieldConversion.sql2java() conversion defined for <code>field</code>.
135      * The returned object is unique accross all tables in the extent
136      * of class the field belongs to.
137      */

138     public Object JavaDoc getUniqueValue(FieldDescriptor field) throws SequenceManagerException
139     {
140         Object JavaDoc result = field.getJdbcType().sequenceKeyConversion(new Long JavaDoc(getUniqueLong(field)));
141         // perform a sql to java conversion here, so that clients do
142
// not see any db specific values
143
result = field.getFieldConversion().sqlToJava(result);
144         return result;
145     }
146
147     /**
148      * noop
149      */

150     public void afterStore(JdbcAccess dbAccess, ClassDescriptor cld, Object JavaDoc obj)
151             throws SequenceManagerException
152     {
153         // do nothing
154
}
155
156     /**
157      * noop
158      */

159     public void setReferenceFKs(Object JavaDoc obj, ClassDescriptor cld)
160             throws SequenceManagerException
161     {
162        // do nothing
163
}
164 }
165
Popular Tags