Merge branch 'master' of wp5.e-taxonomy.eu:/var/git/cdmlib into remoting-4.0
authorCherian Mathew <c.mathew@bgbm.org>
Mon, 8 Jun 2015 11:08:01 +0000 (13:08 +0200)
committerCherian Mathew <c.mathew@bgbm.org>
Mon, 8 Jun 2015 11:08:01 +0000 (13:08 +0200)
Conflicts:
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/DefinedTerm.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/INameService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IPolytomousKeyNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java

15 files changed:
1  2 
.gitattributes
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/agent/Team.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/DefinedTerm.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NonViralName.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNode.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/INameService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IPolytomousKeyNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/UpdateResult.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceSearchTest.java

diff --cc .gitattributes
Simple merge
index cbee2239f33e8c6889561bd00a2e2dbfc1aa64d0,c567cda69de6afc18b986705cf51b90df9a313af..cbb0505d259dc685762fe40ad04f2623506be729
@@@ -89,9 -90,13 +90,13 @@@ public class Team extends TeamOrPersonB
      @XmlSchemaType(name = "IDREF")
      @IndexColumn(name="sortIndex", base = 0)
        @ManyToMany(fetch = FetchType.LAZY)
 -      @Cascade(CascadeType.SAVE_UPDATE)
 +      @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
        @Match(MatchMode.MATCH)
        private List<Person> teamMembers;
+     
+     @XmlElement(name = "hasMoreMembers")
+       private boolean hasMoreMembers;
  
  
        /**
index 2051a3457cf832531f3f3fbc61e18e457834d146,c91995d846a42e242a2c195b08ab7648c07f20fb..c3d1712048d0610485705d613b9b0fdc9fd17f7a
@@@ -52,7 -52,7 +52,7 @@@ public class DefinedTerm extends Define
        //kindOfUnit\r
        public static final UUID uuidSpecimenScan = UUID.fromString("acda15be-c0e2-4ea8-8783-b9b0c4ad7f03");\r
        public static final UUID uuidDetailImage = UUID.fromString("31eb8d02-bf5d-437c-bcc6-87a626445f34");\r
 -      //...\r
++\r
  \r
        //Identifier Type\r
        public static final UUID uuidLsid = UUID.fromString("26729412-9df6-4cc3-9e5d-501531ca21f0");\r
index 65f75c22b0fac90b4ed706a2a08c2cf7d67642e2,e04e79f20a74586de1d5b65c0d27e4e48037171e..58972c53fadade1e3d58f21c41b3562dba4d398c
@@@ -182,7 -183,8 +183,8 @@@ public class NonViralName<T extends Non
      @XmlSchemaType(name = "IDREF")
      @ManyToOne(fetch = FetchType.LAZY)
  //    @Target(TeamOrPersonBase.class)
 -    @Cascade(CascadeType.SAVE_UPDATE)
 +    @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+     @JoinColumn(name="combinationAuthorship_id")
      @CacheUpdate("authorshipCache")
      @IndexedEmbedded
      private TeamOrPersonBase<?> combinationAuthorTeam;
      @XmlSchemaType(name = "IDREF")
      @ManyToOne(fetch = FetchType.LAZY)
  //    @Target(TeamOrPersonBase.class)
 -    @Cascade(CascadeType.SAVE_UPDATE)
 +    @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+     @JoinColumn(name="exCombinationAuthorship_id")
      @CacheUpdate("authorshipCache")
      @IndexedEmbedded
      private TeamOrPersonBase<?> exCombinationAuthorTeam;
      @XmlSchemaType(name = "IDREF")
      @ManyToOne(fetch = FetchType.LAZY)
  //    @Target(TeamOrPersonBase.class)
 -    @Cascade(CascadeType.SAVE_UPDATE)
 +    @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+     @JoinColumn(name="basionymAuthorship_id")
      @CacheUpdate("authorshipCache")
      @IndexedEmbedded
      private TeamOrPersonBase<?> basionymAuthorTeam;
      @XmlSchemaType(name = "IDREF")
      @ManyToOne(fetch = FetchType.LAZY)
  //    @Target(TeamOrPersonBase.class)
 -    @Cascade(CascadeType.SAVE_UPDATE)
 +    @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+     @JoinColumn(name="exBasionymAuthorship_id")
      @CacheUpdate("authorshipCache")
      @IndexedEmbedded
      private TeamOrPersonBase<?> exBasionymAuthorTeam;
index 9718dcf89e8ea552cfbb0668600999e144e09d10,2bd7f350f7810725c4e79a6efb6adc5a3803826b..4c3cce4282f1af505e6f30c1b7d0b21eff0750e3
@@@ -473,13 -473,6 +473,13 @@@ public interface INameService extends I
       * @return\r
       */\r
      public List<TaggedText> getTaggedName(UUID uuid);\r
\r
 -      List<HashMap<String, String>> getNameRecords();\r
 +    /**\r
 +     * @param nameUuid\r
 +     * @return\r
 +     */\r
 +    public UpdateResult setAsGroupsBasionym(UUID nameUuid);\r
++\r
 +      public List<HashMap<String, String>> getNameRecords();\r
++\r
  }
index 5fd52943a5da960f953333a5c8c9e7f1f43ecf79,62c3a846f7f3773f4a057951204d94a97344f579..1162b2cc92547faf379da74b594b5b2043a43fb5
@@@ -20,7 -20,7 +20,10 @@@ import eu.etaxonomy.cdm.model.descripti
   */\r
  public interface IPolytomousKeyNodeService extends IVersionableService<PolytomousKeyNode> {\r
  \r
 -      //public UUID delete(PolytomousKeyNode node, boolean deleteChildren);\r
\r
 -      public DeleteResult delete(UUID nodeUUID, boolean deleteChildren);\r
 +      public DeleteResult delete(PolytomousKeyNode node, boolean deleteChildren);\r
 +\r
 +    public DeleteResult delete(UUID nodeUuid, boolean deleteChildren);\r
++\r
++\r
  }\r
index b92e79eab9b3008943339fb37d2b81f98a87e883,d4f30c97feef96dd9bd0a06928e385cba4d25a8c..777ba8cb82d585d6851828cd82edea72bbc48c19
@@@ -112,22 -91,20 +112,24 @@@ public interface ITaxonNodeService exte
         */
        public int countAllNodesForClassification(Classification classification);
  
 -      public UpdateResult moveTaxonNode(TaxonNode taxonNode, TaxonNode newParent);
 -
 -      public UpdateResult moveTaxonNode(UUID taxonNodeUUID, UUID newParentUUID);
 -
+       public DeleteResult deleteTaxonNode(UUID nodeUUID, TaxonDeletionConfigurator config);
  
 -      UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID targetNodeUuid,
 -                      boolean moveToParent);
 -
 -      
 -
 +    /**
 +     * @param taxonNode
 +     * @param newParentTaxonNode
 +     * @return
 +     */
 +    public UpdateResult moveTaxonNode(TaxonNode taxonNode, TaxonNode newParentTaxonNode);
  
 +      public UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID targetNodeUuid, boolean moveToParent);
  
  
 +    /**
 +     * @param taxonNodeUuid
 +     * @param newParentTaxonNodeUuid
 +     * @return
 +     */
 +    public UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID newParentTaxonNodeUuid);
  
  }
index 086ba3996ef4eb05d51506f44da5906bf8199b35,d202a8aee8466ab287882d36c0bb340d352ca93a..b6d22f8a27b373a654b65f9f77f429070a06aebf
@@@ -936,21 -936,11 +936,22 @@@ public class NameServiceImpl extends Id
  \r
      }\r
  \r
 +    @Override\r
 +    @Transactional(readOnly = true)\r
 +    public UpdateResult setAsGroupsBasionym(UUID nameUuid) {\r
 +        TaxonNameBase name = dao.load(nameUuid);\r
 +        UpdateResult result = new UpdateResult();\r
 +        name.setAsGroupsBasionym();\r
 +        result.addUpdatedObject(name);\r
 +        return result;\r
++\r
 +    }\r
 +\r
      @Override\r
      public List<HashMap<String,String>> getNameRecords(){\r
-       \r
\r
                return dao.getNameRecords();\r
-       \r
\r
      }\r
  \r
  }\r
index 9796d17c518998f8052e95383a4017c0a4cba4f1,c69df745e009a3f187b4e87d68f00b2d9643beab..f55b307b91386edcde334778df5db4c0ae95c78d
@@@ -35,22 -37,26 +35,27 @@@ public class PolytomousKeyNodeServiceIm
        protected void setDao(IPolytomousKeyNodeDao dao) {\r
                this.dao = dao;\r
        }\r
 -      \r
 +\r
        @Override\r
-       public DeleteResult delete(PolytomousKeyNode node, boolean deleteChildren){\r
-               UUID uuid = node.getUuid();\r
+       public DeleteResult delete(UUID nodeUUID, boolean deleteChildren){\r
+               DeleteResult result = new DeleteResult();\r
+               PolytomousKeyNode node = dao.findByUuid(nodeUUID);\r
                node = (PolytomousKeyNode)HibernateProxyHelper.deproxy(node);\r
-               List<PolytomousKeyNode> children = node.getChildren();
-               PolytomousKeyNode parent = node.getParent();
+               List<PolytomousKeyNode> children = node.getChildren();\r
+               PolytomousKeyNode parent = node.getParent();\r
+               parent = HibernateProxyHelper.deproxy(parent, PolytomousKeyNode.class);\r
++\r
                if(!deleteChildren){\r
 -                      \r
 +\r
                        for (PolytomousKeyNode child: children){\r
                                parent.addChild(child);\r
                                parent.removeChild(node);\r
                                dao.update(child);\r
+                               result.addUpdatedObject(child);\r
                        }\r
 -                      \r
 +\r
                        dao.update(node);\r
+                       result.addUpdatedObject(node);\r
                }\r
                if (node.getParent()!= null){\r
                        node.getParent().removeChild(node);\r
                if (node.getKey().getRoot().equals(node)){\r
                        node.getKey().setRoot(null);\r
                }\r
-               dao.delete(node);\r
+               if (dao.delete(node) == null){\r
+                       result.setAbort();\r
+               }\r
                dao.saveOrUpdate(parent);\r
-               DeleteResult result = new DeleteResult();\r
                result.addUpdatedObject(parent);\r
                return result;\r
 -              \r
 +\r
        }\r
  \r
 +         @Override\r
 +          public DeleteResult delete(UUID nodeUuid, boolean deleteChildren){\r
 +             PolytomousKeyNode node = dao.load(nodeUuid);\r
 +             return delete(node, deleteChildren);\r
 +         }\r
 +\r
  }\r
index d8b1b7e45ef44959def54b02d8a58ebc8ce59a57,47d2218513a18a404dd7069e5eba4592a0f16e6b..c8b8580c9ba2deddb55cc06dabb2588c54e03502
@@@ -294,9 -272,9 +302,9 @@@ public class TaxonNodeServiceImpl exten
                        if (treeNode instanceof TaxonNode){
                                TaxonNode taxonNode;
                            taxonNode = HibernateProxyHelper.deproxy(treeNode, TaxonNode.class);
+                           TaxonNode parent = taxonNode.getParent();
                                //check whether the node has children or the children are already deleted
 -                          if(taxonNode.hasChildNodes()){
 +                          if(taxonNode.hasChildNodes()) {
                                Set<ITaxonTreeNode> children = new HashSet<ITaxonTreeNode> ();
                                List<TaxonNode> childNodesList = taxonNode.getChildNodes();
                                        children.addAll(childNodesList);
  
      }
  
 +
 +    @Override
 +    @Transactional(readOnly = false)
 +    public DeleteResult deleteTaxonNodes(Collection<UUID> nodeUuids, TaxonDeletionConfigurator config) {
 +        Set<ITaxonTreeNode> nodes = new HashSet<ITaxonTreeNode>();
 +        for(UUID nodeUuid : nodeUuids) {
 +            nodes.add(dao.load(nodeUuid));
 +        }
 +        return deleteTaxonNodes(nodes, config);
 +    }
 +
 +
++
      @Override
      @Transactional(readOnly = false)
      public DeleteResult deleteTaxonNode(UUID nodeUUID, TaxonDeletionConfigurator config) {
        if (config == null){
                config = new TaxonDeletionConfigurator();
        }
 +      DeleteResult result = new DeleteResult();
        if (config.getTaxonNodeConfig().isDeleteTaxon()){
-           result = taxonService.deleteTaxon(taxon, config, node.getClassification());
-           result.addUpdatedObject(parent);
-           result.setCdmEntity(node);
-               return result;
-       } else{
-               result.setCdmEntity(node);
-               boolean success = taxon.removeTaxonNode(node);
-               if (success) {
-                   result.addUpdatedObject(parent);
-                   result.setCdmEntity(node);
-                       if (!dao.delete(node).equals(null)){
-                               return result;
-                       } else {
-                               result.setError();
-                               return result;
-                       }
+               result = taxonService.deleteTaxon(taxon, config, node.getClassification());
+               if (result.isOk()){
+                       return result;
+               }
+       }
+       result.setCdmEntity(node);
+       boolean success = taxon.removeTaxonNode(node);
+       taxonService.saveOrUpdate(taxon);
+               result.addUpdatedObject(taxon);
+       if (success){
+                       result.setStatus(Status.OK);
+               if (!dao.delete(node).equals(null)){
+                       return result;
                } else {
                        result.setError();
-                       result.addException(new Exception("The node can not be removed from the taxon."));
                        return result;
                }
+       }else{
+               result.setError();
+               result.addException(new Exception("The node can not be removed from the taxon."));
+               return result;
        }
  
      }
  
 +
      /* (non-Javadoc)
       * @see eu.etaxonomy.cdm.api.service.ITaxonNodeService#listAllNodesForClassification(eu.etaxonomy.cdm.model.taxon.Classification, int, int)
       */
index ed6b5238a5be7dbbd900ebbacdb3370f60567a18,0ae45c8cce21e69bee41f6aeae8f6637cb8f20d3..37b26461bf26aa5f82b2591a03475e801c4af216
@@@ -695,7 -649,6 +666,7 @@@ public class TaxonServiceImpl extends I
                results = dao.getTaxaByNameForEditor(configurator.isDoTaxa(), configurator.isDoSynonyms(), configurator.isDoNamesWithoutTaxa(), configurator.isDoMisappliedNames(),configurator.getTitleSearchStringSqlized(), configurator.getClassification(), configurator.getMatchMode(), configurator.getNamedAreas());\r
          }\r
          if (configurator.isDoTaxaByCommonNames()) {\r
++\r
              //if(configurator.getPageSize() == null ){\r
                  List<UuidAndTitleCache<IdentifiableEntity>> commonNameResults = dao.getTaxaByCommonNameForEditor(configurator.getTitleSearchStringSqlized(), configurator.getClassification(), configurator.getMatchMode(), configurator.getNamedAreas());\r
                  if(commonNameResults != null){\r
          return this.dao.findIdenticalTaxonNames(propertyPath);\r
      }\r
  \r
 +    @Override\r
 +    @Transactional(readOnly = true)\r
 +    public DeleteResult deleteTaxon(UUID taxonUuid, TaxonDeletionConfigurator config, UUID classificationUuid)  {\r
 +        return deleteTaxon((Taxon)dao.load(taxonUuid), config, classificationDao.load(classificationUuid));\r
 +    }\r
 +    /* (non-Javadoc)\r
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteTaxon(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator)\r
 +     */\r
++\r
      @Override\r
      public DeleteResult deleteTaxon(Taxon taxon, TaxonDeletionConfigurator config, Classification classification)  {\r
  \r
  \r
      }\r
  \r
++\r
 +    @Transactional(readOnly = false)\r
 +    @Override\r
 +    public DeleteResult deleteSynonym(UUID synonymUuid, UUID taxonUuid, SynonymDeletionConfigurator config) {\r
 +        return deleteSynonym((Synonym)dao.load(synonymUuid), (Taxon)dao.load(taxonUuid), config);\r
 +    }\r
 +\r
 +    /* (non-Javadoc)\r
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#findIdenticalTaxonNameIds(java.util.List)\r
 +     */\r
++\r
      @Override\r
      public List<TaxonNameBase> findIdenticalTaxonNameIds(List<String> propertyPath) {\r
  \r
index 1beceb7526b0925ae18c75f3041387bfc616ac85,b651ca8ea15a9f628b0206b824aa126776b04009..0c48f8abf6c4dc9cae0308d10c634e1dd50b9729
@@@ -9,13 -9,13 +9,13 @@@
        * See LICENSE.TXT at the top of this package for the full license terms.\r
        */\r
  package eu.etaxonomy.cdm.api.service;\r
 -\r
 +
  import java.io.Serializable;\r
- import java.util.ArrayList;\r
+ import java.util.Collection;\r
  import java.util.HashSet;\r
- import java.util.List;\r
  import java.util.Set;\r
  \r
+ import org.apache.commons.collections.buffer.CircularFifoBuffer;\r
  import org.apache.log4j.Logger;\r
  \r
  import eu.etaxonomy.cdm.model.common.CdmBase;\r
@@@ -37,10 -38,11 +37,11 @@@ public class UpdateResult implements Se
  \r
                private Status status = Status.OK;\r
  \r
-               private final List<Exception> exceptions = new ArrayList<Exception>();\r
+               @SuppressWarnings("unchecked")\r
+               private final Collection<Exception> exceptions = new CircularFifoBuffer(10);\r
  \r
                private final Set<CdmBase> upatedObjects = new HashSet<CdmBase>();\r
 -\r
 +
                private final Set<CdmBase> unchangedObjects = new HashSet<CdmBase>();\r
  \r
          private CdmBase cdmEntity;\r