From 288183cd3214dfa9c6a9f70c17580d4cce6bbc5b Mon Sep 17 00:00:00 2001 From: "n.hoffmann" Date: Wed, 28 Sep 2011 10:54:10 +0000 Subject: [PATCH] Upgraded to cdmlib-3.0.9, working on error warning for unsavable editor --- eu.etaxonomy.taxeditor.cdmlib/.classpath | 237 +++-- .../META-INF/MANIFEST.MF | 17 +- .../build.properties | 17 +- .../editor/IMultiPageTaxonEditorPage.java | 11 + .../editor/MultiPageTaxonEditor.java | 13 + .../editor/SimpleSelectionProvider.java | 3 +- .../editor/name/TaxonNameEditor.java | 67 +- .../container/AbstractGroupedContainer.java | 977 ++++++++++-------- ...actFilteredCdmResourceSelectionDialog.java | 2 +- .../taxeditor/view/AbstractCdmViewPart.java | 3 + 10 files changed, 786 insertions(+), 561 deletions(-) diff --git a/eu.etaxonomy.taxeditor.cdmlib/.classpath b/eu.etaxonomy.taxeditor.cdmlib/.classpath index a2035c4a4..4143a5c44 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/.classpath +++ b/eu.etaxonomy.taxeditor.cdmlib/.classpath @@ -1,119 +1,118 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF index 3af41c70a..1873366cd 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF @@ -875,12 +875,11 @@ Bundle-ClassPath: ., lib/xom-1.0.jar, lib/xsltc.jar, lib/xstream-1.3.1.jar, - lib/yjp-controller-api-redist-8.0.1.jar, - lib/cdmlib-commons-3.0.8-SNAPSHOT.jar, - lib/cdmlib-ext-3.0.8-SNAPSHOT.jar, - lib/cdmlib-io-3.0.8-SNAPSHOT.jar, - lib/cdmlib-model-3.0.8-SNAPSHOT.jar, - lib/cdmlib-persistence-3.0.8-SNAPSHOT.jar, - lib/cdmlib-print-3.0.8-SNAPSHOT.jar, - lib/cdmlib-remote-3.0.8-SNAPSHOT.jar, - lib/cdmlib-services-3.0.8-SNAPSHOT.jar + lib/cdmlib-commons-3.0.9-SNAPSHOT.jar, + lib/cdmlib-ext-3.0.9-SNAPSHOT.jar, + lib/cdmlib-io-3.0.9-SNAPSHOT.jar, + lib/cdmlib-model-3.0.9-SNAPSHOT.jar, + lib/cdmlib-persistence-3.0.9-SNAPSHOT.jar, + lib/cdmlib-print-3.0.9-SNAPSHOT.jar, + lib/cdmlib-remote-3.0.9-SNAPSHOT.jar, + lib/cdmlib-services-3.0.9-SNAPSHOT.jar diff --git a/eu.etaxonomy.taxeditor.cdmlib/build.properties b/eu.etaxonomy.taxeditor.cdmlib/build.properties index 615794618..055ad2e2a 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/build.properties +++ b/eu.etaxonomy.taxeditor.cdmlib/build.properties @@ -122,15 +122,14 @@ bin.includes = META-INF/,\ lib/xom-1.0.jar,\ lib/xsltc.jar,\ lib/xstream-1.3.1.jar,\ - lib/yjp-controller-api-redist-8.0.1.jar,\ - lib/cdmlib-commons-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-ext-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-io-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-model-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-persistence-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-print-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-remote-3.0.8-SNAPSHOT.jar,\ - lib/cdmlib-services-3.0.8-SNAPSHOT.jar + lib/cdmlib-commons-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-ext-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-io-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-model-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-persistence-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-print-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-remote-3.0.9-SNAPSHOT.jar,\ + lib/cdmlib-services-3.0.9-SNAPSHOT.jar jars.compile.order = cdmLibrary.jar src.includes = lib/ jre.compilation.profile = J2SE-1.6 diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java index eba2a062e..b243adfdd 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java @@ -43,5 +43,16 @@ public interface IMultiPageTaxonEditorPage extends IEditorPart { * @return a boolean. */ public boolean isRedrawing(); + + /** + * + * @param enabled + */ + public void setEnabled(boolean enabled); + + /** + * + */ + void setDisabled(); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java index 772538080..3621107b9 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java @@ -17,6 +17,7 @@ import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.commands.operations.UndoContext; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; @@ -132,12 +133,24 @@ public class MultiPageTaxonEditor extends FormEditor implements IConversationEna this.setDirty(false); monitor.worked(1); + }catch(Exception e){ + EditorUtil.errorDialog("An error occurred while saving", getClass(), "An error occurred while saving the editor. Please close and reopen the taxon again.", e); + disableEditor(); }finally{ monitor.done(); } } + private void disableEditor() { + for(IMultiPageTaxonEditorPage editorPage : getPages()){ + editorPage.setDisabled(); + } + setDirty(false); + getSite().getSelectionProvider().setSelection(new StructuredSelection()); + getSite().setSelectionProvider(null); + } + private void setDirty(boolean dirty) { this.dirty = dirty; firePropertyChange(PROP_DIRTY); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java index 4af6db9b5..31ac83f1e 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java @@ -56,8 +56,9 @@ public class SimpleSelectionProvider implements ISelectionProvider { * @return a {@link org.eclipse.jface.viewers.ISelection} object. */ public ISelection getSelection() { - if (selection != null) + if (selection != null){ return selection; + } // TODO we have to return an empty selection to avoid NPE // I don't really understand why this was not the case before return new StructuredSelection(); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java index 37b99454d..849900872 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java @@ -21,12 +21,16 @@ 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.ISelectionChangedListener; 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; @@ -94,7 +98,7 @@ public class TaxonNameEditor extends EditorPart implements private ManagedForm managedForm; private ScrolledForm scrolledForm; private Composite parent; - private ISelectionProvider provider; + private ISelectionProvider selectionProvider; private final MultiPageTaxonEditor editor; @@ -186,7 +190,7 @@ public class TaxonNameEditor extends EditorPart implements public boolean setInput(Object input) { if (input instanceof AbstractGroupedContainer) { selection = ((AbstractGroupedContainer) input).getData(); - provider.setSelection(new StructuredSelection(selection)); + getSite().getSelectionProvider().setSelection(new StructuredSelection(selection)); } return super.setInput(input); } @@ -489,8 +493,8 @@ public class TaxonNameEditor extends EditorPart implements setSite(site); setInput(input); - provider = new SimpleSelectionProvider(); - getSite().setSelectionProvider(provider); + selectionProvider = new SimpleSelectionProvider(); + getSite().setSelectionProvider(selectionProvider); } /** @@ -891,4 +895,59 @@ public class TaxonNameEditor extends EditorPart implements } return getAcceptedNameContainer(); } + + @Override + public void setDisabled(){ + setEnabled(false); + + // coloring the widgets + + // TODO move this to resources and make configurable via Preferences + Color disabledColor = Display.getDefault().getSystemColor(SWT.COLOR_RED); + + for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){ + groupedContainer.setBackground(disabledColor); + } + getControl().setBackground(disabledColor); + } + + @Override + public void setEnabled(boolean enabled) { + for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){ + groupedContainer.setEnabled(getManagedForm().setInput(selection)); + } + + // send an empty selection to the current provider + selectionProvider.setSelection(new StructuredSelection()); + + // decide on the new selection provider + + ISelectionProvider newSelectionProvider = enabled ? selectionProvider : new ISelectionProvider() { + + @Override + public void setSelection(ISelection selection) { + + } + + @Override + public void removeSelectionChangedListener( + ISelectionChangedListener listener) { + + } + + @Override + public ISelection getSelection() { + return null; + } + + @Override + public void addSelectionChangedListener(ISelectionChangedListener listener) { + + } + }; + + getSite().setSelectionProvider(newSelectionProvider); + + System.out.println("SELECTION PROVIDER" + getSite().getSelectionProvider()); + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java index 23c64f27c..1dc714985 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java @@ -67,44 +67,46 @@ import eu.etaxonomy.taxeditor.parser.ParseHandler; import eu.etaxonomy.taxeditor.preference.Resources; /** - * Formats GroupedComposite with cosmetic and layout properties specific to the - * Editor. This should be used to maintain a consistent look and feel for all Editor - * freetext area components, such as DescriptionElementComposite. + * Formats GroupedComposite with cosmetic and layout properties + * specific to the Editor. This should be used to maintain a consistent look and + * feel for all Editor freetext area components, such as + * DescriptionElementComposite. *

- * Requires an IManagedForm, whose input is set to the contents - * of {@link #getData()} when the GroupedComposite gets focus, i.e. to - * populate the property sheet with the data. + * Requires an IManagedForm, whose input is set to the + * contents of {@link #getData()} when the GroupedComposite gets + * focus, i.e. to populate the property sheet with the data. *

*

- * The IManagedForm is also required to have a Taxon in its - * own getData(). + * The IManagedForm is also required to have a Taxon + * in its own getData(). *

*

- * The IManagedForm can also used for drawing borders by calling the method - * createBorderSupport(). + * The IManagedForm can also used for drawing borders by calling + * the method createBorderSupport(). *

- * + * * @author p.ciardelli * @author n.hoffmann * @created 02.06.2008 * @version 1.0 */ -abstract public class AbstractGroupedContainer implements IFormPart, IContainerConstants, IElementHasDetails { +abstract public class AbstractGroupedContainer implements + IFormPart, IContainerConstants, IElementHasDetails { protected ParseHandler parseHandler; - + private FocusListener nameCompositeFocusListener; private ModifyListener nameCompositeModifyListener; protected NameViewer nameViewer; - + private AbstractGroup group; - + private Label nonEditableInfoLabel; private DefaultToolTip nonEditableInfoHover; - + private static AbstractGroupedContainer selection; - + private FocusListener focusListener; private LineBreakListener lineBreakListener; @@ -114,108 +116,126 @@ abstract public class AbstractGroupedContainer implements I private Color backgroundColor; private boolean isDirty; - - + /** - *

Constructor for AbstractGroupedContainer.

- * - * @param editor a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} object. - * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object. - * @param taxonBase a T object. - * @param a T object. + *

+ * Constructor for AbstractGroupedContainer. + *

+ * + * @param editor + * a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor} + * object. + * @param group + * a + * {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} + * object. + * @param taxonBase + * a T object. + * @param + * a T object. */ - public AbstractGroupedContainer(T taxonBase){ + public AbstractGroupedContainer(T taxonBase) { setData(taxonBase); parseHandler = ParseHandler.NewInstance(taxonBase.getName()); } - - public void createContent(){ + + public void createContent() { createControl(); - + createTextViewer(); createLineWrapSupport(); createLineBreakListener(); setMenu(getEditor().getMenu()); - - setDraggableControl(new Control[]{getControl(), getNameViewer().getRulerControl()}); - + + setDraggableControl(new Control[] { getControl(), + getNameViewer().getRulerControl() }); + createEmptyViewerPrompt(EMPTY_NAME_PROMPT); - - + initializeComposite(); - + createListener(); - isFreeTextEnabled(); + enableFreeText(); } - - /** - *

createListener

+ *

+ * createListener + *

*/ - protected void createListener(){ - nameCompositeModifyListener = new ModifyListener(){ - + protected void createListener() { + nameCompositeModifyListener = new ModifyListener() { + public void modifyText(ModifyEvent e) { // mark the composite dirty setDirty(true); // parse the text String text = nameViewer.getTextWidget().getText(); - + NonViralName name = parseHandler.parse(text); getTaxonBase().setName(name); getTaxonBase().setTitleCache((getTaxonBase().generateTitle())); - + // show errors resulting from parsing calculateAnnotations(); - // store the position of the cursor + // store the position of the cursor storeCursor(); // notify selection listener setDelayedSelection(); } }; - nameCompositeFocusListener = new FocusAdapter(){ - - /* (non-Javadoc) - * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent) + nameCompositeFocusListener = new FocusAdapter() { + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt + * .events.FocusEvent) */ @Override public void focusLost(FocusEvent e) { super.focusLost(e); persistName(); - } + } }; - + addListener(); } - - private void addListener(){ - getNameViewer().getTextWidget().addModifyListener(nameCompositeModifyListener); - getNameViewer().getTextWidget().addFocusListener(nameCompositeFocusListener); + + private void addListener() { + getNameViewer().getTextWidget().addModifyListener( + nameCompositeModifyListener); + getNameViewer().getTextWidget().addFocusListener( + nameCompositeFocusListener); } - - private void removeListener(){ - getNameViewer().getTextWidget().removeModifyListener(nameCompositeModifyListener); - getNameViewer().getTextWidget().removeFocusListener(nameCompositeFocusListener); + + private void removeListener() { + getNameViewer().getTextWidget().removeModifyListener( + nameCompositeModifyListener); + getNameViewer().getTextWidget().removeFocusListener( + nameCompositeFocusListener); } - + /** * Initialize the composite specific code */ protected abstract void initializeComposite(); - + /** - *

getEmptyTextPrompt

- * + *

+ * getEmptyTextPrompt + *

+ * * @return a {@link java.lang.String} object. */ protected String getEmptyTextPrompt() { return EMPTY_NAME_PROMPT; } - + /** * */ @@ -224,45 +244,49 @@ abstract public class AbstractGroupedContainer implements I if (name == null) { return; } - - ILabelImageStrategy strategy = LabelImageProvider.getLabelStrategy(name); + + ILabelImageStrategy strategy = LabelImageProvider + .getLabelStrategy(name); LabelImageProvider labelProvider = new LabelImageProvider(strategy); - + Set nameRelations = name.getNameRelations(); if (nameRelations.size() == 0) { return; } -// for (NameRelationship nameRelation : nameRelations) { -// String typeLabel = null; -// TaxonNameBase relatedName = null; -// -// if (name.equals(nameRelation.getFromName())) { -// typeLabel = labelProvider.getNameRelationTypeLabel( -// nameRelation.getType()); -// relatedName = nameRelation.getToName(); -// } else { -// typeLabel = labelProvider.getNameRelationTypeInverseLabel( -// nameRelation.getType()); -// relatedName = nameRelation.getFromName(); -// } -// -// setNonEditableInfo(typeLabel + " " + NameHelper.getDisplayName(relatedName)); -// } - } - + // for (NameRelationship nameRelation : nameRelations) { + // String typeLabel = null; + // TaxonNameBase relatedName = null; + // + // if (name.equals(nameRelation.getFromName())) { + // typeLabel = labelProvider.getNameRelationTypeLabel( + // nameRelation.getType()); + // relatedName = nameRelation.getToName(); + // } else { + // typeLabel = labelProvider.getNameRelationTypeInverseLabel( + // nameRelation.getType()); + // relatedName = nameRelation.getFromName(); + // } + // + // setNonEditableInfo(typeLabel + " " + + // NameHelper.getDisplayName(relatedName)); + // } + } + /** - *

initTextViewer

+ *

+ * initTextViewer + *

*/ protected void initTextViewer() { - -// showNameRelations(); - + + // showNameRelations(); + updateIndent(); - + updateIcon(); - + String text = NameHelper.getDisplayNameWithRef(getData()); - + if (text.length() == 0) { initEmptyText(); } else { @@ -271,9 +295,11 @@ abstract public class AbstractGroupedContainer implements I } calculateAnnotations(); } - + /** - *

calculateErrors

+ *

+ * calculateErrors + *

*/ synchronized protected void calculateAnnotations() { getNameViewer().clearAnnotations(); @@ -284,21 +310,25 @@ abstract public class AbstractGroupedContainer implements I * */ public void showAnnotations() { - - if(getName().hasProblem()){ + + if (getName().hasProblem()) { showParsingProblems(); } - - if(!isNameParsable()){ - getNameViewer().addAnnotation( - new EditorAnnotation(EditorAnnotationType.WARNING, 0, "This name may only be edited in the details view.")); + + if (!isNameParsable()) { + getNameViewer() + .addAnnotation( + new EditorAnnotation(EditorAnnotationType.WARNING, + 0, + "This name may only be edited in the details view.")); } - - if(isNameUsedMultipleTimes()){ - getNameViewer().addAnnotation(new EditorAnnotation(EditorAnnotationType.WARNING, 0, "This taxons name is used multiple times.")); + + if (isNameUsedMultipleTimes()) { + getNameViewer().addAnnotation( + new EditorAnnotation(EditorAnnotationType.WARNING, 0, + "This taxons name is used multiple times.")); } - - + } /** @@ -306,78 +336,84 @@ abstract public class AbstractGroupedContainer implements I */ private void showParsingProblems() { String text = getNameViewer().getTextWidget().getText(); - + List parsingProblems = getName().getParsingProblems(); - + for (ParserProblem problem : parsingProblems) { - getNameViewer().addAnnotation(new EditorAnnotation(problem), getParsingProblemPosition()); - } + getNameViewer().addAnnotation(new EditorAnnotation(problem), + getParsingProblemPosition()); + } } - - private Position getParsingProblemPosition(){ + + private Position getParsingProblemPosition() { String text = getNameViewer().getTextWidget().getText(); - + if (getName().hasProblem() && text.length() > 0) { int start = getName().getProblemStarts(); int length = getName().getProblemEnds() - start; - + if (start == -1 || getName().getProblemEnds() == -1) { return null; } - + // Don't let squigglies try to draw beyond the end of the text if (text.length() < start + length) { length = text.length() - start; } - + return new Position(start, length); } return null; } /** - *

handleSplitText

- * - * @param text a {@link java.lang.String} object. + *

+ * handleSplitText + *

+ * + * @param text + * a {@link java.lang.String} object. */ protected void handleSplitText(String text) { // Create a synonym in a new homotypic group using text as name - TaxonNameBase synonymName = ParseHandler.parseReferencedName(text, null); - - EditorUtil.executeOperation(new CreateSynonymInNewGroupOperation - ("New Heterotypic Synonym", getEditor().getUndoContext(), getEditor().getTaxon(), synonymName, getEditor())); + TaxonNameBase synonymName = ParseHandler + .parseReferencedName(text, null); + + EditorUtil.executeOperation(new CreateSynonymInNewGroupOperation( + "New Heterotypic Synonym", getEditor().getUndoContext(), + getEditor().getTaxon(), synonymName, getEditor())); } /** * Refreshes the display with latest data from the model. - * + * * Note: Will not parse the text and not calculate errors! */ public void refresh() { -// showNameRelations(); - + // showNameRelations(); + String text = NameHelper.getDisplayNameWithRef(getTaxonBase()); - - if(getNameViewer().getTextWidget() == null){ + + if (getNameViewer().getTextWidget() == null) { // we might get here via dnd. Look slike it can be ignored return; } - + if (text.length() == 0) { initEmptyText(); - } else if(! getNameViewer().getTextWidget().getText().equals(text)) { + } else if (!getNameViewer().getTextWidget().getText().equals(text)) { removeListener(); getNameViewer().getTextWidget().setText(text); addListener(); } - + updateNonEditableInfo(); - + updateIcon(); -// placeCursor(); + // placeCursor(); updateIndent(); - - isFreeTextEnabled(); + + enableFreeText(); } /** @@ -385,77 +421,65 @@ abstract public class AbstractGroupedContainer implements I */ protected abstract void updateIcon(); - protected abstract void updateIndent(); - /** - *

updateNonEditableInfo

+ *

+ * updateNonEditableInfo + *

*/ protected abstract void updateNonEditableInfo(); - + /** * */ - private void isFreeTextEnabled() { - // Decide whether editing of freetext is allowed or not. - if (freetextEditingAllowed()) { - - // set editable - getNameViewer().getTextWidget().setEditable(true); - - // restore foreground font color again - getNameViewer().getTextWidget().setForeground(control.getForeground()); - } else { - // set non-editable - getNameViewer().getTextWidget().setEditable(false); - - // grey out text as a non-editable indicator - getNameViewer().getTextWidget().setForeground(EditorUtil.getColor(Resources.COLOR_DISABLED_EDITOR)); - } + private void enableFreeText() { + setEnabled(isFreetextEditingAllowed()); } - /** - * Checks whether the freetext should be editable based on specific empty fields. + * Checks whether the freetext should be editable based on specific empty + * fields. + * * @return */ - private boolean freetextEditingAllowed() { - NonViralName name = (NonViralName) HibernateProxyHelper.deproxy(getName()); + private boolean isFreetextEditingAllowed() { + NonViralName name = (NonViralName) HibernateProxyHelper + .deproxy(getName()); boolean enableFreetext = true; enableFreetext |= isNameUsedMultipleTimes(); enableFreetext &= isNameParsable(); - + return enableFreetext; } - - private boolean isNameUsedMultipleTimes(){ - if(getName().getTaxonBases().size() > 1){ + + private boolean isNameUsedMultipleTimes() { + if (getName().getTaxonBases().size() > 1) { return true; } return false; } - - private boolean isNameParsable(){ + + private boolean isNameParsable() { TaxonNameBase name = getName(); - - boolean isParsable = true; - isParsable &= CdmUtils.isEmpty(name.getAppendedPhrase()); //taxonFieldsEmpty(); - - if(name instanceof NonViralName){ + + boolean isParsable = true; + isParsable &= CdmUtils.isEmpty(name.getAppendedPhrase()); // taxonFieldsEmpty(); + + if (name instanceof NonViralName) { NonViralName nonViralName = (NonViralName) name; - isParsable &= ! nonViralName.isProtectedAuthorshipCache(); - isParsable &= ! nonViralName.isProtectedNameCache(); + isParsable &= !nonViralName.isProtectedAuthorshipCache(); + isParsable &= !nonViralName.isProtectedNameCache(); } - + return isParsable; } /** * Parse the text and calculate errors */ - public void parseAndCalculateAnnotations(){ + public void parseAndCalculateAnnotations() { removeListener(); String unparsedNameString = getNameViewer().getTextWidget().getText(); parseHandler.parse(unparsedNameString); @@ -464,96 +488,114 @@ abstract public class AbstractGroupedContainer implements I } /** - *

getTaxonBase

- * + *

+ * getTaxonBase + *

+ * * @return the taxonBase */ public T getTaxonBase() { return getData(); } - + /** - *

getName

- * + *

+ * getName + *

+ * * @return a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase} object. */ - public TaxonNameBase getName(){ - return (TaxonNameBase) HibernateProxyHelper.deproxy(getTaxonBase().getName()); + public TaxonNameBase getName() { + return (TaxonNameBase) HibernateProxyHelper.deproxy(getTaxonBase() + .getName()); } /** - *

persistName

+ *

+ * persistName + *

*/ - public void persistName(){ - if(isDirty()){ + public void persistName() { + if (isDirty()) { getNameViewer().getTextWidget().setEnabled(false); - final String unparsedNameString = getNameViewer().getTextWidget().getText(); -// Job job = new Job("Persisting Name"){ -// -// @Override -// protected IStatus run(IProgressMonitor monitor) { -// - final NonViralName name = parseHandler.parseAndResolveDuplicates(unparsedNameString); -// -// Display.getDefault().asyncExec(new Runnable(){ -// public void run() { - getTaxonBase().setName(name); - getTaxonBase().setTitleCache((getTaxonBase().generateTitle())); - setDirty(false); - getNameViewer().getTextWidget().setEnabled(true); -// }; -// }); -// -// -// return Status.OK_STATUS; -// } -// -// }; -// -// job.setPriority(Job.DECORATE); -// job.schedule(); + final String unparsedNameString = getNameViewer().getTextWidget() + .getText(); + // Job job = new Job("Persisting Name"){ + // + // @Override + // protected IStatus run(IProgressMonitor monitor) { + // + final NonViralName name = parseHandler + .parseAndResolveDuplicates(unparsedNameString); + // + // Display.getDefault().asyncExec(new Runnable(){ + // public void run() { + getTaxonBase().setName(name); + getTaxonBase().setTitleCache((getTaxonBase().generateTitle())); + setDirty(false); + getNameViewer().getTextWidget().setEnabled(true); + // }; + // }); + // + // + // return Status.OK_STATUS; + // } + // + // }; + // + // job.setPriority(Job.DECORATE); + // job.schedule(); } } - + /** - *

Getter for the field group.

- * - * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object. + *

+ * Getter for the field group. + *

+ * + * @return a + * {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} + * object. */ - public AbstractGroup getGroup(){ - if(group == null){ + public AbstractGroup getGroup() { + if (group == null) { throw new IllegalStateException("Group shall not be null."); } return group; } - + /** - *

remove

+ *

+ * remove + *

*/ - public void remove(){ + public void remove() { getGroup().remove(this); } - + /** - *

createControl

+ *

+ * createControl + *

*/ protected void createControl() { - control = getEditor().getToolkit().createComposite(getGroup().getControl()); - + control = getEditor().getToolkit().createComposite( + getGroup().getControl()); + control.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); TableWrapLayout layout = new TableWrapLayout(); layout.leftMargin = 0; layout.rightMargin = 0; layout.topMargin = 5; layout.bottomMargin = 5; - + layout.verticalSpacing = 0; layout.horizontalSpacing = 0; - + control.setLayout(layout); - + } - + /** * @return */ @@ -562,42 +604,52 @@ abstract public class AbstractGroupedContainer implements I } /** - *

Getter for the field control.

- * + *

+ * Getter for the field control. + *

+ * * @return a {@link org.eclipse.swt.widgets.Composite} object. */ - public Composite getControl(){ + public Composite getControl() { return control; } - + /** - *

createLineWrapSupport

+ *

+ * createLineWrapSupport + *

*/ protected void createLineWrapSupport() { new LineWrapSupport(getNameViewer(), getEditor().getManagedForm()); } - - + /** - *

createTextViewer

+ *

+ * createTextViewer + *

*/ protected void createTextViewer() { nameViewer = new NameViewer(control); - + focusListener = new FocusAdapter() { @Override public void focusGained(FocusEvent e) { - for(AbstractGroupedContainer container : getEditor().getGroupedContainers()){ + if(!enabled){ + return; + } + for (AbstractGroupedContainer container : getEditor() + .getGroupedContainers()) { container.colorSelected(NOT_SELECTED); } - getEditor().getManagedForm().setInput(AbstractGroupedContainer.this); + getEditor().getManagedForm().setInput( + AbstractGroupedContainer.this); placeCursor(); colorSelected(SELECTED_FOCUS); } }; nameViewer.getTextWidget().addFocusListener(focusListener); - -// + + // MouseAdapter mouseListener = new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { @@ -608,20 +660,26 @@ abstract public class AbstractGroupedContainer implements I nameViewer.getRulerControl().addMouseListener(mouseListener); nameViewer.getTextWidget().addMouseListener(mouseListener); } - + /** - *

setIcon

- * - * @param icon a {@link org.eclipse.swt.graphics.Image} object. + *

+ * setIcon + *

+ * + * @param icon + * a {@link org.eclipse.swt.graphics.Image} object. */ public void setIcon(Image icon) { getNameViewer().setIcon(icon); } - + /** - *

setIndent

- * - * @param indent a int. + *

+ * setIndent + *

+ * + * @param indent + * a int. */ public void setIndent(int indent) { if (control.getLayout() instanceof TableWrapLayout) { @@ -631,36 +689,44 @@ abstract public class AbstractGroupedContainer implements I control.setLayout(layout); control.layout(); } else { - new RuntimeException("Couldn't indent - composite's layout must be TableWrapLayout."); + new RuntimeException( + "Couldn't indent - composite's layout must be TableWrapLayout."); } - } - + } + /** - *

setSelected

+ *

+ * setSelected + *

*/ public void setSelected() { getNameViewer().getTextWidget().setFocus(); } - + /** - *

isSelected

- * + *

+ * isSelected + *

+ * * @return a boolean. */ - public boolean isSelected(){ + public boolean isSelected() { return getEditor().getSelectedContainer() == this; } - + /** - *

colorSelected

- * - * @param mode a int. + *

+ * colorSelected + *

+ * + * @param mode + * a int. */ - public void colorSelected(int mode){ - if(!control.isDisposed()){ + public void colorSelected(int mode) { + if (!control.isDisposed()) { String colorString = null; - - switch(mode){ + + switch (mode) { case SELECTED_FOCUS: colorString = Resources.COLOR_CONTROL_SELECTED_FOCUS; break; @@ -670,91 +736,107 @@ abstract public class AbstractGroupedContainer implements I default: colorString = Resources.COLOR_COMPOSITE_BACKGROUND; } - + backgroundColor = EditorUtil.getColor(colorString); - + setBackground(backgroundColor); } } - /** - *

setDelayedSelection

+ *

+ * setDelayedSelection + *

*/ - protected void setDelayedSelection(){ - //TODO this might be done better - // this is the quickest solution i could come up with and it improves performance + protected void setDelayedSelection() { + // TODO this might be done better + // this is the quickest solution i could come up with and it improves + // performance // please reimplement if you know better. selection = this; - + // start timer Display display = Display.getCurrent(); Runnable runnable = new Runnable() { - + public void run() { getEditor().getManagedForm().setInput(selection); } }; display.timerExec(1000, runnable); - + } - + /** - *

setBackground

- * - * @param color a {@link org.eclipse.swt.graphics.Color} object. + *

+ * setBackground + *

+ * + * @param color + * a {@link org.eclipse.swt.graphics.Color} object. */ public void setBackground(Color color) { control.setBackground(color); - - for(Control child : control.getChildren()){ + + for (Control child : control.getChildren()) { child.setBackground(color); } - + getNameViewer().setBackground(color); } - /* (non-Javadoc) - * @see org.eclipse.swt.widgets.Control#setFont(org.eclipse.swt.graphics.Font) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.swt.widgets.Control#setFont(org.eclipse.swt.graphics.Font) */ /** - *

setFont

- * - * @param font a {@link org.eclipse.swt.graphics.Font} object. + *

+ * setFont + *

+ * + * @param font + * a {@link org.eclipse.swt.graphics.Font} object. */ public void setFont(Font font) { getNameViewer().getTextWidget().setFont(font); } - + /** - *

Getter for the field nameViewer.

- * - * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.NameViewer} object. + *

+ * Getter for the field nameViewer. + *

+ * + * @return a {@link eu.etaxonomy.taxeditor.editor.name.container.NameViewer} + * object. */ public NameViewer getNameViewer() { - if (nameViewer == null){ - throw new RuntimeException("The Name Viewer is corrupt for Name Container: " + getTaxonBase().getName().getTitleCache()); + if (nameViewer == null) { + throw new RuntimeException( + "The Name Viewer is corrupt for Name Container: " + + getTaxonBase().getName().getTitleCache()); } return nameViewer; } - + /** * If textViewer has already been set, it will show a - * prompt along the lines of "Click here to start entering data" - * when empty. - * - * @param prompt a {@link java.lang.String} object. + * prompt along the lines of + * "Click here to start entering data" when empty. + * + * @param prompt + * a {@link java.lang.String} object. */ public void createEmptyViewerPrompt(final String prompt) { - + Assert.isNotNull(getNameViewer()); - + final StyledText textControl = getNameViewer().getTextWidget(); final IDocument document = getNameViewer().getDocument(); - + setFocusListener(new FocusListener() { - public void focusGained(FocusEvent e) { if (document.get().equals(prompt)) { textControl.setFont(getViewerFont()); @@ -762,44 +844,51 @@ abstract public class AbstractGroupedContainer implements I } } - public void focusLost(FocusEvent e) { if (document.getLength() == 0) { initEmptyText(); } } - + }); textControl.addFocusListener(getFocusListener()); - + if (document.getLength() == 0) { - textControl.setFont(EditorUtil.getFont(Resources.FONT_DEFAULT_PROMPT)); + textControl.setFont(EditorUtil + .getFont(Resources.FONT_DEFAULT_PROMPT)); document.set(prompt); } } - + /** - *

getViewerFont

- * + *

+ * getViewerFont + *

+ * * @return a {@link org.eclipse.swt.graphics.Font} object. */ abstract protected Font getViewerFont(); /** - *

initEmptyText

+ *

+ * initEmptyText + *

*/ protected void initEmptyText() { Font defaultFont = EditorUtil.getFont(Resources.FONT_DEFAULT_PROMPT); getNameViewer().getTextWidget().setFont(defaultFont); - + getNameViewer().getDocument().set(getEmptyTextPrompt()); placeCursor(); } /** - *

Setter for the field focusListener.

- * - * @param focusListener a {@link org.eclipse.swt.events.FocusListener} object. + *

+ * Setter for the field focusListener. + *

+ * + * @param focusListener + * a {@link org.eclipse.swt.events.FocusListener} object. */ protected void setFocusListener(FocusListener focusListener) { this.focusListener = focusListener; @@ -810,52 +899,66 @@ abstract public class AbstractGroupedContainer implements I } /** - *

setDirty

- * - * @param isDirty a boolean. + *

+ * setDirty + *

+ * + * @param isDirty + * a boolean. */ public void setDirty(boolean isDirty) { - if(isDirty){ + if (isDirty) { getEditor().getManagedForm().dirtyStateChanged(); } this.isDirty = isDirty; } - + /** - *

isDirty

- * + *

+ * isDirty + *

+ * * @return a boolean. */ - public boolean isDirty(){ + public boolean isDirty() { return isDirty; } - + /** - *

setMenu

- * - * @param menu a {@link org.eclipse.swt.widgets.Menu} object. + *

+ * setMenu + *

+ * + * @param menu + * a {@link org.eclipse.swt.widgets.Menu} object. */ - public void setMenu (Menu menu) { + public void setMenu(Menu menu) { control.setMenu(menu); - + getNameViewer().setMenu(menu); } - + private Control[] draggableControls; - + /** - *

setDraggableControl

- * - * @param controls an array of {@link org.eclipse.swt.widgets.Control} objects. + *

+ * setDraggableControl + *

+ * + * @param controls + * an array of {@link org.eclipse.swt.widgets.Control} objects. */ protected void setDraggableControl(Control[] controls) { draggableControls = controls; } - + /** - *

setIsDraggable

- * - * @param draggable a boolean. + *

+ * setIsDraggable + *

+ * + * @param draggable + * a boolean. */ public void setIsDraggable(boolean draggable) { @@ -865,26 +968,28 @@ abstract public class AbstractGroupedContainer implements I throw new NullPointerException( "Draggable controls must be set to add draggability"); } - - Transfer[] types = new Transfer[] { CdmDataTransfer.getInstance() }; + + Transfer[] types = new Transfer[] { CdmDataTransfer.getInstance() }; int operations = DND.DROP_MOVE; - for(Control draggableControl : draggableControls){ - DragSource dragSource = new DragSource(draggableControl, operations); + for (Control draggableControl : draggableControls) { + DragSource dragSource = new DragSource(draggableControl, + operations); dragSource.setTransfer(types); - + dragSource.addDragListener(new NameEditorDragListener(this)); - dragSource.setDragSourceEffect(new NameEditorDragSourceEffect(control)); + dragSource.setDragSourceEffect(new NameEditorDragSourceEffect( + control)); } - } + } } private String nonEditableText; ControlListener nonEditableResizeListener = new ControlAdapter() { - + int width = 0; - + @Override public void controlResized(ControlEvent e) { if (nonEditableInfoLabel.getBounds().width == width) { @@ -892,9 +997,8 @@ abstract public class AbstractGroupedContainer implements I } width = nonEditableInfoLabel.getBounds().width; if (nonEditableInfoLabel.getBounds().width > 0) { - nonEditableInfoLabel.setText( - Dialog.shortenText(nonEditableText.toUpperCase(), - nonEditableInfoLabel)); + nonEditableInfoLabel.setText(Dialog.shortenText( + nonEditableText.toUpperCase(), nonEditableInfoLabel)); } } }; @@ -904,102 +1008,115 @@ abstract public class AbstractGroupedContainer implements I private LabelEllipsisListener nonEditableLabelEllipsisListener; private T data; - + + private boolean enabled; + /** * nonEditableInfo is a label displayed underneath a GroupedComposite's - * input field. For instance, NameComposites display things like name relations, - * sec. references, etc. here. - * - * @param info the text to display in the label - * @param append whether the string should be appended to text that is already shown in the label + * input field. For instance, NameComposites display things like name + * relations, sec. references, etc. here. + * + * @param info + * the text to display in the label + * @param append + * whether the string should be appended to text that is already + * shown in the label */ public void setNonEditableInfo(String info, boolean append) { - // TODO non editable info should only be drawn once, when everything else is drawn + // TODO non editable info should only be drawn once, when everything + // else is drawn info = info.toUpperCase(); - - if(append){ + + if (append) { nonEditableText += ", " + info; nonEditableHoverText += "\n" + info; - }else{ + } else { nonEditableText = info; nonEditableHoverText = info; } - + if (nonEditableInfoLabel == null) { - nonEditableInfoLabel = getEditor().getToolkit().createLabel(control, ""); - TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP); - // Set indent to viewer ruler's width + nonEditableInfoLabel = getEditor().getToolkit().createLabel( + control, ""); + TableWrapData layoutData = new TableWrapData( + TableWrapData.FILL_GRAB, TableWrapData.TOP); + // Set indent to viewer ruler's width if (getNameViewer().getRulerControl() != null) { // TODO right justify layoutData.indent = NameViewer.RULER_WIDTH; } nonEditableInfoLabel.setLayoutData(layoutData); - - - nonEditableLabelEllipsisListener = new LabelEllipsisListener(nonEditableInfoLabel) { + nonEditableLabelEllipsisListener = new LabelEllipsisListener( + nonEditableInfoLabel) { @Override public String getLabelText() { return nonEditableText.toUpperCase(); } - }; - nonEditableInfoLabel.addControlListener(nonEditableLabelEllipsisListener); - + }; + nonEditableInfoLabel + .addControlListener(nonEditableLabelEllipsisListener); + nonEditableInfoHover = new DefaultToolTip(nonEditableInfoLabel); nonEditableInfoHover.setRespectDisplayBounds(true); - - } + + } nonEditableInfoHover.setText(nonEditableHoverText); nonEditableInfoLabel.setText(nonEditableText); - + calculateAnnotations(); } - + /** - *

Getter for the field data.

- * + *

+ * Getter for the field data. + *

+ * * @return a T object. */ - public T getData(){ + public T getData() { return data; } - + /** - *

Setter for the field data.

- * - * @param data a T object. + *

+ * Setter for the field data. + *

+ * + * @param data + * a T object. */ - public void setData(T data){ - this.data = (T) HibernateProxyHelper.deproxy(data); + public void setData(T data) { + this.data = (T) HibernateProxyHelper.deproxy(data); } /** * If the user hitting carriage return should cause something to happen - - * i.e. the creation of a new composite - call this method and override - * the method handleSplitText(). + * i.e. the creation of a new composite - call this method and override the + * method handleSplitText(). */ protected void createLineBreakListener() { lineBreakListener = new LineBreakListener() { @Override public void handleSplitText(String text) { - AbstractGroupedContainer.this.handleSplitText(text); + AbstractGroupedContainer.this.handleSplitText(text); } }; - + getNameViewer().getTextWidget().addVerifyListener(lineBreakListener); } - + abstract class LabelEllipsisListener extends ControlAdapter { - + private final Label label; int width = 0; LabelEllipsisListener(Label label) { this.label = label; } - + abstract public String getLabelText(); - + @Override public void controlResized(ControlEvent e) { if (label.getBounds().width == width) { @@ -1013,80 +1130,90 @@ abstract public class AbstractGroupedContainer implements I } /** - *

storeCursor

+ *

+ * storeCursor + *

*/ public void storeCursor() { this.cursorPosition = getNameViewer().getCursorPosition(); } - + /** * Puts the cursor to the position it was last seen on or to the end of line * if no former position is known. */ - public void placeCursor(){ - if(cursorPosition == 0){ + public void placeCursor() { + if (cursorPosition == 0) { getNameViewer().setCursorToEOL(); - }else{ + } else { getNameViewer().setCursorPosition(cursorPosition); } } - - /** - *

Setter for the field group.

- * - * @param group a {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} object. + *

+ * Setter for the field group. + *

+ * + * @param group + * a + * {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup} + * object. */ public void setGroup(AbstractGroup group) { this.group = group; } - - /** - *

restoreColor

+ *

+ * restoreColor + *

*/ public void restoreColor() { setBackground(backgroundColor); } - - - /* (non-Javadoc) - * @see org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm + * ) */ @Override public void initialize(IManagedForm form) { // TODO Auto-generated method stub - - } + } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.forms.IFormPart#dispose() */ @Override public void dispose() { - if(getControl() != null){ + if (getControl() != null) { setMenu(null); getControl().dispose(); } } - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.forms.IFormPart#commit(boolean) */ @Override public void commit(boolean onSave) { - if(isDirty()){ + if (isDirty()) { persistName(); } } - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.forms.IFormPart#setFormInput(java.lang.Object) */ @Override @@ -1095,8 +1222,9 @@ abstract public class AbstractGroupedContainer implements I return false; } - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.forms.IFormPart#setFocus() */ @Override @@ -1104,8 +1232,9 @@ abstract public class AbstractGroupedContainer implements I getNameViewer().getControl().setFocus(); } - - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.ui.forms.IFormPart#isStale() */ @Override @@ -1113,4 +1242,16 @@ abstract public class AbstractGroupedContainer implements I // TODO Auto-generated method stub return false; } -} + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + Color color = enabled ? control.getForeground() : EditorUtil.getColor(Resources.COLOR_DISABLED_EDITOR); + + getNameViewer().getTextWidget().setEditable(enabled); + getNameViewer().getTextWidget().setForeground(color); + } + + public boolean getEnabled(){ + return enabled; + } +} diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialogs/filteredSelection/AbstractFilteredCdmResourceSelectionDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialogs/filteredSelection/AbstractFilteredCdmResourceSelectionDialog.java index 38cd1c5b7..330be274d 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialogs/filteredSelection/AbstractFilteredCdmResourceSelectionDialog.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialogs/filteredSelection/AbstractFilteredCdmResourceSelectionDialog.java @@ -471,7 +471,7 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog