-/**\r
-* Copyright (C) 2008 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-*/\r
-\r
-package eu.etaxonomy.cdm.persistence.dao.hibernate.media;\r
-\r
-import org.springframework.stereotype.Repository;\r
-\r
-import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
-import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;\r
-import eu.etaxonomy.cdm.persistence.dao.media.IMediaRepresentationDao;\r
-\r
-/**\r
- * @author a.babadshanjan\r
- * @created 08.09.2008\r
- */\r
-@Repository\r
-public class MediaRepresentationHibernateImpl extends CdmEntityDaoBase<MediaRepresentation>\r
-implements IMediaRepresentationDao {\r
-\r
- public MediaRepresentationHibernateImpl() {\r
- super(MediaRepresentation.class);\r
- }\r
-}\r
+/**
+* Copyright (C) 2008 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*/
+
+package eu.etaxonomy.cdm.persistence.dao.hibernate.media;
+
+import org.springframework.stereotype.Repository;
+
+import eu.etaxonomy.cdm.model.media.MediaRepresentation;
+import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;
+import eu.etaxonomy.cdm.persistence.dao.media.IMediaRepresentationDao;
+
+/**
+ * @author a.babadshanjan
+ * @created 08.09.2008
+ */
+@Repository
+public class MediaRepresentationDaoImpl extends CdmEntityDaoBase<MediaRepresentation>
+implements IMediaRepresentationDao {
+
+ public MediaRepresentationDaoImpl() {
+ super(MediaRepresentation.class);
+ }
+}
-/**\r
-* Copyright (C) 2008 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-*/\r
-\r
-package eu.etaxonomy.cdm.persistence.dao.hibernate.media;\r
-\r
-import org.springframework.stereotype.Repository;\r
-\r
-import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
-import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;\r
-import eu.etaxonomy.cdm.persistence.dao.media.IMediaRepresentationPartDao;\r
-\r
-/**\r
- * @author a.babadshanjan\r
- * @created 08.09.2008\r
- */\r
-@Repository\r
-public class MediaRepresentationPartHibernateImpl extends CdmEntityDaoBase<MediaRepresentationPart>\r
-implements IMediaRepresentationPartDao {\r
-\r
- public MediaRepresentationPartHibernateImpl() {\r
- super(MediaRepresentationPart.class);\r
- }\r
-}\r
+/**
+* Copyright (C) 2008 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*/
+
+package eu.etaxonomy.cdm.persistence.dao.hibernate.media;
+
+import org.springframework.stereotype.Repository;
+
+import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
+import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;
+import eu.etaxonomy.cdm.persistence.dao.media.IMediaRepresentationPartDao;
+
+/**
+ * @author a.babadshanjan
+ * @created 08.09.2008
+ */
+@Repository
+public class MediaRepresentationPartDaoImpl extends CdmEntityDaoBase<MediaRepresentationPart>
+implements IMediaRepresentationPartDao {
+
+ public MediaRepresentationPartDaoImpl() {
+ super(MediaRepresentationPart.class);
+ }
+}
// $Id$\r
/**\r
* Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
+ * European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
- * \r
+ *\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
\r
import java.util.List;\r
import java.util.Set;\r
+import java.util.UUID;\r
\r
+import eu.etaxonomy.cdm.api.service.config.MediaDeletionConfigurator;\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.model.description.MediaKey;\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
\r
/**\r
* Return a List of MediaKeys, optionally filtered by the parameters passed.\r
- * \r
+ *\r
* @param taxonomicScope a Set of Taxon instances that define the taxonomic scope of the key (can be null)\r
* @param geoScopes a Set of NamedArea instances that define the geospatial scope of the key (can be null)\r
* @param pageSize The maximum number of keys returned (can be null for all keys)\r
* @return a Pager containing MediaKey instances\r
*/\r
public Pager<MediaKey> getMediaKeys(Set<Taxon> taxonomicScope, Set<NamedArea> geoScopes, Integer pageSize, Integer pageNumber, List<String> propertyPaths);\r
- \r
+\r
/**\r
* Return a Pager of rights belonging to this object\r
- * \r
+ *\r
* @param t The media object\r
* @param pageSize The maximum number of rights returned (can be null for all rights)\r
* @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)\r
* @param propertyPaths properties to initialize - see {@link IBeanInitializer#initialize(Object, List)}\r
* @return a Pager of Rights entities\r
*/\r
+ @Override\r
public Pager<Rights> getRights(Media t, Integer pageSize, Integer pageNumber, List<String> propertyPaths);\r
- \r
+\r
/**\r
* Returns a Paged List of Media instances where the default field matches the String queryString (as interpreted by the Lucene QueryParser)\r
- * \r
+ *\r
* @param clazz filter the results by class (or pass null to return all Media instances)\r
* @param queryString\r
* @param pageSize The maximum number of media returned (can be null for all matching media)\r
* @return a Pager Media instances\r
* @see <a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html">Apache Lucene - Query Parser Syntax</a>\r
*/\r
- public Pager<Media> search(Class<? extends Media> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
+ @Override\r
+ public Pager<Media> search(Class<? extends Media> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
+\r
+\r
+ public DeleteResult delete(UUID mediaUuid, MediaDeletionConfigurator config);\r
}\r
// $Id$\r
/**\r
* Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
+ * European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
- * \r
+ *\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
import java.util.ArrayList;\r
import java.util.List;\r
import java.util.Set;\r
+import java.util.UUID;\r
\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
+import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;\r
+import eu.etaxonomy.cdm.api.service.config.MediaDeletionConfigurator;\r
+import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
import eu.etaxonomy.cdm.model.description.MediaKey;\r
+import eu.etaxonomy.cdm.model.description.SpecimenDescription;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.description.TextData;\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
import eu.etaxonomy.cdm.model.media.Media;\r
import eu.etaxonomy.cdm.model.media.Rights;\r
@Transactional(readOnly=true)\r
public class MediaServiceImpl extends IdentifiableServiceBase<Media,IMediaDao> implements IMediaService {\r
\r
- @Autowired\r
+ @Override\r
+ @Autowired\r
protected void setDao(IMediaDao dao) {\r
this.dao = dao;\r
}\r
\r
- public Pager<MediaKey> getMediaKeys(Set<Taxon> taxonomicScope, Set<NamedArea> geoScopes, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
+ @Autowired\r
+ private IDescriptionService descriptionService;\r
+\r
+ @Override\r
+ public Pager<MediaKey> getMediaKeys(Set<Taxon> taxonomicScope, Set<NamedArea> geoScopes, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
Integer numberOfResults = dao.countMediaKeys(taxonomicScope, geoScopes);\r
- \r
+\r
List<MediaKey> results = new ArrayList<MediaKey>();\r
if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
- results = dao.getMediaKeys(taxonomicScope, geoScopes, pageSize, pageNumber, propertyPaths); \r
+ results = dao.getMediaKeys(taxonomicScope, geoScopes, pageSize, pageNumber, propertyPaths);\r
}\r
- \r
+\r
return new DefaultPagerImpl<MediaKey>(pageNumber, numberOfResults, pageSize, results);\r
}\r
- \r
- public Pager<Rights> getRights(Media t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
+\r
+ @Override\r
+ public Pager<Rights> getRights(Media t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {\r
Integer numberOfResults = dao.countRights(t);\r
- \r
+\r
List<Rights> results = new ArrayList<Rights>();\r
if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
- results = dao.getRights(t, pageSize, pageNumber,propertyPaths); \r
+ results = dao.getRights(t, pageSize, pageNumber,propertyPaths);\r
}\r
- \r
+\r
return new DefaultPagerImpl<Rights>(pageNumber, numberOfResults, pageSize, results);\r
}\r
\r
}\r
super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);\r
}\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.IMediaService#delete(java.util.UUID, eu.etaxonomy.cdm.api.service.config.MediaDeletionConfigurator)\r
+ */\r
+ @Override\r
+ public DeleteResult delete(UUID mediaUuid, MediaDeletionConfigurator config) {\r
+ DeleteResult result = new DeleteResult();\r
+ Media media = this.load(mediaUuid);\r
+\r
+ result = isDeletable(media, config);\r
+\r
+ if (result.isOk()){\r
+ dao.delete(media);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public DeleteResult isDeletable(Media media, DeleteConfiguratorBase config){\r
+ DeleteResult result = new DeleteResult();\r
+ Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(media);\r
+ String message = null;\r
+ for (CdmBase ref: references){\r
+ if (ref instanceof TextData){\r
+ TextData textData = HibernateProxyHelper.deproxy(ref, TextData.class);\r
+ DescriptionBase description = textData.getInDescription();\r
+ if (description.isImageGallery()){\r
+ if (description instanceof TaxonDescription){\r
+ TaxonDescription desc = HibernateProxyHelper.deproxy(description, TaxonDescription.class);\r
+ if (desc.getTaxon() == null){\r
+ continue;\r
+ } else{\r
+ message = "The media can't be deleted because it is referenced by a taxon. ("+desc.getTaxon().getTitleCache()+")";\r
+ }\r
+\r
+ } else if (description instanceof SpecimenDescription){\r
+ SpecimenDescription desc = HibernateProxyHelper.deproxy(description, SpecimenDescription.class);\r
+ if (desc.getDescribedSpecimenOrObservation() == null){\r
+ continue;\r
+ } else{\r
+ message = "The media can't be deleted because it is referenced by a specimen or observation. ("+desc.getDescribedSpecimenOrObservation().getTitleCache()+")";\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (message != null){\r
+ result.addException(new ReferencedObjectUndeletableException(message));\r
+ result.addRelatedObject(ref);\r
+ result.setAbort();\r
+ }\r
+\r
+ }\r
+\r
+\r
+ return result;\r
+\r
+ }\r
}\r