001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/io/datastore/schema/MappedGMLId.java $
002 /*----------------------------------------------------------------------------
003 This file is part of deegree, http://deegree.org/
004 Copyright (C) 2001-2009 by:
005 Department of Geography, University of Bonn
006 and
007 lat/lon GmbH
008
009 This library is free software; you can redistribute it and/or modify it under
010 the terms of the GNU Lesser General Public License as published by the Free
011 Software Foundation; either version 2.1 of the License, or (at your option)
012 any later version.
013 This library is distributed in the hope that it will be useful, but WITHOUT
014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016 details.
017 You should have received a copy of the GNU Lesser General Public License
018 along with this library; if not, write to the Free Software Foundation, Inc.,
019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020
021 Contact information:
022
023 lat/lon GmbH
024 Aennchenstr. 19, 53177 Bonn
025 Germany
026 http://lat-lon.de/
027
028 Department of Geography, University of Bonn
029 Prof. Dr. Klaus Greve
030 Postfach 1147, 53001 Bonn
031 Germany
032 http://www.geographie.uni-bonn.de/deegree/
033
034 e-mail: info@deegree.org
035 ----------------------------------------------------------------------------*/
036 package org.deegree.io.datastore.schema;
037
038 import org.deegree.io.datastore.DatastoreTransaction;
039 import org.deegree.io.datastore.FeatureId;
040 import org.deegree.io.datastore.idgenerator.IdGenerationException;
041 import org.deegree.io.datastore.idgenerator.IdGenerator;
042 import org.deegree.io.datastore.schema.content.MappingField;
043
044 /**
045 * Defines how values for "gml:id" attributes for a certain feature type are generated and
046 * which columns are used to store it.
047 *
048 * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider </a>
049 * @author last edited by: $Author: mschneider $
050 *
051 * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $
052 */
053 public class MappedGMLId {
054
055 /**
056 * Used to represent the 'identityPart' information.
057 */
058 public static enum IDPART_INFO {
059
060 /**
061 * No 'identityPart' information available.
062 */
063 noIDInfo,
064
065 /**
066 * Feature id determines feature identity solely.
067 */
068 isIDPart,
069
070 /**
071 * Feature id is not part of the feature identity -> property values determine if
072 * two features are 'equal'.
073 */
074 notIDPart
075 }
076
077 private String prefix;
078
079 private MappingField[] idFields;
080
081 private String separator;
082
083 private IdGenerator idGenerator;
084
085 private IDPART_INFO idPartInfo;
086
087 private boolean isIdentityPart;
088
089 /**
090 * Creates a new instance of <code>MappedGMLId</code> from the given parameters.
091 *
092 * @param prefix
093 * @param separator
094 * @param idFields
095 * @param idGenerator
096 * @param idPartInfo
097 */
098 public MappedGMLId( String prefix, String separator, MappingField[] idFields,
099 IdGenerator idGenerator, IDPART_INFO idPartInfo ) {
100 this.prefix = prefix;
101 this.separator = separator;
102 this.idFields = idFields;
103 this.idGenerator = idGenerator;
104 this.idPartInfo = idPartInfo;
105 if (this.idPartInfo == IDPART_INFO.isIDPart) {
106 setIdentityPart(true);
107 }
108 }
109
110 /**
111 * Returns the number of <code>MappingField</code>s that constitute the "gml:id".
112 *
113 * @return the number of MappingFields
114 */
115 public int getKeySize() {
116 return this.idFields.length;
117 }
118
119 /**
120 * Returns the <code>MappingField</code>s that are used to build the "gml:id".
121 *
122 * @return the id fields
123 */
124 public MappingField[] getIdFields() {
125 return this.idFields;
126 }
127
128 /**
129 * Returns the prefix.
130 *
131 * @return the prefix
132 */
133 public String getPrefix() {
134 return this.prefix;
135 }
136
137 /**
138 * Returns the separator.
139 *
140 * @return the separator
141 */
142 public String getSeparator() {
143 return separator;
144 }
145
146 /**
147 * Returns whether the configuration explicitly defines that the id has to be considered when
148 * two features are checked for equality.
149 *
150 * @return 'identityPart' information
151 */
152 public IDPART_INFO getIdPartInfo () {
153 return this.idPartInfo;
154 }
155
156 /**
157 * Returns whether the id has to be considered when two features are checked for equality.
158 *
159 * @return true, if the feature id is part of the feature's identity
160 */
161 public boolean isIdentityPart () {
162 return this.isIdentityPart;
163 }
164
165 /**
166 * Sets the 'identiyPart' information.
167 *
168 * @param isIdentityPart
169 * set to true, if feature id should determine feature's identity solely
170 */
171 public void setIdentityPart (boolean isIdentityPart) {
172 this.isIdentityPart = isIdentityPart;
173 }
174
175 /**
176 * TODO remove this. Just a quick hack to make ParentIdGenerator work...
177 *
178 * @return IdGenerator that is used to generate new feature ids
179 */
180 public IdGenerator getIdGenerator () {
181 return this.idGenerator;
182 }
183
184 /**
185 * Generates a new and unique feature identifier.
186 *
187 * @param ft
188 * @param ta
189 * @return a new and unique feature identifier.
190 * @throws IdGenerationException
191 */
192 FeatureId generateFid (MappedFeatureType ft, DatastoreTransaction ta) throws IdGenerationException {
193 return this.idGenerator.getNewId(ft, ta);
194 }
195 }