Propchange: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModel.mdl ------------------------------------------------------------------------------ svn:executable = *
Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelFactory.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelFactory.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelFactory.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelFactory.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,44 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.model.jdo; + +import org.apache.jdo.model.ModelException; +import org.apache.jdo.model.java.JavaModel; + + +/** + * Factory for JDOModel instances. The factory provides a mechanism to cache + * JDOModel instances per user defined keys. + * + * @author Michael Bouschen + */ +public interface JDOModelFactory +{ + /** + * Creates a new empty JDOModel instance. + * @exception ModelException if impossible + */ + public JDOModel createJDOModel(JavaModel javaModel) + throws ModelException; + + /** + * Returns the JDOModel instance for the specified JavaModel. + * @param javaModel the javaModel used to cache the returned JDOModel instance + */ + public JDOModel getJDOModel(JavaModel javaModel); + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelHelper.jpg URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelHelper.jpg?view=auto&rev=158176 ============================================================================== Binary file - no diff available. Propchange: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelHelper.jpg ------------------------------------------------------------------------------ svn:executable = * Propchange: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOModelHelper.jpg ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOPackage.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOPackage.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOPackage.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOPackage.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,54 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.model.jdo; + +import org.apache.jdo.model.ModelException; + +/** + * A JDOPackage instance represents the JDO package metadata. + * + * @author Michael Bouschen + */ +public interface JDOPackage + extends JDOElement +{ + /** + * Returns the name of this JDOPackage. + * @return the name + */ + public String getName(); + + /** + * Sets the name of this JDOPackage. + * @param name the name + * @exception ModelException if impossible + */ + public void setName(String name) + throws ModelException; + + /** + * Returns the declaring JDOModel of this JDOPackage. + * @return the JDOModel that owns this JDOPackage. + */ + public JDOModel getDeclaringModel(); + + /** + * Set the declaring JDOModel for this JDOPackage. + * @param model the declaring JDOModel of this JDOPackage. + */ + public void setDeclaringModel(JDOModel model); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOReference.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOReference.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOReference.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDOReference.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,28 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.model.jdo; + +/** + * A JDOReference instance represents the JDO relationship metadata + * of a reference relationship field. + * + * @author Michael Bouschen + */ +public interface JDOReference + extends JDORelationship +{ +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDORelationship.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDORelationship.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDORelationship.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/JDORelationship.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,103 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.model.jdo; + +import org.apache.jdo.model.ModelException; + +/** + * JDORelationship is the super interface for all interfaces representing + * JDO relationship metadata of a managed field of a persistence-capable class. + * + * @author Michael Bouschen + */ +public interface JDORelationship + extends JDOElement +{ + /** + * Constant representing the cardinality zero used for lower and upper + * bounds. + */ + public static final int CARDINALITY_ZERO = 0; + + /** + * Constant representing the cardinality one used for lower and upper bounds. + */ + public static final int CARDINALITY_ONE = 1; + + /** + * Constant representing the cardinality n used for lower and upper bounds. + */ + public static final int CARDINALITY_N = java.lang.Integer.MAX_VALUE; + + /** + * Get the lower cardinality bound for this relationship element. + * @return the lower cardinality bound + */ + public int getLowerBound(); + + /** + * Set the lower cardinality bound for this relationship element. + * @param lowerBound an integer indicating the lower cardinality bound + * @exception ModelException if impossible + */ + public void setLowerBound(int lowerBound) + throws ModelException; + + /** + * Get the upper cardinality bound for this relationship element. + * @return the upper cardinality bound + */ + public int getUpperBound(); + + /** + * Set the upper cardinality bound for this relationship element. + * @param upperBound an integer indicating the upper cardinality bound + * @exception ModelException if impossible + */ + public void setUpperBound(int upperBound) + throws ModelException; + + /** + * Get the declaring field of this JDORelationship. + * @return the field that owns this JDORelationship, or <code>null</code> + * if the element is not attached to any field + */ + public JDOField getDeclaringField(); + + /** + * Set the declaring field of this JDORelationship. + * @param declaringField the declaring field of this relationship element + * @exception ModelException if impossible + */ + public void setDeclaringField(JDOField declaringField) + throws ModelException; + + /** + * Get the inverse JDORelationship in the case of a managed relationship. + * @return the inverse relationship + */ + public JDORelationship getInverseRelationship(); + + /** + * Set the inverse JDORelationship in the case of a managed relationship. + * @param inverseRelationship the inverse relationship + * @exception ModelException if impossible + */ + public void setInverseRelationship(JDORelationship inverseRelationship) + throws ModelException; + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/NullValueTreatment.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/NullValueTreatment.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/NullValueTreatment.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/NullValueTreatment.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,88 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.model.jdo; + +/** + * This interface provides constants denoting the treatment of null values + * for persistent fields during storage in the data store. + * + * @author Michael Bouschen + */ +public class NullValueTreatment +{ + /** + * Constant representing converting a null value of a field of nullable type + * to the default value for the type in the datastore. + */ + public static final int NONE = 0; + + /** + * Constant representing throwing an exception when storing a null value of + * field of a nullable type that is mapped to non-nullable type in the + * datastore. + */ + public static final int EXCEPTION = 1; + + /** + * Constant representing converting a null value of a field of nullable type + * to the default value for the type in the datastore. + */ + public static final int DEFAULT = 2; + + /** + * Returns a string representation of the specified NullValueTreatment + * constant. + * @param nullValueTreatment the null value treatment, one of + * [EMAIL PROTECTED] #NONE}, [EMAIL PROTECTED] #EXCEPTION} or [EMAIL PROTECTED] #DEFAULT} + * @return the string representation of the NullValueTreatment constant + */ + public static String toString(int nullValueTreatment) + { + switch (nullValueTreatment) { + case NONE : + return "none"; //NOI18N + case EXCEPTION : + return "exception"; //NOI18N + case DEFAULT : + return "default"; //NOI18N + default: + return "UNSPECIFIED"; //NOI18N + } + } + + /** + * Returns the NullValueTreatment constant for the string representation. + * @param nullValueTreatment the string representation of the null value + * treatment + * @return the null value treatment, one of [EMAIL PROTECTED] #NONE}, + * [EMAIL PROTECTED] #EXCEPTION} or [EMAIL PROTECTED] #DEFAULT} + **/ + public static int toNullValueTreatment(String nullValueTreatment) + { + if ((nullValueTreatment == null) || (nullValueTreatment.length() == 0)) + return NONE; + + if ("none".equals(nullValueTreatment)) //NOI18N + return NONE; + else if ("exception".equals(nullValueTreatment)) //NOI18N + return EXCEPTION; + else if ("default".equals(nullValueTreatment)) //NOI18N + return DEFAULT; + else + return NONE; + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/PersistenceModifier.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/PersistenceModifier.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/PersistenceModifier.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/PersistenceModifier.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,88 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.model.jdo; + +/** + * This interface provides constants denoting JDO specific + * modifiers for fields of a persistence-capable class. + * + * @author Michael Bouschen + */ +public class PersistenceModifier +{ + /** Constant representing an unspecified field modifier */ + public static final int UNSPECIFIED = 0; + + /** Constant representing a none field modifier. */ + public static final int NONE = 1; + + /** Constant representing a transactional field modifier. */ + public static final int TRANSACTIONAL = 2; + + /** Constant representing a persistence field modifier. */ + public static final int PERSISTENT = 4; + + /** Constant representing a possibly persistence field modifier. */ + public static final int POSSIBLY_PERSISTENT = 8; + + /** + * Returns a string representation of the specified persistence modifer. + * @param persistenceModifier the persistence modifer, one of + * [EMAIL PROTECTED] #UNSPECIFIED}, [EMAIL PROTECTED] #NONE}, [EMAIL PROTECTED] #PERSISTENT}, + * [EMAIL PROTECTED] #TRANSACTIONAL}, or [EMAIL PROTECTED] #POSSIBLY_PERSISTENT}. + * @return the string representation of the PersistenceModifer constant + */ + public static String toString(int persistenceModifier) + { + switch (persistenceModifier) { + case NONE : + return "none"; //NOI18N + case TRANSACTIONAL : + return "transactional"; //NOI18N + case PERSISTENT: + return "persistent"; //NOI18N + case POSSIBLY_PERSISTENT: + return "possibly-persistent"; //NOI18N + default: + return "UNSPECIFIED"; //NOI18N + } + } + + /** + * Returns the PersistenceModifier constant for the specified string. + * @param persistenceModifier the string representation of the persistence + * modifer + * @return the persistence modifer, one of [EMAIL PROTECTED] #UNSPECIFIED}, + * [EMAIL PROTECTED] #NONE}, [EMAIL PROTECTED] #PERSISTENT} or [EMAIL PROTECTED] #TRANSACTIONAL} + **/ + public static int toPersistenceModifier(String persistenceModifier) + { + if ((persistenceModifier == null) || (persistenceModifier.length() == 0)) + return UNSPECIFIED; + + if ("none".equals(persistenceModifier)) //NOI18N + return NONE; + else if ("transactional".equals(persistenceModifier)) //NOI18N + return TRANSACTIONAL; + else if ("persistent".equals(persistenceModifier)) //NOI18N + return PERSISTENT; + else if ("possibly-persistent".equals(persistenceModifier)) //NOI18N + return POSSIBLY_PERSISTENT; + else + return UNSPECIFIED; + } +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/package.html URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/package.html?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/package.html (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/jdo/package.html Fri Mar 18 17:02:29 2005 @@ -0,0 +1,27 @@ +<!-- + Copyright 2005 The Apache Software Foundation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<html> +<head> +<title>JDOModel API package.</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#FFFFFF"> +<p>This package defines the JDOModel API. + It provides interfaces to access JDO metadata. +</body> +</html> Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/package.html URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/package.html?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/package.html (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/model/package.html Fri Mar 18 17:02:29 2005 @@ -0,0 +1,26 @@ +<!-- + Copyright 2005 The Apache Software Foundation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<html> +<head> +<title>Package org.apache.jdo.model</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#FFFFFF"> +<p>This package defines the Model Exception classes.</p> +</body> +</html> Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/Accessor.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/Accessor.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/Accessor.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/Accessor.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,37 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Accessor.java + * + * Created on August 10, 2001, 3:17 PM + */ + +package org.apache.jdo.pm; + +/** + * + * @author Dave Bristor + * @version 1.0 + */ +public interface Accessor { + /** + * Return a default value in a Factory (either + * a PersistenceManagerFactory or a ConnectionFactory. + * @return String form of a default value + */ + public String getDefault(); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerFactoryInternal.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerFactoryInternal.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerFactoryInternal.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerFactoryInternal.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,78 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * PersistenceManagerFactoryInternal.java + * + * Create on March 3, 2000 + */ + +package org.apache.jdo.pm; + +import javax.jdo.PersistenceManager; +import javax.jdo.PersistenceManagerFactory; + +import org.apache.jdo.store.StoreManager; +import org.apache.jdo.store.TranscriberFactory; + + +/** +* JDORI-internal PMF. +* +* @author Dave Bristor +*/ +public interface PersistenceManagerFactoryInternal + extends PersistenceManagerFactory { + + /** + * Provides the factory which can make Transcribers for this PMF. + * @return A TranscriberFactory particular to a kind of PMF. + */ + public TranscriberFactory getTranscriberFactory(); + + /** + * In order for the application to construct instance of the ObjectId + * class it needs to know the class being used by the JDO implementation. + * @param cls the PersistenceCapable Class + * @return the Class of the ObjectId of the parameter + */ + public Class getObjectIdClass(Class cls); + + /** + * Provides a StoreManager that is ready to accept operations on it such + * as insert, etc. + * @param pm PersistenceManager that is requesting a StoreManager. + */ + public StoreManager getStoreManager(PersistenceManager pm); + + /** + * Allows the PMF to release any resources associated with the given PM's + * store manager. + * @param pm PersistenceManager that is releasing a StoreManager. + */ + public void releaseStoreManager(PersistenceManager pm); + + /** + * Returns store-specific mapping between Java classes and tracked SCO + * classes supported by this PMF. Called by PersistenceManager inside + * requests for a new tracked instance. + * @param type Class to find mapping for. + * @return A Class for the tracked SCO or null if this Java class is not + * supported as tracked SCO. + */ + public Class getTrackedClass(Class type); + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerInternal.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerInternal.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerInternal.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/PersistenceManagerInternal.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,257 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.pm; + +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; + +import javax.jdo.PersistenceManager; +import javax.jdo.spi.PersistenceCapable; + +import org.apache.jdo.state.StateManagerInternal; +import org.apache.jdo.store.StoreManager; + + +/** + * Extends the PersistenceManager interface for JDO-internal use. Provides + * additional information and helper methods for StateManagerInternal + * interaction with the cache. + * + * @author Marina Vatkina + */ +public interface PersistenceManagerInternal extends PersistenceManager { + /** + * assert this PM instance is open + */ + public void assertIsOpen(); + + /** + * assert that the NontransactionalRead flag is true or a transaction is active. + */ + public void assertReadAllowed(); + + /** + * Provides a StoreManager that is ready to accept operations on it. + * @return A StoreManager. + */ + public StoreManager getStoreManager(); + + /** + * Provides a StateManagerInternal for the given Object Id. + * @param oid the given Object Id. + * @param pcClass Class of a PersistenceCapable instance to be created + * if this Object Id was not registered with this PersistenceManager. + * @return A StateManagerInternal. + */ + public StateManagerInternal getStateManager(Object oid, Class pcClass); + + /** + * Finds a StateManagerInternal for the given PersistenceCapable object. + * Validates PersistenceManager associated with this PersistenceCapable object. + * @param pc the given PersistenceCapable object. + * @return A StateManagerInternal. + */ + public StateManagerInternal findStateManager(PersistenceCapable pc); + + + /** + * Provides a Class of the given name. This method will use one of as + * many as three ClassLoaders in attempting to load the named class. The + * ClassLoaders are: + * <ul> + * <li>The given Class Loader</li> + * <li>The current Thread's context Class Loader</li> + * <li>The class loader that was the context Class Loader of the thread + * which created this PersistenceManagerInternal</li> + * </ul> + * For each such non-null Class Loader, it is used as a parameter of + * Class.forName. If the result is not null, then the given Comparator's + * compare method is invoked with that Class and the given Object o. If + * that returns zero, that Class is returned. If either the Class.forName + * returns null or the comparator returns non-zero, the next non-null + * ClassLoader in the above list is tried in the same manner. + * <p> + * If after the above has been tried on all the ClassLoaders, an + * appropriate Class has not been found, throws JDOUserException. + * @param name Fully qualified name of the Class to load. + * @param given ClassLoader which is the first to be tried + * in loading the named Class. + * @throws ClassNotFoundException - if an appropriate Class can not + * be loaded. + */ + + /* XXX At one point, we discussed also using a Comparator to validate + * the class loaded by the loader. Pending resolution, we are omitting + * this, instead following the proposal Craig made to the JDO Experts. + * + * @param c Comparator used to determine if a + * Class loaded from a ClassLoader is in fact + * that which the caller wants. Invoked with a loaded Class + * as the first argument, and the given object o as the second + * argument. If it returns zero, the comparison is deemed to have succeed, + * and that Class will be returned by this method. + * @param o Object passed as second argument to given + * Comparator's compare method. + */ + + public Class loadClass(String name, + ClassLoader given) throws ClassNotFoundException; + // Comparator c, + // Object o) throws ClassNotFoundException; + + + /** + * Provides the Class object of the persistence-capable class that defines + * the specified class as its ObjectId class. This method will use one of as + * many as three ClassLoaders in attempting to find the persistence-capable + * class. The ClassLoaders are the same as in [EMAIL PROTECTED] #loadClass}: + * <ul> + * <li>The given Class Loader, here the given class loader is the class + * loader of the ObjectId class</li> + * <li>The current Thread's context Class Loader</li> + * <li>The class loader that was the context Class Loader of the thread + * which created this PersistenceManagerInternal</li> + * </ul> + * The method returns the top most persistence-capable class in the case of + * an inheritance hierachy. + */ + public Class loadPCClassForObjectIdClass(Class objectIdClass) + throws ClassNotFoundException; + + /** + * Provides an object id for the given PersistenceCapable. The object id + * must not be given to user/client code. + */ + public Object getInternalObjectId(Object pc); + + /** + * Adds persistent object to the cache. + * @param sm instance of StateManagerInternal to be added + * @param oid ObjectId of the corresponding persistence-capable instance + * @param transactional true if the corresponding lifecycle state is transactional + * @param throwDuplicateException true if the exception should be thrown in case the same ObjectId + * has been already registered. + */ + public void register(StateManagerInternal sm, Object oid, boolean transactional, + boolean throwDuplicateException); + + /** + * Adds transient object to the transient cache. + * @param sm instance of StateManagerInternal to be added + */ + public void registerTransient(StateManagerInternal sm); + + /** + * Removes the object from the cache. + * @param oid ObjectId of the instance to be removed. + */ + public void deregister(Object oid); + + /** + * Removes transient object from the transient cache. + * @param sm instance of StateManagerInternal to be removed + */ + public void deregisterTransient(StateManagerInternal sm); + + /** + * Replaces the objectId key value in the cache. + * @param oldId previous value of ObjectId. + * @param newId new value of ObjectId. + */ + public void replaceObjectId(Object oldId, Object newId); + + /** A helper method called from the StateManager inside getPersistenceManager() + * to identify StateManager associated with this PC instance + * @param pc PC instance + * @param sm StateManager to save + */ + public void hereIsStateManager(StateManagerInternal sm, PersistenceCapable pc); + + /** + * Called by StateManagerInternal#markAsFlushed() to adjust transactional cache(s) + * if necessary after successful flush to the data store. + * @param sm StateManagerInternal instance that has been flushed + */ + public void markAsFlushed(StateManagerInternal sm); + + /** + * Returns true if the call initiated as a result of the commit process, + * versus flush for query in a datastore transaction. + * @return true if commit has started + */ + public boolean insideCommit(); + + /** + * Called internally by the runtime to create a new tracked instance. + * Will not result in marking field as dirty + * + * Returns a new Second Class Object instance of the type java.uti.Date, + * or supported subclass. + * @param type Class of the new SCO instance + * @return the object of the class type + */ + public Object newSCOInstanceInternal (Class type); + + /** + * Called internally by the runtime to create a new tracked instance of type + * Collection. + * Will not result in marking field as dirty + * + */ + public Collection newCollectionInstanceInternal(Class type, + Class elementType, boolean allowNulls, Integer initialSize, + Float loadFactor, Collection initialContents, Comparator comparator); + + /** + * Called internally by the runtime to create a new tracked instance of type Map. + * Will not result in marking field as dirty + * + */ + public Map newMapInstanceInternal(Class type, Class keyType, Class valueType, + boolean allowNulls, Integer initialSize, Float loadFactor, + Map initialContents, Comparator comparator); + + /** + * Called by StateManager to verify field type. + * @param type Class type of the field. + * @return true if this type is a supported SCO type. + */ + public boolean isSupportedSCOType(Class type); + + /** + * Called by Query or Extent to flush updates to the database + * in a datastore transaction. It is up to the StoreManager to decide + * at what point of the processing to call this method. No validation + * of the transaction type is performed. + * @throws JDOUserException if current transaction is not active. + */ + public void flush(); + + /** + * Returns current instance of PersistenceManager wrapper + */ + public PersistenceManager getCurrentWrapper(); + + /** + * Returns a Collection of instances that has been made persistent + * or become persistent through persistence-by-reachability + * algorithm in this transaction. Called by the Extent.iterator. + * @return Collection of Persistent-New instances. + */ + public Collection getInsertedInstances(); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/package.html URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/package.html?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/package.html (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/pm/package.html Fri Mar 18 17:02:29 2005 @@ -0,0 +1,27 @@ +<!-- + Copyright 2005 The Apache Software Foundation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<html> +<head> +<title>Package org.apache.jdo.pm</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> +</head> + +<body bgcolor="#FFFFFF"> +<p>This package contains provides internal interfaces for +PersistenceManagerFactory and PersistenceManager extending the ones from javax.jdo. +</body> +</html> Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCO.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCO.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCO.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCO.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,64 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * SCO.java + * + * created May 9, 2000 + * + * @author Marina Vatkina + * @version 1.0.1 + */ + +package org.apache.jdo.sco; + +public interface SCO { + /** + * Returns the field name + * + * @return field name as java.lang.String + */ + String getFieldName(); + + /** + * Returns the owner object of the SCO instance + * + * @return owner object + */ + Object getOwner(); + + /** + * Sets the owner and field number. Called by StateManager upon + * assignment to a managed instance. + * @param owner the owner object. + * @param fieldNumber the number of the field associated with this instance. + */ + void setOwner (Object owner, int fieldNumber); + + /** + * Nullifies references to the owner Object iff the passed in owner and + * fieldNumber match. + * @param owner the existing owner object. + * @param fieldNumber the existing number of the field. + */ + void unsetOwner(Object owner, int fieldNumber); + + /** + * Make a copy of this object. + * @since 1.0.1 + */ + Object clone(); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOCollection.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOCollection.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOCollection.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOCollection.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,116 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * SCOCollection.java + * + * created April 3, 2000 + * + * @author Marina Vatkina + * @version 1.0.1 + */ + +package org.apache.jdo.sco; +import java.util.Collection; +import java.util.Iterator; + +public interface SCOCollection extends java.util.Collection, SCO { + /** + * Resets removed and added lists after flush + */ + void reset(); + + /** + * Adds object to the Collection without recording + * the event. Used internaly to initially populate the Collection + */ + void addInternal(Object o); + + /** + * Adds objects of the given Collection to this Collection without recording + * the event. Used internaly to initially populate the Collection + */ + void addAllInternal(Collection c); + + + /** + * Clears Collection without recording + * the event. Used internaly to clear the Collection + */ + void clearInternal(); + + + /** + * Removes element from the Collection without recording + * the event. Used internaly to update the Collection + */ + void removeInternal(Object o); + + /** + * Returns the Collection of added elements + * + * @return Collection of the added elements as java.util.Collection + */ + Collection getAdded(); + + /** + * Returns the Collection of removed elements + * + * @return Collection of the removed elements as java.util.Collection + */ + Collection getRemoved(); + + /** + * Returns the element type assignment compatible with all + * added elements of this collection. + * + * @return the element type assignment compatible with all + * added elements. + */ + Class getElementType(); + + /** + * Returns whether nulls are permitted as elements. + * + * @return true if nulls are permitted as elements. + */ + boolean allowNulls(); + + /** + * Set the contents of this Collection from the frozen elements. + * @since 1.0.1 + * @param elements the frozen elements. + */ + void setFrozen(Object[] elements); + + /** + * Get an iterator over the frozen elements of this collection. This allows + * iterator of the elements without thawing them, as is needed for + * transcription. + * @since 1.0.1 + * @return an iterator over the frozen elements. + */ + Iterator frozenIterator(); + + /** Get an iterator regardless of whether the map is frozen. + * If frozen, get a frozen iterator. + * If thawed, get a regular iterator. + * @since 1.0.1 + * @return the iterator over the elements. + */ + Iterator eitherIterator(); + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCODate.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCODate.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCODate.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCODate.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,36 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * SCODate.java + * + * created April 5, 2000 + * + * @author Marina Vatkina + * @version 1.0 + */ + +package org.apache.jdo.sco; + +public interface SCODate extends SCO +{ + /** + * Sets initial date value without notifying the owner object + * + * @param time in milliseconds + */ + void setTimeInternal(long time); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOMap.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOMap.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOMap.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/SCOMap.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,142 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * SCOMap.java + * + * created September 20, 2001 + * + * @author Marina Vatkina + * @version 1.0.1 + */ + +package org.apache.jdo.sco; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +public interface SCOMap extends java.util.Map, SCO { + /** + * Resets removed and added lists after flush + */ + void reset(); + + /** + * Associates the specified value with the specified key in this map + * without recording the event. Used internaly to initially populate + * the Map. + */ + void putInternal(Object key, Object value); + + /** + * Copies all of the mappings from the specified map to this one without + * recording the event. Used internaly to initially populate the Map. + */ + void putAllInternal(Map t); + + + /** + * Clears Map without recording + * the event. Used internaly to clear the Map + */ + void clearInternal(); + + + /** + * Removes mappings from the Map without recording + * the event. Used internally to update the Map + */ + void removeInternal(Object key); + + /** + * Returns the Collection of added keys + * + * @return Collection of the added keys as java.util.Collection + */ + Collection getAddedKeys(); + + /** + * Returns the Collection of added values + * + * @return Collection of the added values as java.util.Collection + */ + Collection getAddedValues(); + + /** + * Returns the Collection of removed keys + * + * @return Collection of the removed keys as java.util.Collection + */ + Collection getRemovedKeys(); + + /** + * Returns the Collection of removed values + * + * @return Collection of the removed values as java.util.Collection + */ + Collection getRemovedValues(); + + /** + * Returns the type of the key assignment compatible with all + * keys of this map. + * + * @return the type of the key assignment compatible with all + * keys. + */ + Class getKeyType(); + + /** + * Returns the type of the value assignment compatible with all + * values of this map. + * + * @return the type of the value assignment compatible with all + * values. + */ + Class getValueType(); + + /** + * Returns whether nulls are permitted as keys or values. + * + * @return true if nulls are permitted as keys or values. + */ + boolean allowNulls(); + + /** + * Set the contents of this Map from the frozen entries. + * @since 1.0.1 + * @param entries the array of entries + */ + void setFrozen(Map.Entry[] entries); + + /** Get an iterator regardless of whether the map is frozen. + * If frozen, get a frozen iterator. + * If thawed, get a regular iterator. + * @since 1.0.1 + * @return an iterator over the map entries. + */ + Iterator eitherIterator(); + + /** + * Get an iterator over the frozen elements of this map. This allows + * iteration of the elements without thawing them, as is needed for + * transcription. + * @since 1.0.1 + * @return an iterator over the frozen map entries. + */ + Iterator frozenIterator(); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/package.html URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/package.html?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/package.html (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/sco/package.html Fri Mar 18 17:02:29 2005 @@ -0,0 +1,26 @@ +<!-- + Copyright 2005 The Apache Software Foundation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<html> +<head> +<title>Package org.apache.jdo.sco</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> +</head> + +<body bgcolor="#FFFFFF"> +<p>This package contains SCO-related interfaces.</p> +</body> +</html> Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/FieldManager.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/FieldManager.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/FieldManager.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/FieldManager.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,137 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.state; + +/** + * This is the means by which a StateManager implementation's giveXXXField() + * method (where XXX is e.g. Int) can give the value to an object that wants + * the field. + * + * @author Dave Bristor + */ +public interface FieldManager { + /** + * Provides the means by which the value of a boolean field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Boolean that is the value of a particular field. + */ + public void storeBooleanField(int fieldNum, boolean value); + + public boolean fetchBooleanField(int fieldNum); + + /** + * Provides the means by which the value of a char field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Char that is the value of a particular field. + */ + public void storeCharField(int fieldNum, char value); + + public char fetchCharField(int fieldNum); + + /** + * Provides the means by which the value of a byte field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Byte that is the value of a particular field. + */ + public void storeByteField(int fieldNum, byte value); + + public byte fetchByteField(int fieldNum); + + /** + * Provides the means by which the value of a short field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Short that is the value of a particular field. + */ + public void storeShortField(int fieldNum, short value); + + public short fetchShortField(int fieldNum); + + /** + * Provides the means by which the value of a int field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Int that is the value of a particular field. + */ + public void storeIntField(int fieldNum, int value); + + public int fetchIntField(int fieldNum); + + /** + * Provides the means by which the value of a long field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Long that is the value of a particular field. + */ + public void storeLongField(int fieldNum, long value); + + public long fetchLongField(int fieldNum); + + /** + * Provides the means by which the value of a field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value that is the value of a particular field. + */ + public void storeFloatField(int fieldNum, float value); + + public float fetchFloatField(int fieldNum); + + /** + * Provides the means by which the value of a double field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Double that is the value of a particular field. + */ + public void storeDoubleField(int fieldNum, double value); + + public double fetchDoubleField(int fieldNum); + + /** + * Provides the means by which the value of a String field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value String that is the value of a particular field. + */ + public void storeStringField(int fieldNum, String value); + + public String fetchStringField(int fieldNum); + + /** + * Provides the means by which the value of an Object field can be given + * by a StateManager to an object that needs the value. + * @param fieldNum Field number of the field in the object whose value is + * given. + * @param value Object that is the value of a particular field. + */ + public void storeObjectField(int fieldNum, Object value); + + public Object fetchObjectField(int fieldNum); + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/StateManagerInternal.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/StateManagerInternal.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/StateManagerInternal.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/StateManagerInternal.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,275 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.state; + +import javax.jdo.spi.PersistenceCapable; +import javax.jdo.spi.StateManager; + +import org.apache.jdo.pm.PersistenceManagerInternal; +import org.apache.jdo.sco.SCO; +import org.apache.jdo.store.StoreManager; + + +/** + * Extends the StateManager interface for JDO-internal use. Provides + * additional information about the state of particular fields. Provides a + * means to give a field's value to an object that can cause that value to be + * stored. + * + * @author Dave Bristor + */ +public interface StateManagerInternal extends StateManager { + + /** + * Return values for flush operations + */ + public static final int FLUSHED_PARTIAL = -1; + public static final int FLUSHED_NONE = 0; + public static final int FLUSHED_COMPLETE = 1; + + /** + * Provides the object managed by this state manager. + * @return The object managed by this state manager. + */ + public PersistenceCapable getObject(); + + + /** + * Returns internal representation of the object id associated with this statemanager. + * @return internal representation of the object id associated with this statemanager. + */ + public Object getInternalObjectId(); + + /** + * Returns external representation of the object id associated with this statemanager. + * @return external representation of the object id associated with this statemanager. + */ + public Object getExternalObjectId(); + + /** + * Allows a client to change this state manager's object Id. For example, + * with datastore identity, allows one object id to be used before the + * object has been stored (i.e. a "provisional" id), and another once the + * object has been put into the datbase. + */ + public void setObjectId(Object objectId); + + /** + * Causes the state manager to send itself to the store manager for + * insert, update, and so on as per its own state. It should flush itself + * only if it has no dependencies on other state manager. + * @param srm The StoreManager to which the instance should send itself. + * @return true if the state manager could flush itself, false if it has + * dependencies on other state managers and could not flush itself. + */ + public boolean flush(StoreManager srm); + + /** + * Causes the values of the field indicated by the specified field number + * be given to the FieldManager. + * @param fieldNumber Indicates which field should be provided to the + * fieldManager. + * @param fieldManager FieldManager to which the field should be given. + * @param identifying If true, provides values from the before or flushed + * image, as determined by this StateManager's state; if false provides + * values from the current image. + */ + public void provideField(int fieldNumber, FieldManager fieldManager, + boolean identifying); + + /** + * Causes the values of the fields indicated by the specified fields to + * be given to the FieldManager. + * @param fields Indicates which fields should be provided to the + * fieldManager. + * @param fieldManager FieldManager to which the field should be given. + * @param identifying If true, provides values from the before or flushed + * image, as determined by this StateManager's state; if false provides + * values from the current image. + */ + public void provideFields(int fields[], FieldManager fieldManager, + boolean identifying); + + /** + * For replacing field values in a PC with the ones that is provided by + * the FieldManager. + * @param fields Indicates which fields should be replaced in the PC. + * @param fieldManager FieldManager from which the field values should + * be obtained. + */ + public void replaceFields(int fields[], FieldManager fieldManager); + + /** + * Fetch or refresh object from the data store. + */ + public void reload(); + + /** + * Retrieve an instance from the store. + */ + public void retrieve(); + + /** + * Transition the lifecycle state as if the instance is retrieved from the + * datastore, but use the specified field values instead of loading them + * from the datastore. + * @param fields Indicates which fields should be replaced in the PC. + * @param fieldManager FieldManager from which the field values should + * be obtained. + */ + public void replace(int fields[], FieldManager fieldManager); + + /** + * Transitions lifecycle state in afterCompletion callback + * @param abort true if transaction has been rolled back + * @param retainValues true if values need to be preserved on commit. + * @param restoreValues true if values need to be restored on rollback. + */ + public void afterCompletion(boolean abort, boolean retainValues, + boolean restoreValues); + + /** + * Transitions lifecycle state in to PERSISTENT_NEW + */ + public void makePersistent(); + + /** + * Transitions lifecycle state in to transactional + */ + public void makeTransactional(); + + /** + * Transitions lifecycle state in to nontransactional + */ + public void makeNontransactional(); + + /** + * Transitions lifecycle state in to TRANSIENT + */ + public void makeTransient(); + + /** + * Transitions lifecycle state in to PERSISTENT_DELETED + */ + public void deletePersistent(); + + /** + * Transitions lifecycle state to P_CLEAN or P_NON_TX + */ + public void refreshInstance(); + + /** + * Transitions lifecycle state to HOLLOW + */ + public void evictInstance(); + + /** + * Calls preStore on the associated object if necessary. + */ + public void preStore(); + + /** + * Replaces field values that are regular SCO instances with tracked SCOs. + * Called internally during the afterCompletion processing when instance + * transions to P-nontransactional (if the retainValues flag is set to true). + * May be called by the StoreManager during the flush process to store tracked + * instances in the data store. + */ + public void replaceSCOFields(); + + /** Processes relationships for reachability algorithm + * and define the dependencies + * @param flag is true if method is called inside the flush, false otherwise + */ + public void handleReachability(boolean flag); + + /** + * Returns true if the instance exists in a datastore. Returns false + * for transient instances, PersistentNew, PersistentNewDeleted, and + * PersistentDeletedFlushed + */ + public boolean isStored(); + + /** + * Returns true if the instance has been flushed to the datastore. + */ + public boolean isFlushed(); + + /** + * Sets dependency object containing dependency information specific to this + * instance of the StateManager + * @param dependency new dependency object + */ + public Object setDependency(Object dependency); + + /** + * Returns dependency object that contains dependency information specific to + * this instance of the StateManager + */ + public Object getDependency(); + + /** + * Returns PersistenceManager associated with this StateManager instance + * @return the PersistenceManager + */ + public PersistenceManagerInternal getPersistenceManager(); + + /** Mark the associated PersistenceCapable field dirty. + * <P> The StateManager will make a copy of the field + * so it can be restored if needed later, and then mark + * the field as modified in the current transaction. + * @param fieldNumber the number of the field + */ + public void makeDirty (int fieldNumber); + + /** + * Processes changes to the Tracked SCO instance owned by this + * StateManager. + * @param fieldNumber the number of the field + * @param sco Tracked SCO instance. + */ + public void trackUpdates(int fieldNumber, SCO sco); + + /** + * Returns field name for the field number. Used for debugging. + * @param fieldNumber the number of the field + * @return field name as String + */ + public String getFieldName(int fieldNumber); + + /** + * Allows StateManager to set the actual PC Class if it was not available + * at the constructor time and create a hollow instnce of that type. + * @param pcClass the Class type of the instance. + */ + public void setPCClass(Class pcClass); + + /** + * Returns PC Class known to this StateManager. Can be a candidate Class. + * @return the Class type of the PC instance. + */ + public Class getPCClass(); + + /** Tests whether this StateManager represents a instance made persistent + * object. + * + * @return <code>true</code> if this StateManager represents an + * instance made persistent in the current transaction. + */ + public boolean isNew(); + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/package.html URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/package.html?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/package.html (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/state/package.html Fri Mar 18 17:02:29 2005 @@ -0,0 +1,26 @@ +<!-- + Copyright 2005 The Apache Software Foundation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<html> +<head> +<title>Package org.apache.jdo.state</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> +</head> + +<body bgcolor="#FFFFFF"> +<p>This package contains the internal StateManager and teh FIeldManager interface.</p> +</body> +</html> Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Bundle.properties URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Bundle.properties?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Bundle.properties (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Bundle.properties Fri Mar 18 17:02:29 2005 @@ -0,0 +1,30 @@ +# +# Copyright 2005 The Apache Software Foundation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This file should conform to netbeans standards +# (http://www.netbeans.org/i18n) + +# resource bundle for the messages +# key consists of: <PREFIX_><description> +# <PREFIX_> - any valid prefix like MSG_, EXC_, etc. +# <description> - short description started with the upper case letter and used +# upper case to represent each next word. + +# +# StoreManagerImpl +# +EXC_UnableToFlushAll=Not able to flush all transactional instances to the data store. + + Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Connector.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Connector.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Connector.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/Connector.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,85 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.store; + +/** +* A Connector is the store-independent means of representing a connection. +* Each different kind of store should implement it's own connector, which +* delegates the operations to its particular kind of connection. +* +* @author Dave Bristor +*/ +public interface Connector { + + /** + * Informs the Connector that a transaction is beginning. + * @param optimistic If true, then an optimistic transaction is + * beginning. + * @throws JDODataStoreException is [EMAIL PROTECTED] setRollbackOnly} has been + * invoked on this Connector. + */ + public void begin(boolean optimistic); + + /** + * Informs the Connector that the transaction has reached it's + * beforeCompletion phase. + * @throws JDODataStoreException is [EMAIL PROTECTED] setRollbackOnly} has been + * invoked on this Connector. + */ + public void beforeCompletion(); + + /** + * Requests that the Connector send all pending database operations to the + * store. + * @throws JDODataStoreException is [EMAIL PROTECTED] setRollbackOnly} has been + * invoked on this Connector. + */ + public void flush(); + + /** + * Requests that the Connector make all changes made since the previous + * commit/rollback permanent and releases any database locks held by the + * Connector. + * @throws JDODataStoreException is [EMAIL PROTECTED] setRollbackOnly} has been + * invoked on this Connector. + */ + public void commit(); + + /** + * Requests that the Connector drop all changes made since the previous + * commit/rollback and releases any database locks currently held by this + * Connector. + */ + public void rollback(); + + /** + * Requests that the Connector put itself in a state such that the only + * allowable operations is [EMAIL PROTECTED] + * org.apache.jdo.store.Connector#getRollbackOnly}. Once set, attempts to + * do any other operations will result in a JDODataStoreException. + */ + public void setRollbackOnly(); + + /** + * Indicates whether or not the connector can do operations other than + * rollback. + * @return <code>false</code> if the connector can do operations other than + * rollback. + */ + public boolean getRollbackOnly(); + +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManager.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManager.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManager.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManager.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,263 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.store; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Iterator; + +import javax.jdo.Extent; +import javax.jdo.spi.PersistenceCapable; +import javax.jdo.spi.StateManager; + +import org.apache.jdo.jdoql.QueryResult; +import org.apache.jdo.jdoql.QueryResultHelper; +import org.apache.jdo.pm.PersistenceManagerInternal; +import org.apache.jdo.state.StateManagerInternal; + + +/** + * StoreManager represents the datastore to the rest of the JDO components. + * It provides the means to write and read instances, to get the extent of + * classes, and to get the object id for a persistence capable object. + */ +public interface StoreManager { + /** + * Returns a Connector suitable for committing or rolling back operations + * on this store. + */ + public Connector getConnector(); + + /** + * Returns a Connector suitable for committing or rolling back operations + * on this store for a specific userid. + * @param userid the userid for the connection + * @param password the password for the connection + */ + public Connector getConnector(String userid, String password); + + // + // Methods which represent individual requests on the store + // + + /** + * Causes the object managed by the given state manager's object to be + * inserted into the database. + * @param loadedFields BitSet of fields to be inserted in the database (may be + * ignored). + * @param dirtyFields BitSet of all fields as all fields are marked as dirty for + * <code>insert</code>. After return, bits will remain as set for fields that + * were <em>not</em> inserted. If any bits are set, the return will be + * <code>FLUSHED_PARTIAL</code>. + * @param sm The state manager whose object is to be inserted. + * @return one of <code>StateManagerInternal.FLUSHED_{COMPLETE, PARTIAL, + * NONE}</code>, + * depending on the success of the operation in inserting specified fields + * into the database. + */ + public int insert(BitSet loadedFields, BitSet dirtyFields, + StateManagerInternal sm); + + /** + * Causes the object managed by the given state manager to be updated + * in the database. + * @param loadedFields BitSet of fields loaded from the database. + * @param dirtyFields BitSet of changed fields that are to be flushed to the + * database. It is the StoreManager policy which fields are to be verified + * against those in the database, if this <code>update</code> is within the + * context of an optimistic transaction. After return, bits will remain set + * for fields that were not flushed, and in such case the return will be + * <code>FLUSHED_PARTIAL</code>. + * @param sm The state manager whose object is to be updated. + * @return one of <code>StateManagerInternal.FLUSHED_{COMPLETE, PARTIAL, + * NONE}</code>, depending on the success of the operation in updating + * specified fields into the database. + */ + public int update(BitSet loadedFields, BitSet dirtyFields, + StateManagerInternal sm); + + /** + * Causes the object managed by the given state manager to be verified + * in the database. + * @param loadedFields BitSet of fields to be verified against those in the + * database. + * @param dirtyFields Unused as there are no changed fields in this transaction. + * @param sm The state manager whose object is to be verified. + * @return StateManagerInternal.FLUSHED_COMPLETE. + * @throws JDODataStoreException if data in memory does not match that in + * the database. + */ + public int verifyFields(BitSet loadedFields, BitSet dirtyFields, + StateManagerInternal sm); + + // RESOLVE: Marina, do we need this? @see org.apache.jdo.impl.fostore.FOStoreStoreManager#verifyExistence. + /** + * Causes the database to check if the object managed by the given state + * manager exists in the database. + * @param sm The state manager whose object is to be verified. + * @return true if object exists in the database. + */ +// public boolean verifyExistence(StateManagerInternal sm); + + /** + * Causes the object managed by the given state manager to be deleted + * in the database. + * @param loadedFields BitSet of fields loaded from the database. + * @param dirtyFields BitSet of changed fields. It is the StoreManager policy + * which fields are to be verified against those in the database, if this + * <code>delete</code> is within the context of an optimistic transaction. After + * return, bits will remain set for the fields that were not flushed, if the + * <code>update</code> was performed to resolve dependencies. In such case the + * return will be <code>StateManagerInternal.FLUSHED_PARTIAL</code>. + * @param sm The state manager whose object is to be deleted. + * @return one of <code>StateManagerInternal.FLUSHED_{COMPLETE, + * NONE}</code>, depending on the success of the delete operation. + */ + public int delete(BitSet loadedFields, BitSet dirtyFields, + StateManagerInternal sm); + + // + // The following methods allow fields of an object to be read from the + // store to the client. There are not any corresponding methods for + // update, nor delete,as those are handled via prepare and commit. I.e., + // when the prepare method of an implementation of this interface is + // invoked, it should examine the given sm to see if it is dirty or + // deleted, and update or remove it in the store accordingly. + // + + /** + * Causes values for fields required by the state manager's object to + * be retrieved from the store and supplied to the state manager. + * @param sm The state manager whose fields are to be read. + * @param fieldNums The fields which are to be read. + */ + public void fetch(StateManagerInternal sm, int fieldNums[]); + + /** + * Provides the means to get all instances of a particular class, or of + * that class and its subclasses. If there are no instances of the given + * class (nor its subclass) in the store, returns null. + * @param pcClass Indicates the class of the instances that are in the + * returned Extent. + * @param subclasses If true, then instances subclasses of pcClass are + * included in the resulting Extent. If false, then only instances of + * pcClass are included. + * @param pm PersistenceManagerInternal making the request. + * @return An Extent from which instances of pcClass (and subclasses if + * appropriate) can be obtained. Does not return null if there are no + * instances; in that case it returns an empty Extent. + */ + public Extent getExtent(Class pcClass, boolean subclasses, + PersistenceManagerInternal pm); + + // + // The following methods provide mappings between object ids, state + // managers, and persistence capables. + // + + /** + * Creates a new Object Id for the given StateManagerInternal. The + * resulting Object Id should not be given to user/client code. + * @param sm StateManagerInternal for which an Object Id is needed. + * @param pm PersistenceManagerInternal in which the sm's object is + * created. + * @return Object Id corresponding to the given StateManagerInternal + */ + public Object createObjectId(StateManagerInternal sm, + PersistenceManagerInternal pm); + + /** + * Returns an Object Id that can be given to user/client code and which is + * a <em>copy or external representation</em> of the given objectId. + * @param objectId Object Id for which an external Object Id is needed. + * @param pc PersistenceCapable instance associated with this Object Id. + * @return An Object Id that can be given to user/client code. + */ + public Object getExternalObjectId(Object objectId, PersistenceCapable pc); + + /** + * Returns an Object Id that can be used by the runtime code and which is + * a <em>an internal representation</em> of the given objectId. + * @param objectId Object Id for which an internal Object Id is needed. + * @param pm PersistenceManagerInternal which requested the Object Id. + * @return An Object Id that can be given to user/client code. + */ + public Object getInternalObjectId(Object objectId, + PersistenceManagerInternal pm); + + /** + * Returns the Class of the PersistenceCapable instance identified by the + * given oid. + * @param oid object id whose java.lang.Class is wanted. + * @param pm PersistenceManagerInternal to use in loading the oid's + * Class. + * @return java.lang.Class of the PersistenceCapable instance identified with + * this oid. + */ + public Class getPCClassForOid(Object oid, PersistenceManagerInternal pm); + + /** + * Returns true if actual Class for a PersistenceCapable instance can be + * resolved only in the database. + * @param objectId Object Id whose java.lang.Class needs to be resolved. + * @return true if the request needs to be resolved in the back end. + */ + public boolean hasActualPCClass(Object objectId); + + /** + * This method returns an object id instance corresponding to the Class + * and String arguments. The String argument might have been the + * result of executing toString on an object id instance. + * @param pcClass the Class of the persistence-capable instance + * @param str the String form of the object id + * @return an instance of the object identity class + */ + public Object newObjectIdInstance (Class pcClass, String str); + + /** + * This method copies PK field values from internal Object Id into the + * Hollow instance. + * @param sm StateManagerInternal for which an operation is needed. + * @param pcClass the Class of the persistence-capable instance + */ + public void copyKeyFieldsFromObjectId(StateManagerInternal sm, Class pcClass); + + // + // Assorted other methods. + // + + /** + * Flushes all elements in the given iterator. + * @param it Iterator of StateManagerInternal instances to be flushed. + * @param pm PersistenceManagerInternal on whose behalf instances are being + * flushed. + * @throws JDOFatalDataStoreException if instances could not all be flushed + * as determined by <code>sm.isFlushed()</code>. + */ + public void flush(Iterator it, PersistenceManagerInternal pm); + + /** + * Returns a QueryResult instance which is then returned as the result of + * Query.execute(...). This method allows support for datastore specific + * query execution strategies, since each StoreManager can have its own + * implementation of the QueryResult interface. + * @param qrh the helper providing the query tree, the candidates + * and the actual parameters. + * @return a datastore specific query result instance + */ + public QueryResult newQueryResult(QueryResultHelper qrh); +} Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManagerImpl.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManagerImpl.java?view=auto&rev=158176 ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManagerImpl.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/store/StoreManagerImpl.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,124 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.store; + +import java.util.Iterator; + +import javax.jdo.JDOFatalInternalException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.jdo.jdoql.BasicQueryResult; +import org.apache.jdo.jdoql.QueryResult; +import org.apache.jdo.jdoql.QueryResultHelper; +import org.apache.jdo.pm.PersistenceManagerInternal; +import org.apache.jdo.state.StateManagerInternal; +import org.apache.jdo.util.I18NHelper; + +/** +* StoreManagerImpl provides a base for fully implementing the StoreManager +* interface. +* +* @author Dave Bristor +*/ +public abstract class StoreManagerImpl implements StoreManager { + + /** Indicates whether current transaction is optimistic or not. See + * [EMAIL PROTECTED] #flush}. */ + protected boolean optimistic; + + /** Logger instance */ + private static final Log logger = LogFactory.getFactory().getInstance( + "org.apache.jdo.store"); // NOI18N + + /** I18N support. */ + private static final I18NHelper msg = + I18NHelper.getInstance(StoreManagerImpl.class); + + /** Default constructor. */ + protected StoreManagerImpl() { } + + + /** + * Perform any actions required before StateManager's are flushed. + */ + abstract protected void preFlush(); + + /** + * Flushes all StateManagerInternals in the given Iterator. This will in + * turn cause invocations of insert, delete, and update on this + * StoreManager. Update, in particular, must be done after this flush + * method is invoked, so that the value of <code>optimistic</code> is set + * correctly. + * @see org.apache.jdo.store.StoreManager#flush */ + public void flush(Iterator it, PersistenceManagerInternal pm) { + this.optimistic = pm.currentTransaction().getOptimistic(); + + if (debugging()) { + logger.debug( + "SRMImpl.flush: begin, optimistic=" + optimistic); // NOI18N + } + + preFlush(); + + if (debugging()) { + logger.debug( + "SRMImpl.flush: completed flush commit"); // NOI18N + } + + boolean err = false; + + while (it.hasNext()) { + StateManagerInternal sm = (StateManagerInternal)it.next(); + sm.preStore(); + + sm.replaceSCOFields(); + sm.flush(this); + if ( ! sm.isFlushed()) { + err = true; + break; + } + } + + if (debugging()) { + logger.debug("SRMImpl.flush: end, err=" + err); // NOI18N + } + + if (err) { + throw new JDOFatalInternalException( + msg.msg("EXC_UnableToFlushAll")); // NOI18N + } + } + + /** + * Returns a QueryResult instance which is then returned as the result of + * Query.execute(...). This method allows support for datastore specific + * query execution strategies, since each StoreManager can have its own + * implementation of the QueryResult interface. + * @param qrh the helper providing the query tree, the candidates + * and the actual parameters. + * @return a datastore specific query result instance + */ + public QueryResult newQueryResult(QueryResultHelper qrh) { + return new BasicQueryResult(qrh); + } + + private boolean debugging() { + return logger.isDebugEnabled(); + } +}