/**
* 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 java.util.List;
import java.util.Set;
+import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import eu.etaxonomy.cdm.common.CdmUtils;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.name.INonViralName;
import eu.etaxonomy.cdm.model.name.NameRelationship;
-import eu.etaxonomy.cdm.model.name.NonViralName;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.name.TaxonName;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.editor.name.container.EditorAnnotation.EditorAnnotationType;
import eu.etaxonomy.taxeditor.editor.name.dnd.NameEditorDragListener;
* The <code>IManagedForm</code> can also used for drawing borders by calling
* the method <code>createBorderSupport()</code>.
* </p>
- *
+ *
* @author p.ciardelli
* @author n.hoffmann
* @created 02.06.2008
- * @version 1.0
*/
abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
IFormPart, IContainerConstants, IElementHasDetails {
* <p>
* Constructor for AbstractGroupedContainer.
* </p>
- *
+ *
* @param editor
* a {@link eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor}
* object.
protected void createListener() {
nameCompositeModifyListener = new ModifyListener() {
- public void modifyText(ModifyEvent e) {
+ @Override
+ public void modifyText(ModifyEvent e) {
// mark the composite dirty
setDirty(true);
// parse the text
String text = nameViewer.getTextWidget().getText();
- NonViralName name = parseHandler.parse(text);
+ TaxonName name = (TaxonName)parseHandler.parse(text);
getTaxonBase().setName(name);
getTaxonBase().setTitleCache((getTaxonBase().generateTitle()));
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt
* .events.FocusEvent)
addListener();
}
- private void addListener() {
+ protected void addListener() {
getNameViewer().getTextWidget().addModifyListener(
nameCompositeModifyListener);
getNameViewer().getTextWidget().addFocusListener(
nameCompositeFocusListener);
}
- private void removeListener() {
+ protected void removeListener() {
getNameViewer().getTextWidget().removeModifyListener(
nameCompositeModifyListener);
getNameViewer().getTextWidget().removeFocusListener(
* <p>
* getEmptyTextPrompt
* </p>
- *
+ *
* @return a {@link java.lang.String} object.
*/
protected String getEmptyTextPrompt() {
}
/**
- *
+ *
*/
private void showNameRelations() {
- TaxonNameBase<?, ?> name = getName();
+ TaxonName name = getName();
if (name == null) {
return;
}
}
// for (NameRelationship nameRelation : nameRelations) {
// String typeLabel = null;
- // TaxonNameBase<?, ?> relatedName = null;
+ // TaxonName relatedName = null;
//
// if (name.equals(nameRelation.getFromName())) {
// typeLabel = labelProvider.getNameRelationTypeLabel(
}
/**
- *
+ *
*/
public void showAnnotations() {
- if (getName().hasProblem()) {
+ if (getName() != null && getName().hasProblem()) {
showParsingProblems();
}
.addAnnotation(
new EditorAnnotation(EditorAnnotationType.WARNING,
0,
- "This name may only be edited in the details view."));
+ Messages.AbstractGroupedContainer_EDIT_IN_DETAILS_VIEW));
}
if (isNameUsedMultipleTimes()) {
getNameViewer().addAnnotation(
new EditorAnnotation(EditorAnnotationType.WARNING, 0,
- "This taxons name is used multiple times."));
+ Messages.AbstractGroupedContainer_MULTIPLE_USE));
}
}
/**
- *
+ *
*/
private void showParsingProblems() {
String text = getNameViewer().getTextWidget().getText();
- List<ParserProblem> parsingProblems = getName().getParsingProblems();
+ TaxonName name = getName();
+ if (name == null){
+ return;
+ }
+
+ List<ParserProblem> parsingProblems = name.getParsingProblems();
for (ParserProblem problem : parsingProblems) {
getNameViewer().addAnnotation(new EditorAnnotation(problem),
private Position getParsingProblemPosition() {
String text = getNameViewer().getTextWidget().getText();
- if (getName().hasProblem() && text.length() > 0) {
+ if (getName() != null && getName().hasProblem() && text.length() > 0) {
int start = getName().getProblemStarts();
int length = getName().getProblemEnds() - start;
* <p>
* handleSplitText
* </p>
- *
+ *
* @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);
+ TaxonName synonymName = TaxonName.castAndDeproxy(
+ ParseHandler.parseReferencedName(text, null));
EditorUtil.executeOperation(new CreateSynonymInNewGroupOperation(
- "New Heterotypic Synonym", getEditor().getUndoContext(),
+ Messages.AbstractGroupedContainer_NEW_HETERO_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() {
+ @Override
+ public void refresh() {
// showNameRelations();
String text = NameHelper.getDisplayNameWithRef(getTaxonBase());
}
/**
- *
+ *
*/
protected abstract void updateIcon();
protected abstract void updateNonEditableInfo();
/**
- *
+ *
*/
- private void enableFreeText() {
+ protected void enableFreeText() {
setEnabled(isFreetextEditingAllowed());
}
/**
* Checks whether the freetext should be editable based on specific empty
* fields.
- *
+ *
* @return
*/
private boolean isFreetextEditingAllowed() {
- NonViralName name = (NonViralName) HibernateProxyHelper
- .deproxy(getName());
boolean enableFreetext = true;
enableFreetext |= isNameUsedMultipleTimes();
}
/**
- * Checks whether there are more than one, non-orphaned taxon bases
+ * Checks whether there are more than one, non-orphaned taxon bases
* attached to the taxon name
- *
+ *
* @return
*/
private boolean isNameUsedMultipleTimes() {
-
- Set<TaxonBase> taxonBases = getName().getTaxonBases();
- Iterator<TaxonBase> tbItr = taxonBases.iterator();
- int nonOrphanedTaxonBaseCount = taxonBases.size();
-
- while(tbItr.hasNext()) {
- TaxonBase tb = tbItr.next();
- if(tb.isOrphaned()) {
- nonOrphanedTaxonBaseCount--;
+
+ TaxonName name = getName();
+ if (name != null){
+ Set<TaxonBase> taxonBases = name.getTaxonBases();
+ Iterator<TaxonBase> tbItr = taxonBases.iterator();
+ int nonOrphanedTaxonBaseCount = taxonBases.size();
+
+ while(tbItr.hasNext()) {
+ TaxonBase<?> tb = tbItr.next();
+ if(tb.isOrphaned()) {
+ nonOrphanedTaxonBaseCount--;
+ }
+ }
+ if(nonOrphanedTaxonBaseCount > 1) {
+ return true;
}
- }
- if(nonOrphanedTaxonBaseCount > 1) {
- return true;
}
return false;
}
private boolean isNameParsable() {
- TaxonNameBase name = getName();
+ TaxonName name = getName();
+ if (name == null){
+ return false;
+ }
boolean isParsable = true;
- isParsable &= CdmUtils.isEmpty(name.getAppendedPhrase()); // taxonFieldsEmpty();
+ isParsable &= StringUtils.isBlank(name.getAppendedPhrase()); // taxonFieldsEmpty();
- if (name instanceof NonViralName) {
- NonViralName nonViralName = (NonViralName) name;
- isParsable &= !nonViralName.isProtectedAuthorshipCache();
- isParsable &= !nonViralName.isProtectedNameCache();
- }
+ isParsable &= !name.isProtectedAuthorshipCache();
+ isParsable &= !name.isProtectedNameCache();
return isParsable;
}
* <p>
* getTaxonBase
* </p>
- *
+ *
* @return the taxonBase
*/
public T getTaxonBase() {
* <p>
* getName
* </p>
- *
+ *
* @return a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase} object.
*/
- public TaxonNameBase getName() {
- return (TaxonNameBase) HibernateProxyHelper.deproxy(getTaxonBase()
- .getName());
+ public TaxonName getName() {
+ return CdmBase.deproxy(getTaxonBase().getName());
}
/**
// @Override
// protected IStatus run(IProgressMonitor monitor) {
//
- final NonViralName name = parseHandler
+ final TaxonName name = (TaxonName)parseHandler
.parseAndResolveDuplicates(unparsedNameString);
//
// Display.getDefault().asyncExec(new Runnable(){
* <p>
* Getter for the field <code>group</code>.
* </p>
- *
+ *
* @return a
* {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup}
* object.
*/
public AbstractGroup getGroup() {
if (group == null) {
- throw new IllegalStateException("Group shall not be null.");
+ throw new IllegalStateException("Group shall not be null."); //$NON-NLS-1$
}
return group;
}
* <p>
* Getter for the field <code>control</code>.
* </p>
- *
+ *
* @return a {@link org.eclipse.swt.widgets.Composite} object.
*/
public Composite getControl() {
* <p>
* setIcon
* </p>
- *
+ *
* @param icon
* a {@link org.eclipse.swt.graphics.Image} object.
*/
* <p>
* setIndent
* </p>
- *
+ *
* @param indent
* a int.
*/
control.layout();
} else {
new RuntimeException(
- "Couldn't indent - composite's layout must be TableWrapLayout.");
+ "Couldn't indent - composite's layout must be TableWrapLayout."); //$NON-NLS-1$
}
}
* <p>
* isSelected
* </p>
- *
+ *
* @return a boolean.
*/
public boolean isSelected() {
* <p>
* colorSelected
* </p>
- *
+ *
* @param mode
* a int.
*/
Display display = Display.getCurrent();
Runnable runnable = new Runnable() {
- public void run() {
+ @Override
+ public void run() {
getEditor().getManagedForm().setInput(selection);
}
};
* <p>
* setBackground
* </p>
- *
+ *
* @param color
* a {@link org.eclipse.swt.graphics.Color} object.
*/
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.swt.widgets.Control#setFont(org.eclipse.swt.graphics.Font)
*/
* <p>
* setFont
* </p>
- *
+ *
* @param font
* a {@link org.eclipse.swt.graphics.Font} object.
*/
* <p>
* Getter for the field <code>nameViewer</code>.
* </p>
- *
+ *
* @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: "
+ "The Name Viewer is corrupt for Name Container: " //$NON-NLS-1$
+ getTaxonBase().getName().getTitleCache());
}
return nameViewer;
* If <code>textViewer</code> has already been set, it will show a
* <code>prompt</code> along the lines of
* "Click here to start entering data" when empty.
- *
+ *
* @param prompt
* a {@link java.lang.String} object.
*/
setFocusListener(new FocusListener() {
- public void focusGained(FocusEvent e) {
+ @Override
+ public void focusGained(FocusEvent e) {
if (document.get().equals(prompt)) {
textControl.setFont(getViewerFont());
- document.set("");
+ document.set(""); //$NON-NLS-1$
}
}
- public void focusLost(FocusEvent e) {
+ @Override
+ public void focusLost(FocusEvent e) {
if (document.getLength() == 0) {
initEmptyText();
}
* <p>
* getViewerFont
* </p>
- *
+ *
* @return a {@link org.eclipse.swt.graphics.Font} object.
*/
abstract protected Font getViewerFont();
* <p>
* Setter for the field <code>focusListener</code>.
* </p>
- *
+ *
* @param focusListener
* a {@link org.eclipse.swt.events.FocusListener} object.
*/
* <p>
* setDirty
* </p>
- *
+ *
* @param isDirty
* a boolean.
*/
* <p>
* isDirty
* </p>
- *
+ *
* @return a boolean.
*/
- public boolean isDirty() {
+ @Override
+ public boolean isDirty() {
return isDirty;
}
* <p>
* setMenu
* </p>
- *
+ *
* @param menu
* a {@link org.eclipse.swt.widgets.Menu} object.
*/
* <p>
* setDraggableControl
* </p>
- *
+ *
* @param controls
* an array of {@link org.eclipse.swt.widgets.Control} objects.
*/
* <p>
* setIsDraggable
* </p>
- *
+ *
* @param draggable
* a boolean.
*/
if (draggableControls == null) {
throw new NullPointerException(
- "Draggable controls must be set to add draggability");
+ "Draggable controls must be set to add draggability"); //$NON-NLS-1$
}
Transfer[] types = new Transfer[] { CdmDataTransfer.getInstance() };
* 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
info = info.toUpperCase();
if (append) {
- nonEditableText += ", " + info;
- nonEditableHoverText += "\n" + info;
+ nonEditableText += ", " + info; //$NON-NLS-1$
+ nonEditableHoverText += "\n" + info; //$NON-NLS-1$
} else {
nonEditableText = info;
nonEditableHoverText = info;
if (nonEditableInfoLabel == null) {
nonEditableInfoLabel = getEditor().getToolkit().createLabel(
- control, "");
+ control, ""); //$NON-NLS-1$
TableWrapData layoutData = new TableWrapData(
TableWrapData.FILL_GRAB, TableWrapData.TOP);
// Set indent to viewer ruler's width
* <p>
* Getter for the field <code>data</code>.
* </p>
- *
+ *
* @return a T object.
*/
- public T getData() {
+ @Override
+ public T getData() {
return data;
}
* <p>
* Setter for the field <code>data</code>.
* </p>
- *
+ *
* @param data
* a T object.
*/
public void setData(T data) {
- this.data = (T) HibernateProxyHelper.deproxy(data);
+ this.data = HibernateProxyHelper.deproxy(data);
}
/**
AbstractGroupedContainer.this.handleSplitText(text);
}
- @Override
- public void keyPressed(KeyEvent e) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void keyReleased(KeyEvent e) {
- // TODO Auto-generated method stub
-
- }
};
getNameViewer().getTextWidget().addVerifyListener(lineBreakListener);
- getNameViewer().getTextWidget().addKeyListener(lineBreakListener);
+
}
abstract class LabelEllipsisListener extends ControlAdapter {
* <p>
* Setter for the field <code>group</code>.
* </p>
- *
+ *
* @param group
* a
* {@link eu.etaxonomy.taxeditor.editor.name.container.AbstractGroup}
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm
* )
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.IFormPart#dispose()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.IFormPart#commit(boolean)
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.IFormPart#setFormInput(java.lang.Object)
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.IFormPart#setFocus()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.IFormPart#isStale()
*/
@Override
public boolean isStale() {
return false;
}
-
+
public void setDisabled(boolean disabled) {
this.enabled = !disabled;
setEnabled(enabled);
}
-
+
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().setEnabled(enabled);
getNameViewer().getTextWidget().setForeground(color);
}
-
+
public boolean isEnabled(){
return enabled;
}