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; }
/** * Factory method to create a tree builder that clusters subtrees and nodes according to * {@link CanonicalNodeNameOrder}, and whose internal structure starts by matching the provided * {@code original} tree. */ public static CanonicalTreeBuilder create(final ObjectStore store, final RevTree original) { checkNotNull(store); checkNotNull(original); CanonicalTreeBuilder builder = new CanonicalTreeBuilder(store, original); return builder; } }
/** * Removes a node from the builder given its {@link Node#getName() name} * <p> * Since a canonical tree builder uses only the node names to arrange the nodes on the internal * tree structure, it is safe to overload {@link #remove(Node)} with a String argument version. * * @param featureId the name of the node to remove * @return {@code this} */ public final CanonicalTreeBuilder remove(final String featureId) { checkNotNull(featureId, "Argument featureId is null"); checkState(!disposed.get(), "TreeBuilder is already disposed"); Node removeNode = Node.create(featureId, ObjectId.NULL, ObjectId.NULL, TYPE.FEATURE, null); clusteringStrategy().remove(removeNode); return this; }
@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()); }
/** * Factory method to create a tree builder that clusters subtrees and nodes according to * {@link CanonicalNodeNameOrder} */ public static CanonicalTreeBuilder create(final ObjectStore store) { return create(store, RevTree.EMPTY); }
parentBuilder.remove(fid); Node featureNode = Node.create(fid, oid, metadataId, TYPE.FEATURE, bounds); parentBuilder.put(featureNode); progress.setDescription(String.format("Building final tree %s...", oldTreeRef.name())); Stopwatch treeTime = Stopwatch.createStarted(); final RevTree newFeatureTree = builder.build(); treeTime.stop(); progress.setDescription(String.format("%,d features tree built in %s",
@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; } };
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 static RevTree createTree_AllFeaturesSameGeometry(int numFeatues, Repository repository) { double x = 1.000000001; double y = 2.000000002; ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(store); for (int i = 0; i < numFeatues; i++) { String fid = String.valueOf(i); RevFeature feature; feature = IndexTestSupport.createPointFeature(x, y, Double.valueOf(i), Double.valueOf(i), fid); Envelope env = SpatialOps.boundsOf(feature); ObjectId oid = feature.getId(); Node node = Node.create(fid, oid, ObjectId.NULL, TYPE.FEATURE, env); store.put(feature); builder.put(node); } RevTree tree = builder.build(); return tree; } }
@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()); }
/** * Factory method to create a tree builder that clusters subtrees and nodes according to * {@link CanonicalNodeNameOrder} */ public static CanonicalTreeBuilder create(final ObjectStore store) { return create(store, RevTree.EMPTY); }
@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 void remove(FeatureToDelete feature) { final CanonicalTreeBuilder treeBuilder = getTreeBuilder(feature); String fid = feature.getIdentifier().getID(); treeBuilder.remove(fid); }
final CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(repositoryDatabase, currentLeftTree); final DiffEntry diff = updatedIterator.next(); if (diff.isDelete()) { builder.remove(diff.oldName()); } else { NodeRef newObject = diff.getNewObject(); Node node = newObject.getNode(); builder.put(node); final RevTree newTree = builder.build(); repositoryDatabase.put(newTree); return newTree;