@Override public RevFeature apply(ResultSet rs) { builder.reset(); try { for (String attName : attNames) { Object value = rs.getObject(attName); if (attName.equals(geometryAttribute) && value != null) { byte[] bytes = (byte[]) value; value = new GeoPkgGeomReader(bytes).get(); } builder.set(attName, value); } SimpleFeature feature = builder.buildFeature("fakeId"); return RevFeatureBuilder.build(feature); } catch (SQLException | IOException e) { throw Throwables.propagate(e); } } }
public static RevFeature readFeature(ObjectId id, DataInput in) throws IOException { final int count = in.readInt(); final RevFeatureBuilder builder = RevFeatureBuilder.builder(); for (int i = 0; i < count; i++) { final byte fieldTag = in.readByte(); final FieldType fieldType = FieldType.valueOf(fieldTag); Object value = DataStreamValueSerializerV1.INSTANCE.decode(fieldType, in); builder.addValue(value); } RevFeature built = builder.build(); return built; }
/** * Constructs a new {@link RevFeature} from the provided {@link Feature}. * * @param feature the feature to build from * @return the newly constructed RevFeature */ public static RevFeature build(Feature feature) { if (feature == null) { throw new IllegalStateException("No feature set"); } RevFeatureBuilder builder = RevFeatureBuilder.builder(); if (feature instanceof SimpleFeature) { // Just SimpleFeature sf = (SimpleFeature) feature; int attributeCount = sf.getAttributeCount(); for (int i = 0; i < attributeCount; i++) { builder.addValue(sf.getAttribute(i)); } } else { Collection<Property> props = feature.getProperties(); props.forEach((p) -> builder.addProperty(p)); } return builder.build(); } }
public RevFeature readFeature(@Nullable ObjectId id, DataInput in) throws IOException { final int count = readUnsignedVarInt(in); final RevFeatureBuilder builder = RevFeatureBuilder.builder(); for (int i = 0; i < count; i++) { final byte fieldTag = in.readByte(); final FieldType fieldType = FieldType.valueOf(fieldTag); Object value = valueEncoder.decode(fieldType, in); builder.addValueNoCopy(value); } RevFeature built = id == null ? builder.build() : builder.build(id); return built; }
/** * Only for testing: allows to return a {@link RevFeature} with the specified id instead of the * one resulting from {@link HashObject} */ public static RevFeature featureForceId(ObjectId forceId, Object... rawValues) { RevFeatureBuilder builder = RevFeatureBuilder.builder().addAll(rawValues); RevFeature revFeature = builder.build(forceId); return revFeature; }
public static RevFeature createPointFeature(double x, double y, Object... extraAttribues) { RevFeatureBuilder builder = RevFeatureBuilder.builder(); builder.addValue(gf.createPoint(new Coordinate(x, y))); if (extraAttribues != null) { builder.addAll(Lists.newArrayList(extraAttribues)); } RevFeature feature = builder.build(); return feature; }
@Test public void testAddAll() { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeatureBuilder.build(f); RevFeatureBuilder b = builder(); b.addAll(f.getAttributes()); RevFeature builtWithList = b.build(); assertEquals(feature, builtWithList); b.reset(); b.addAll(f.getAttributes().toArray(new Object[f.getAttributeCount()])); RevFeature builtWithArray = b.build(); assertEquals(feature, builtWithArray); for (int i = 0; i < f.getAttributeCount(); i++) { assertEquals(f.getAttribute(i), builtWithList.getValues().get(i).orNull()); } }
@Test public void testBuildWithAddProperty() throws Exception { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeatureBuilder.build(f); RevFeatureBuilder b = builder(); for (Property p : f.getProperties()) { b.addProperty(p); } RevFeature built = b.build(); assertEquals(feature, built); for (int i = 0; i < f.getAttributeCount(); i++) { assertEquals(f.getAttribute(i), built.getValues().get(i).orNull()); } }
public RevFeatureBuilder addAll(Object... values) { checkNotNull(values); for (Object v : values) { addValue(v); } return this; }
public RevFeatureBuilder addAll(List<Object> values) { checkNotNull(values); for (Object v : values) { addValue(v); } return this; }
private void insert(final WorkingTree workTree, final String treePath, Iterator<Feature> features, final ProgressListener taskProgress, ObjectId featureTypeId) { try { Iterator<FeatureInfo> infos = Iterators.transform(features, (f) -> { RevFeature rf = RevFeatureBuilder.build(f); String path = NodeRef.appendChild(treePath, f.getIdentifier().getID()); return FeatureInfo.insert(rf, featureTypeId, path); }); workTree.insert(infos, taskProgress); } catch (Exception e) { LOG.warn("Unable to insert into " + treePath, e); throw new GeoToolsOpException(e, StatusCode.UNABLE_TO_INSERT); } }
@Override protected RevFeature read(ObjectId id, BufferedReader reader, TYPE type) throws IOException { Preconditions.checkArgument(TYPE.FEATURE.equals(type), "Wrong type: %s", type.name()); RevFeatureBuilder builder = RevFeatureBuilder.builder(); String line; while ((line = reader.readLine()) != null) { builder.addValue(parseAttribute(line)); } return builder.build(); }
@Test public void testReset() { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeatureBuilder.build(f); RevFeatureBuilder b = builder(); b.addValue(1000); b.addValue("str"); b.reset(); for (Property p : f.getProperties()) { b.addProperty(p); } RevFeature built = b.build(); assertEquals(feature, built); for (int i = 0; i < f.getAttributeCount(); i++) { assertEquals(f.getAttribute(i), built.getValues().get(i).orNull()); } }
@Test public void testRevFeatureToString() { List<Object> values = Lists.newArrayList("StringProp1_1", new Integer(1000), "POINT(1 1)"); RevFeature feature = RevFeatureBuilder.builder().addAll(values).build(); String featureString = feature.toString(); assertEquals("Feature[" + feature.getId().toString() + "; StringProp, 1000, POINT(1 1)]", featureString); } }
public RevFeatureBuilder addProperty(Property featureProp) { checkNotNull(featureProp); // This is where we might handle complex properties if ever supported addValue(featureProp.getValue()); return this; }
FeatureInfo fi = FeatureInfo.insert(RevFeatureBuilder.build(f), rft.getId(), path); return fi; });
@Test public void tesFeaturePropertyOfUnsupportedType() { TestSerializableObject serializableObject = new TestSerializableObject(); serializableObject.words = "words to serialize"; try { RevFeatureBuilder.builder().addValue(1).addValue("s").addValue(serializableObject) .build(); fail("Expected IAE"); } catch (IllegalArgumentException iae) { String expected = "Objects of class " + serializableObject.getClass().getName() + " are not supported as RevFeature attributes"; assertTrue(iae.getMessage(), iae.getMessage().startsWith(expected)); } }
@Test public void testEnforcesPolygonNormalization() throws Exception { // outer ring in cw order, inner rings in ccw order String normalizedWKT = "POLYGON((0 0, 0 9, 9 9, 9 0, 0 0), (3 3, 6 3, 6 6, 3 6, 3 3))"; // outer ring in ccw order, inner rings in cc order String reversedWKT = "POLYGON((0 0, 9 0, 9 9, 0 9, 0 0), (3 3, 3 6, 6 6, 6 3, 3 3))"; Geometry normalized = new WKTReader().read(normalizedWKT); Geometry reversed = new WKTReader().read(reversedWKT); assertTrue(normalized.equalsExact(normalized.norm())); assertFalse(reversed.equalsExact(reversed.norm())); RevFeatureBuilder builder = builder(); RevFeature norm = builder.addValue(normalized).build(); RevFeature rev = builder.reset().addValue(reversed).build(); Geometry expected = (Geometry) norm.getValues().get(0).get(); Geometry actual = (Geometry) rev.getValues().get(0).get(); assertTrue(normalized.equalsExact(expected)); assertTrue(normalized.equalsExact(actual)); }