@Override public boolean equals(Object o) { if (o instanceof Index) { Index i = (Index) o; return info().equals(i.info()) && indexTreeId().equals(i.indexTreeId()); } return false; }
@Override public boolean equals(Object o) { if (o instanceof Index) { Index i = (Index) o; return info().equals(i.info()) && indexTreeId().equals(i.indexTreeId()); } return false; }
/** * Verifies the index was using by inspecting {@link DiffTree#setNewTree} was given the index * objectId */ private void verifyUsesIndex(Index index) { ObjectId indexTreeId = index.indexTreeId(); verify(difftree).setNewTree(eq(indexTreeId)); }
/** * Verifies the index was using by inspecting {@link DiffTree#setNewTree} was given the index * objectId */ private void verifyUsesIndex(Index index) { ObjectId indexTreeId = index.indexTreeId(); verify(difftree).setNewTree(eq(indexTreeId)); }
@Override public void write(ResponseWriter out) throws Exception { out.start(); out.writeIndexInfo(index.info(), "index", false); out.writeElement("indexedTreeId", index.indexTreeId().toString()); out.finish(); } });
@Override public void write(ResponseWriter out) throws Exception { out.start(); out.writeIndexInfo(index.info(), "index", false); out.writeElement("indexedTreeId", index.indexTreeId().toString()); out.finish(); } });
@Test public void testEqualIndexesWithDifferentExtraAttributesHashDifferently() { Index noExtraAtts = createAndBuildIndex(); Index xExtraAtts = updateIndex(noExtraAtts.info().getTreeName(), "x"); Index yExtraAtts = updateIndex(noExtraAtts.info().getTreeName(), "y"); assertNotEquals(noExtraAtts, xExtraAtts); assertNotEquals(xExtraAtts, yExtraAtts); assertNotEquals(noExtraAtts.indexTreeId(), xExtraAtts.indexTreeId()); assertNotEquals(xExtraAtts.indexTreeId(), yExtraAtts.indexTreeId()); }
@Test public void testEqualIndexesWithDifferentExtraAttributesHashDifferently() { Index noExtraAtts = createAndBuildIndex(); Index xExtraAtts = updateIndex(noExtraAtts.info().getTreeName(), "x"); Index yExtraAtts = updateIndex(noExtraAtts.info().getTreeName(), "y"); assertNotEquals(noExtraAtts, xExtraAtts); assertNotEquals(xExtraAtts, yExtraAtts); assertNotEquals(noExtraAtts.indexTreeId(), xExtraAtts.indexTreeId()); assertNotEquals(xExtraAtts.indexTreeId(), yExtraAtts.indexTreeId()); }
} else { cli.getConsole().println("Index created successfully: " + index.indexTreeId().toString().substring(0, 8));
@Test public void testUpdateIndexAddAttributes() { createIndex(); Index index = geogig.command(UpdateIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .setExtraAttributes(Lists.newArrayList("x", "y"))// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(2, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(new Envelope(-180, 180, -90, 90), indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); List<String> extraAttributes = Lists.newArrayList( (String[]) indexInfo.getMetadata().get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); assertEquals(2, extraAttributes.size()); assertTrue(extraAttributes.contains("x")); assertTrue(extraAttributes.contains("y")); ObjectId canonicalFeatureTreeId = geogig.command(ResolveTreeish.class) .setTreeish("HEAD:" + worldPointsLayer.getName()).call().get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, canonicalFeatureTreeId); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, indexedTreeId.get(), canonicalFeatureTreeId, "x", "y"); }
@Override protected void runInternal(GeogigCLI cli) throws InvalidParameterException, CommandFailedException, IOException { Repository repo = cli.getGeogig().getRepository(); Envelope envelope = SpatialOps.parseNonReferencedBBOX(bbox); Index index = repo.command(CreateQuadTree.class)// .setTreeRefSpec(treeRefSpec)// .setGeometryAttributeName(attribute)// .setExtraAttributes(extraAttributes)// .setIndexHistory(indexHistory)// .setBounds(envelope)// .setProgressListener(cli.getProgressListener())// .call(); if (cli.getProgressListener().isCanceled()) { cli.getConsole().println("Index creation cancelled."); } else { cli.getConsole().println("Index created successfully: " + index.indexTreeId().toString().substring(0, 8)); } } }
@Test public void testCreateIndexMetadata() { Envelope bounds = new Envelope(-180, 180, -90, 90); Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put(IndexInfo.MD_QUAD_MAX_BOUNDS, bounds); metadata.put("SomeKey", "SomeValue"); Index index = geogig.command(CreateIndexOp.class)// .setTreeName(worldPointsLayer.getName())// .setCanonicalTypeTree(worldPointsTree)// .setFeatureTypeId(worldPointsLayer.getMetadataId().get())// .setAttributeName("geom")// .setIndexType(IndexType.QUADTREE)// .setMetadata(metadata)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(2, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(bounds, indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertTrue(indexInfo.getMetadata().containsKey("SomeKey")); assertEquals("SomeValue", indexInfo.getMetadata().get("SomeKey")); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, worldPointsTree.getId()); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, index.indexTreeId(), worldPointsTree.getId()); }
} else { cli.getConsole().println("Index updated successfully: " + index.indexTreeId().toString().substring(0, 8));
@Test public void testUpdateIndexOverwriteExistingAttributes() { createIndex("x"); Index index = geogig.command(UpdateIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .setExtraAttributes(Lists.newArrayList("y"))// .setOverwrite(true)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(2, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(new Envelope(-180, 180, -90, 90), indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); List<String> extraAttributes = Lists.newArrayList( (String[]) indexInfo.getMetadata().get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); assertEquals(1, extraAttributes.size()); assertTrue(extraAttributes.contains("y")); ObjectId canonicalFeatureTreeId = geogig.command(ResolveTreeish.class) .setTreeish("HEAD:" + worldPointsLayer.getName()).call().get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, canonicalFeatureTreeId); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, indexedTreeId.get(), canonicalFeatureTreeId, "y"); }
@Test public void testUpdateIndexOverwriteExistingAttributes() { createIndex("x"); Index index = geogig.command(UpdateIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .setExtraAttributes(Lists.newArrayList("y"))// .setOverwrite(true)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(2, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(new Envelope(-180, 180, -90, 90), indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); List<String> extraAttributes = Lists.newArrayList( (String[]) indexInfo.getMetadata().get(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); assertEquals(1, extraAttributes.size()); assertTrue(extraAttributes.contains("y")); ObjectId canonicalFeatureTreeId = geogig.command(ResolveTreeish.class) .setTreeish("HEAD:" + worldPointsLayer.getName()).call().get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, canonicalFeatureTreeId); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, indexedTreeId.get(), canonicalFeatureTreeId, "y"); }
@Test public void testCreateIndex() { Envelope bounds = new Envelope(-180, 180, -90, 90); Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put(IndexInfo.MD_QUAD_MAX_BOUNDS, bounds); Index index = geogig.command(CreateIndexOp.class)// .setTreeName(worldPointsLayer.getName())// .setCanonicalTypeTree(worldPointsTree)// .setFeatureTypeId(worldPointsLayer.getMetadataId().get())// .setAttributeName("geom")// .setIndexType(IndexType.QUADTREE)// .setMetadata(metadata)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(1, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(bounds, indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, worldPointsTree.getId()); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, index.indexTreeId(), worldPointsTree.getId()); }
@Test public void testCreateIndex() { Envelope bounds = new Envelope(-180, 180, -90, 90); Map<String, Object> metadata = new HashMap<String, Object>(); metadata.put(IndexInfo.MD_QUAD_MAX_BOUNDS, bounds); Index index = geogig.command(CreateIndexOp.class)// .setTreeName(worldPointsLayer.getName())// .setCanonicalTypeTree(worldPointsTree)// .setFeatureTypeId(worldPointsLayer.getMetadataId().get())// .setAttributeName("geom")// .setIndexType(IndexType.QUADTREE)// .setMetadata(metadata)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(1, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(bounds, indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, worldPointsTree.getId()); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, index.indexTreeId(), worldPointsTree.getId()); }
@Override protected void runInternal(GeogigCLI cli) throws InvalidParameterException, CommandFailedException, IOException { Repository repo = cli.getGeogig().getRepository(); Envelope envelope = SpatialOps.parseNonReferencedBBOX(bbox); Index index = repo.command(UpdateIndexOp.class)// .setTreeRefSpec(treeRefSpec)// .setAttributeName(attribute)// .setExtraAttributes(extraAttributes)// .setOverwrite(overwrite)// .setAdd(add)// .setIndexHistory(indexHistory)// .setBounds(envelope)// .setProgressListener(cli.getProgressListener())// .call(); if (cli.getProgressListener().isCanceled()) { cli.getConsole().println("Index update cancelled."); } else { cli.getConsole().println( "Index updated successfully: " + index.indexTreeId().toString().substring(0, 8)); } } }
@Test public void testUpdateIndexRemoveExistingAttributes() { createIndex("x"); Index index = geogig.command(UpdateIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .setExtraAttributes(null)// .setOverwrite(true)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(1, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(new Envelope(-180, 180, -90, 90), indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertFalse(indexInfo.getMetadata().containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); ObjectId canonicalFeatureTreeId = geogig.command(ResolveTreeish.class) .setTreeish("HEAD:" + worldPointsLayer.getName()).call().get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, canonicalFeatureTreeId); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, indexedTreeId.get(), canonicalFeatureTreeId); }
@Test public void testUpdateIndexRemoveExistingAttributes() { createIndex("x"); Index index = geogig.command(UpdateIndexOp.class)// .setTreeRefSpec(worldPointsLayer.getName())// .setExtraAttributes(null)// .setOverwrite(true)// .call(); IndexInfo indexInfo = indexdb.getIndexInfo(worldPointsLayer.getName(), "geom").get(); assertEquals(indexInfo, index.info()); assertEquals(worldPointsLayer.getName(), indexInfo.getTreeName()); assertEquals("geom", indexInfo.getAttributeName()); assertEquals(IndexType.QUADTREE, indexInfo.getIndexType()); assertEquals(1, indexInfo.getMetadata().size()); assertTrue(indexInfo.getMetadata().containsKey(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertEquals(new Envelope(-180, 180, -90, 90), indexInfo.getMetadata().get(IndexInfo.MD_QUAD_MAX_BOUNDS)); assertFalse(indexInfo.getMetadata().containsKey(IndexInfo.FEATURE_ATTRIBUTES_EXTRA_DATA)); ObjectId canonicalFeatureTreeId = geogig.command(ResolveTreeish.class) .setTreeish("HEAD:" + worldPointsLayer.getName()).call().get(); Optional<ObjectId> indexedTreeId = indexdb.resolveIndexedTree(indexInfo, canonicalFeatureTreeId); assertTrue(indexedTreeId.isPresent()); assertEquals(indexedTreeId.get(), index.indexTreeId()); IndexTestSupport.verifyIndex(geogig, indexedTreeId.get(), canonicalFeatureTreeId); }