-// $Id$
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
package eu.etaxonomy.taxeditor.ui.section.name;
import java.util.Collection;
+import java.util.Comparator;
+
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.graphics.ImageData;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
+import eu.etaxonomy.cdm.api.service.name.TypeDesignationComparator;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
-import eu.etaxonomy.cdm.model.name.NonViralName;
import eu.etaxonomy.cdm.model.name.Rank;
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.name.TaxonName;
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.editor.ITaxonEditor;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.ImageResources;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection;
import eu.etaxonomy.taxeditor.ui.section.ITaxonBaseDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.name.operation.DeleteTypeDesignationOperation;
+import eu.etaxonomy.taxeditor.ui.section.name.type.CloneTypeWizard;
+import eu.etaxonomy.taxeditor.view.e4.details.DetailsPartE4;
+import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
/**
- * <p>TypeDesignationSection class.</p>
- *
* @author n.hoffmann
* @created May 17, 2010
- * @version 1.0
*/
-public class TypeDesignationSection extends AbstractEntityCollectionSection<TaxonNameBase, TypeDesignationBase> implements ITaxonBaseDetailSection {
+public class TypeDesignationSection extends AbstractEntityCollectionSection<TaxonName, TypeDesignationBase> implements ITaxonBaseDetailSection {
private TaxonBase taxonBase;
- /**
- * <p>Constructor for TypeDesignationSection.</p>
- *
- * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
- * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
- * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
- * @param style a int.
- */
public TypeDesignationSection(CdmFormFactory formFactory, ConversationHolder conversation,
ICdmFormElement parentElement, int style) {
- super(formFactory, conversation, parentElement, "Type Designations", style);
+ super(formFactory, conversation, parentElement, Messages.TypeDesignationSection_TYPE_DESIGNATIONS, style);
}
-
- /** {@inheritDoc} */
+
+ @Override
+ protected void addAction(ToolBarManager toolBarManager) {
+
+ // FIXME #8135 temporary disabled textual type designation
+// if(PreferencesUtil.getBooleanValue(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES)){
+// // add textual type designation button
+// Action addTextualTypeDesignationAction = new Action("Add", IAction.AS_PUSH_BUTTON){
+// @Override
+// public void run() {
+// TextualTypeDesignation textualTypeDesignation = TextualTypeDesignation.NewInstance();
+// addElement(textualTypeDesignation);
+// if(! getSection().isExpanded()) {
+// getSection().setExpanded(true);
+// }
+// internalUpdateSection(true);
+// }
+// };
+// addTextualTypeDesignationAction.setImageDescriptor(new ImageDescriptor() {
+//
+// @Override
+// public ImageData getImageData() {
+// return ImageResources.getImage(ImageResources.ADD_TEXT).getImageData();
+// }
+// });
+// addTextualTypeDesignationAction.setToolTipText("Add textual type designation");
+// toolBarManager.add(addTextualTypeDesignationAction);
+// }
+
+ // clone button
+ if(!isSpecimenType() ||
+ getEntity().getTypeDesignations().isEmpty()
+ || getEntity().getTypeDesignations().stream().noneMatch(designation->designation instanceof SpecimenTypeDesignation)){
+ return;
+ }
+ Action cloneAction = new Action(Messages.TypeDesignationSection_CREATE_DUPLICATE, IAction.AS_PUSH_BUTTON){
+ @Override
+ public void run() {
+ DetailsPartE4 detailsView = AbstractUtility.getDetailsView(getFormFactory().getContext().get((EPartService.class)));
+ if(detailsView!=null
+ && detailsView.getSelectionProvidingPart().getObject() instanceof IE4SavablePart
+ && StoreUtil.promptCheckIsDirty(((IE4SavablePart)detailsView.getSelectionProvidingPart().getObject()))){
+ return;
+ }
+ CloneTypeWizard wizard = new CloneTypeWizard(getEntity());
+ WizardDialog dialog = new WizardDialog(getShell(), wizard);
+
+ if (dialog.open() == IStatus.OK) {
+ SpecimenTypeDesignation baseTypeDesignation = HibernateProxyHelper.deproxy(wizard.getBaseTypeDesignation());
+ UpdateResult result = CdmStore.getService(INameService.class).cloneTypeDesignation(
+ wizard.getTaxonName().getUuid(),
+ baseTypeDesignation,
+ wizard.getAccessionNumber(),
+ wizard.getBarcode(),
+ wizard.getCatalogNumber(),
+ wizard.getCollection().getUuid(),
+ wizard.getTypeStatus());
+ if(!result.isOk()){
+ MessagingUtils.warningDialog(Messages.TypeDesignationSection_DUPLICATE_FAILED, this, result.getExceptions().toString());
+ }
+ StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true);
+ internalUpdateSection(false);
+ }
+ }
+ };
+ cloneAction.setImageDescriptor(new ImageDescriptor() {
+
+ @Override
+ public ImageData getImageData() {
+ return ImageResources.getImage(ImageResources.ADD_DOUBLE).getImageData();
+ }
+ });
+ cloneAction.setToolTipText(Messages.TypeDesignationSection_CREATE_DUPLICATE);
+
+ toolBarManager.add(cloneAction);
+ }
+
@Override
public void addElement(TypeDesignationBase element) {
- getEntity().addTypeDesignation(element, PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ADD_TYPES_TO_ALL_NAMES));
+ getEntity().addTypeDesignation(element, PreferencesUtil.getBooleanValue(IPreferenceKeys.ADD_TYPES_TO_ALL_NAMES));
+ updateToolbar();
}
- /** {@inheritDoc} */
@Override
public TypeDesignationBase createNewElement() {
if(isSpecimenType()){
}
}
- /** {@inheritDoc} */
@Override
- public Collection<TypeDesignationBase> getCollection(TaxonNameBase entity) {
+ public Collection<TypeDesignationBase> getCollection(TaxonName entity) {
+ if (entity == null){
+ return null;
+ }
return entity.getTypeDesignations();
}
- /** {@inheritDoc} */
+ @Override
+ public Comparator<TypeDesignationBase> getComparator() {
+ return new TypeDesignationComparator();
+ }
+
@Override
public String getEmptyString() {
- return "No type designations yet.";
+ return Messages.TypeDesignationSection_NO_TYPES_YET;
}
- /** {@inheritDoc} */
@Override
protected String getTooltipString() {
- return "Add a type designation";
+ return Messages.TypeDesignationSection_ADD_TYPE;
}
- /** {@inheritDoc} */
@Override
public void removeElement(TypeDesignationBase element) {
- boolean removeTypeDesignationFromAllTypifiedNames = PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.ADD_TYPES_TO_ALL_NAMES);
- TaxonNameBase entity = removeTypeDesignationFromAllTypifiedNames ? null : getEntity();
- CdmStore.getService(INameService.class).deleteTypeDesignation(entity, element);
+ DetailsPartE4 detailsView = AbstractUtility.getDetailsView(getFormFactory().getContext().get((EPartService.class)));
+ if(detailsView!=null
+ && detailsView.getSelectionProvidingPart().getObject() instanceof IE4SavablePart
+ && StoreUtil.promptCheckIsDirty(((IE4SavablePart)detailsView.getSelectionProvidingPart().getObject()))){
+ return;
+ }
+ boolean removeTypeDesignationFromAllTypifiedNames = PreferencesUtil.getBooleanValue(IPreferenceKeys.ADD_TYPES_TO_ALL_NAMES);
+ TaxonName entity = removeTypeDesignationFromAllTypifiedNames ? null : getEntity();
+ if(!element.isPersited() && entity!=null){
+ entity.removeTypeDesignation(element);
+ }
+ else if(detailsView!=null
+ && detailsView.getSelectionProvidingPart().getObject() instanceof ITaxonEditor
+ && detailsView.getSelectionProvidingPart().getObject() instanceof IPostOperationEnabled) {
+ DeleteTypeDesignationOperation operation = new DeleteTypeDesignationOperation(
+ "Remove type designation",
+ IOperationHistory.GLOBAL_UNDO_CONTEXT,
+ entity,
+ element,
+ (IPostOperationEnabled) detailsView.getSelectionProvidingPart().getObject(),
+ null);
+ ((ITaxonEditor) detailsView.getSelectionProvidingPart().getObject()).addOperation(operation);
+ if(entity!=null){
+ entity.removeTypeDesignation(element);
+ }
+ }
+ updateToolbar();
}
- /*
- * (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.section.ITaxonDetailSection#setTaxon(eu.etaxonomy.cdm.model.taxon.TaxonBase)
- */
- /** {@inheritDoc} */
- public void setTaxonBase(TaxonBase entity) {
+ @Override
+ public void setTaxonBase(TaxonBase entity) {
this.taxonBase = entity;
- NonViralName name = (NonViralName) HibernateProxyHelper.deproxy(entity.getName());
+ TaxonName name = HibernateProxyHelper.deproxy(entity.getName());
setEntity(name);
}
-
+
private boolean isSpecimenType(){
Rank rank = getEntity().getRank();
+ if(rank==null){
+ return false;
+ }
return rank.isSpecies() || rank.isInfraSpecific();
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.section.ITaxonDetailSection#getTaxon(eu.etaxonomy.cdm.model.taxon.TaxonBase)
- */
@Override
public TaxonBase getTaxonBase() {
return taxonBase;
}
+
+ @Override
+ public TypeDesignationBase addExisting() {
+ return null;
+ }
+
+ @Override
+ public boolean allowAddExisting() {
+ return false;
+ }
}