public Integer set(String id, Integer version, T content) throws ResourceStoreException, ResourceNotFoundException {
RuntimeUtilities.checkNotNull(id, "id");
RuntimeUtilities.checkNotNull(version, "version");
RuntimeUtilities.checkNotNull(content, "content");
IResourceStorage.IResource<T> resource = resourceStorage.read(id, version);
try {
if (resource == null) {
IResourceStorage.IHistoryResource historyLatest = resourceStorage.readHistoryLatest(id);
if (historyLatest == null || historyLatest.isDeleted() || version > historyLatest.getVersion()) {
throw createResourceNotFoundException(id, version);
}
IResourceStorage.IResource<T> updatedResource = resourceStorage.newResource(id, version, content);
IResourceStorage.IHistoryResource<T> updatedHistorizedResource = resourceStorage.newHistoryResourceFor(updatedResource, false);
resourceStorage.store(updatedHistorizedResource);
return version;
} else {
IResourceStorage.IResource<T> updatedResource = resourceStorage.newResource(id, version, content);
resourceStorage.store(updatedResource);
return version;
}
} catch (IOException e) {
throw new ResourceStoreException(e.getLocalizedMessage(), e);
}
}