Author: glandais Date: 2008-03-20 16:41:37 +0000 (Thu, 20 Mar 2008) New Revision: 1428 Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java Log: Full featured StorageEngineSecuImpl Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-03-20 16:41:08 UTC (rev 1427) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-03-20 16:41:37 UTC (rev 1428) @@ -50,31 +50,90 @@ @EJB private CredentialManager credentialManager; - /* (non-Javadoc) - * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#deleteElement(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) + /** + * Gets the user filter. + * + * @param token the token + * + * @return the user filter + * + * @throws SimExplorerTechnicalException the sim explorer technical exception */ - @Override - public void deleteElement(String token, String uuid, Version version) throws SimExplorerException { + private String getUserFilter(String token) throws SimExplorerTechnicalException { + // unique id for user logged + String userFilter = credentialManager.getUserFilter(token); + // check if filter should be updated + if (!credentialManager.isCacheValidFor(userFilter)) { + // update filter in database + database.updateFilter(userFilter, credentialManager.getElementsVisibleBy(token)); + } + return userFilter; + } + + /** + * Can delete. + * + * @param token the token + * @param uuid the uuid + * + * @throws SimExplorerException the sim explorer exception + */ + private void canDelete(String token, String uuid) throws SimExplorerException { Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanAdmin()) { - super.deleteElement(token, uuid, version); - } else { + if (!permission.isCanAdmin()) { throw new SimExplorerSecurityException(); } } - @Override - public void deleteData(String token, MetaData entity, Attachment attachment) throws SimExplorerException { - Permission permission = credentialManager.getPermission(token, entity.getUuid()); - if (permission.isCanAdmin()) { - super.deleteData(token, entity, attachment); - } else { + /** + * Can read. + * + * @param token the token + * @param uuid the uuid + * + * @throws SimExplorerException the sim explorer exception + */ + private void canRead(String token, String uuid) throws SimExplorerException { + Permission permission = credentialManager.getPermission(token, uuid); + if (!permission.isCanRead()) { throw new SimExplorerSecurityException(); } + } + /** + * Can write. + * + * @param token the token + * @param uuid the uuid + * + * @throws SimExplorerException the sim explorer exception + */ + private void canWrite(String token, String uuid) throws SimExplorerException { + Permission permission = credentialManager.getPermission(token, uuid); + if (!permission.isCanWrite()) { + throw new SimExplorerSecurityException(); + } } /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#deleteElement(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) + */ + @Override + public void deleteElement(String token, String uuid, Version version) throws SimExplorerException { + canDelete(token, uuid); + super.deleteElement(token, uuid, version); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#deleteData(java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.MetaData, fr.cemagref.simexplorer.is.entities.attachment.Attachment) + */ + @Override + public void deleteData(String token, MetaData entity, Attachment attachment) throws SimExplorerException { + canDelete(token, entity.getUuid()); + super.deleteData(token, entity, attachment); + } + + /* (non-Javadoc) * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#findElementsByType(java.lang.String, java.lang.String, boolean, int, int, int) */ @Override @@ -117,36 +176,13 @@ return database.findElementsByContentSearchCount(query, searchColumn, onlyLatest, userFilter); } - /** - * Gets the user filter. - * - * @param token the token - * - * @return the user filter - * - * @throws SimExplorerTechnicalException the sim explorer technical exception - */ - private String getUserFilter(String token) throws SimExplorerTechnicalException { - String userFilter = credentialManager.getUserFilter(token); - if (!credentialManager.isCacheValidFor(userFilter)) { - database.updateFilter(userFilter, credentialManager.getElementsVisibleBy(token)); - } - return userFilter; - } - /* (non-Javadoc) * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#getMetadata(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) */ @Override public MetaData getMetadata(String token, String uuid, Version version) throws SimExplorerException { - MetaData mde; - Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanRead()) { - mde = super.getMetadata(token, uuid, version); - } else { - throw new SimExplorerSecurityException(); - } - return mde; + canRead(token, uuid); + return super.getMetadata(token, uuid, version); } /* (non-Javadoc) @@ -154,14 +190,8 @@ */ @Override public MetaData getMetadata(String token, String uuid) throws SimExplorerException { - MetaData mde; - Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanRead()) { - mde = super.getMetadata(token, uuid); - } else { - throw new SimExplorerSecurityException(); - } - return mde; + canRead(token, uuid); + return super.getMetadata(token, uuid); } /* (non-Javadoc) @@ -169,14 +199,8 @@ */ @Override public List<Version> getVersions(String token, String uuid) throws SimExplorerException { - List<Version> versions; - Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanRead()) { - versions = super.getVersions(token, uuid); - } else { - throw new SimExplorerSecurityException(); - } - return versions; + canRead(token, uuid); + return super.getVersions(token, uuid); } /* (non-Javadoc) @@ -184,21 +208,15 @@ */ @Override public InputStream retrieveData(String token, MetaData entity, Attachment attachment) throws SimExplorerException { - InputStream stream; - Permission permission = credentialManager.getPermission(token, entity.getUuid()); - if (permission.isCanRead()) { - stream = super.retrieveData(token, entity, attachment); - } else { - throw new SimExplorerSecurityException(); - } - return stream; + canRead(token, entity.getUuid()); + return super.retrieveData(token, entity, attachment); } /* (non-Javadoc) * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#canCreateSubVersion(java.lang.String, java.lang.String) */ @Override - public boolean canCreateSubVersion(String token, String uuid) throws SimExplorerException { + public boolean canCreateSubVersion(String token, String uuid) { Permission permission = credentialManager.getPermission(token, uuid); return permission.isCanWrite(); } @@ -209,13 +227,136 @@ @Override public void saveElement(String token, LoggableElement element, Map<Attachment, InputStream> attachments) throws SimExplorerException { - Permission permission = credentialManager.getPermission(token, element.getMetaData().getUuid()); - if (permission.isCanWrite()) { - super.saveElement(token, element, attachments); - credentialManager.saveElement(token, element.getMetaData().getUuid()); - } else { - throw new SimExplorerSecurityException(); - } + canWrite(token, element.getMetaData().getUuid()); + credentialManager.saveElement(token, element.getMetaData().getUuid()); } + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#close() + */ + @Override + public void close() throws SimExplorerException { + // nothing to check + super.close(); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#commit() + */ + @Override + public void commit() throws SimExplorerException { + // nothing to check + super.commit(); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#convertList(java.util.Collection) + */ + @Override + protected MetaData[] convertList(Collection<MetaData> metadatas) { + // nothing to check + return super.convertList(metadatas); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#deleteTempData(java.lang.String) + */ + @Override + public void deleteTempData(String id) throws SimExplorerException { + // nothing to check + super.deleteTempData(id); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#duplicateElementHierarchy(java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.MetaData, fr.cemagref.simexplorer.is.entities.metadata.MetaData) + */ + @Override + public void duplicateElementHierarchy(String token, MetaData fromElement, MetaData toElement) + throws SimExplorerException { + canRead(token, fromElement.getUuid()); + canWrite(token, toElement.getUuid()); + super.duplicateElementHierarchy(token, fromElement, toElement); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#getElementVersions(java.lang.String, java.lang.String) + */ + @Override + public List<MetaData> getElementVersions(String token, String uuid) throws SimExplorerException { + canRead(token, uuid); + return super.getElementVersions(token, uuid); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#getMetadatasUsedBy(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) + */ + @Override + public MetaData[] getMetadatasUsedBy(String token, String uuid, Version version) throws SimExplorerException { + canRead(token, uuid); + return super.getMetadatasUsedBy(token, uuid, version); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#getMetadatasUsedBy(java.lang.String, java.lang.String) + */ + @Override + public MetaData[] getMetadatasUsedBy(String token, String uuid) throws SimExplorerException { + canRead(token, uuid); + return super.getMetadatasUsedBy(token, uuid); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#getMetadatasUsing(java.lang.String, java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version) + */ + @Override + public MetaData[] getMetadatasUsing(String token, String uuid, Version version) throws SimExplorerException { + canRead(token, uuid); + return super.getMetadatasUsing(token, uuid, version); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#getMetadatasUsing(java.lang.String, java.lang.String) + */ + @Override + public MetaData[] getMetadatasUsing(String token, String uuid) throws SimExplorerException { + canRead(token, uuid); + return super.getMetadatasUsing(token, uuid); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#open() + */ + @Override + public void open() throws SimExplorerException { + // nothing to check + super.open(); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#retrieveTempData(java.lang.String) + */ + @Override + public InputStream retrieveTempData(String id) throws SimExplorerException { + // nothing to check + return super.retrieveTempData(id); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#saveElementHierarchy(java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.MetaData, fr.cemagref.simexplorer.is.entities.metadata.MetaData) + */ + @Override + public void saveElementHierarchy(String token, MetaData parent, MetaData child) throws SimExplorerException { + canWrite(token, parent.getUuid()); + super.saveElementHierarchy(token, parent, child); + } + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#storeTempData(java.io.InputStream) + */ + @Override + public StreamInfo storeTempData(InputStream stream) throws SimExplorerException { + // nothing to check + return super.storeTempData(stream); + } + }