@Override public void replaceMetadata(MetadataScope scope, MetadataDataset.Record metadata, Set<String> propertiesToKeep, Set<String> propertiesToPreserve) { Map<ScopedNameOfKind, MetadataDirective> directives = new HashMap<>(); propertiesToKeep.forEach(name -> directives.put(new ScopedNameOfKind(MetadataKind.PROPERTY, scope, name), MetadataDirective.KEEP)); propertiesToPreserve.forEach(name -> directives.put(new ScopedNameOfKind(MetadataKind.PROPERTY, scope, name), MetadataDirective.PRESERVE)); MetadataMutation mutation = new MetadataMutation.Create( metadata.getMetadataEntity(), new Metadata(scope, metadata.getTags(), metadata.getProperties()), directives); applyMutation(mutation); }
new ScopedName(USER, "up1"), "uv1", new ScopedName(USER, "up2"), "uv2")); MetadataMutation create = new MetadataMutation.Create(entity, metadata, Collections.emptyMap()); change = mds.apply(create); Assert.assertEquals(new MetadataChange(entity, previousMetadata, metadata), change); ImmutableMap.of(new ScopedName(SYSTEM, "sp1"), "nsv1", new ScopedName(SYSTEM, "nsp0"), "sv0")); MetadataMutation recreate = new MetadataMutation.Create(entity, recreatedMetadata, ImmutableMap.of( new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), MetadataDirective.KEEP, new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st2"), MetadataDirective.PRESERVE, new ScopedName(SYSTEM, "nsp2"), "sv2", new ScopedName(USER, "up3"), "uv3")); recreate = new MetadataMutation.Create(entity, recreatedMetadata, ImmutableMap.of( new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), MetadataDirective.KEEP, new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st2"), MetadataDirective.PRESERVE,
private MetadataChange apply(MetadataDatasetContext context, MetadataMutation mutation) { switch (mutation.getType()) { case CREATE: MetadataMutation.Create create = (MetadataMutation.Create) mutation; return create(context, create.getEntity(), create.getMetadata(), create.getDirectives()); case DROP: MetadataMutation.Drop drop = (MetadataMutation.Drop) mutation; return drop(context, drop.getEntity()); case UPDATE: MetadataMutation.Update update = (MetadataMutation.Update) mutation; return update(context, update.getEntity(), update.getUpdates()); case REMOVE: MetadataMutation.Remove remove = (MetadataMutation.Remove) mutation; return remove(context, remove); default: throw new IllegalStateException( String.format("Unknown MetadataMutation type %s for %s", mutation.getType(), mutation.getEntity())); } }
@Override public String toString() { return "Create{" + "entity=" + getEntity() + ", metadata=" + getMetadata() + ", directives=" + getDirectives() + '}'; } }