001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/io/datastore/DatastoreTransaction.java $
002 /*---------------- FILE HEADER ------------------------------------------
003
004 This file is part of deegree.
005 Copyright (C) 2001-2006 by:
006 EXSE, Department of Geography, University of Bonn
007 http://www.giub.uni-bonn.de/deegree/
008 lat/lon GmbH
009 http://www.lat-lon.de
010
011 This library is free software; you can redistribute it and/or
012 modify it under the terms of the GNU Lesser General Public
013 License as published by the Free Software Foundation; either
014 version 2.1 of the License, or (at your option) any later version.
015
016 This library is distributed in the hope that it will be useful,
017 but WITHOUT ANY WARRANTY; without even the implied warranty of
018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019 Lesser General Public License for more details.
020
021 You should have received a copy of the GNU Lesser General Public
022 License along with this library; if not, write to the Free Software
023 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024
025 Contact:
026
027 Andreas Poth
028 lat/lon GmbH
029 Aennchenstraße 19
030 53177 Bonn
031 Germany
032 E-Mail: poth@lat-lon.de
033
034 Prof. Dr. Klaus Greve
035 Department of Geography
036 University of Bonn
037 Meckenheimer Allee 166
038 53115 Bonn
039 Germany
040 E-Mail: greve@giub.uni-bonn.de
041
042 ---------------------------------------------------------------------------*/
043 package org.deegree.io.datastore;
044
045 import java.util.List;
046 import java.util.Map;
047
048 import org.deegree.io.datastore.idgenerator.FeatureIdAssigner;
049 import org.deegree.io.datastore.schema.MappedFeatureType;
050 import org.deegree.model.feature.Feature;
051 import org.deegree.model.feature.FeatureProperty;
052 import org.deegree.model.filterencoding.Filter;
053 import org.deegree.ogcbase.PropertyPath;
054 import org.deegree.ogcwebservices.wfs.operation.transaction.Delete;
055 import org.deegree.ogcwebservices.wfs.operation.transaction.Insert;
056 import org.deegree.ogcwebservices.wfs.operation.transaction.Native;
057 import org.deegree.ogcwebservices.wfs.operation.transaction.TransactionOperation;
058 import org.deegree.ogcwebservices.wfs.operation.transaction.Update;
059
060 /**
061 * Handler for {@link TransactionOperation}s ({@link Insert}, {@link Update}, {@link Delete}, {@link Native}). One
062 * instance is bound to exactly one {@link Datastore} instance (and one {@link Datastore} has no more than one active
063 * <code>DatastoreTransaction</code> at a time.
064 *
065 * @author <a href="mailto:deshmukh@lat-lon.de">Anup Deshmukh</a>
066 * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider</a>
067 * @author last edited by: $Author: mschneider $
068 *
069 * @version $Revision: 7144 $, $Date: 2007-05-15 16:25:35 +0200 (Di, 15 Mai 2007) $
070 */
071 public interface DatastoreTransaction {
072
073 /**
074 * Returns the associated {@link Datastore} instance.
075 *
076 * @return the associated Datastore instance
077 */
078 public Datastore getDatastore();
079
080 /**
081 * Makes the changes persistent that have been performed in this transaction.
082 *
083 * @throws DatastoreException
084 */
085 public void commit()
086 throws DatastoreException;
087
088 /**
089 * Aborts the changes that have been performed in this transaction.
090 *
091 * @throws DatastoreException
092 */
093 public void rollback()
094 throws DatastoreException;
095
096 /**
097 * Releases the transaction instance so other clients may acquire a transaction (and underlying resources, such as
098 * JDBCConnections can be cleaned up).
099 *
100 * @throws DatastoreException
101 */
102 public void release()
103 throws DatastoreException;
104
105 /**
106 * Inserts the given feature instances into the datastore.
107 * <p>
108 * Please note that the features to be inserted must have suitable feature ids at this point.
109 *
110 * @param features
111 * @return feature ids of the inserted (root) features
112 * @throws DatastoreException
113 * @see FeatureIdAssigner
114 */
115 public List<FeatureId> performInsert( List<Feature> features )
116 throws DatastoreException;
117
118 /**
119 * Performs an update operation against the datastore.
120 *
121 * @param mappedFeatureType
122 * feature type that is to be updated
123 * @param replacementProps
124 * properties and their replacement values
125 * @param filter
126 * selects the feature instances that are to be updated
127 * @param lockId
128 * optional id of associated lock (may be null)
129 * @return number of updated feature instances
130 * @throws DatastoreException
131 */
132 public int performUpdate( MappedFeatureType mappedFeatureType, Map<PropertyPath, FeatureProperty> replacementProps,
133 Filter filter, String lockId )
134 throws DatastoreException;
135
136 /**
137 * Performs an update operation against the datastore.
138 * <p>
139 * The filter is expected to match exactly one feature which will be replaced by the specified replacement feature.
140 *
141 * @param mappedFeatureType
142 * feature type that is to be updated
143 * @param replacementFeature
144 * feature instance that will replace the selected feature
145 * @param filter
146 * selects the single feature instances that is to be replaced
147 * @param lockId
148 * optional id of associated lock (may be null)
149 * @return number of updated feature instances (must be 0 or 1)
150 * @throws DatastoreException
151 */
152 public int performUpdate( MappedFeatureType mappedFeatureType, Feature replacementFeature, Filter filter,
153 String lockId )
154 throws DatastoreException;
155
156 /**
157 * Deletes the features from the datastore that are matched by the given filter and type.
158 *
159 * @param mappedFeatureType
160 * @param filter
161 * @param lockId
162 * optional id of associated lock (may be null)
163 * @return number of deleted feature instances
164 * @throws DatastoreException
165 */
166 public int performDelete( MappedFeatureType mappedFeatureType, Filter filter, String lockId )
167 throws DatastoreException;
168
169 /**
170 * Performs a native operation against the datastore.
171 *
172 * @param operation
173 * operation to perform
174 * @return int
175 * @throws DatastoreException
176 */
177 public int performNative( Native operation )
178 throws DatastoreException;
179 }