@Override public synchronized void delete(String id, Integer version) throws IResourceStore.ResourceModifiedException, IResourceStore.ResourceNotFoundException { RuntimeUtilities.checkNotNull(id, "id"); RuntimeUtilities.checkNotNull(version, "version"); IResourceStorage.IResource resource = resourceStorage.read(id, version); checkIfFoundAndLatest(id, version, resource); IResourceStorage.IHistoryResource historyResource = resourceStorage.newHistoryResourceFor(resource, true); resourceStorage.store(historyResource); resourceStorage.remove(id); }
@Override public Integer update(String id, Integer version, T content) throws IResourceStore.ResourceStoreException, IResourceStore.ResourceModifiedException, IResourceStore.ResourceNotFoundException { RuntimeUtilities.checkNotNull(id, "id"); RuntimeUtilities.checkNotNull(version, "version"); RuntimeUtilities.checkNotNull(content, "content"); IResourceStorage.IResource resource = resourceStorage.read(id, version); checkIfFoundAndLatest(id, version, resource); IResourceStorage.IHistoryResource history = resourceStorage.newHistoryResourceFor(resource, false); resourceStorage.store(history); try { Integer newVersion = resource.getVersion() + 1; IResourceStorage.IResource newResource = resourceStorage.newResource(resource.getId(), newVersion, content); resourceStorage.store(newResource); return newVersion; } catch (IOException e) { throw new IResourceStore.ResourceStoreException(e.getLocalizedMessage(), e); } }
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); } //it's a update request for a historized resource, so we update the history resource IResourceStorage.IResource<T> updatedResource = resourceStorage.newResource(id, version, content); IResourceStorage.IHistoryResource<T> updatedHistorizedResource = resourceStorage.newHistoryResourceFor(updatedResource, false); resourceStorage.store(updatedHistorizedResource); return version; } else { //it's a update request for the current resource, so we update the current resource IResourceStorage.IResource<T> updatedResource = resourceStorage.newResource(id, version, content); resourceStorage.store(updatedResource); return version; } } catch (IOException e) { throw new ResourceStoreException(e.getLocalizedMessage(), e); } }