ref #8229: update correct property path for search in name and taxon bulkeditor
[taxeditor.git] / eu.etaxonomy.taxeditor.bulkeditor / src / main / java / eu / etaxonomy / taxeditor / bulkeditor / input / TaxonEditorInput.java
index 4d2a7257cdc53a00fefc590180671e14b13b04c7..f71a0e2ea9ab065bb621c112f7290faa111c126d 100644 (file)
@@ -5,36 +5,34 @@ import java.util.Arrays;
 import java.util.List;\r
 import java.util.UUID;\r
 \r
+import eu.etaxonomy.cdm.api.service.INameService;\r
 import eu.etaxonomy.cdm.api.service.ITaxonService;\r
 import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;\r
-import eu.etaxonomy.cdm.api.service.config.FindTaxaAndNamesConfiguratorImpl;\r
-import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;\r
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;\r
 import eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator;\r
 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;\r
-import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
+import eu.etaxonomy.cdm.model.name.TaxonName;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
 import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;\r
+import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.TaxonCreator;\r
+import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.IdentifiableEntitySortProvider;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
 public class TaxonEditorInput extends AbstractBulkEditorInput<TaxonBase>{\r
 \r
        private static TaxonEditorInput instance;\r
-       /** Constant <code>ID="bulkeditor.input.taxon"</code> */\r
+\r
        public static final String ID = "bulkeditor.input.taxon";\r
 \r
+       private static final String PROPERTY_PUBLISH = "Publish";\r
 \r
+       private List<TaxonName> saveNameCandidates = new ArrayList<>();\r
 \r
-       /**\r
-        * <p>Getter for the field <code>instance</code>.</p>\r
-        *\r
-        * @return a {@link eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput} object.\r
-        */\r
        public static AbstractBulkEditorInput getInstance() {\r
                if (instance == null) {\r
                        instance = new TaxonEditorInput();\r
@@ -43,31 +41,47 @@ public class TaxonEditorInput extends AbstractBulkEditorInput<TaxonBase>{
                return instance;\r
        }\r
 \r
+    @Override\r
+    protected List<String> getPropertyKeys_internal() {\r
+        List<String> propertyKeysInternal = new ArrayList<>();\r
+        propertyKeysInternal.add(PROPERTY_PUBLISH);\r
+        return propertyKeysInternal;\r
+    }\r
 \r
-       @Override\r
+    @Override\r
+    public Object getPropertyValue(TaxonBase cdmBase, String property) {\r
+        if(property.equals(PROPERTY_PUBLISH)){\r
+            return cdmBase.isPublish();\r
+        }\r
+        return super.getPropertyValue(cdmBase, property);\r
+    }\r
+\r
+    @Override\r
+    public boolean isBooleanProperty(String property) {\r
+        if(property.equals(PROPERTY_PUBLISH)){\r
+            return true;\r
+        }\r
+        return super.isBooleanProperty(property);\r
+    }\r
+\r
+    @Override\r
        public String getName() {\r
                return BulkEditorInputType.TAXON.label;\r
        }\r
 \r
-       @Override\r
-       public String getToolTipText() {\r
-               return getName();\r
-       }\r
-\r
-\r
-       /**\r
-        * <p>getID</p>\r
-        *\r
-        * @return a {@link java.lang.Object} object.\r
-        */\r
        public static Object getID() {\r
                return ID;\r
        }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled()\r
-        */\r
-       /** {@inheritDoc} */\r
+       @Override\r
+    public List<IBulkEditorSortProvider<TaxonBase>> getSortProviders() {\r
+        List<IBulkEditorSortProvider<TaxonBase>> sortProviders = super.getSortProviders();\r
+\r
+        sortProviders.add(0, new IdentifiableEntitySortProvider<TaxonBase>());\r
+\r
+        return sortProviders;\r
+    }\r
+\r
        @Override\r
        public boolean isMergingEnabled() {\r
                return false;\r
@@ -77,15 +91,18 @@ public class TaxonEditorInput extends AbstractBulkEditorInput<TaxonBase>{
            return CdmStore.getService(ITaxonService.class).merge(entity, true).getMergedEntity();\r
        }\r
 \r
+    @Override\r
+    protected long countEntities(IIdentifiableEntityServiceConfigurator configurator) {\r
+        return CdmStore.getService(ITaxonService.class).countByTitle(configurator);\r
+    }\r
 \r
-\r
-       /** {@inheritDoc} */\r
        @Override\r
        public List listEntities(IIdentifiableEntityServiceConfigurator configurator) {\r
-//             IFindTaxaAndNamesConfigurator<TaxonBase> newConfig = new FindTaxaAndNamesConfiguratorImpl<TaxonBase>();\r
+//             IFindTaxaAndNamesConfigurator<TaxonBase> newConfig = new FindTaxaAndNamesConfiguratorImpl<>();\r
 //             newConfig.setTitleSearchString(configurator.getTitleSearchStringSqlized());\r
 //             newConfig.setMatchMode(MatchMode.ANYWHERE);\r
-               \r
+           List<String> propertyPaths = getPropertyPaths();\r
+           configurator.setPropertyPaths(propertyPaths);\r
                List<TaxonBase> taxa =  CdmStore.getSearchManager().findTaxa(configurator);\r
                List<TaxonBase> taxaCopy = new ArrayList<TaxonBase>();\r
                for (TaxonBase taxon:taxa){\r
@@ -99,17 +116,12 @@ public class TaxonEditorInput extends AbstractBulkEditorInput<TaxonBase>{
                return taxaCopy;\r
        }\r
 \r
-\r
        @Override\r
        protected TaxonBase loadEntity(UUID entityUuid) {\r
                List<String> propertyPaths = Arrays.asList(new String[]{});\r
                return CdmStore.getService(ITaxonService.class).load(entityUuid, propertyPaths);\r
        }\r
 \r
-\r
-\r
-       /** {@inheritDoc}\r
-        * @throws ReferencedObjectUndeletableException */\r
        @Override\r
     public boolean delete(TaxonBase entity, DeleteConfiguratorBase config) {\r
                if (entity instanceof Taxon){\r
@@ -117,33 +129,60 @@ public class TaxonEditorInput extends AbstractBulkEditorInput<TaxonBase>{
                        if (config instanceof TaxonDeletionConfigurator){\r
                                taxonConfig = (TaxonDeletionConfigurator)config;\r
                        }else{\r
-                               \r
+\r
                        }\r
-                       \r
+\r
                        return CdmStore.getService(ITaxonService.class).deleteTaxon(entity.getUuid(), taxonConfig, null) != null;\r
                } else{\r
                        SynonymDeletionConfigurator synConfig = null;\r
                        if (config instanceof SynonymDeletionConfigurator){\r
                                synConfig = (SynonymDeletionConfigurator)config;\r
                        }else{\r
-                               \r
+\r
                        }\r
-                       \r
+\r
                        return CdmStore.getService(ITaxonService.class).deleteSynonym(entity.getUuid(), synConfig) != null;\r
                }\r
        }\r
+\r
        @Override\r
        protected IEntityCreator<TaxonBase> createEntityCreator() {\r
                return new TaxonCreator();\r
        }\r
 \r
-\r
-    /* (non-Javadoc)\r
-     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge()\r
-     */\r
     @Override\r
     public void merge() {\r
 \r
     }\r
 \r
+    @Override\r
+    public void addSaveCandidate(TaxonBase taxonBase){\r
+        if (!taxonBase.getName().getHybridChildRelations().isEmpty()){\r
+            for (HybridRelationship rel: taxonBase.getName().getHybridChildRelations()){\r
+                if (!rel.getParentName().isPersited()){\r
+                    this.saveNameCandidates.add(rel.getParentName());\r
+                }\r
+                if (!rel.getHybridName().isPersited()){\r
+                    this.saveNameCandidates.add(rel.getHybridName());\r
+                }\r
+            }\r
+        }\r
+\r
+        super.addSaveCandidate(taxonBase);\r
+    }\r
+\r
+    @Override\r
+    public void saveModel(boolean resetMerge){\r
+        CdmStore.getService(INameService.class).save(this.saveNameCandidates);\r
+        super.saveModel(resetMerge);\r
+    }\r
+\r
+    private List<String> getPropertyPaths(){\r
+        List<String> taxonBasePropertyPaths = Arrays.asList(new String[] {\r
+        "descriptions.descriptionElements.*",\r
+        "typeDesignations"});\r
+\r
+        return taxonBasePropertyPaths;\r
+   }\r
+\r
 }\r