Coverage Report - org.apache.ojb.broker.util.sequence.AbstractSequenceManager
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractSequenceManager
N/A
N/A
1.231
 
 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;
 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.1 2007-08-24 22:17:29 ewestfal Exp $
 36  
  */
 37  
 public abstract class AbstractSequenceManager implements SequenceManager
 38  
 {
 39  
     // private Logger log = LoggerFactory.getLogger(AbstractSequenceManager.class);
 40  
     public static final String PROPERTY_AUTO_NAMING = "autoNaming";
 41  
     protected static final String GLOBAL_SEQUENCE_NAME = "ojb.global.sequence";
 42  
 
 43  
     private PersistenceBroker brokerForClass;
 44  
     private Platform platform;
 45  
     private Properties 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();
 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 getConfigurationProperties()
 85  
     {
 86  
         return this.configurationProperties;
 87  
     }
 88  
 
 89  
     public void setConfigurationProperties(Properties prop)
 90  
     {
 91  
         this.configurationProperties.putAll(prop);
 92  
     }
 93  
 
 94  
     public String getConfigurationProperty(String key, String defaultValue)
 95  
     {
 96  
         String result = this.configurationProperties.getProperty(key);
 97  
         return result != null ? result : defaultValue;
 98  
     }
 99  
 
 100  
     public void setConfigurationProperty(String key, String 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 calculateSequenceName(FieldDescriptor field) throws SequenceManagerException
 111  
     {
 112  
         String 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 getUniqueValue(FieldDescriptor field) throws SequenceManagerException
 139  
     {
 140  
         Object result = field.getJdbcType().sequenceKeyConversion(new Long(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 obj)
 151  
             throws SequenceManagerException
 152  
     {
 153  
         // do nothing
 154  
     }
 155  
 
 156  
     /**
 157  
      * noop
 158  
      */
 159  
     public void setReferenceFKs(Object obj, ClassDescriptor cld)
 160  
             throws SequenceManagerException
 161  
     {
 162  
        // do nothing
 163  
     }
 164  
 }