public List<FeatureId> addFeatures(FeatureCollection<SimpleFeatureType, SimpleFeature> collection) throws IOException { List<FeatureId> addedFids = new LinkedList<FeatureId>(); String typeName = getSchema().getTypeName(); SimpleFeature feature = null; SimpleFeature newFeature; FeatureWriter<SimpleFeatureType, SimpleFeature> writer = getDataStore().getFeatureWriterAppend(typeName, getTransaction()); Iterator iterator = collection.iterator(); try { while (iterator.hasNext()) { feature = (SimpleFeature) iterator.next(); newFeature = (SimpleFeature) writer.next(); try { newFeature.setAttributes(feature.getAttributes()); } catch (Exception writeProblem) { throw new DataSourceException( "Could not create " + typeName + " out of provided feature: " + feature.getID(), writeProblem); } // preserve the FID, it could come from another node ((MutableFIDFeature) newFeature).setID(feature.getID()); writer.write(); addedFids.add(newFeature.getIdentifier()); } } finally { collection.close(iterator); writer.close(); } return addedFids; }
public List<FeatureId> addFeatures(FeatureCollection<SimpleFeatureType, SimpleFeature> collection) throws IOException { List<FeatureId> addedFids = new LinkedList<FeatureId>(); String typeName = getSchema().getTypeName(); SimpleFeature feature = null; SimpleFeature newFeature; FeatureWriter<SimpleFeatureType, SimpleFeature> writer = getDataStore().getFeatureWriterAppend(typeName, getTransaction()); Iterator iterator = collection.iterator(); try { while (iterator.hasNext()) { try { feature = (SimpleFeature) iterator.next(); } catch (Exception e) { throw new DataSourceException("Could not add Features, problem with provided reader", e); } newFeature = (SimpleFeature) writer.next(); try { // JD: we may have a case that the source feature type does not // match exactly the target feature type, so build attributes // based oin target // newFeature.setAttributes(feature.getAttributes(null)); Object[] attributes = new Object[newFeature.getAttributeCount()]; for (int i = 0; i < attributes.length; i++) { AttributeDescriptor type = newFeature.getFeatureType().getDescriptor(i); attributes[i] = feature.getAttribute(type.getLocalName()); } newFeature.setAttributes(attributes); } catch (IllegalAttributeException writeProblem) { throw new DataSourceException( "Could not create " + typeName + " out of provided feature: " + feature.getID(), writeProblem); } writer.write(); addedFids.add(newFeature.getIdentifier()); } } finally { collection.close(iterator); writer.close(); } return addedFids; }
/** * Replace with contents of reader. * * <p>Equivelent to: * * <pre><code> * FeatureWriter<SimpleFeatureType, SimpleFeature> writer = dataStore.getFeatureWriter( typeName, false, transaction ); * Feature feature, newFeature; * while( writer.hasNext() ){ * feature = writer.next(); * writer.remove(); * } * while( reader.hasNext() ){ * newFeature = reader.next(); * feature = writer.next(); * newFeature.setAttributes( feature.getAttributes( null ) ); * writer.write(); * } * reader.close(); * writer.close(); * </code> * </pre> * * <p>Subclasses may override this method to perform the appropriate optimization for this result. * * @param reader Contents to replace with * @throws IOException */ public void setFeatures(FeatureReader<SimpleFeatureType, SimpleFeature> reader) throws IOException { String typeName = getSchema().getTypeName(); FeatureWriter<SimpleFeatureType, SimpleFeature> writer = getDataStore().getFeatureWriter(typeName, getTransaction()); SimpleFeature feature; SimpleFeature newFeature; try { while (writer.hasNext()) { feature = writer.next(); LOGGER.finer("removing feature " + feature); writer.remove(); } while (reader.hasNext()) { try { feature = reader.next(); } catch (Exception readProblem) { throw new DataSourceException( "Could not add Features, problem with provided reader", readProblem); } newFeature = (SimpleFeature) writer.next(); try { newFeature.setAttributes(feature.getAttributes()); } catch (IllegalAttributeException writeProblem) { throw new DataSourceException( "Could not create " + typeName + " out of provided feature: " + feature.getID(), writeProblem); } LOGGER.finer("writing feature " + newFeature); writer.write(); } } finally { reader.close(); writer.close(); } }
/** * Add Features from reader to this FeatureStore. * * <p>Equivelent to: * * <pre><code> * Set set = new HashSet(); * FeatureWriter<SimpleFeatureType, SimpleFeature> writer = dataStore.getFeatureWriter( typeName, true, transaction ); * Featrue feature, newFeature; * while( reader.hasNext() ){ * feature = reader.next(); * newFeature = writer.next(); * newFeature.setAttributes( feature.getAttribtues( null ) ); * writer.write(); * set.add( newfeature.getID() ); * } * reader.close(); * writer.close(); * * return set; * </code> * </pre> * * <p>(If you don't have a FeatureReader<SimpleFeatureType, SimpleFeature> handy * DataUtilities.reader() may be able to help out) * * <p>Subclasses may override this method to perform the appropriate optimization for this result. * * @param reader * @return The Set of FeatureIDs added * @throws IOException * @see org.geotools.data.FeatureStore#addFeatures(org.geotools.data.FeatureReader) */ public Set addFeatures(FeatureReader<SimpleFeatureType, SimpleFeature> reader) throws IOException { Set addedFids = new HashSet(); String typeName = getSchema().getTypeName(); SimpleFeature feature = null; SimpleFeature newFeature; FeatureWriter<SimpleFeatureType, SimpleFeature> writer = getDataStore().getFeatureWriterAppend(typeName, getTransaction()); try { while (reader.hasNext()) { try { feature = reader.next(); } catch (Exception e) { throw new DataSourceException("Could not add Features, problem with provided reader", e); } newFeature = (SimpleFeature) writer.next(); try { newFeature.setAttributes(feature.getAttributes()); } catch (IllegalAttributeException writeProblem) { throw new DataSourceException( "Could not create " + typeName + " out of provided feature: " + feature.getID(), writeProblem); } writer.write(); addedFids.add(newFeature.getID()); } } finally { reader.close(); writer.close(); } return addedFids; }