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
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
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
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
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