@Override
public <E> Dataset<E> update(String namespace, String name,
DatasetDescriptor descriptor, Class<E> type) {
Preconditions.checkNotNull(namespace, "Namespace cannot be null");
Preconditions.checkNotNull(name, "Dataset name cannot be null");
Preconditions.checkNotNull(descriptor, "Descriptor cannot be null");
DatasetDescriptor oldDescriptor = metadataProvider.load(namespace, name);
Compatibility.checkUpdate(oldDescriptor, descriptor);
DatasetDescriptor updatedDescriptor = metadataProvider.update(namespace, name, descriptor);
LOG.debug("Updated dataset: {} schema: {} location: {}", new Object[] {
name, updatedDescriptor.getSchema(), updatedDescriptor.getLocation() });
return new FileSystemDataset.Builder<E>()
.namespace(namespace)
.name(name)
.configuration(conf)
.descriptor(updatedDescriptor)
.type(type)
.uri(new URIBuilder(getUri(), namespace, name).build())
.partitionKey(updatedDescriptor.isPartitioned() ? new PartitionKey() : null)
.partitionListener(getPartitionListener())
.build();
}