public void remove(String featurePath) { final String treePath = NodeRef.parentPath(featurePath); final String featureId = NodeRef.nodeFromPath(featurePath); Optional<CanonicalTreeBuilder> treeBuilder = getTreeBuilder(treePath); if (treeBuilder.isPresent()) { CanonicalTreeBuilder builder = treeBuilder.get(); builder.remove(featureId); } }
public void remove(FeatureToDelete feature) { final CanonicalTreeBuilder treeBuilder = getTreeBuilder(feature); String fid = feature.getIdentifier().getID(); treeBuilder.remove(fid); }
@Override public RevFeature apply(Change change) { progressListener.setProgress(++count); @Nullable RevFeature feature = change.getFeature(); String featureId = null; if (fidMappings.containsKey(change.getFeautreId())) { featureId = fidMappings.get(change.getFeautreId()); } else { featureId = newFeatureId(); report.addMapping(change.getFeautreId(), featureId); } ChangeType type = change.getType(); switch (type) { case REMOVED: builder.remove(featureId); break; case ADDED: case MODIFIED: Node node = Node.create(featureId, feature.getId(), ObjectId.NULL, TYPE.FEATURE, SpatialOps.boundsOf(feature)); builder.put(node); return feature; default: throw new IllegalStateException(); } return feature; } };
@Override public RevFeature apply(Change change) { progressListener.setProgress(++count); @Nullable RevFeature feature = change.getFeature(); String featureId = null; if (fidMappings.containsKey(change.getFeautreId())) { featureId = fidMappings.get(change.getFeautreId()); } else { featureId = newFeatureId(); report.addMapping(change.getFeautreId(), featureId); } ChangeType type = change.getType(); switch (type) { case REMOVED: builder.remove(featureId); break; case ADDED: case MODIFIED: Node node = RevObjectFactory.defaultInstance().createNode(featureId, feature.getId(), ObjectId.NULL, TYPE.FEATURE, SpatialOps.boundsOf(feature), null); builder.put(node); return feature; default: throw new IllegalStateException(); } return feature; } };
public RevTree build(ObjectStore store) { final ObjectId treeId = this.node.getObjectId(); final RevTree original = EMPTY_TREE_ID.equals(treeId) ? EMPTY : store.getTree(treeId); CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(store, original);// .clearSubtrees(); ImmutableList<Node> currentTrees = original.trees(); currentTrees.forEach((n) -> builder.remove(n.getName())); for (MutableTree childTree : this.childTrees.values()) { childTree.build(store); Node newNode = childTree.node; builder.put(newNode); } final Node oldNode = this.node; RevTree newTree = builder.build(); Envelope newBounds = SpatialOps.boundsOf(newTree); Node newNode = oldNode.update(newTree.getId(), newBounds); this.node = newNode; return newTree; }
final CanonicalTreeBuilder builder = createBuiler(tree); for (Node key : removedKeys) { builder.remove(key); legacy.remove(key);
final CanonicalTreeBuilder builder = createBuiler(tree); for (Node key : removedKeys) { builder.remove(key); legacy.remove(key);
CanonicalTreeBuilder parentBuilder = CanonicalTreeBuilder.create(indexDatabase, currentParent); parentBuilder.remove(featureId);
@Test public void testBucketBucketRemove() { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb, bucketsFeatureTree); RevTree changed; changed = builder.remove("3").build(); odb.put(changed); assertEquals(1, count(bucketsFeatureTree, changed).featureCount()); assertEquals(1, count(changed, bucketsFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); for (int i = 0; i < CanonicalNodeNameOrder.normalizedSizeLimit(0) - 1; i++) { builder.remove(String.valueOf(i)); } changed = builder.build(); odb.put(changed); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1, changed.size()); assertNotEquals(0, changed.bucketsSize()); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0) - 1, count(bucketsFeatureTree, changed).featureCount()); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0) - 1, count(changed, bucketsFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); builder.remove(String.valueOf(CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1)); changed = builder.build(); odb.put(changed); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0), changed.size()); assertEquals(0, changed.bucketsSize()); }
@Test public void testBucketChildren() { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb, bucketsFeatureTree); RevTree changed; int normalizedSizeLimit = CanonicalNodeNameOrder.normalizedSizeLimit(0); for (int i = 0; i < normalizedSizeLimit; i++) { builder.remove(String.valueOf(i)); } changed = builder.build(); odb.put(changed); assertEquals(normalizedSizeLimit, changed.size()); assertEquals(0, changed.bucketsSize()); assertEquals(normalizedSizeLimit, count(bucketsFeatureTree, changed).getFeaturesRemoved()); assertEquals(normalizedSizeLimit, count(bucketsFeatureTree, changed).featureCount()); assertEquals(normalizedSizeLimit, count(changed, bucketsFeatureTree).featureCount()); }
@Test public void testBucketBucketRemove() { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb, bucketsFeatureTree); RevTree changed; changed = builder.remove("3").build(); odb.put(changed); assertEquals(1, count(bucketsFeatureTree, changed).featureCount()); assertEquals(1, count(changed, bucketsFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); for (int i = 0; i < CanonicalNodeNameOrder.normalizedSizeLimit(0) - 1; i++) { builder.remove(String.valueOf(i)); } changed = builder.build(); odb.put(changed); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1, changed.size()); assertFalse(changed.buckets().isEmpty()); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0) - 1, count(bucketsFeatureTree, changed).featureCount()); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0) - 1, count(changed, bucketsFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); builder.remove(String.valueOf(CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1)); changed = builder.build(); odb.put(changed); assertEquals(CanonicalNodeNameOrder.normalizedSizeLimit(0), changed.size()); assertTrue(changed.buckets().isEmpty()); }
@Test public void testShrinksOnRemoveBellowThreshold() throws Exception { final int numEntries = (int) (1.5 * CanonicalNodeNameOrder.normalizedSizeLimit(0)); final ObjectId treeId = createAndSaveTree(numEntries, true); final RevTree tree = objectStore.getTree(treeId); assertEquals(numEntries, tree.size()); // remove all but enough to have an unsplitted tree final long resultSize = 100; final Set<Node> removedKeys = new HashSet<>(); { DepthTreeIterator it = new DepthTreeIterator("", ObjectId.NULL, tree, objectStore, Strategy.CHILDREN); for (int i = 0; i < numEntries - resultSize; i++) { NodeRef entry = it.next(); removedKeys.add(entry.getNode()); } } final LegacyTreeBuilder legacy = createLegacyBuilder(tree); final CanonicalTreeBuilder builder = createBuiler(tree); for (Node key : removedKeys) { builder.remove(key); legacy.remove(key); } final RevTree legacyResult = legacy.build(); final RevTree result = builder.build(); assertEquals(resultSize, result.size()); assertEquals(0, result.bucketsSize()); assertEquals(legacyResult, result); }
@Test public void testBucketChildren() { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb, bucketsFeatureTree); RevTree changed; int normalizedSizeLimit = CanonicalNodeNameOrder.normalizedSizeLimit(0); for (int i = 0; i < normalizedSizeLimit; i++) { builder.remove(String.valueOf(i)); } changed = builder.build(); odb.put(changed); assertEquals(normalizedSizeLimit, changed.size()); assertTrue(changed.buckets().isEmpty()); assertEquals(normalizedSizeLimit, count(bucketsFeatureTree, changed).getFeaturesRemoved()); assertEquals(normalizedSizeLimit, count(bucketsFeatureTree, changed).featureCount()); assertEquals(normalizedSizeLimit, count(changed, bucketsFeatureTree).featureCount()); }
@Test public void testShrinksOnRemoveBellowThreshold() throws Exception { final int numEntries = (int) (1.5 * CanonicalNodeNameOrder.normalizedSizeLimit(0)); final ObjectId treeId = createAndSaveTree(numEntries, true); final RevTree tree = objectStore.getTree(treeId); assertEquals(numEntries, tree.size()); // remove all but enough to have an unsplitted tree final long resultSize = 100; final Set<String> removedKeys = new HashSet<String>(); { DepthTreeIterator it = new DepthTreeIterator("", ObjectId.NULL, tree, objectStore, Strategy.CHILDREN); for (int i = 0; i < numEntries - resultSize; i++) { NodeRef entry = it.next(); removedKeys.add(entry.path()); } } final LegacyTreeBuilder legacy = createLegacyBuilder(tree); final CanonicalTreeBuilder builder = createBuiler(tree); for (String key : removedKeys) { builder.remove(key); legacy.remove(key); } final RevTree legacyResult = legacy.build(); final RevTree result = builder.build(); assertEquals(resultSize, result.size()); assertTrue(result.buckets().isEmpty()); assertEquals(legacyResult, result); }
for (int i = 0; i < count; i++) { String path = String.valueOf(i); builder.remove(path);
for (int i = 0; i < count; i++) { String path = String.valueOf(i); builder.remove(path);
@Test public void testChangeTypeFilter() { ObjectDatabase db = geogig.getContext().objectDatabase(); final RevTree tree1 = tree(1000, db); final RevTree tree2 = tree(50, db); final RevTree tree2Changed; { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(db, tree2); // add 10 changed features, and delete 10 more for (int i = 0; i < 20; i++) { if (i % 2 == 0) { builder.remove(String.valueOf(i)); } else { builder.put(feature(i, RevObjectTestSupport.hashString("changed" + i))); } } tree2Changed = builder.build(); db.put(tree2Changed); assertEquals(tree2.size() - 10, tree2Changed.size()); } final RevTree root1 = createRoot(db, tree1, tree2); final RevTree root2 = createRoot(db, tree1, tree2Changed); assertChangeTypeFilter(ObjectId.NULL, root1.getId(), (int) (tree1.size() + tree2.size()), 0, 0); assertChangeTypeFilter(root1.getId(), ObjectId.NULL, 0, (int) (tree1.size() + tree2.size()), 0); assertChangeTypeFilter(tree2.getId(), tree2Changed.getId(), 0, 10, 10); assertChangeTypeFilter(root1.getId(), root2.getId(), 0, 10, 10); assertChangeTypeFilter(root2.getId(), root1.getId(), 10, 0, 10); }
@Test public void testChildrenChildren() { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb, childrenFeatureTree); RevTree changed = builder.remove("3").build(); assertEquals(1, count(childrenFeatureTree, changed).featureCount()); assertEquals(1, count(changed, childrenFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); builder.put(Node.create("new", FAKE_FEATURE_ID, ObjectId.NULL, TYPE.FEATURE, null)); changed = builder.build(); assertEquals(2, count(childrenFeatureTree, changed).featureCount()); assertEquals(2, count(changed, childrenFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); builder.put(Node.create("1", FAKE_FEATURE_ID_CHANGED, ObjectId.NULL, TYPE.FEATURE, null)); changed = builder.build(); assertEquals(3, count(childrenFeatureTree, changed).featureCount()); assertEquals(3, count(changed, childrenFeatureTree).featureCount()); }
@Test public void testChildrenChildren() { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb, childrenFeatureTree); RevTree changed = builder.remove("3").build(); assertEquals(1, count(childrenFeatureTree, changed).featureCount()); assertEquals(1, count(changed, childrenFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); builder.put(RevObjectFactory.defaultInstance().createNode("new", FAKE_FEATURE_ID, ObjectId.NULL, TYPE.FEATURE, null, null)); changed = builder.build(); assertEquals(2, count(childrenFeatureTree, changed).featureCount()); assertEquals(2, count(changed, childrenFeatureTree).featureCount()); builder = CanonicalTreeBuilder.create(odb, changed); builder.put(RevObjectFactory.defaultInstance().createNode("1", FAKE_FEATURE_ID_CHANGED, ObjectId.NULL, TYPE.FEATURE, null, null)); changed = builder.build(); assertEquals(3, count(childrenFeatureTree, changed).featureCount()); assertEquals(3, count(changed, childrenFeatureTree).featureCount()); }
childTree2.remove("tree2/2"); rootBuilder = CanonicalTreeBuilder.create(odb, newRoot); RevTree child2 = childTree2.build();