@Override public Set<String> getTags(MetadataEntity entity) { Metadata metadata = performRead(new Read(entity, MetadataKind.TAG)); return metadata.getTags().stream().map(ScopedName::getName).collect(Collectors.toSet()); }
@Override public Map<String, String> getProperties(MetadataEntity entity) { Metadata metadata = performRead(new Read(entity, MetadataKind.PROPERTY)); return metadata.getProperties().entrySet().stream() .collect(Collectors.toMap(entry -> entry.getKey().getName(), Map.Entry::getValue)); }
@Override public Set<MetadataRecord> getMetadata(MetadataEntity metadataEntity) { Metadata metadata = performRead(new Read(metadataEntity)); return MetadataScope.ALL.stream() .map(scope -> new MetadataRecord(metadataEntity, scope, metadata.getProperties(scope), metadata.getTags(scope))) .collect(Collectors.toSet()); }
@Override public Map<String, String> getProperties(MetadataScope scope, MetadataEntity entity) { Metadata metadata = performRead(new Read(entity, scope, MetadataKind.PROPERTY)); return metadata.getProperties(scope); }
@Override public Set<String> getTags(MetadataScope scope, MetadataEntity entity) { Metadata metadata = performRead(new Read(entity, scope, MetadataKind.TAG)); return metadata.getTags(scope); }
@Override public MetadataRecord getMetadata(MetadataScope scope, MetadataEntity metadataEntity) { Metadata metadata = performRead(new Read(metadataEntity, scope)); return new MetadataRecord(metadataEntity, scope, metadata.getProperties(scope), metadata.getTags(scope)); }
private void verifyFilteredMetadata(MetadataStorage mds, MetadataEntity entity, Metadata metadata, MetadataScope scope, MetadataKind kind) throws IOException { Assert.assertEquals(filterBy(metadata, scope, kind), mds.read(new Read(entity, scope, kind))); }
private void verifyMetadataSelection(MetadataStorage mds, MetadataEntity entity, Metadata metadata, ImmutableSet<ScopedNameOfKind> selection) throws IOException { Assert.assertEquals(filterBy(metadata, selection), mds.read(new Read(entity, selection))); }
private void verifyMetadata(MetadataStorage mds, MetadataEntity entity, Metadata metadata) throws IOException { // verify entire metadata Assert.assertEquals(metadata, mds.read(new Read(entity))); // filter by scope verifyFilteredMetadata(mds, entity, metadata, SYSTEM, null); verifyFilteredMetadata(mds, entity, metadata, USER, null); // filter by kind verifyFilteredMetadata(mds, entity, metadata, null, PROPERTY); verifyFilteredMetadata(mds, entity, metadata, null, MetadataKind.TAG); // filter by kind and scope verifyFilteredMetadata(mds, entity, metadata, SYSTEM, PROPERTY); verifyFilteredMetadata(mds, entity, metadata, SYSTEM, MetadataKind.TAG); verifyFilteredMetadata(mds, entity, metadata, USER, PROPERTY); verifyFilteredMetadata(mds, entity, metadata, USER, MetadataKind.TAG); }
@Test public void testSearchOnTagsUpdate() throws IOException { MetadataStorage mds = getMetadataStorage(); MetadataEntity entity = NamespaceId.DEFAULT.app("appX").workflow("wtf").toMetadataEntity(); Metadata meta = new Metadata(SYSTEM, tags("tag1", "tag2")); mds.apply(new Update(entity, meta)); Assert.assertEquals(meta.getTags(SYSTEM), mds.read(new Read(entity, SYSTEM)).getTags(SYSTEM)); assertResults(mds, SearchRequest.of("tag1").build(), new MetadataRecord(entity, meta)); // add an more tags mds.apply(new Update(entity, new Metadata(SYSTEM, tags("tag3", "tag4")))); Set<String> newTags = tags("tag1", "tag2", "tag3", "tag4"); Metadata newMeta = new Metadata(SYSTEM, newTags); Assert.assertEquals(newTags, mds.read(new Read(entity, SYSTEM)).getTags(SYSTEM)); for (String expectedTag : newTags) { assertResults(mds, SearchRequest.of(expectedTag).build(), new MetadataRecord(entity, newMeta)); } // add an empty set of tags. This should have no effect on retrieval or search of tags mds.apply(new Update(entity, new Metadata(SYSTEM, tags()))); Assert.assertEquals(newTags, mds.read(new Read(entity, SYSTEM)).getTags(SYSTEM)); for (String expectedTag : newTags) { assertResults(mds, SearchRequest.of(expectedTag).build(), new MetadataRecord(entity, newMeta)); } // clean up mds.apply(new Drop(entity)); }
Assert.assertEquals(Metadata.EMPTY, mds.read(new Read(entity)));