PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/projects/geotools-9.2/modules/unsupported/efeature/src/main/java/org/geotools/data/efeature/internal/ESimpleFeatureDelegate.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 361 lines | 231 code | 55 blank | 75 comment | 6 complexity | 86ffc50d0cf4068264c4ebd82403ed8b MD5 | raw file
  1. /*
  2. * GeoTools - The Open Source Java GIS Toolkit
  3. * http://geotools.org
  4. *
  5. * (C) 2002-2011, Open Source Geospatial Foundation (OSGeo)
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation;
  10. * version 2.1 of the License.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. */
  17. package org.geotools.data.efeature.internal;
  18. import java.util.Collection;
  19. import java.util.List;
  20. import java.util.Map;
  21. import org.eclipse.emf.ecore.EObject;
  22. import org.eclipse.emf.ecore.InternalEObject;
  23. import org.geotools.data.Transaction;
  24. import org.geotools.data.efeature.EFeature;
  25. import org.geotools.data.efeature.EFeatureHints;
  26. import org.geotools.data.efeature.EFeatureInfo;
  27. import org.geotools.data.efeature.EFeatureUtils;
  28. import org.geotools.data.efeature.ESimpleFeature;
  29. import org.opengis.feature.Feature;
  30. import org.opengis.feature.GeometryAttribute;
  31. import org.opengis.feature.IllegalAttributeException;
  32. import org.opengis.feature.Property;
  33. import org.opengis.feature.simple.SimpleFeature;
  34. import org.opengis.feature.simple.SimpleFeatureType;
  35. import org.opengis.feature.type.AttributeDescriptor;
  36. import org.opengis.feature.type.Name;
  37. import org.opengis.filter.identity.FeatureId;
  38. import org.opengis.geometry.BoundingBox;
  39. /**
  40. * This class implements {@link ESimpleFeature} by delegating
  41. * to a {@link Feature} instance.
  42. * <p>
  43. * The references to delegate objects are weak, allowing
  44. * the them to be garbage collected when needed.
  45. * </p>
  46. *
  47. * @author kengu - 28. mai 2011
  48. *
  49. *
  50. * @source $URL$
  51. */
  52. public class ESimpleFeatureDelegate implements ESimpleFeature {
  53. private EObject eObject;
  54. private SimpleFeature feature;
  55. private EFeatureInfo eStructure;
  56. private EFeatureHints eHints;
  57. // -----------------------------------------------------
  58. // Constructors
  59. // -----------------------------------------------------
  60. /**
  61. * This constructor creates a {@link ESimpleFeature} instance that
  62. * delegates to given objects.
  63. */
  64. public ESimpleFeatureDelegate(EFeatureInfo eStructure, EObject eObject, SimpleFeature feature, EFeatureHints eHints) {
  65. this.feature = feature;
  66. this.eObject = eObject;
  67. this.eStructure = eStructure;
  68. this.eHints = eHints == null ? new EFeatureHints(eStructure.eHints()) : eHints;
  69. }
  70. // -----------------------------------------------------
  71. // ESimpleFeature implementation
  72. // -----------------------------------------------------
  73. @Override
  74. public EObject eObject() {
  75. if(eObject instanceof EFeatureDelegate) {
  76. return ((EFeatureDelegate)eObject).eImpl;
  77. }
  78. return eObject;
  79. }
  80. @Override
  81. public EFeature eFeature() {
  82. //
  83. // Return delegate if not a EFeature implementation
  84. //
  85. if(eObject instanceof EFeature) {
  86. return (EFeature)eObject();
  87. }
  88. return new EFeatureDelegate(eStructure, (InternalEObject)eObject, false, eHints);
  89. }
  90. @Override
  91. public boolean isDetached() {
  92. return eHints.eValuesDetached();
  93. }
  94. @Override
  95. public boolean isSingleton() {
  96. return eHints.eSingletonFeatures();
  97. }
  98. @Override
  99. public List<Object> read() throws IllegalStateException {
  100. return read(Transaction.AUTO_COMMIT);
  101. }
  102. @Override
  103. public List<Object> read(Transaction transaction) throws IllegalStateException {
  104. //
  105. // Decide if feature values is allowed to be updated from backing store
  106. //
  107. if(!isDetached()) {
  108. throw new IllegalStateException("ESimpleFeature "
  109. + getType().getTypeName() + " is not detached");
  110. }
  111. //
  112. // Read values from eImpl()
  113. //
  114. List<Object> eValues = EFeatureUtils.eGetFeatureValues(eStructure, eObject, transaction);
  115. //
  116. // Update feature values
  117. //
  118. feature.setAttributes(eValues);
  119. //
  120. // Finished
  121. //
  122. return eValues;
  123. }
  124. @Override
  125. public List<Object> write() throws IllegalStateException {
  126. return write(Transaction.AUTO_COMMIT);
  127. }
  128. @Override
  129. public List<Object> write(Transaction transaction) throws IllegalStateException {
  130. //
  131. // Decide if feature values is allowed to be updated from backing store
  132. //
  133. if(!isDetached()) {
  134. throw new IllegalStateException("ESimpleFeature "
  135. + getType().getTypeName() + " is not detached");
  136. }
  137. //
  138. // Get feature values
  139. //
  140. List<Object> eValues = feature.getAttributes();
  141. //
  142. // Write values to eImpl()
  143. //
  144. EFeatureUtils.eSetFeatureValues(eStructure, eObject, eValues, transaction);
  145. //
  146. // Finished
  147. //
  148. return eValues;
  149. }
  150. @Override
  151. public boolean isReleased() {
  152. return eObject == null;
  153. }
  154. @Override
  155. public void release() {
  156. eObject = null;
  157. }
  158. // -----------------------------------------------------
  159. // SimpleFeature implementation
  160. // -----------------------------------------------------
  161. @Override
  162. public FeatureId getIdentifier() {
  163. return getFeature().getIdentifier();
  164. }
  165. @Override
  166. public AttributeDescriptor getDescriptor() {
  167. return getFeature().getDescriptor();
  168. }
  169. @Override
  170. public BoundingBox getBounds() {
  171. return getFeature().getBounds();
  172. }
  173. @Override
  174. public String getID() {
  175. return getFeature().getID();
  176. }
  177. @Override
  178. public SimpleFeatureType getType() {
  179. return getFeature().getType();
  180. }
  181. @Override
  182. public SimpleFeatureType getFeatureType() {
  183. return getFeature().getFeatureType();
  184. }
  185. @Override
  186. public void setValue(Object newValue) {
  187. getFeature().setValue(newValue);
  188. }
  189. @Override
  190. public List<Object> getAttributes() {
  191. return getFeature().getAttributes();
  192. }
  193. @Override
  194. public GeometryAttribute getDefaultGeometryProperty() {
  195. return getFeature().getDefaultGeometryProperty();
  196. }
  197. @Override
  198. public void setValue(Collection<Property> values) {
  199. getFeature().setValue(values);
  200. }
  201. @Override
  202. public void setAttributes(List<Object> values) {
  203. getFeature().setAttributes(values);
  204. }
  205. @Override
  206. public void setDefaultGeometryProperty(GeometryAttribute geometryAttribute) {
  207. getFeature().setDefaultGeometryProperty(geometryAttribute);
  208. }
  209. @Override
  210. public Collection<? extends Property> getValue() {
  211. return getFeature().getValue();
  212. }
  213. @Override
  214. public Collection<Property> getProperties(Name name) {
  215. return getFeature().getProperties(name);
  216. }
  217. @Override
  218. public void setAttributes(Object[] values) {
  219. getFeature().setAttributes(values);
  220. }
  221. @Override
  222. public Name getName() {
  223. return getFeature().getName();
  224. }
  225. @Override
  226. public Property getProperty(Name name) {
  227. return getFeature().getProperty(name);
  228. }
  229. @Override
  230. public Object getAttribute(String name) {
  231. return getFeature().getAttribute(name);
  232. }
  233. @Override
  234. public boolean isNillable() {
  235. return getFeature().isNillable();
  236. }
  237. @Override
  238. public void setAttribute(String name, Object value) {
  239. getFeature().setAttribute(name, value);
  240. }
  241. @Override
  242. public Map<Object, Object> getUserData() {
  243. return getFeature().getUserData();
  244. }
  245. @Override
  246. public Object getAttribute(Name name) {
  247. return getFeature().getAttribute(name);
  248. }
  249. @Override
  250. public Collection<Property> getProperties(String name) {
  251. return getFeature().getProperties(name);
  252. }
  253. @Override
  254. public void setAttribute(Name name, Object value) {
  255. getFeature().setAttribute(name, value);
  256. }
  257. @Override
  258. public Collection<Property> getProperties() {
  259. return getFeature().getProperties();
  260. }
  261. @Override
  262. public Property getProperty(String name) {
  263. return getFeature().getProperty(name);
  264. }
  265. @Override
  266. public Object getAttribute(int index) throws IndexOutOfBoundsException {
  267. return getFeature().getAttribute(index);
  268. }
  269. @Override
  270. public void setAttribute(int index, Object value) throws IndexOutOfBoundsException {
  271. getFeature().setAttribute(index, value);
  272. }
  273. @Override
  274. public void validate() throws IllegalAttributeException {
  275. getFeature().validate();
  276. }
  277. @Override
  278. public int getAttributeCount() {
  279. return getFeature().getAttributeCount();
  280. }
  281. @Override
  282. public Object getDefaultGeometry() {
  283. return getFeature().getDefaultGeometry();
  284. }
  285. @Override
  286. public void setDefaultGeometry(Object geometry) {
  287. getFeature().setDefaultGeometry(geometry);
  288. }
  289. // -----------------------------------------------------
  290. // Object equality implementation
  291. // -----------------------------------------------------
  292. @Override
  293. public int hashCode() {
  294. return feature.hashCode();
  295. }
  296. @Override
  297. public boolean equals(Object obj) {
  298. return feature.equals(obj);
  299. }
  300. // -----------------------------------------------------
  301. // Helper methods
  302. // -----------------------------------------------------
  303. protected SimpleFeature getFeature() {
  304. return feature;
  305. }
  306. }