/**
* 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.
*/
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.ManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.IDropTargetable;
import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;
import eu.etaxonomy.taxeditor.editor.ISecuredEditor;
+import eu.etaxonomy.taxeditor.editor.Messages;
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
import eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup;
import eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup;
import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDropTargetListener;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.IPartChangeListener;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
-import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.preference.Resources;
import eu.etaxonomy.taxeditor.security.RequiredPermissions;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
/**
* <p>
* TaxonNameEditor class.
* </p>
- *
+ *
* @author p.ciardelli
* @author n.hoffmann
* @created 15.05.2008
* @version 1.0
*/
public class TaxonNameEditor extends EditorPart implements
- IMultiPageTaxonEditorPage, IAdaptable, IConversationEnabled,
- IPostOperationEnabled, IPartContentHasDetails, IPartChangeListener,
+ IMultiPageTaxonEditorPage, IConversationEnabled,
+ IPartContentHasDetails, IPartChangeListener,
ISelectionListener, IDropTargetable, ISecuredEditor {
/** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon.name"</code> */
- public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon.name";
+ public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon.name"; //$NON-NLS-1$
private Taxon taxon;
private TaxonBase objectAffectedByLastOperation;
+ private ICdmEntitySession cdmEntitySession;
+
/**
* <p>
* Constructor for TaxonNameEditor.
* </p>
- *
+ *
* @param editor
* a {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor}
* object.
* <p>
* getUndoContext
* </p>
- *
+ *
* @return a {@link org.eclipse.core.commands.operations.IUndoContext}
* object.
*/
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
* .Composite)
* <p>
* createManagedForm
* </p>
- *
+ *
* @param composite
* a {@link org.eclipse.swt.widgets.Composite} object.
*/
selection = null;
getSite().getSelectionProvider().setSelection(new StructuredSelection());
}
-
-
+
+
return super.setInput(input);
}
};
layout.horizontalSpacing = 0;
parent.setLayout(layout);
- parent.setBackground(EditorUtil
+ parent.setBackground(AbstractUtility
.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
createOrUpdateNameComposites();
* </p>
*/
public void createOrUpdateNameComposites() {
-
+// this.taxon = (Taxon)CdmStore.getService(ITaxonService.class).load(this.getTaxon().getUuid());
ContainerFactory.createOrUpdateAcceptedTaxonsHomotypicGroup(this);
ContainerFactory.createOrUpdateHeterotypicSynonymyGroups(this);
ContainerFactory.createOrUpdateMisapplicationsGroup(this);
+
// Redraw composite
managedForm.reflow(true);
}
* <p>
* Getter for the field <code>taxon</code>.
* </p>
- *
+ *
* @return a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
*/
public Taxon getTaxon() {
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
/** {@inheritDoc} */
@Override
public void setFocus() {
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus();
if (getSelectedContainer() == null) {
throw new IllegalStateException(
- "There should always be a selected object.");
+ Messages.TaxonNameEditor_THERE_SHOULD_ALWAYS_BE);
}
getSelectedContainer().setSelected();
-
+
// check permissions
boolean doEnable = permissionsSatisfied();
setEnabled(doEnable);
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
* ()
* <p>
* getConversationHolder
* </p>
- *
+ *
* @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
* object.
*/
- public ConversationHolder getConversationHolder() {
+ @Override
+ public ConversationHolder getConversationHolder() {
return conversation;
}
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu
* .etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
*/
/** {@inheritDoc} */
- public void update(CdmDataChangeMap events) {
+ @Override
+ public void update(CdmDataChangeMap events) {
// redraw();
}
/**
* Redraws this editor return true on success
- *
+ *
* @return a boolean.
*/
- public boolean redraw() {
+ @Override
+ public boolean redraw() {
return redraw(true);
}
/**
* {@inheritDoc}
- *
+ *
* Redraws the editor controls
*/
- public boolean redraw(boolean focus) {
+ @Override
+ public boolean redraw(boolean focus) {
createOrUpdateNameComposites();
* <p>
* getMultiPageTaxonEditor
* </p>
- *
+ *
* @return a {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor}
* object.
*/
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled#postOperation
* ()
*/
/** {@inheritDoc} */
- public boolean postOperation(CdmBase objectAffectedByOperation) {
+ @Override
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
editor.changed(objectAffectedByOperation);
-
+
redraw(false);
if (objectAffectedByOperation instanceof TaxonBase) {
* <p>
* Getter for the field <code>managedForm</code>.
* </p>
- *
+ *
* @return the managedForm
*/
public ManagedForm getManagedForm() {
* <p>
* getControl
* </p>
- *
+ *
* @return a {@link org.eclipse.swt.widgets.Composite} object.
*/
- public Composite getControl() {
+ @Override
+ public Composite getControl() {
return this.getManagedForm().getForm().getBody();
}
* <p>
* Getter for the field <code>menu</code>.
* </p>
- *
+ *
* @return the menu
*/
public Menu getMenu() {
* <p>
* checkForEmptyNames
* </p>
- *
+ *
* @return true if there are empty names
*/
public boolean checkForEmptyNames() {
@Override
public void doSave(IProgressMonitor monitor) {
- monitor.beginTask("Saving names", getGroupedContainers().size());
+ monitor.beginTask(Messages.TaxonNameEditor_SAVING_NAMES, getGroupedContainers().size());
try {
// check for empty names
for (AbstractGroupedContainer container : getGroupedContainers()) {
- monitor.subTask("Saving composite: "
+ monitor.subTask(Messages.TaxonNameEditor_SAVING_COMPOSITES
+ container.getTaxonBase().getTitleCache());
container.persistName();
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
- if (!(input instanceof IEditorInput))
- throw new PartInitException("Invalid Input: Must be IEditorInput");
+ if (!(input != null)) {
+ throw new PartInitException(Messages.TaxonNameEditor_INVALID_INPUT);
+ }
if (input.getAdapter(Taxon.class) != null) {
- taxon = (Taxon) input.getAdapter(Taxon.class);
+ taxon = CdmBase.deproxy(input.getAdapter(Taxon.class), Taxon.class);
} else {
- throw new PartInitException("Invalid Input: Taxon cannot be null");
+ throw new PartInitException(Messages.TaxonNameEditor_INVALID_INPUT_TAXON_NULL);
}
setSite(site);
/**
- *
+ *
*/
private void createDragSupport() {
// Listen for names being dragged outside of existing homotypic groups -
* <p>
* Getter for the field <code>acceptedNameContainer</code>.
* </p>
- *
+ *
* @return a
* {@link eu.etaxonomy.taxeditor.editor.name.container.AcceptedNameContainer}
* object.
* <p>
* getSynonymGroup
* </p>
- *
+ *
* @param homotypicalGroup
* a {@link eu.etaxonomy.cdm.model.name.HomotypicalGroup} object.
* @return a
* <p>
* getDirtyNames
* </p>
- *
+ *
* @return a Set containing all composites that have been edited
*/
public Set<AbstractGroupedContainer> getDirtyNames() {
* <p>
* getGroupedContainers
* </p>
- *
+ *
* @return a {@link java.util.List} object.
*/
public List<AbstractGroupedContainer> getGroupedContainers() {
* <p>
* getAllGroups
* </p>
- *
+ *
* @return a {@link java.util.List} object.
*/
public List<AbstractGroup> getAllGroups() {
allGroups.add(getAcceptedGroup());
// List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups(); // UNUSED => remove
-
+
heterotypicSynonymGroups = getHeterotypicSynonymGroups();
-
+
if (heterotypicSynonymGroups != null) {
allGroups.addAll(heterotypicSynonymGroups);
}
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isDirty()
*/
/** {@inheritDoc} */
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
/** {@inheritDoc} */
@Override
public void dispose() {
+ conversation.unregisterForDataStoreChanges(this);
super.dispose();
}
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
/** {@inheritDoc} */
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.
* IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
*/
/** {@inheritDoc} */
- public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
}
* <p>
* getNameEditor
* </p>
- *
+ *
* @return a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor}
* object.
*/
- public TaxonNameEditor getEditor() {
+ @Override
+ public TaxonNameEditor getEditor() {
return this;
}
* <p>
* Getter for the field <code>selectedObject</code>.
* </p>
- *
+ *
* @return a
* {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer}
* object.
* dragEntered
* </p>
*/
- public void dragEntered() {
+ @Override
+ public void dragEntered() {
// TODO change this
getControl().setBackground(
- EditorUtil.getColor(Resources.COLOR_DRAG_ENTER));
+ AbstractUtility.getColor(Resources.COLOR_DRAG_ENTER));
}
/**
* dragLeft
* </p>
*/
- public void dragLeft() {
+ @Override
+ public void dragLeft() {
getControl().setBackground(
- EditorUtil.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
+ AbstractUtility.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));
}
* <p>
* setMisapplicationsGroup
* </p>
- *
+ *
* @param misappliedGroup
* a
* {@link eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup}
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#isRedrawing()
*/
* <p>
* isRedrawing
* </p>
- *
+ *
* @return a boolean.
*/
- public boolean isRedrawing() {
+ @Override
+ public boolean isRedrawing() {
return false;
}
* <p>
* getToolkit
* </p>
- *
+ *
* @return a {@link org.eclipse.ui.forms.widgets.FormToolkit} object.
*/
public FormToolkit getToolkit() {
* <p>
* getHeterotypicSynonymGroups
* </p>
- *
+ *
* @return a {@link java.util.List} object.
*/
public List<HomotypicalSynonymGroup> getHeterotypicSynonymGroups() {
* <p>
* addHeterotypicSynonymGroup
* </p>
- *
+ *
* @param group
* a
* {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup}
* <p>
* getHomotypicSynonymGroup
* </p>
- *
+ *
* @return a
* {@link eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup}
* object.
}
/**
- *
+ *
* @param acceptedGroup
*/
public void setAcceptedGroup(AcceptedGroup acceptedGroup) {
* <p>
* Getter for the field <code>misappliedGroup</code>.
* </p>
- *
+ *
* @return a
* {@link eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup}
* object.
* <p>
* isActive
* </p>
- *
+ *
* @return a boolean.
*/
public boolean isActive() {
- IWorkbenchPart activePart = EditorUtil.getActivePart();
+ IWorkbenchPart activePart = AbstractUtility.getActivePart();
return editor.equals(activePart);
}
* <p>
* onComplete
* </p>
- *
+ *
* @return a boolean.
*/
- public boolean onComplete() {
+ @Override
+ public boolean onComplete() {
getContainer(objectAffectedByLastOperation).setSelected();
return true;
}
/** {@inheritDoc} */
- public void partChanged(Integer eventType, IWorkbenchPartReference partRef) {
+ @Override
+ public void partChanged(Integer eventType, IWorkbenchPartReference partRef) {
if (!partRef.getPart(false).equals(editor)) {
// getSelectedObject().colorSelected(AbstractGroupedContainer.SELECTED_NO_FOCUS);
}
public void removeGroup(AbstractGroup group) {
if (group != null) {
group.dispose();
-
+
//if (heterotypicSynonymGroups != null) {
heterotypicSynonymGroups.remove(group);
//}
}
return getAcceptedNameContainer();
}
-
+
/* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setOnError()
*/
- public void setOnError() {
- Color disabledColor = StoreUtil.getColor(Resources.COLOR_EDITOR_ERROR);
+ @Override
+ public void setOnError() {
+ Color disabledColor = AbstractUtility.getColor(Resources.COLOR_EDITOR_ERROR);
setEnabled(false, disabledColor);
}
*/
@Override
public void setDisabled(){
- Color disabledColor = StoreUtil.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND);
+ Color disabledColor = AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND);
setEnabled(false);
}
-
+
protected void setEnabled(boolean enabled, Color background) {
-
+
for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
groupedContainer.setEnabled(enabled);
}
-
+
// send an empty selection to the current provider - TODO only on error ???
- getManagedForm().setInput(null);
-
- for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
- groupedContainer.setBackground(background);
+ if (!enabled) {
+ getManagedForm().setInput(null);
+
+ for (AbstractGroupedContainer groupedContainer : getGroupedContainers()) {
+ groupedContainer.setBackground(background);
+ }
}
getControl().setBackground(background);
}
-
+
@Override
public void setEnabled(boolean enabled) {
- Color background = StoreUtil.getColor(enabled ? Resources.COLOR_COMPOSITE_BACKGROUND : Resources.COLOR_TEXT_DISABLED_BACKGROUND);
+ Color background = AbstractUtility.getColor(enabled ? Resources.COLOR_COMPOSITE_BACKGROUND : Resources.COLOR_TEXT_DISABLED_BACKGROUND);
setEnabled(enabled, background);
}
+
+
+
}