private MetadataChange remove(MetadataDatasetContext context, MetadataMutation.Remove remove) { MetadataEntity entity = remove.getEntity(); MetadataDataset.Change userChange, systemChange; if (remove.getRemovals() != null) { Set<String> userTagsToRemove = new HashSet<>(); Set<String> systemTagsToRemove = new HashSet<>(); Set<String> userPropertiesToRemove = new HashSet<>(); Set<String> systemPropertiesToRemove = new HashSet<>(); remove.getRemovals().forEach(removal -> (TAG == removal.getKind() ? USER == removal.getScope() ? userTagsToRemove : systemTagsToRemove : USER == removal.getScope() ? userPropertiesToRemove : systemPropertiesToRemove) .add(removal.getName())); userChange = removeInScope(context, USER, entity, userTagsToRemove, userPropertiesToRemove); systemChange = removeInScope(context, SYSTEM, entity, systemTagsToRemove, systemPropertiesToRemove); } else { Set<MetadataScope> scopes = remove.getScopes(); Set<MetadataKind> kinds = remove.getKinds(); userChange = removeScope(context, USER, entity, scopes, kinds); systemChange = removeScope(context, SYSTEM, entity, scopes, kinds); } return combineChanges(entity, userChange, systemChange); }