/** Inserts the feature to the index but does not stages it to be committed */ public ObjectId insert(GeogigTransaction transaction, Feature f) throws Exception { final WorkingTree workTree = (transaction != null ? transaction.workingTree() : repo.workingTree()); Name name = f.getType().getName(); String parentPath = name.getLocalPart(); Node ref = workTree.insert(parentPath, f); ObjectId objectId = ref.getObjectId(); return objectId; }
@Override public Void call() { RevTree tree = builder.build(); Node treeNode; { ObjectId treeMetadataId = builder.getDefaultMetadataId(); String name = NodeRef.nodeFromPath(treePath); ObjectId oid = tree.getId(); Envelope bounds = SpatialOps.boundsOf(tree); treeNode = Node.create(name, oid, treeMetadataId, RevObject.TYPE.TREE, bounds); } final String parentPath = NodeRef.parentPath(treePath); final ObjectId parentMetadataId; if (NodeRef.ROOT.equals(parentPath)) { parentMetadataId = ObjectId.NULL; } else { Optional<NodeRef> parentRef = context .command(FindTreeChild.class) .setChildPath(parentPath) .setIndex(true) .setParent(workHead) .setParentPath(NodeRef.ROOT) .call(); parentMetadataId = parentRef.isPresent() ? parentRef.get().getMetadataId() : ObjectId.NULL; } NodeRef newTreeRef = new NodeRef(treeNode, parentPath, parentMetadataId); target.put(newTreeRef, tree); return null; }
private NodeRef findOrCreateTree(final String treePath, final FeatureType type) { RevTree tree = context .command(FindOrCreateSubtree.class) .setChildPath(treePath) .setIndex(true) .setParent(workHead) .setParentPath(NodeRef.ROOT) .call(); ObjectId metadataId = ObjectId.NULL; if (type != null) { RevFeatureType revFeatureType = RevFeatureTypeImpl.build(type); if (tree.isEmpty()) { indexDatabase.put(revFeatureType); } metadataId = revFeatureType.getId(); } Envelope bounds = SpatialOps.boundsOf(tree); Node node = Node.create(NodeRef.nodeFromPath(treePath), tree.getId(), metadataId, TYPE.TREE, bounds); String parentPath = NodeRef.parentPath(treePath); return new NodeRef(node, parentPath, ObjectId.NULL); }