@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;
    }
  public Node put(final ObjectId revFeatureId, final Feature feature) {

    final RevTreeBuilder2 treeBuilder = getTreeBuilder(feature);

    String fid = feature.getIdentifier().getID();
    BoundingBox bounds = feature.getBounds();
    FeatureType type = feature.getType();

    final Node node = treeBuilder.putFeature(revFeatureId, fid, bounds, type);
    return node;
  }
  public void remove(FeatureToDelete feature) {
    final RevTreeBuilder2 treeBuilder = getTreeBuilder(feature);

    String fid = feature.getIdentifier().getID();
    treeBuilder.removeFeature(fid);
  }