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.odmg.ObjectEnvelope;
019    import org.apache.ojb.broker.PersistenceBrokerException;
020    
021    /**
022     * This state represents new objects which have been altered during tx.
023     */
024    public class StateNewDirty extends ModificationState
025    {
026    
027        /**
028         * return resulting state after marking clean
029         */
030        public ModificationState markClean()
031        {
032            return StateNewClean.getInstance();
033        }
034    
035        /**
036         * return resulting state after marking delete
037         */
038        public ModificationState markDelete()
039        {
040            return StateNewDelete.getInstance();
041        }
042    
043        /**
044         * return resulting state after marking dirty
045         */
046        public ModificationState markDirty()
047        {
048            return this;
049        }
050    
051        /**
052         * return resulting state after marking new
053         */
054        public ModificationState markNew()
055        {
056            return this;
057        }
058    
059        /**
060         * return resulting state after marking old
061         */
062        public ModificationState markOld()
063        {
064            return StateOldDirty.getInstance();
065        }
066    
067        private static StateNewDirty _instance = new StateNewDirty();
068    
069        /**
070         * private constructor: use singleton instance.
071         */
072        private StateNewDirty()
073        {
074        }
075    
076        /**
077         * perform a checkpoint, i.e. perform updates on underlying db but keep locks on objects
078         */
079        public static StateNewDirty getInstance()
080        {
081            return _instance;
082        }
083    
084        /**
085         * object is new, thus we need an INSERT to store it
086         */
087        public boolean needsInsert()
088        {
089            return true;
090        }
091    
092        /**
093         * checkpoint the ObjectModification
094         */
095        public void checkpoint(ObjectEnvelope mod) throws PersistenceBrokerException
096        {
097            mod.doInsert();
098            mod.setModificationState(StateOldClean.getInstance());
099        }
100    
101        /**
102         * commit the associated transaction
103         */
104        public void commit(ObjectEnvelope mod) throws PersistenceBrokerException
105        {
106            mod.doInsert();
107            mod.setModificationState(StateOldClean.getInstance());
108        }
109    
110        /**
111         * rollback
112         *
113         */
114        public void rollback(ObjectEnvelope mod)
115        {
116            mod.doEvictFromCache();
117        }
118    
119    }