/** * Returns the reversed version of this difference * * @return */ public FeatureTypeDiff reversed() { return new FeatureTypeDiff(path, newFeatureType, oldFeatureType); }
private String featureTypeDiffAsString(FeatureTypeDiff diff) { StringBuilder sb = new StringBuilder(); sb.append(diff.toString() + "\n"); if (!diff.getNewFeatureType().equals(ObjectId.NULL) && !diff.getOldFeatureType().equals(ObjectId.NULL)) { RevFeatureType oldFeatureType = getFeatureTypeFromId(diff.getOldFeatureType()).get(); RevFeatureType newFeatureType = getFeatureTypeFromId(diff.getNewFeatureType()).get(); ImmutableList<PropertyDescriptor> oldDescriptors = oldFeatureType.descriptors(); ImmutableList<PropertyDescriptor> newDescriptors = newFeatureType.descriptors();
/** * Returns the reversed version of the current patch. Applying this reversed patch has the * opposite effect to applying the original one, and can be used to undo changes * * @return a reversed version of this patch */ public Patch reversed() { Patch patch = new Patch(); patch.removedFeatures = addedFeatures; patch.addedFeatures = removedFeatures; for (FeatureDiff diff : modifiedFeatures) { patch.modifiedFeatures.add(diff.reversed()); } for (FeatureTypeDiff diff : alteredTrees) { patch.alteredTrees.add(diff.reversed()); } return patch; }
@Test public void testCreatePatchAddNewEmptyFeatureTypeToEmptyRepo() throws Exception { WorkingTree workingTree = geogig.getRepository().workingTree(); workingTree.createTypeTree(linesName, linesType); DiffOp op = geogig.command(DiffOp.class).setReportTrees(true); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(1, patch.getAlteredTrees().size()); assertEquals(ObjectId.NULL, patch.getAlteredTrees().get(0).getOldFeatureType()); assertEquals(RevFeatureTypeBuilder.build(linesType).getId(), patch.getAlteredTrees().get(0).getNewFeatureType()); assertEquals(1, patch.getFeatureTypes().size()); } }
for (FeatureTypeDiff diff : alteredTrees) { Optional<RevFeatureType> featureType; if (diff.getOldFeatureType().isNull()) { featureType = patch.getFeatureTypeFromId(diff.getNewFeatureType()); workTree.createTypeTree(diff.getPath(), featureType.get().type()); } else if (diff.getNewFeatureType().isNull()) { workTree.delete(diff.getPath()); } else { featureType = patch.getFeatureTypeFromId(diff.getNewFeatureType()); workTree.updateTypeTree(diff.getPath(), featureType.get().type());
for (FeatureTypeDiff diff : alteredTrees) { DepthSearch depthSearch = new DepthSearch(objectDatabase()); Optional<NodeRef> noderef = depthSearch.find(workingTree().getTree(), diff.getPath()); ObjectId metadataId = noderef.isPresent() ? noderef.get().getMetadataId() : ObjectId.NULL; if (Objects.equal(metadataId, diff.getOldFeatureType())) { toApply.addAlteredTree(diff); } else {
sb.append(diff.toString() + "\n");
@Test public void testCreatePatchAddNewEmptyFeatureTypeToEmptyRepo() throws Exception { WorkingTree workingTree = geogig.getRepository().workingTree(); workingTree.createTypeTree(linesName, linesType); DiffOp op = geogig.command(DiffOp.class).setReportTrees(true); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(1, patch.getAlteredTrees().size()); assertEquals(ObjectId.NULL, patch.getAlteredTrees().get(0).getOldFeatureType()); assertEquals(RevFeatureType.builder().type(linesType).build().getId(), patch.getAlteredTrees().get(0).getNewFeatureType()); assertEquals(1, patch.getFeatureTypes().size()); } }
for (FeatureTypeDiff diff : alteredTrees) { Optional<RevFeatureType> featureType; if (diff.getOldFeatureType().isNull()) { featureType = patch.getFeatureTypeFromId(diff.getNewFeatureType()); workTree.createTypeTree(diff.getPath(), featureType.get().type()); } else if (diff.getNewFeatureType().isNull()) { workTree.delete(diff.getPath()); } else { featureType = patch.getFeatureTypeFromId(diff.getNewFeatureType()); workTree.updateTypeTree(diff.getPath(), featureType.get().type());
for (FeatureTypeDiff diff : alteredTrees) { DepthSearch depthSearch = new DepthSearch(objectDatabase()); Optional<NodeRef> noderef = depthSearch.find(workingTree().getTree(), diff.getPath()); ObjectId metadataId = noderef.isPresent() ? noderef.get().getMetadataId() : ObjectId.NULL; if (Objects.equal(metadataId, diff.getOldFeatureType())) { toApply.addAlteredTree(diff); } else {
sb.append(diff.toString() + "\n");
@Test public void testCreatePatchModifyFeatureType() throws Exception { DiffOp op = geogig.command(DiffOp.class).setReportTrees(true); insertAndAdd(points1, points2); geogig.getRepository().workingTree().updateTypeTree(pointsName, modifiedPointsType); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(1, patch.getAlteredTrees().size()); assertEquals(RevFeatureTypeBuilder.build(pointsType).getId(), patch.getAlteredTrees().get(0).getOldFeatureType()); assertEquals(RevFeatureTypeBuilder.build(modifiedPointsType).getId(), patch.getAlteredTrees().get(0).getNewFeatureType()); assertEquals(2, patch.getFeatureTypes().size()); } }
/** * Returns the reversed version of this difference * * @return */ public FeatureTypeDiff reversed() { return new FeatureTypeDiff(path, newFeatureType, oldFeatureType); }
private String featureTypeDiffAsString(FeatureTypeDiff diff) { StringBuilder sb = new StringBuilder(); sb.append(diff.toString() + "\n"); if (!diff.getNewFeatureType().equals(ObjectId.NULL) && !diff.getOldFeatureType().equals(ObjectId.NULL)) { RevFeatureType oldFeatureType = getFeatureTypeFromId(diff.getOldFeatureType()).get(); RevFeatureType newFeatureType = getFeatureTypeFromId(diff.getNewFeatureType()).get(); ImmutableList<PropertyDescriptor> oldDescriptors = oldFeatureType.descriptors(); ImmutableList<PropertyDescriptor> newDescriptors = newFeatureType.descriptors();
/** * Returns the reversed version of the current patch. Applying this reversed patch has the * opposite effect to applying the original one, and can be used to undo changes * * @return a reversed version of this patch */ public Patch reversed() { Patch patch = new Patch(); patch.removedFeatures = addedFeatures; patch.addedFeatures = removedFeatures; for (FeatureDiff diff : modifiedFeatures) { patch.modifiedFeatures.add(diff.reversed()); } for (FeatureTypeDiff diff : alteredTrees) { patch.alteredTrees.add(diff.reversed()); } return patch; }
@Test public void testCreatePatchRemoveEmptyFeatureType() throws Exception { WorkingTree workingTree = geogig.getRepository().workingTree(); workingTree.createTypeTree(linesName, linesType); geogig.command(AddOp.class).setUpdateOnly(false).call(); workingTree.delete(linesName); DiffOp op = geogig.command(DiffOp.class).setReportTrees(true); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(1, patch.getAlteredTrees().size()); assertEquals(RevFeatureTypeBuilder.build(linesType).getId(), patch.getAlteredTrees().get(0).getOldFeatureType()); assertEquals(ObjectId.NULL, patch.getAlteredTrees().get(0).getNewFeatureType()); assertEquals(1, patch.getFeatureTypes().size()); } }
FeatureTypeDiff diff = new FeatureTypeDiff(headerTokens[0], ObjectId.valueOf(headerTokens[1]), ObjectId.valueOf(headerTokens[2])); patch.addAlteredTree(diff);
@Test public void testCreatePatchModifyFeatureType() throws Exception { DiffOp op = geogig.command(DiffOp.class).setReportTrees(true); insertAndAdd(points1, points2); geogig.getRepository().workingTree().updateTypeTree(pointsName, modifiedPointsType); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(1, patch.getAlteredTrees().size()); assertEquals(RevFeatureType.builder().type(pointsType).build().getId(), patch.getAlteredTrees().get(0).getOldFeatureType()); assertEquals(RevFeatureType.builder().type(modifiedPointsType).build().getId(), patch.getAlteredTrees().get(0).getNewFeatureType()); assertEquals(2, patch.getFeatureTypes().size()); } }
FeatureTypeDiff diff = new FeatureTypeDiff(headerTokens[0], ObjectId.valueOf(headerTokens[1]), ObjectId.valueOf(headerTokens[2])); patch.addAlteredTree(diff);
@Test public void testCreatePatchRemoveEmptyFeatureType() throws Exception { WorkingTree workingTree = geogig.getRepository().workingTree(); workingTree.createTypeTree(linesName, linesType); geogig.command(AddOp.class).setUpdateOnly(false).call(); workingTree.delete(linesName); DiffOp op = geogig.command(DiffOp.class).setReportTrees(true); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(1, patch.getAlteredTrees().size()); assertEquals(RevFeatureType.builder().type(linesType).build().getId(), patch.getAlteredTrees().get(0).getOldFeatureType()); assertEquals(ObjectId.NULL, patch.getAlteredTrees().get(0).getNewFeatureType()); assertEquals(1, patch.getFeatureTypes().size()); } }