@Override public void write(RevFeature feature, OutputStream out) throws IOException { DataOutputStream data = new DataOutputStream(out); try { writeHeader(data, "feature"); data.writeInt(feature.size()); for (Optional<Object> field : feature.getValues()) { Object value = field.orNull(); FieldType type = FieldType.forValue(value); data.writeByte(type.getTag()); DataStreamValueSerializerV1.INSTANCE.encode(type, value, data); } } finally { data.flush(); } } }
@Override public void write(RevFeature feature, OutputStream out) throws IOException { DataOutputStream data = new DataOutputStream(out); try { writeHeader(data, "feature"); data.writeInt(feature.size()); for (Optional<Object> field : feature.getValues()) { Object value = field.orNull(); FieldType type = FieldType.forValue(value); data.writeByte(type.getTag()); DataStreamValueSerializerV1.INSTANCE.encode(type, value, data); } } finally { data.flush(); } } }
protected void testFeatureReadWrite(Feature feature) throws Exception { RevFeature newFeature = RevFeatureBuilder.build(feature); ByteArrayOutputStream output = new ByteArrayOutputStream(); serializer.write(newFeature, output); byte[] data = output.toByteArray(); assertTrue(data.length > 0); ByteArrayInputStream input = new ByteArrayInputStream(data); RevFeature feat = (RevFeature) serializer.read(newFeature.getId(), input); assertNotNull(feat); assertEquals(newFeature.getValues().size(), feat.getValues().size()); for (int i = 0; i < newFeature.getValues().size(); i++) { assertEquals(newFeature.getValues().get(i).orNull(), feat.getValues().get(i).orNull()); } }
@Test public void testRevFeatureConstructorAndAccessors() { List<Object> values = Lists.newArrayList("StringProp1_1", new Integer(1000), "POINT(1 1)"); RevFeature feature = RevFeature.builder().addAll(values).build(); assertEquals(TYPE.FEATURE, feature.getType()); assertEquals(Lists.transform(values, (v) -> Optional.fromNullable(v)), feature.getValues()); }
@Test public void testRevFeatureConstructorAndAccessors() { List<Object> values = Lists.newArrayList("StringProp1_1", new Integer(1000), "POINT(1 1)"); RevFeature feature = RevFeatureBuilder.builder().addAll(values).build(); assertEquals(TYPE.FEATURE, feature.getType()); assertEquals(Lists.transform(values, (v) -> Optional.fromNullable(v)), feature.getValues()); }
@Test public void testWriteFeatureSlowPath() throws IOException { ByteArrayDataOutput target = ByteStreams.newDataOutput(); encoder.writeFeature(feature, target); byte[] encoded = target.toByteArray(); RevFeature decoded = encoder.readFeature(null, ByteStreams.newDataInput(encoded)); assertTrue(decoded instanceof LazyRevFeature); assertEquals(feature, decoded); assertTrue(decoded.equals(feature)); assertEquals(feature.getValues(), decoded.getValues()); }
@Test public void testWriteFeatureSlowPath() throws IOException { ByteArrayDataOutput target = ByteStreams.newDataOutput(); encoder.writeFeature(feature, target); byte[] encoded = target.toByteArray(); RevFeature decoded = encoder.readFeature(null, ByteStreams.newDataInput(encoded)); assertTrue(decoded instanceof LazyRevFeature); assertEquals(feature, decoded); assertTrue(decoded.equals(feature)); assertEquals(feature.getValues(), decoded.getValues()); }
@Test public void testBuildEmpty() throws Exception { RevFeature emptyFeature = RevFeature.builder().build(); assertNotNull(emptyFeature); assertTrue(emptyFeature.getValues().isEmpty()); assertEquals(ObjectId.valueOf("0aaf76f425c6e0f43a36197de768e67d9e035abb"), emptyFeature.getId()); }
@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()); } }
@Test public void testBuildEmpty() throws Exception { RevFeature emptyFeature = RevFeatureBuilder.builder().build(); assertNotNull(emptyFeature); assertTrue(emptyFeature.getValues().isEmpty()); assertEquals(ObjectId.valueOf("0aaf76f425c6e0f43a36197de768e67d9e035abb"), emptyFeature.getId()); }
@Test public void testBuildWithAddProperty() throws Exception { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeature.builder().build(f); RevFeatureBuilder b = RevFeature.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()); } }
@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 = RevFeature.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)); }
@Test public void testBuildWithAddValue() throws Exception { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeatureBuilder.build(f); RevFeatureBuilder b = builder(); for (int i = 0; i < f.getAttributeCount(); i++) { b.addValue(f.getAttribute(i)); } 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 testBuildWithAddValue() throws Exception { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeature.builder().build(f); RevFeatureBuilder b = RevFeature.builder(); for (int i = 0; i < f.getAttributeCount(); i++) { b.addValue(f.getAttribute(i)); } 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 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 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 testAddAll() { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeature.builder().build(f); RevFeatureBuilder b = RevFeature.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 testReset() { SimpleFeature f = (SimpleFeature) points1; RevFeature feature = RevFeature.builder().build(f); RevFeatureBuilder b = RevFeature.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 testWriteFeatureFastPath() throws IOException { ByteArrayDataOutput target = ByteStreams.newDataOutput(); encoder.writeFeature(feature, target); byte[] encoded = target.toByteArray(); LazyRevFeature decoded = (LazyRevFeature) encoder.readFeature(null, ByteStreams.newDataInput(encoded)); target = ByteStreams.newDataOutput(); encoder.fastEncode(decoded, target); encoded = target.toByteArray(); LazyRevFeature decoded2 = (LazyRevFeature) encoder.readFeature(null, ByteStreams.newDataInput(encoded)); assertTrue(decoded instanceof LazyRevFeature); assertEquals(feature, decoded); assertTrue(decoded.equals(feature)); assertEquals(feature.getValues(), decoded.getValues()); assertEquals(feature, decoded2); assertEquals(feature.getValues(), decoded2.getValues()); }
@Test public void testWriteFeatureFastPath() throws IOException { ByteArrayDataOutput target = ByteStreams.newDataOutput(); encoder.writeFeature(feature, target); byte[] encoded = target.toByteArray(); LazyRevFeature decoded = (LazyRevFeature) encoder.readFeature(null, ByteStreams.newDataInput(encoded)); target = ByteStreams.newDataOutput(); encoder.fastEncode(decoded, target); encoded = target.toByteArray(); LazyRevFeature decoded2 = (LazyRevFeature) encoder.readFeature(null, ByteStreams.newDataInput(encoded)); assertTrue(decoded instanceof LazyRevFeature); assertEquals(feature, decoded); assertTrue(decoded.equals(feature)); assertEquals(feature.getValues(), decoded.getValues()); assertEquals(feature, decoded2); assertEquals(feature.getValues(), decoded2.getValues()); }