001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/io/datastore/DatastoreTransaction.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 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: apoth $
068: *
069: * @version $Revision: 9342 $, $Date: 2007-12-27 04:32:57 -0800 (Thu, 27 Dec 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() throws DatastoreException;
086:
087: /**
088: * Aborts the changes that have been performed in this transaction.
089: *
090: * @throws DatastoreException
091: */
092: public void rollback() throws DatastoreException;
093:
094: /**
095: * Releases the transaction instance so other clients may acquire a transaction (and underlying resources, such as
096: * JDBCConnections can be cleaned up).
097: *
098: * @throws DatastoreException
099: */
100: public void release() throws DatastoreException;
101:
102: /**
103: * Inserts the given feature instances into the datastore.
104: * <p>
105: * Please note that the features to be inserted must have suitable feature ids at this point.
106: *
107: * @param features
108: * @return feature ids of the inserted (root) features
109: * @throws DatastoreException
110: * @see FeatureIdAssigner
111: */
112: public List<FeatureId> performInsert(List<Feature> features)
113: throws DatastoreException;
114:
115: /**
116: * Performs an update operation against the datastore.
117: *
118: * @param mappedFeatureType
119: * feature type that is to be updated
120: * @param replacementProps
121: * properties and their replacement values
122: * @param filter
123: * selects the feature instances that are to be updated
124: * @param lockId
125: * optional id of associated lock (may be null)
126: * @return number of updated feature instances
127: * @throws DatastoreException
128: */
129: public int performUpdate(MappedFeatureType mappedFeatureType,
130: Map<PropertyPath, FeatureProperty> replacementProps,
131: Filter filter, String lockId) throws DatastoreException;
132:
133: /**
134: * Performs an update operation against the datastore.
135: * <p>
136: * The filter is expected to match exactly one feature which will be replaced by the specified replacement feature.
137: *
138: * @param mappedFeatureType
139: * feature type that is to be updated
140: * @param replacementFeature
141: * feature instance that will replace the selected feature
142: * @param filter
143: * selects the single feature instances that is to be replaced
144: * @param lockId
145: * optional id of associated lock (may be null)
146: * @return number of updated feature instances (must be 0 or 1)
147: * @throws DatastoreException
148: */
149: public int performUpdate(MappedFeatureType mappedFeatureType,
150: Feature replacementFeature, Filter filter, String lockId)
151: throws DatastoreException;
152:
153: /**
154: * Deletes the features from the datastore that are matched by the given filter and type.
155: *
156: * @param mappedFeatureType
157: * @param filter
158: * @param lockId
159: * optional id of associated lock (may be null)
160: * @return number of deleted feature instances
161: * @throws DatastoreException
162: */
163: public int performDelete(MappedFeatureType mappedFeatureType,
164: Filter filter, String lockId) throws DatastoreException;
165:
166: /**
167: * Performs a native operation against the datastore.
168: *
169: * @param operation
170: * operation to perform
171: * @return int
172: * @throws DatastoreException
173: */
174: public int performNative(Native operation)
175: throws DatastoreException;
176: }
|