private CanonicalTreeBuilder createFeaturesTree(final String parentPath, final int numEntries) { CanonicalTreeBuilder tree = CanonicalTreeBuilder.create(odb); for (int i = 0; i < numEntries; i++) { tree.put(featureRef(parentPath, i)); } return tree; }
@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; } };
private RevTree createTree(String... blobs) { CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(odb); for (String blob : blobs) { builder.put(blob(blob)); } RevTree tree = builder.build(); return tree; }
@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 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; } }
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; }
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 = RevObjectFactory.defaultInstance().createNode(fid, oid, ObjectId.NULL, TYPE.FEATURE, env, null); store.put(feature); builder.put(node); } RevTree tree = builder.build(); return tree; } }
public static RevTree createWorldPointsTree(Repository repository) { ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(store); for (int x = -180; x <= 180; x += 5) { for (int y = -90; y <= 90; y += 5) { String fid = getPointFid(x, y); RevFeature feature; feature = createPointFeature(x, y, Double.valueOf(x), Double.valueOf(y), 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; }
public static RevTree createWorldPointsTree(Repository repository) { ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder builder = CanonicalTreeBuilder.create(store); for (int x = -180; x <= 180; x += 5) { for (int y = -90; y <= 90; y += 5) { String fid = getPointFid(x, y); RevFeature feature; feature = createPointFeature(x, y, Double.valueOf(x), Double.valueOf(y), fid); Envelope env = SpatialOps.boundsOf(feature); ObjectId oid = feature.getId(); Node node = RevObjectFactory.defaultInstance().createNode(fid, oid, ObjectId.NULL, TYPE.FEATURE, env, null); store.put(feature); builder.put(node); } } RevTree tree = builder.build(); return tree; }
builder.put(update);
builder.put(update);
public static NodeRef createOddLayer(String typeName, Repository repository) { String typeSpec = "geom:Point:srid=4326,x:Double,y:Double,xystr:String"; SimpleFeatureType type; try { type = DataUtilities.createType(typeName, typeSpec); } catch (SchemaException e) { throw Throwables.propagate(e); } RevTree tree = IndexTestSupport.createWorldPointsTree(repository); WorkingTree workingTree = repository.workingTree(); NodeRef typeTreeRef = workingTree.createTypeTree(type.getTypeName(), type); ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder newRootBuilder = CanonicalTreeBuilder.create(store, workingTree.getTree()); NodeRef newTypeTreeRef = typeTreeRef.update(tree.getId(), SpatialOps.boundsOf(tree)); newRootBuilder.put(newTypeTreeRef.getNode()); RevTree newWorkTree = newRootBuilder.build(); workingTree.updateWorkHead(newWorkTree.getId()); return newTypeTreeRef; }
public static NodeRef createOddLayer(String typeName, Repository repository) { String typeSpec = "geom:Point:srid=4326,x:Double,y:Double,xystr:String"; SimpleFeatureType type; try { type = DataUtilities.createType(typeName, typeSpec); } catch (SchemaException e) { throw new RuntimeException(e); } RevTree tree = IndexTestSupport.createWorldPointsTree(repository); WorkingTree workingTree = repository.workingTree(); NodeRef typeTreeRef = workingTree.createTypeTree(type.getTypeName(), type); ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder newRootBuilder = CanonicalTreeBuilder.create(store, workingTree.getTree()); NodeRef newTypeTreeRef = typeTreeRef.update(tree.getId(), SpatialOps.boundsOf(tree)); newRootBuilder.put(newTypeTreeRef.getNode()); RevTree newWorkTree = newRootBuilder.build(); workingTree.updateWorkHead(newWorkTree.getId()); return newTypeTreeRef; }
public static NodeRef createWorldPointsLayer(Repository repository) { if (featureType == null) { String typeSpec = "geom:Point:srid=4326,x:Double,y:Double,xystr:String"; try { featureType = DataUtilities.createType("worldpoints", typeSpec); } catch (SchemaException e) { throw new RuntimeException(e); } } RevTree tree = createWorldPointsTree(repository); WorkingTree workingTree = repository.workingTree(); NodeRef typeTreeRef = workingTree.createTypeTree(featureType.getTypeName(), featureType); ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder newRootBuilder = CanonicalTreeBuilder.create(store, workingTree.getTree()); NodeRef newTypeTreeRef = typeTreeRef.update(tree.getId(), SpatialOps.boundsOf(tree)); newRootBuilder.put(newTypeTreeRef.getNode()); RevTree newWorkTree = newRootBuilder.build(); workingTree.updateWorkHead(newWorkTree.getId()); return newTypeTreeRef; }
public static NodeRef createWorldPointsLayer(Repository repository) { if (featureType == null) { String typeSpec = "geom:Point:srid=4326,x:Double,y:Double,xystr:String"; try { featureType = DataUtilities.createType("worldpoints", typeSpec); } catch (SchemaException e) { throw Throwables.propagate(e); } } RevTree tree = createWorldPointsTree(repository); WorkingTree workingTree = repository.workingTree(); NodeRef typeTreeRef = workingTree.createTypeTree(featureType.getTypeName(), featureType); ObjectStore store = repository.objectDatabase(); CanonicalTreeBuilder newRootBuilder = CanonicalTreeBuilder.create(store, workingTree.getTree()); NodeRef newTypeTreeRef = typeTreeRef.update(tree.getId(), SpatialOps.boundsOf(tree)); newRootBuilder.put(newTypeTreeRef.getNode()); RevTree newWorkTree = newRootBuilder.build(); workingTree.updateWorkHead(newWorkTree.getId()); return newTypeTreeRef; }
@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()); }
builder.remove(String.valueOf(i)); } else { builder.put(feature(i, RevObjectTestSupport.hashString("changed" + i)));
childTree1.put(featureRef("tree1", 1000)); createFeatureTypesTree(rootBuilder, "tree1", childTree1.build()); RevTree newRoot = rootBuilder.build(); assertEquals(2, count(childrenFeatureTypesTree, newRoot).featureCount()); childTree2.put( Node.create("tree2/1", FAKE_FEATURE_ID_CHANGED, ObjectId.NULL, TYPE.FEATURE, null)); createFeatureTypesTree(rootBuilder, "tree2", childTree2.build());
@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); }