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 }