001    package org.apache.ojb.odmg.states;
002    
003    /* Copyright 2002-2005 The Apache Software Foundation
004     *
005     * Licensed under the Apache License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    import org.apache.ojb.broker.PersistenceBrokerException;
019    import org.apache.ojb.odmg.ObjectEnvelope;
020    
021    /**
022     * this state represents old objects which have been marked for deletion during tx.
023     */
024    public class StateOldDelete extends ModificationState
025    {
026        private static StateOldDelete _instance = new StateOldDelete();
027    
028        /**
029         * private constructor: use singleton instance
030         */
031        private StateOldDelete()
032        {
033        }
034    
035        /**
036         * perform a checkpoint, i.e. perform updates on underlying db but keep locks on objects
037         */
038        public static StateOldDelete getInstance()
039        {
040            return _instance;
041        }
042    
043        /**
044         * return resulting state after marking clean
045         */
046        public ModificationState markClean()
047        {
048            return StateOldClean.getInstance();
049        }
050    
051        /**
052         * return resulting state after marking delete
053         */
054        public ModificationState markDelete()
055        {
056            return this;
057        }
058    
059        /**
060         * return resulting state after marking dirty
061         */
062        public ModificationState markDirty()
063        {
064            return this;
065        }
066    
067        /**
068         * return resulting state after marking new
069         */
070        public ModificationState markNew()
071        {
072            return StateOldDirty.getInstance();
073        }
074    
075        /**
076         * return resulting state after marking old
077         */
078        public ModificationState markOld()
079        {
080            return this;
081        }
082    
083        /**
084         * returns true is this state requires DELETE
085         * @return boolean
086         */
087        public boolean needsDelete()
088        {
089            return true;
090        }
091    
092        /**
093         * rollback the transaction
094         */
095        public void checkpoint(ObjectEnvelope mod)
096                throws org.apache.ojb.broker.PersistenceBrokerException
097        {
098            mod.doDelete();
099            mod.setModificationState(StateTransient.getInstance());
100        }
101    
102        /**
103         * commit the associated transaction
104         */
105        public void commit(ObjectEnvelope mod) throws PersistenceBrokerException
106        {
107            mod.doDelete();
108            mod.setModificationState(StateTransient.getInstance());
109        }
110    
111        /**
112         *
113         */
114        public void rollback(ObjectEnvelope mod)
115        {
116            mod.doEvictFromCache();
117        }
118    }