@SuppressWarnings("unchecked") public static Map<String, Object> getMaterializedAttributes(Node n) { Object v = n.getExtraData(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); Preconditions.checkArgument(v == null || v instanceof Map); return (Map<String, Object>) v; }
@SuppressWarnings("unchecked") public static Map<String, Object> getMaterializedAttributes(Node n) { Map<String, Object> extraData = n.getExtraData(); Object v = extraData.get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); Preconditions.checkArgument(v == null || v instanceof Map); return (Map<String, Object>) v; }
public @Nullable Object getExtraData(String key) { return getExtraData().get(key); }
public Node update(final ObjectId newId, final @Nullable Envelope newBounds) { ObjectId mdId = getMetadataId().or(ObjectId.NULL); return Node.create(getName(), newId, mdId, getType(), newBounds, getExtraData()); }
public Node update(final ObjectId newId, final @Nullable Envelope newBounds) { ObjectId mdId = getMetadataId().or(ObjectId.NULL); return RevObjectFactory.defaultInstance().createNode(getName(), newId, mdId, getType(), newBounds, getExtraData()); }
public static void writeNode(Node node, DataOutput data, Envelope envBuff) { try { data.writeUTF(node.getName()); data.write(node.getObjectId().getRawValue()); data.write(node.getMetadataId().or(ObjectId.NULL).getRawValue()); int typeN = node.getType().value(); data.writeByte(typeN); envBuff.setToNull(); node.expand(envBuff); writeBoundingBox(envBuff, data); Map<String, Object> extraData = node.getExtraData(); DataStreamValueSerializerV1.INSTANCE.writeMap(extraData, data); } catch (IOException e) { throw Throwables.propagate(e); } }
public static void writeNode(Node node, DataOutput data, Envelope envBuff) { try { data.writeUTF(node.getName()); node.getObjectId().writeTo(data); node.getMetadataId().or(ObjectId.NULL).writeTo(data); int typeN = node.getType().value(); data.writeByte(typeN); envBuff.setToNull(); node.expand(envBuff); writeBoundingBox(envBuff, data); Map<String, Object> extraData = node.getExtraData(); DataStreamValueSerializerV1.INSTANCE.writeMap(extraData, data); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public void funnel(Node ref, PrimitiveSink into) { RevObjectTypeFunnel.funnel(ref.getType(), into); StringFunnel.funnel((CharSequence) ref.getName(), into); ObjectIdFunnel.funnel(ref.getObjectId(), into); ObjectIdFunnel.funnel(ref.getMetadataId().or(ObjectId.NULL), into); Map<String, Object> extraData = ref.getExtraData(); // consider extraData only if it's not empty to maintain backwards compatibility with // Geogig pre 1.1 if (!extraData.isEmpty()) { PropertyValueFunnel.funnel(extraData, into); } } };
@Override public void funnel(Node ref, PrimitiveSink into) { RevObjectTypeFunnel.funnel(ref.getType(), into); StringFunnel.funnel((CharSequence) ref.getName(), into); ObjectIdFunnel.funnel(ref.getObjectId(), into); ObjectIdFunnel.funnel(ref.getMetadataId().or(ObjectId.NULL), into); Map<String, Object> extraData = ref.getExtraData(); // consider extraData only if it's not empty to maintain backwards compatibility with // Geogig pre 1.1 if (!extraData.isEmpty()) { PropertyValueFunnel.funnel(extraData, into); } } };
@Test public void testLazyNodeGetExtaDataValue() throws IOException { final Map<String, Object> expected = extraData(0); final Node originalNode = RevObjectFactory.defaultInstance().createNode("feature-0", RevObjectTestSupport.hashString("1"), ObjectId.NULL, TYPE.FEATURE, null, expected); assertEquals(expected.size(), originalNode.getExtraData().size()); assertEquals(expected, originalNode.getExtraData()); NodeSet nodeset = encodedDecode(Collections.singletonList(originalNode), TYPE.FEATURE); Node lazyNode = nodeset.build().get(0); for (Map.Entry<String, Object> e : expected.entrySet()) { String key = e.getKey(); Object value = e.getValue(); Object lazyVal = lazyNode.getExtraData(key); assertEquals("key=" + key, value, lazyVal); } }
private void assertNodesEqual(List<Node> l1, List<Node> l2) { assertEquals(l1, l2); for (int i = 0; i < l1.size(); i++) { Node n1 = l1.get(i); Node n2 = l2.get(i); assertEquals(n1.getExtraData(), n2.getExtraData()); assertEquals(n1.getMetadataId(), n2.getMetadataId()); assertEquals(n1.bounds(), n2.bounds()); } }
private void assertNodesEqual(List<Node> l1, List<Node> l2) { assertEquals(l1, l2); for (int i = 0; i < l1.size(); i++) { Node n1 = l1.get(i); Node n2 = l2.get(i); assertEquals(n1.getExtraData(), n2.getExtraData()); assertEquals(n1.getMetadataId(), n2.getMetadataId()); assertEquals(n1.bounds(), n2.bounds()); } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should not track the extra attribute \"([^\"]*)\"$") public void verifyIndexNotExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); if (extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)) { Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertFalse(attributeData.containsKey(attributeName)); } } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should track the extra attribute \"([^\"]*)\"$") public void verifyIndexExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); assertTrue(extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertTrue(attributeData.containsKey(attributeName)); } }
@SuppressWarnings("unchecked") @Then("^the repository's \"([^\"]*)\" index should track the extra attribute \"([^\"]*)\"$") public void verifyIndexExtraAttributes(String headRef, String attributeName) throws Throwable { Repository repo = localRepo.geogigCLI.getGeogig().getRepository(); Optional<ObjectId> indexTreeId = resolveIndexTreeId(headRef, null); assertTrue(indexTreeId.isPresent()); RevTree indexTree = repo.indexDatabase().getTree(indexTreeId.get()); Set<org.locationtech.geogig.model.Node> nodes = RevObjectTestSupport.getTreeNodes(indexTree, repo.indexDatabase()); for (org.locationtech.geogig.model.Node n : nodes) { Map<String, Object> extraData = n.getExtraData(); assertTrue(extraData.containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); Map<String, Object> attributeData = (Map<String, Object>) extraData .get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA); assertTrue(attributeData.containsKey(attributeName)); } }
public static void assertEqualsFully(List<Node> expected, List<Node> actual) { assertEquals(expected.size(), actual.size()); for (int i = 0; i < expected.size(); i++) { Node orig = expected.get(i); Node lazy = actual.get(i); assertEquals(orig.getName(), lazy.getName()); assertEquals(orig.getObjectId(), lazy.getObjectId()); assertEquals(orig.getType(), lazy.getType()); assertEquals(orig.getMetadataId(), lazy.getMetadataId()); assertEnvelope("at index " + i, orig.bounds().orNull(), lazy.bounds().orNull()); Map<String, Object> expectedExtraData = orig.getExtraData(); Map<String, Object> actualExtraData = lazy.getExtraData(); assertEquals(expectedExtraData, actualExtraData); assertEquals(orig, lazy); } }
@Test public void testLazyNodeGetExtaData() throws IOException { final Map<String, Object> expected = extraData(0); final Node originalNode = RevObjectFactory.defaultInstance().createNode("feature-0", RevObjectTestSupport.hashString("1"), ObjectId.NULL, TYPE.FEATURE, null, expected); NodeSet nodeset = encodedDecode(Collections.singletonList(originalNode), TYPE.FEATURE); Node lazyNode = nodeset.build().get(0); Map<String, Object> extraData = lazyNode.getExtraData(); assertEquals(expected, extraData); }
public static void assertEqualsFully(List<Node> expected, List<Node> actual) { assertEquals(expected.size(), actual.size()); for (int i = 0; i < expected.size(); i++) { Node orig = expected.get(i); Node lazy = actual.get(i); assertEquals(orig.getName(), lazy.getName()); assertEquals(orig.getObjectId(), lazy.getObjectId()); assertEquals(orig.getType(), lazy.getType()); assertEquals(orig.getMetadataId(), lazy.getMetadataId()); assertEnvelope("at index " + i, orig.bounds().orNull(), lazy.bounds().orNull()); Map<String, Object> expectedExtraData = orig.getExtraData(); Map<String, Object> actualExtraData = lazy.getExtraData(); assertEquals(expectedExtraData, actualExtraData); assertEquals(orig, lazy); } }
@Test public void testNodeAccessorsAndConstructors() { ObjectId oid = ObjectId.valueOf("abc123000000000000001234567890abcdef0000"); Map<String, Object> extraData = new HashMap<String, Object>(); extraData.put("key", "value"); Node node = RevObjectFactory.defaultInstance().createNode("Points", oid, ObjectId.NULL, TYPE.TREE, null, extraData); assertEquals(Optional.absent(), node.getMetadataId()); assertEquals("Points", node.getName()); assertEquals(oid, node.getObjectId()); assertEquals(TYPE.TREE, node.getType()); assertEquals(extraData, node.getExtraData()); }
public static void deepEquals(@NonNull Node expected, @NonNull Node actual) { assertEquals(expected.getName(), actual.getName()); assertEquals(expected.getObjectId(), actual.getObjectId()); assertEquals(expected.getType(), actual.getType()); assertNotNull(expected.getMetadataId()); assertNotNull(actual.getMetadataId()); assertEquals(expected.getMetadataId().orNull(), actual.getMetadataId().orNull()); assertNotNull(expected.bounds()); assertNotNull(actual.bounds()); equalsPrecise(expected.bounds().orNull(), actual.bounds().orNull()); Map<String, Object> expectedExtraData = expected.getExtraData(); Map<String, Object> actualExtraData = actual.getExtraData(); assertNotNull(expectedExtraData); assertNotNull(actualExtraData); assertDeepEquals(expectedExtraData, actualExtraData); }