blob: 7177456523a46d9fc058cb62164b4e7d1ce48566 [file] [log] [blame]
/*
* 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 javax.jdo.spi;
import java.util.BitSet;
import javax.jdo.PersistenceManager;
/** This interface is the point of contact between managed instances of
* <code>PersistenceCapable</code> classes and the JDO implementation. It contains
* the methods used by <code>PersistenceCapable</code> instances to delegate behavior to
* the JDO implementation.
*<P>Each managed <code>PersistenceCapable</code> instance contains a reference to a
* <code>StateManager</code>. A <code>StateManager</code> might manage one or multiple instances of
* <code>PersistenceCapable</code> instances, at the choice of the implementation.
*
* @version 2.0
*
*/
public interface StateManager {
/** The owning <code>StateManager</code> uses this method to supply the
* value of the flags to the <code>PersistenceCapable</code> instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @return the value of <code>jdoFlags</code> to be stored in the <code>PersistenceCapable</code> instance
*/
byte replacingFlags(PersistenceCapable pc);
/** Replace the current value of <code>jdoStateManager</code>.
* <P>
* This method is called by the <code>PersistenceCapable</code> whenever
* <code>jdoReplaceStateManager</code> is called and there is already
* an owning <code>StateManager</code>. This is a security precaution
* to ensure that the owning <code>StateManager</code> is the only
* source of any change to its reference in the <code>PersistenceCapable</code>.
* @return the new value for the <code>jdoStateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param sm the proposed new value for the <code>jdoStateManager</code>
*/
StateManager replacingStateManager (PersistenceCapable pc, StateManager sm);
/** Tests whether this object is dirty.
*
* Instances that have been modified, deleted, or newly
* made persistent in the current transaction return <code>true</code>.
*
*<P>Transient nontransactional instances return <code>false</code>.
*<P>
* @see PersistenceCapable#jdoMakeDirty(String fieldName)
* @param pc the calling <code>PersistenceCapable</code> instance
* @return <code>true</code> if this instance has been modified in the current transaction.
*/
boolean isDirty(PersistenceCapable pc);
/** Tests whether this object is transactional.
*
* Instances that respect transaction boundaries return <code>true</code>. These instances
* include transient instances made transactional as a result of being the
* target of a <code>makeTransactional</code> method call; newly made persistent or deleted
* persistent instances; persistent instances read in data store
* transactions; and persistent instances modified in optimistic transactions.
*
*<P>Transient nontransactional instances return <code>false</code>.
*<P>
* @param pc the calling <code>PersistenceCapable</code> instance
* @return <code>true</code> if this instance is transactional.
*/
boolean isTransactional(PersistenceCapable pc);
/** Tests whether this object is persistent.
*
* Instances whose state is stored in the data store return <code>true</code>.
*
*<P>Transient instances return <code>false</code>.
*<P>
* @see PersistenceManager#makePersistent(Object pc)
* @param pc the calling <code>PersistenceCapable</code> instance
* @return <code>true</code> if this instance is persistent.
*/
boolean isPersistent(PersistenceCapable pc);
/** Tests whether this object has been newly made persistent.
*
* Instances that have been made persistent in the current transaction
* return <code>true</code>.
*
*<P>Transient instances return <code>false</code>.
*<P>
* @see PersistenceManager#makePersistent(Object pc)
* @param pc the calling <code>PersistenceCapable</code> instance
* @return <code>true</code> if this instance was made persistent
* in the current transaction.
*/
boolean isNew(PersistenceCapable pc);
/** Tests whether this object has been deleted.
*
* Instances that have been deleted in the current transaction return <code>true</code>.
*
*<P>Transient instances return <code>false</code>.
*<P>
* @see PersistenceManager#deletePersistent(Object pc)
* @param pc the calling <code>PersistenceCapable</code> instance
* @return <code>true</code> if this instance was deleted
* in the current transaction.
*/
boolean isDeleted(PersistenceCapable pc);
/** Return the <code>PersistenceManager</code> that owns this instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @return the <code>PersistenceManager</code> that owns this instance
*/
PersistenceManager getPersistenceManager (PersistenceCapable pc);
/** Mark the associated <code>PersistenceCapable</code> field dirty.
* <P>The <code>StateManager</code> 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 pc the calling <code>PersistenceCapable</code> instance
* @param fieldName the name of the field
*/
void makeDirty (PersistenceCapable pc, String fieldName);
/** Return the object representing the JDO identity
* of the calling instance. If the JDO identity is being changed in
* the current transaction, this method returns the identity as of
* the beginning of the transaction.
* @param pc the calling <code>PersistenceCapable</code> instance
* @return the object representing the JDO identity of the calling instance
*/
Object getObjectId (PersistenceCapable pc);
/** Return the object representing the JDO identity
* of the calling instance. If the JDO identity is being changed in
* the current transaction, this method returns the current identity as
* changed in the transaction.
* @param pc the calling <code>PersistenceCapable</code> instance
* @return the object representing the JDO identity of the calling instance
*/
Object getTransactionalObjectId (PersistenceCapable pc);
/** Return the object representing the version
* of the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @return the object representing the version of the calling instance
* @since 2.0
*/
Object getVersion (PersistenceCapable pc);
/** Return <code>true</code> if the field is cached in the calling
* instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return whether the field is cached in the calling instance
*/
boolean isLoaded (PersistenceCapable pc, int field);
/** Guarantee that the serializable transactional and persistent fields
* are loaded into the instance. This method is called by the generated
* <code>jdoPreSerialize</code> method prior to serialization of the
* instance.
* @param pc the calling <code>PersistenceCapable</code> instance
*/
void preSerialize (PersistenceCapable pc);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
boolean getBooleanField (PersistenceCapable pc, int field, boolean currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
char getCharField (PersistenceCapable pc, int field, char currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
byte getByteField (PersistenceCapable pc, int field, byte currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
short getShortField (PersistenceCapable pc, int field, short currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
int getIntField (PersistenceCapable pc, int field, int currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
long getLongField (PersistenceCapable pc, int field, long currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
float getFloatField (PersistenceCapable pc, int field, float currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
double getDoubleField (PersistenceCapable pc, int field, double currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
String getStringField (PersistenceCapable pc, int field, String currentValue);
/** Return the value for the field.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @return the new value for the field
*/
Object getObjectField (PersistenceCapable pc, int field, Object currentValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setBooleanField (PersistenceCapable pc, int field, boolean currentValue, boolean newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setCharField (PersistenceCapable pc, int field, char currentValue, char newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setByteField (PersistenceCapable pc, int field, byte currentValue, byte newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setShortField (PersistenceCapable pc, int field, short currentValue, short newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setIntField (PersistenceCapable pc, int field, int currentValue, int newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setLongField (PersistenceCapable pc, int field, long currentValue, long newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setFloatField (PersistenceCapable pc, int field, float currentValue, float newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setDoubleField (PersistenceCapable pc, int field, double currentValue, double newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setStringField (PersistenceCapable pc, int field, String currentValue, String newValue);
/** Mark the field as modified by the user.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
* @param newValue the proposed new value of the field */
void setObjectField (PersistenceCapable pc, int field, Object currentValue, Object newValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedBooleanField (PersistenceCapable pc, int field, boolean currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedCharField (PersistenceCapable pc, int field, char currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedByteField (PersistenceCapable pc, int field, byte currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedShortField (PersistenceCapable pc, int field, short currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedIntField (PersistenceCapable pc, int field, int currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedLongField (PersistenceCapable pc, int field, long currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedFloatField (PersistenceCapable pc, int field, float currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedDoubleField (PersistenceCapable pc, int field, double currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedStringField (PersistenceCapable pc, int field, String currentValue);
/** The value of the field requested to be provided to the <code>StateManager</code>
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @param currentValue the current value of the field
*/
void providedObjectField (PersistenceCapable pc, int field, Object currentValue);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
boolean replacingBooleanField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
char replacingCharField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
byte replacingByteField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
short replacingShortField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
int replacingIntField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
long replacingLongField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
float replacingFloatField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
double replacingDoubleField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
String replacingStringField (PersistenceCapable pc, int field);
/** The replacement value of the field in the calling instance.
* @param pc the calling <code>PersistenceCapable</code> instance
* @param field the field number
* @return the new value for the field
*/
Object replacingObjectField (PersistenceCapable pc, int field);
/** The replacement value of the detached state in the calling instance.
* @param pc the calling <code>Detachable</code> instance
* @param state the current value of the detached state
* @return the replacement value for the detached state
* @since 2.0
*/
Object[] replacingDetachedState (Detachable pc, Object[] state);
}