001: /**********************************************************************
002: Copyright (c) 2004 Erik Bengtson and others. All rights reserved.
003: Licensed under the Apache License, Version 2.0 (the "License");
004: you may not use this file except in compliance with the License.
005: You may obtain a copy of the License at
006:
007: http://www.apache.org/licenses/LICENSE-2.0
008:
009: Unless required by applicable law or agreed to in writing, software
010: distributed under the License is distributed on an "AS IS" BASIS,
011: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: See the License for the specific language governing permissions and
013: limitations under the License.
014:
015: Contributors:
016: ...
017: **********************************************************************/package org.jpox.jdo.state;
018:
019: import org.jpox.Transaction;
020: import org.jpox.StateManager;
021: import org.jpox.state.LifeCycleState;
022:
023: /**
024: * This class represents TransientDirty state specific state transitions as
025: * requested by StateManagerImpl. This state is the result of a wrie operation
026: * on a TransientClean instance
027: *
028: * @version $Revision: 1.3 $
029: */
030: class TransientDirty extends LifeCycleState {
031: /**
032: * Constructor
033: **/
034: TransientDirty() {
035: // these flags are set only in the constructor
036: // and shouldn't be changed afterwards
037: // (cannot make them final since they are declared in superclass
038: // but their values are specific to subclasses)
039: isPersistent = false;
040: isTransactional = true;
041: isDirty = true;
042: isNew = false;
043: isDeleted = false;
044:
045: stateType = T_DIRTY;
046: }
047:
048: /**
049: * @param sm The StateManager
050: * @param useFetchPlan to make transient the fields in the fetch plan
051: * @return new LifeCycle state.
052: * @see LifeCycleState#transitionMakeTransient(StateManager sm)
053: **/
054: public LifeCycleState transitionMakeTransient(StateManager sm,
055: boolean useFetchPlan, boolean detachAllOnCommit) {
056: return this ;
057: }
058:
059: /**
060: * @param sm The StateManager
061: * @see LifeCycleState#transitionMakePersistent(StateManager sm)
062: */
063: public LifeCycleState transitionMakePersistent(StateManager sm) {
064: sm.registerTransactional();
065: return changeState(sm, P_NEW);
066: }
067:
068: /**
069: * Method to transition to commit state.
070: * @param sm StateManager.
071: * @param tx the Transaction been committed.
072: * @return new LifeCycle state.
073: **/
074: public LifeCycleState transitionCommit(StateManager sm,
075: Transaction tx) {
076: sm.clearSavedFields();
077: return changeTransientState(sm, T_CLEAN);
078: }
079:
080: /**
081: * @param sm The StateManager
082: * @param tx The Transaction
083: * @see LifeCycleState#transitionRollback(StateManagerImpl sm,Transaction tx)
084: */
085: public LifeCycleState transitionRollback(StateManager sm,
086: Transaction tx) {
087: if (tx.getRestoreValues() || sm.isRestoreValues()) {
088: sm.restoreFields();
089: } // else do nothing.
090: return changeTransientState(sm, T_CLEAN);
091: }
092:
093: /**
094: * Method to return a string version of this object.
095: * @return The string "T_DIRTY".
096: **/
097: public String toString() {
098: return "T_DIRTY";
099: }
100: }
|