TaxonNodeByNameComparator is not a component anymore and add configurable delete...
authorKatja Luther <k.luther@bgbm.org>
Mon, 14 Mar 2016 10:51:59 +0000 (11:51 +0100)
committerKatja Luther <k.luther@bgbm.org>
Mon, 14 Mar 2016 10:51:59 +0000 (11:51 +0100)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeByNameComparator.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaRepresentationDaoImpl.java [moved from cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaRepresentationHibernateImpl.java with 71% similarity]
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaRepresentationPartDaoImpl.java [moved from cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaRepresentationPartHibernateImpl.java with 70% similarity]
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IMediaService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/MediaServiceImpl.java

index 3591691ecee46b8d724a92344e23ada44e712936..15d525dce9cba8008ff5aa93fe6b47d6a2942c55 100644 (file)
@@ -13,7 +13,6 @@ import java.util.Comparator;
 import java.util.StringTokenizer;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.springframework.stereotype.Component;\r
 \r
 import eu.etaxonomy.cdm.common.AbstractStringComparator;\r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
@@ -26,7 +25,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
  * @date 24.06.2009\r
  *\r
  */\r
-@Component\r
+//@Component\r
 public class TaxonNodeByNameComparator extends AbstractStringComparator<TaxonNode> implements Comparator<TaxonNode>, ITaxonNodeComparator<TaxonNode> {\r
 \r
     private static final String HYBRID_SIGN = "\u00D7";\r
@@ -1,26 +1,26 @@
-/**\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);
+       }
+}
@@ -1,26 +1,26 @@
-/**\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);
+       }
+}
index aa8c72bbdb50b0822459871694b896ab5eb11b08..80f2578202fb03195b13bb93c0399b93744f18f0 100644 (file)
@@ -1,9 +1,9 @@
 // $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
@@ -12,7 +12,9 @@ package eu.etaxonomy.cdm.api.service;
 \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
@@ -26,7 +28,7 @@ public interface IMediaService extends IIdentifiableEntityService<Media> {
 \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
@@ -35,21 +37,22 @@ public interface IMediaService extends IIdentifiableEntityService<Media> {
         * @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
@@ -62,5 +65,9 @@ public interface IMediaService extends IIdentifiableEntityService<Media> {
         * @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
index 1cfae20de3a0e9c98a9d3fc27937037d2cf7645f..2b962a5405b14ead33d9171266eafa71f7edd49f 100644 (file)
@@ -1,9 +1,9 @@
 // $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
@@ -13,15 +13,25 @@ package eu.etaxonomy.cdm.api.service;
 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
@@ -33,30 +43,36 @@ import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 @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
@@ -72,4 +88,61 @@ public class MediaServiceImpl extends IdentifiableServiceBase<Media,IMediaDao> i
                }\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