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()));
}
}