eclipseprojects/eu.etaxonomy.taxeditor/icons/add_no_bg2.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/icons/alt_window_16.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/icons/alt_window_32.gif -text
+eclipseprojects/eu.etaxonomy.taxeditor/icons/autonym_no_bg.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/icons/basionym.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/icons/basionym_no_bg.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/icons/change.gif -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Messages.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/NomenclaturalCodePreferences.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxonomicPreferences.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddQuickName.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionDeleteTaxon.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/IParentDataAdapter.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/ISelectionWrapper.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineBreakListener.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineWrapSupport.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/Messages.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/ParseListener.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/messages.properties -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationPropertySource.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsDialog.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsPropertyDescriptor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CheckboxPropertyDescriptor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CollectionPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CompletionProcessor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/MarkersPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsDialog.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertyDescriptor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NomStatusPropertySource.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NonViralNamePropertySource.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetContentProvider.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueEditingSupport.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueLabelProvider.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/SourceViewerConfig.java -text
</property>\r
</product>\r
</extension>\r
+ <extension\r
+ point="org.eclipse.ui.preferencePages">\r
+ <page\r
+ class="eu.etaxonomy.taxeditor.TaxonomicPreferences"\r
+ id="eu.etaxonomy.taxeditor.preferences"\r
+ name="Taxonomic">\r
+ </page>\r
+ </extension>\r
+ <extension\r
+ point="org.eclipse.ui.preferencePages">\r
+ <page\r
+ category="eu.etaxonomy.taxeditor.preferences"\r
+ class="eu.etaxonomy.taxeditor.NomenclaturalCodePreferences"\r
+ id="eu.etaxonomy.taxeditor.preferences.nomenclatural"\r
+ name="Nomenclatural Code">\r
+ </page>\r
+ </extension>\r
\r
</plugin>\r
private IWorkbenchAction exitAction;
private ActionOpenNameEditor newNameAction;
private IWorkbenchAction saveAction;
+ private IWorkbenchAction preferencesAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
// the window is closed.
saveAction = ActionFactory.SAVE.create(window);
+ register(saveAction);
exitAction = ActionFactory.QUIT.create(window);
register(exitAction);
newNameAction = new ActionOpenNameEditor();
register(newNameAction);
+
+ preferencesAction = ActionFactory.PREFERENCES.create(window);
}
protected void fillMenuBar(IMenuManager menuBar) {
fileMenu.add(newNameAction);
fileMenu.add(saveAction);
fileMenu.add(exitAction);
+
+ MenuManager preferencesMenu = new MenuManager("&Preferences",
+ null);
+ menuBar.add(preferencesMenu);
+ preferencesMenu.add(preferencesAction);
}
}
+/**
+* Copyright (C) 2007 EDIT
+* 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;
+import org.apache.log4j.Logger;
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
-import org.eclipse.ui.views.markers.internal.ProblemView;
-import eu.etaxonomy.taxeditor.view.LeftPane;
import eu.etaxonomy.taxeditor.view.NameListView;
+/**
+ * @author p.ciardelli
+ * @created 15.05.2008
+ * @version 1.0
+ */
public class FreetextPropertiesPerspective implements IPerspectiveFactory {
-
+ private static final Logger logger = Logger.getLogger(FreetextPropertiesPerspective.class);
/*
* To remember the user's layout and window sizes for the next time they
* start your application, add configurer.setSaveAndRestore(true); to the
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 20.05.2008\r
+ * @version 1.0\r
+ */\r
+public class ITaxEditorConstants {\r
+ private static final Logger logger = Logger\r
+ .getLogger(ITaxEditorConstants.class);\r
+ \r
+ /* ***************************************************************************************\r
+ ICONS\r
+ ************************************************************************************** */\r
+ public static final String ACCEPTED_TAXON_ICON = "accepted_icon";\r
+ public static final String HOMOTYPIC_SYN_ICON = "homotypic_syn_icon";\r
+ public static final String HOMOTYPIC_SYN_ORIGINAL_ICON = "homotypic_syn_original_icon";\r
+ public static final String HETEROTYPIC_SYN_ICON = "heterotypic_syn_icon";\r
+ public static final String HETEROTYPIC_SYN_ORIGINAL_ICON = "heterotypic_syn_original_icon";\r
+ public static final String MISAPPLIED_NAME_ICON = "misapplied_icon";\r
+ public static final String AUTONYM_ICON = "autonym_icon";\r
+ public static final String BASIONYM_ICON = "basionym_icon";\r
+ public static final String DB_ICON = "db_icon";\r
+ public static final String MOVE_ICON = "move_icon";\r
+\r
+ /* ***************************************************************************************\r
+ PREFERENCES\r
+ ************************************************************************************** */\r
+ public static final String CODE_PREFERENCE = "code";\r
+ public static final String CODE_PREFERENCE_ICBN = "icbn";\r
+ public static final String CODE_PREFERENCE_ICZN = "iczn";\r
+ public static final String DEFAULT_CODE_PREFERENCE = CODE_PREFERENCE_ICZN;\r
+}\r
--- /dev/null
+\r
+package eu.etaxonomy.taxeditor;\r
+\r
+import java.util.MissingResourceException;\r
+import java.util.ResourceBundle;\r
+import org.apache.log4j.Logger;\r
+\r
+public class Messages {\r
+ private static final Logger logger = Logger.getLogger(Messages.class);\r
+\r
+ private static final String BUNDLE_NAME = "eu.etaxonomy.taxeditor.messages"; //$NON-NLS-1$\r
+\r
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle\r
+ .getBundle(BUNDLE_NAME);\r
+\r
+ private Messages() {\r
+ }\r
+\r
+ public static String getString(String key) {\r
+ try {\r
+ return RESOURCE_BUNDLE.getString(key);\r
+ } catch (MissingResourceException e) {\r
+ return '!' + key + '!';\r
+ }\r
+ }\r
+}\r
--- /dev/null
+package eu.etaxonomy.taxeditor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.preference.PreferencePage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+public class NomenclaturalCodePreferences extends PreferencePage implements\r
+ IWorkbenchPreferencePage {\r
+ private static final Logger logger = Logger\r
+ .getLogger(NomenclaturalCodePreferences.class);\r
+\r
+ public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.nomenclatural";\r
+\r
+ private Button icznButton;\r
+ private Button icbnButton; \r
+ \r
+ private String preferredCode;\r
+ \r
+ /**\r
+ * Create the preference page\r
+ */\r
+ public NomenclaturalCodePreferences() {\r
+ super();\r
+ }\r
+\r
+ /**\r
+ * Create contents of the preference page\r
+ * @param parent\r
+ */\r
+ @Override\r
+ public Control createContents(Composite parent) {\r
+ Composite container = new Composite(parent, SWT.NULL);\r
+ container.setLayout(new GridLayout());\r
+\r
+ icbnButton = new Button(container, SWT.RADIO);\r
+ icbnButton.setText("Botanical (ICBN)");\r
+ icbnButton.addSelectionListener(new SelectionAdapter() {\r
+ public void widgetSelected(SelectionEvent e) {\r
+ preferredCode = ITaxEditorConstants.CODE_PREFERENCE_ICBN;\r
+ }\r
+ });\r
+\r
+ icznButton = new Button(container, SWT.RADIO);\r
+ icznButton.setText("Zoological (ICZN)");\r
+ icznButton.addSelectionListener(new SelectionAdapter() {\r
+ public void widgetSelected(SelectionEvent e) {\r
+ preferredCode = ITaxEditorConstants.CODE_PREFERENCE_ICZN;\r
+ }\r
+ });\r
+ \r
+ setButton(getPreferenceStore().getString(ITaxEditorConstants.CODE_PREFERENCE)); \r
+ \r
+ return container;\r
+ }\r
+\r
+ /**\r
+ * Initialize the preference page\r
+ */\r
+ public void init(IWorkbench workbench) {\r
+ setPreferenceStore(TaxEditorPlugin.getDefault().getPreferenceStore());\r
+ }\r
+ \r
+ protected void performDefaults() {\r
+ setButton(ITaxEditorConstants.DEFAULT_CODE_PREFERENCE);\r
+ }\r
+ \r
+ public boolean performOk() {\r
+ TaxEditorPlugin.getDefault().getPreferenceStore().\r
+ setValue(ITaxEditorConstants.CODE_PREFERENCE, preferredCode);\r
+ return true;\r
+ }\r
+ \r
+ private void setButton(String preferredCode) {\r
+ this.preferredCode = preferredCode;\r
+ \r
+ if (preferredCode.equals(ITaxEditorConstants.CODE_PREFERENCE_ICBN)) { \r
+ icbnButton.setSelection(true);\r
+ icznButton.setSelection(false);\r
+ }\r
+ if (preferredCode.equals(ITaxEditorConstants.CODE_PREFERENCE_ICZN)) {\r
+ icbnButton.setSelection(false);\r
+ icznButton.setSelection(true);\r
+ }\r
+ }\r
+}\r
package eu.etaxonomy.taxeditor;\r
\r
import java.net.URL;\r
+import java.util.List;\r
import java.util.ResourceBundle;\r
import java.util.Set;\r
import java.util.UUID;\r
import org.eclipse.core.databinding.observable.set.WritableSet;\r
import org.eclipse.core.runtime.IPath;\r
import org.eclipse.core.runtime.Path;\r
+import org.eclipse.jface.preference.IPreferenceStore;\r
+import org.eclipse.jface.preference.PreferenceConverter;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.jface.resource.ImageRegistry;\r
import org.eclipse.swt.graphics.Image;\r
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
\r
/**\r
// Resource bundle.\r
private ResourceBundle resourceBundle;\r
private FormColors formColors;\r
- public static final String ACCEPTED_TAXON = "accepted";\r
- public static final String HOMOTYPIC_SYN = "homotypic_syn";\r
- public static final String HOMOTYPIC_SYN_ORIGINAL = "homotypic_syn_original";\r
- public static final String HETEROTYPIC_SYN = "heterotypic_syn";\r
- public static final String HETEROTYPIC_SYN_ORIGINAL = "heterotypic_syn_original";\r
- public static final String MISAPPLIED_NAME = "misapplied";\r
- public static final String AUTONYM = "autonym";\r
- public static final String BASIONYM = "basionym";\r
- public static final String DB = "db";\r
- public static final String MOVE = "move";\r
- \r
protected void initializeImageRegistry(ImageRegistry registry) {\r
- registerImage(registry, ACCEPTED_TAXON, "accepted_small.gif"); //$NON-NLS-1$\r
- registerImage(registry, HOMOTYPIC_SYN, "homosyn_no_bg.gif"); //$NON-NLS-1$\r
- registerImage(registry, HOMOTYPIC_SYN_ORIGINAL, "homosyn_original_no_bg.gif"); //$NON-NLS-1$\r
- registerImage(registry, HETEROTYPIC_SYN, "heterosyn_no_bg.gif"); //$NON-NLS-1$\r
- registerImage(registry, HETEROTYPIC_SYN_ORIGINAL, "heterosyn_original_no_bg.gif"); //$NON-NLS-1$ \r
- registerImage(registry, MISAPPLIED_NAME, "misapplied_no_bg.gif"); //$NON-NLS-1$\r
- registerImage(registry, AUTONYM, "autonym_no_bg.gif"); //$NON-NLS-1$\r
- registerImage(registry, BASIONYM, "basionym_no_bg.gif"); //$NON-NLS-1$\r
- registerImage(registry, DB, "db.gif"); //$NON-NLS-1$\r
- registerImage(registry, MOVE, "move_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.ACCEPTED_TAXON_ICON, "accepted_small.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.HOMOTYPIC_SYN_ICON, "homosyn_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.HOMOTYPIC_SYN_ORIGINAL_ICON, "homosyn_original_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.HETEROTYPIC_SYN_ICON, "heterosyn_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.HETEROTYPIC_SYN_ORIGINAL_ICON, "heterosyn_original_no_bg.gif"); //$NON-NLS-1$ \r
+ registerImage(registry, ITaxEditorConstants.MISAPPLIED_NAME_ICON, "misapplied_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.AUTONYM_ICON, "autonym_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.BASIONYM_ICON, "basionym_no_bg.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.DB_ICON, "db.gif"); //$NON-NLS-1$\r
+ registerImage(registry, ITaxEditorConstants.MOVE_ICON, "move_no_bg.gif"); //$NON-NLS-1$\r
}\r
private void registerImage(ImageRegistry registry, String key,\r
String fileName) {\r
}\r
}\r
\r
+ /* ***************************************************************************************\r
+ PREFERENCES\r
+ ************************************************************************************** */\r
+ protected void initializeDefaultPreferences(IPreferenceStore store) {\r
+ logger.warn("setting default");\r
+ store.setDefault(ITaxEditorConstants.CODE_PREFERENCE, ITaxEditorConstants.DEFAULT_CODE_PREFERENCE);\r
+ }\r
+ \r
/* ***************************************************************************************\r
TAXONOMIC CHILDREN\r
************************************************************************************** */\r
\r
return genusTaxon;\r
}\r
+\r
+ public List<TaxonNameBase> getNameByName(String searchText) {\r
+ // TODO make sure last character is %\r
+ return cdmApp.getNameService().getNamesByName(searchText);\r
+ }\r
}
\ No newline at end of file
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.preference.PreferencePage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 20.05.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonomicPreferences extends PreferencePage implements\r
+ IWorkbenchPreferencePage {\r
+ private static final Logger logger = Logger\r
+ .getLogger(TaxonomicPreferences.class);\r
+\r
+ public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences";\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ @Override\r
+ protected Control createContents(Composite parent) {\r
+ \r
+ Composite container = new Composite(parent, SWT.NULL);\r
+ container.setLayout(new GridLayout());\r
+\r
+ //\r
+ return container;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)\r
+ */\r
+ @Override\r
+ public void init(IWorkbench workbench) {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+}\r
\r
// TODO getTitleCache is currently returning "null", not null\r
// hence its being set here - change!\r
-// childTaxon.getName().setTitleCache(null);\r
+ childTaxon.getName().setTitleCache(null);\r
parentTaxon.addTaxonomicChild(childTaxon, null, null);\r
\r
// Add childTaxon to observable tree list, \r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.taxeditor.controller;\r
\r
+/**\r
+ * Adds tree functionality (get parent, get children) to ObservableListContentProvider;\r
+ * much code was copied almost in tact from parent class due to\r
+ * viewer type restrictions and private settings of variables and methods\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 14.05.2008\r
+ * @version 1.0\r
+ */\r
+import org.apache.log4j.Logger;\r
import org.eclipse.jface.action.Action;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
\r
/**\r
* Delete this taxon from the CDM\r
*\r
*/\r
public class ActionDeleteTaxon extends Action {\r
+ private static final Logger logger = Logger.getLogger(ActionDeleteTaxon.class);\r
+ \r
Taxon taxon;\r
\r
public ActionDeleteTaxon(Taxon taxon) {\r
}\r
\r
public void run() {\r
-// TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
+ Taxon parentTaxon = taxon.getTaxonomicParent();\r
+ for (TaxonRelationship taxonRelation : parentTaxon.getTaxonRelations()) {\r
+ \r
+ TaxonRelationshipType type = taxonRelation.getType();\r
+ Taxon fromTaxon = taxonRelation.getFromTaxon();\r
+ \r
+ if (type.equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN()) &&\r
+ fromTaxon.equals(taxon)) {\r
+ parentTaxon.removeTaxonRelation(taxonRelation);\r
+ TaxEditorPlugin.getDefault().getObservableTaxonTreeList().remove(taxon);\r
+ TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().saveTaxon(parentTaxon);\r
+ return;\r
+ }\r
+ }\r
}\r
-}\r
+}
\ No newline at end of file
}\r
\r
public void run() {\r
- \r
// If this is a new taxon, add it to the recent names list;\r
// if it is already in the tree, remove then re-add it\r
// to force a re-sort\r
TaxEditorPlugin.getDefault().getObservableTaxonTreeList().add(taxon);\r
\r
// Save the taxon to the CDM\r
- logger.warn("n Synonyms:" + taxon.getSynonyms().size());\r
TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
\r
// Notify taxon listeners in case name has been updated \r
- taxon.firePropertyChange("name", null, null);\r
+// taxon.firePropertyChange("name", null, null);\r
}\r
}
\ No newline at end of file
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.taxeditor.view;\r
\r
import java.beans.PropertyChangeEvent;\r
import java.beans.PropertyChangeListener;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.PartInitException;\r
import org.eclipse.ui.part.MultiPageEditorPart;\r
\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;\r
\r
* "Facts", "Specimen", "Geography", etc.\r
* \r
* @author p.ciardelli\r
- *\r
+ * @created 15.05.2008\r
+ * @version 1.0\r
*/\r
+\r
public class MultiPageTaxonEditor extends MultiPageEditorPart {\r
-//public class MultiPageTaxonEditor extends FormEditor {\r
+ private static final Logger logger = Logger.getLogger(MultiPageTaxonEditor.class);\r
\r
public static final String ID = "eu.etaxonomy.taxeditor.view.multipagetaxonview";\r
- private Taxon taxon;\r
\r
+ private Taxon taxon;\r
+ private boolean dirty;\r
+ \r
@Override\r
protected void createPages() {\r
\r
\r
@Override\r
public void doSave(IProgressMonitor monitor) {\r
- System.out.println("Start save");\r
+// monitor.beginTask(name, totalWork)\r
+ logger.warn("Calling doSave");\r
new ActionSaveTaxon(taxon).run();\r
- System.out.println("Save finished");\r
+ setDirty(false);\r
}\r
\r
- @Override\r
- public void doSaveAs() {\r
- // TODO Auto-generated method stub\r
- \r
+ private void setDirty(boolean dirty) {\r
+ this.dirty = dirty;\r
+ firePropertyChange(PROP_DIRTY);\r
+ }\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty()\r
+ */\r
+ public boolean isDirty() {\r
+ return dirty;\r
}\r
\r
+ /**\r
+ * Checks whether nested editors are calling <code>firePropertyChange(PROP_DIRTY)</code>\r
+ * to single an edit has taken place before passing property change along to \r
+ * <code>super.handlePropertyChange(int propertyId)</code>.\r
+ */\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)\r
+ */\r
+ protected void handlePropertyChange(int propertyId) {\r
+ if (propertyId == PROP_DIRTY) {\r
+ setDirty(true);\r
+ }\r
+ super.handlePropertyChange(propertyId);\r
+ }\r
+ \r
+ @Override\r
+ public void doSaveAs() {}\r
+\r
@Override\r
public boolean isSaveAsAllowed() {\r
- // TODO Auto-generated method stub\r
return false;\r
}\r
\r
// change tab for this taxon editor accordingly\r
taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
public void propertyChange(PropertyChangeEvent e) {\r
- setPartName(taxon.getName().getTitleCache());\r
+ setPartName();\r
}\r
});\r
\r
- // Any taxon that has been saved will by necessity have a name;\r
- // only a new taxon will not\r
- if (taxon.getName().getTitleCache() == null)\r
- setPartName("New taxon");\r
- else\r
- setPartName(taxon.getName().getTitleCache());\r
+ setPartName();\r
\r
super.init(site, input);\r
- \r
- } \r
-}\r
+ }\r
+ \r
+ /**\r
+ * Calls <code>MultiPageEditorPart.setPartName(String partName)</code>\r
+ * with text appropriate to the state of the taxon: any taxon that has \r
+ * been saved will by necessity have a name to display; a new taxon \r
+ * should display "New taxon" in the editor tab.\r
+ */\r
+ private void setPartName() {\r
+ \r
+ String partName = null;\r
+ TaxonNameBase name = taxon.getName();\r
+ \r
+ if (name != null) {\r
+ partName = name.getTitleCache();\r
+ }\r
+ \r
+ if (partName == null || partName.equals("")) {\r
+ partName = ("New taxon");\r
+ }\r
+\r
+ setPartName(partName);\r
+ }\r
+}
\ No newline at end of file
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.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.controller.WidgetTransfer;\r
import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
* @version 1.0\r
*/\r
public class NameEditorView extends EditorPart implements IAdaptable {\r
- private static final Logger logger = Logger.getLogger(TaxEditorPlugin.class);\r
+ private static final Logger logger = Logger.getLogger(NameEditorView.class);\r
\r
private Taxon taxon;\r
- \r
- private boolean dirty;\r
- \r
+ \r
/**\r
* Shared listener that sets dirty state to true \r
* when any registered property changes \r
*/\r
private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
public void propertyChange(PropertyChangeEvent arg0) {\r
- dirty = true;\r
firePropertyChange(PROP_DIRTY);\r
}\r
}; \r
\r
@Override\r
- public void doSave(IProgressMonitor monitor) {\r
- // TODO Auto-generated method stub\r
- }\r
+ public void doSave(IProgressMonitor monitor) {}\r
\r
@Override\r
- public void doSaveAs() {\r
- // TODO Auto-generated method stub\r
- \r
- }\r
+ public void doSaveAs() {}\r
\r
@Override\r
public void init(IEditorSite site, IEditorInput input)\r
// Register listeners for any change in accepted name or set of relations\r
taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
+ taxon.addPropertyChangeListener(taxonChangeListener);\r
\r
setSite(site);\r
setInput(input);\r
\r
@Override\r
public boolean isDirty() {\r
- return dirty;\r
-// return true;\r
+ return false;\r
}\r
\r
@Override\r
public boolean isSaveAsAllowed() {\r
- // TODO Auto-generated method stub\r
return false;\r
}\r
\r
\r
// We've added elements to the managed form, so redraw it\r
scrolledForm.reflow(true);\r
- \r
-// managedForm.getMessageManager().addMessage\r
-// ("TEST", "Testeroo error", null, IMessageProvider.ERROR, nameComposite.getTextWidget());\r
-//managedForm.getMessageManager().addMessage\r
-// ("TEST2", "Testeroo warn", null, IMessageProvider.WARNING, nameComposite.getTextWidget());\r
-//managedForm.getMessageManager().addMessage\r
-// ("TEST2", "Testeroo info", null, IMessageProvider.INFORMATION, nameComposite.getTextWidget());\r
}\r
\r
private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
if (rank.equals(Rank.SPECIES())) {\r
String genus = name.getGenusOrUninomial();\r
String parentGenus = parentName.getGenusOrUninomial();\r
- \r
- if (!parentGenus.equals(genus)) {\r
- message = "Warning: taxon's genus does not match parent taxon's genus.";\r
+\r
+ // If either taxon has a problem, name fields will be null\r
+ if (genus != null && parentGenus != null) {\r
+ if (!parentGenus.equals(genus)) {\r
+ message = "Warning: taxon's genus does not match parent taxon's genus.";\r
+ }\r
}\r
}\r
\r
String specificEpithet = name.getSpecificEpithet();\r
String parentSpecificEpithet = parentName.getSpecificEpithet();\r
\r
- if (!parentSpecificEpithet.equals(specificEpithet)) {\r
- message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
+ // If either taxon has a problem, name fields will be null\r
+ if (specificEpithet != null && parentSpecificEpithet != null) {\r
+ if (!parentSpecificEpithet.equals(specificEpithet)) {\r
+ message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
+ }\r
}\r
}\r
}\r
}\r
\r
@Override\r
- public void setFocus() {\r
- // TODO Auto-generated method stub\r
- }\r
-}
\ No newline at end of file
+ public void setFocus() { }\r
+}\r
import com.swtdesigner.ResourceManager;\r
import com.swtdesigner.SWTResourceManager;\r
\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
\r
/**\r
lblDbImg.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
lblDbImg.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
lblDbImg.setImage(ResourceManager.getPluginImage(TaxEditorPlugin.getDefault(), "icons/db.gif"));\r
- lblDbImg.setImage(TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.DB));\r
+ lblDbImg.setImage(TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.DB_ICON));\r
\r
final Menu menu = new Menu(lblDbImg);\r
lblDbImg.setMenu(menu);\r
\r
this.addPainter(annotationPainter);\r
\r
+ this.getTextWidget().getLineCount();\r
+ \r
}\r
\r
public void setShowError(boolean hasProblem) {\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.taxeditor.view;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.core.databinding.beans.BeansObservables;\r
import org.eclipse.core.databinding.observable.map.IObservableMap;\r
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
import org.eclipse.swt.dnd.Transfer;\r
import org.eclipse.swt.events.MenuAdapter;\r
import org.eclipse.swt.events.MenuEvent;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
import org.eclipse.swt.graphics.Image;\r
import org.eclipse.swt.graphics.Point;\r
import org.eclipse.swt.graphics.Rectangle;\r
import eu.etaxonomy.cdm.strategy.parser.TaxonNameParserBotanicalNameImpl;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.controller.ActionAddQuickName;\r
+import eu.etaxonomy.taxeditor.controller.ActionDeleteTaxon;\r
import eu.etaxonomy.taxeditor.controller.ActionMoveTaxon;\r
import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;\r
import eu.etaxonomy.taxeditor.controller.ActionOpenNewChildNameEditor;\r
* \r
* Good overview of TreeViewer: \r
* http://www.eclipse.org/articles/Article-TreeViewer/TreeViewerArticle.htm\r
- * \r
- * @author p.ciardelli\r
*\r
+ * @author p.ciardelli\r
+ * @created 06.05.2008\r
+ * @version 1.0\r
*/\r
public class TaxonomicTreeViewer extends TreeViewer {\r
+ private static final Logger logger = Logger\r
+ .getLogger(TaxonomicTreeViewer.class);\r
\r
/**\r
* Creates a lazy-loading taxonomic tree that is sorted by TitleCache,\r
public boolean canModify(Object element, String property) {\r
// If name element has not been initialized,\r
// this is a taxon added with QuickAdd\r
- if (((Taxon) element).getName().getTitleCache() == null)\r
+ if (((Taxon) element).getName().getTitleCache() == null) {\r
return true;\r
+ }\r
return false;\r
}\r
public Object getValue(Object element, String property) {\r
\r
// Get Taxon associated with this node\r
final Taxon taxon = (Taxon) tree.getSelection()[0].getData();\r
- System.out.println("open " + taxon.toString());\r
\r
// Add menu item to edit Taxon\r
MenuItem itemEditTaxon = new MenuItem(menu, SWT.NONE);\r
itemEditTaxon.setText("Edit taxon");\r
- itemEditTaxon.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {}\r
+ itemEditTaxon.addSelectionListener(new SelectionAdapter() {\r
public void widgetSelected(SelectionEvent e) {\r
new ActionOpenNameEditor(taxon).run();\r
}\r
// Add menu item to add a child node\r
MenuItem itemAddChildTaxon = new MenuItem(menu, SWT.NONE);\r
itemAddChildTaxon.setText("Add child taxon");\r
- itemAddChildTaxon.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {}\r
+ itemAddChildTaxon.addSelectionListener(new SelectionAdapter() {\r
public void widgetSelected(SelectionEvent e) {\r
new ActionOpenNewChildNameEditor(taxon).run();\r
}\r
// Add menu item to add a child node with edit name in place \r
MenuItem itemQuickAdd = new MenuItem(menu, SWT.NONE);\r
itemQuickAdd.setText("Add child taxon with quick name");\r
- itemQuickAdd.addSelectionListener(new SelectionListener() {\r
- public void widgetDefaultSelected(SelectionEvent e) {}\r
+ itemQuickAdd.addSelectionListener(new SelectionAdapter() {\r
public void widgetSelected(SelectionEvent e) {\r
new ActionAddQuickName(taxon).run(); \r
}\r
});\r
+ \r
+ MenuItem itemSeparator = new MenuItem(menu, SWT.SEPARATOR);\r
+ \r
+ // Delete menu item from parent node \r
+ MenuItem itemDelete = new MenuItem(menu, SWT.NONE);\r
+ itemDelete.setText("Delete taxon from tree");\r
+ itemDelete.addSelectionListener(new SelectionAdapter() {\r
+ public void widgetSelected(SelectionEvent e) {\r
+ new ActionDeleteTaxon(taxon).run();\r
+ }\r
+ });\r
}\r
});\r
}\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
\r
import java.util.Scanner;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.swt.custom.StyledText;\r
import org.eclipse.swt.events.VerifyEvent;\r
import org.eclipse.swt.events.VerifyListener;\r
\r
/**\r
* Checks text entered into a StyledText widget for line breaks, sends\r
- * split text to handleSplitText()\r
+ * split text to abstract method handleSplitText().\r
* \r
* @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
*/\r
public abstract class LineBreakListener implements VerifyListener {\r
+ private static final Logger logger = Logger\r
+ .getLogger(LineBreakListener.class);\r
\r
/** \r
* Checks for 3 conditions of name viewer text:\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.TextViewer;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+\r
+/**\r
+ * Checks whether the ScrolledForm a TextViewer is on needs to be\r
+ * redrawn because of a new line break or the removal of an existing\r
+ * one ...\r
+ * <p>\r
+ * ... in theory, anyway. Until I figure out how to detect a word wrap,\r
+ * the ScrolledForm is redrawn with every modify event. \r
+ * \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class LineWrapSupport {\r
+ private static final Logger logger = Logger\r
+ .getLogger(LineWrapSupport.class);\r
+ \r
+ ModifyListener listener = new LineWrapListener();\r
+ int lineCount;\r
+\r
+ private StyledText textWidget;\r
+ private ScrolledForm scrolledForm;\r
+\r
+ private TextViewer viewer;\r
+ \r
+ public LineWrapSupport(TextViewer viewer, IManagedForm form) {\r
+ \r
+ this.viewer = viewer;\r
+ \r
+ textWidget = viewer.getTextWidget();\r
+ textWidget.addModifyListener(listener);\r
+ \r
+ this.lineCount = textWidget.getLinePixel(textWidget.getLineCount());\r
+ this.scrolledForm = form.getForm();\r
+ }\r
+ \r
+ /**\r
+ * Redraws the scrolledForm if a line wrap is detected. \r
+ */\r
+ private void checkLineCount() {\r
+\r
+ boolean lineWrapDetected = true;\r
+ if (lineWrapDetected ) {\r
+ scrolledForm.getBody().layout();\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * Calls <code>checkLineCount()</code> on a modify event.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 21.05.2008\r
+ * @version 1.0\r
+ */\r
+ class LineWrapListener implements ModifyListener {\r
+\r
+ @Override\r
+ public void modifyText(ModifyEvent e) {\r
+ checkLineCount();\r
+ }\r
+ }\r
+}
\ No newline at end of file
import eu.etaxonomy.cdm.model.name.NameRelationship;\r
import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
\r
public class NameComposite extends EditableGroupedComposite {\r
public static final Font SYNONYM_FONT = SWTResourceManager.getFont("Georgia", 10, SWT.NONE);\r
public static final Font MISAPPLIEDNAME_FONT = SWTResourceManager.getFont("Georgia", 10, SWT.NONE);;\r
\r
- public static final Image ACCEPTED_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.ACCEPTED_TAXON);\r
- public static final Image HOMOTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HOMOTYPIC_SYN);\r
- public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HOMOTYPIC_SYN_ORIGINAL);\r
- public static final Image HETEROTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HETEROTYPIC_SYN);\r
- public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HETEROTYPIC_SYN_ORIGINAL);\r
- public static final Image MISAPPLIEDNAME_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.MISAPPLIED_NAME);\r
- public static final Image AUTONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.AUTONYM);\r
- public static final Image BASIONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.BASIONYM);\r
- public static final Image MOVE = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.MOVE);\r
+ public static final Image ACCEPTED_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.ACCEPTED_TAXON_ICON);\r
+ public static final Image HOMOTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HOMOTYPIC_SYN_ICON);\r
+ public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HOMOTYPIC_SYN_ORIGINAL_ICON);\r
+ public static final Image HETEROTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HETEROTYPIC_SYN_ICON);\r
+ public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HETEROTYPIC_SYN_ORIGINAL_ICON);\r
+ public static final Image MISAPPLIEDNAME_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
+ public static final Image AUTONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.AUTONYM_ICON);\r
+ public static final Image BASIONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.BASIONYM_ICON);\r
+ public static final Image MOVE = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.MOVE_ICON);\r
\r
public NameComposite(Composite parent) {\r
super(parent);\r
\r
package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.text.TextViewer;\r
import org.eclipse.jface.viewers.ISelectionProvider;\r
\r
import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
final NameComposite nameComposite = new NameComposite(parent);\r
nameComposite.setData(data);\r
\r
+ TaxonNameBase name = data.getName();\r
+ if (name != null) {\r
+ name.addPropertyChangeListener(new PropertyChangeListener() {\r
+ @Override\r
+ public void propertyChange(PropertyChangeEvent evt) {\r
+ taxon.firePropertyChange(evt);\r
+ }\r
+ });\r
+ }\r
+ \r
nameComposite.setTextViewer(createNameViewer(nameComposite, data));\r
nameComposite.setFocus();\r
\r
}\r
\r
public NameComposite transformAcceptedNameComposite(NameComposite nameComposite) {\r
-// nameComposite.setDraggable(false);\r
- nameComposite.setDraggable(true);\r
+ nameComposite.setDraggable(false);\r
nameComposite.setIcon(NameComposite.ACCEPTED_ICON);\r
nameComposite.setFont(NameComposite.ACCEPTED_FONT);\r
nameComposite.setIndent(NameComposite.ACCEPTED_INDENT);\r
}\r
\r
public NameComposite transformMisappliedNameComposite(NameComposite nameComposite) {\r
+ \r
+ if (misappliedNameGroupComposite == null) { \r
+ Composite groupComposite = nameComposite.getParent();\r
+ Composite parentOfGroupComposite = groupComposite.getParent();\r
+ misappliedNameGroupComposite = createGroupComposite(parentOfGroupComposite, null);\r
+ \r
+ nameComposite.setParent(misappliedNameGroupComposite);\r
+ }\r
+ \r
nameComposite.setDraggable(true);\r
nameComposite.setIcon(NameComposite.MISAPPLIEDNAME_ICON);\r
nameComposite.setFont(NameComposite.MISAPPLIEDNAME_FONT);\r
\r
// Actions performed:\r
// 1) Change name composite to mis name composite\r
- // 2) Delete synonym, add mis name to taxon\r
+ // 2) Delete synonym\r
+ // 3) add mis name to taxon - this creates a new taxon that is stored on the nameComposite\r
// Objects used:\r
// nameComposite\r
// taxon\r
// Set composite data with new taxon\r
nameComposite.setData(toTaxon);\r
}\r
- \r
- Composite groupComposite = nameComposite.getParent();\r
- Composite groupParentComposite = groupComposite.getParent();\r
- \r
- if (misappliedNameGroupComposite == null) {\r
- misappliedNameGroupComposite = createGroupComposite(groupParentComposite, null); \r
- }\r
- transformMisappliedNameComposite(nameComposite).setParent(misappliedNameGroupComposite);\r
+\r
+ transformMisappliedNameComposite(nameComposite);\r
} \r
});\r
\r
menuItem2.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
- \r
+ if (nameComposite.getData() instanceof Synonym) {\r
+ Synonym synonym = (Synonym) nameComposite.getData();\r
+ TaxonNameBase basionymName = synonym.getName();\r
+ \r
+ // TODO only use taxon if this is a homotypic synonym\r
+ TaxonNameBase taxonName = taxon.getName();\r
+ if (basionymName != null && taxonName != null) {\r
+ taxonName.addRelationshipFromName(basionymName, NameRelationshipType.BASIONYM(), null);\r
+ \r
+ // TODO change icon\r
+ }\r
+ }\r
+ \r
}\r
});\r
\r
public void handleSplitText(String text) {\r
TaxonNameParserBotanicalNameImpl parser = TaxonNameParserBotanicalNameImpl.NewInstance();\r
BotanicalName name = parser.parseFullReference(text, null);\r
- //BotanicalName.PARSED_NAME(text);\r
\r
SynonymRelationship synonymRelation = taxon.addHeterotypicSynonymName(name);\r
Synonym synonym = synonymRelation.getSynonym();\r
}\r
});\r
\r
+// nameViewer.getTextWidget().addModifyListener(new ModifyListener() {\r
+//\r
+// @Override\r
+// public void modifyText(ModifyEvent e) {\r
+// logger.warn("modfiyng");\r
+// nameComposite.getParent().layout();\r
+// nameComposite.layout();\r
+// managedForm.getForm().reflow(false);\r
+// } \r
+// });\r
+ createLineWrapSupport(nameViewer);\r
+ \r
return nameViewer;\r
}\r
\r
// TODO add warning that border support can't be added without a managed form \r
}\r
}\r
+\r
+\r
+ private void createLineWrapSupport(TextViewer viewer) {\r
+ if (managedForm != null) {\r
+ LineWrapSupport lineWrapSupport = new LineWrapSupport(viewer, managedForm); \r
+ } else {\r
+ // TODO add warning that border support can't be added without a managed form \r
+ }\r
+ }\r
\r
private void clearMenu(Menu menu) {\r
for (MenuItem menuItem : menu.getItems()) {\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.DialogCellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+\r
+/**\r
+ * Property sheet descriptor that pops up a dialog window\r
+ * returning a set.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+abstract public class AnnotationsPropertyDescriptor extends PropertyDescriptor {\r
+ private static final Logger logger = Logger\r
+ .getLogger(AnnotationsPropertyDescriptor.class);\r
+ \r
+ private TaxonNameBase name;\r
+ \r
+ public AnnotationsPropertyDescriptor(Object id, String displayName, TaxonNameBase name) {\r
+ super(id, displayName);\r
+ this.name = name;\r
+ }\r
+\r
+ public CellEditor createPropertyEditor(Composite parent) {\r
+ CellEditor editor = new DialogCellEditor(parent) {\r
+\r
+ protected Dialog dialog;\r
+ \r
+ @Override\r
+ protected Object openDialogBox(\r
+ Control cellEditorWindow) {\r
+ dialog = new AnnotationsDialog(cellEditorWindow.getShell(), name.getAnnotations());\r
+ Object value = ((AnnotationsDialog) dialog).open();\r
+ if (value instanceof Set) {\r
+ logger.warn("Dialog returned set with " + ((Set) value).size() + " elements.");\r
+ saveAnnotations((Set) value);\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ };\r
+ if (getValidator() != null) {\r
+ editor.setValidator(getValidator());\r
+ }\r
+ return editor;\r
+ }\r
+ \r
+ abstract protected void saveAnnotations(Set set); \r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.ITextViewer;\r
+import org.eclipse.jface.text.contentassist.CompletionProposal;\r
+import org.eclipse.jface.text.contentassist.ICompletionProposal;\r
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;\r
+import org.eclipse.jface.text.contentassist.IContextInformation;\r
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class CompletionProcessor implements IContentAssistProcessor {\r
+ private static final Logger logger = Logger\r
+ .getLogger(CompletionProcessor.class);\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int)\r
+ */\r
+ @Override\r
+ public ICompletionProposal[] computeCompletionProposals(\r
+ ITextViewer viewer, int documentOffset) {\r
+ String context = "Describe formatting / parsing of this rel. type.";\r
+// Image img = ResourceManager.getPluginImage(Activator.getDefault(), "icons/unknown.gif");\r
+// ICompletionProposal[] result =\r
+// new ICompletionProposal[myProposals.length];\r
+// for (int i = 0; i < myProposals.length; i++) {\r
+// IContextInformation contextInfo = \r
+// new ContextInformation(null, myProposals[i]+" Style");\r
+// result[i] = new CompletionProposal(myProposals[i],documentOffset, 0, \r
+// myProposals[i].length(), ResourceManager.getPluginImage(Activator.getDefault(), myIcons[i]), \r
+// myProposals[i], contextInfo, context);\r
+//\r
+// }\r
+// return result;\r
+ String searchText = viewer.getTextWidget().getText() + "%";\r
+ List<TaxonNameBase> names = TaxEditorPlugin.getDefault().getNameByName(searchText);\r
+ logger.warn(names.size() + " names");\r
+ List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();\r
+// String[] test = new String[] {"suggestion 1", "suggestion 2", "suggestion 3"};\r
+ for (TaxonNameBase name : names) {\r
+ String proposalText = name.getTitleCache();\r
+// for (String proposalText : test) {\r
+ proposals.add(new CompletionProposal(proposalText,\r
+ 0,\r
+ searchText.length(),\r
+ proposalText.length(),\r
+ null,\r
+ proposalText,\r
+ null,\r
+ null\r
+ ));\r
+ } \r
+ logger.warn(proposals.size() + " proposals.");\r
+ return proposals.toArray(new ICompletionProposal[proposals.size()]);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)\r
+ */\r
+ @Override\r
+ public IContextInformation[] computeContextInformation(ITextViewer viewer,\r
+ int offset) {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()\r
+ */\r
+ @Override\r
+ public char[] getCompletionProposalAutoActivationCharacters() {\r
+ return new char[] {'a','b','c','d','e','f','g','H'};\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()\r
+ */\r
+ @Override\r
+ public char[] getContextInformationAutoActivationCharacters() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()\r
+ */\r
+ @Override\r
+ public IContextInformationValidator getContextInformationValidator() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()\r
+ */\r
+ @Override\r
+ public String getErrorMessage() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
+import org.eclipse.core.databinding.observable.map.IObservableMap;\r
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
+import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
+import org.eclipse.jface.text.Document;\r
+import org.eclipse.jface.text.source.SourceViewer;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.layout.FillLayout;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.List;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.TableColumn;\r
+\r
+import eu.etaxonomy.cdm.model.common.Annotation;\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+public class NameRelationsDialog extends Dialog {\r
+ private CCombo combo;\r
+ private List relationList;\r
+ private SourceViewer sourceViewer;\r
+ private Table table;\r
+ private static final Logger logger = Logger\r
+ .getLogger(NameRelationsDialog.class);\r
+ protected Object result;\r
+ protected Shell shell;\r
+ \r
+ private WritableList list = new WritableList();\r
+\r
+ /**\r
+ * Create the dialog\r
+ * @param parent\r
+ * @param style\r
+ */\r
+ public NameRelationsDialog(Shell parent, int style) {\r
+ super(parent, style);\r
+ }\r
+\r
+ /**\r
+ * Create the dialog\r
+ * @param parent\r
+ */\r
+ public NameRelationsDialog(Shell parent) {\r
+ this(parent, SWT.NONE);\r
+ }\r
+\r
+ public NameRelationsDialog(Shell parent, Set<NameRelationship> nameRelationships) {\r
+ this(parent, SWT.NONE);\r
+ for (NameRelationship nameRelationship : nameRelationships) {\r
+ list.add(nameRelationship);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Open the dialog\r
+ * @return the result\r
+ */\r
+ public Object open() {\r
+ createContents();\r
+ shell.open();\r
+ shell.layout();\r
+ Display display = getParent().getDisplay();\r
+ while (!shell.isDisposed()) {\r
+ if (!display.readAndDispatch())\r
+ display.sleep();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * Create contents of the dialog\r
+ */\r
+ protected void createContents() {\r
+ shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);\r
+ shell.setLayout(new FillLayout());\r
+ shell.setSize(500, 375);\r
+ shell.setText("Name Relations");\r
+ \r
+ final Composite composite = new Composite(shell, SWT.NONE);\r
+ final GridLayout gridLayout = new GridLayout();\r
+ gridLayout.numColumns = 4;\r
+ composite.setLayout(gridLayout);\r
+\r
+ combo = new CCombo(composite, SWT.BORDER);\r
+ for (NameRelationshipType relationType : TaxEditorPlugin.getDefault().getNameRelationshipTypeVocabulary()) {\r
+ combo.add(relationType.getLabel());\r
+ }\r
+\r
+// sourceViewer = new Text(composite, SWT.BORDER);\r
+ sourceViewer = new SourceViewer(composite, null, SWT.BORDER);\r
+ sourceViewer.setDocument(new Document());\r
+ sourceViewer.configure(new SourceViewerConfig());\r
+ sourceViewer.getTextWidget().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));\r
+\r
+ final Button addButton = new Button(composite, SWT.NONE);\r
+ addButton.setLayoutData(new GridData());\r
+ addButton.setText("Add");\r
+ addButton.addMouseListener(new MouseAdapter() {\r
+ @Override\r
+ public void mouseDown(MouseEvent e) {\r
+// NameRelationship annotation = NameRelationship.NewInstance(sourceViewer.getTextWidget().getText(), null);\r
+// list.add(annotation);\r
+// sourceViewer.getTextWidget().setText("");\r
+ }\r
+ });\r
+\r
+ final TableViewer tableViewer = new TableViewer(composite, SWT.BORDER);\r
+ table = tableViewer.getTable();\r
+ table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));\r
+ table.setLinesVisible(true);\r
+ table.setHeaderVisible(true);\r
+ \r
+ new TableColumn(table, SWT.NONE).setWidth(190);\r
+ new TableColumn(table, SWT.NONE).setWidth(100);\r
+ new TableColumn(table, SWT.NONE).setWidth(190);\r
+ \r
+ new Label(composite, SWT.NONE);\r
+ new Label(composite, SWT.NONE);\r
+\r
+ ObservableListContentProvider providerList = new ObservableListContentProvider();\r
+ tableViewer.setContentProvider(providerList);\r
+ \r
+ IObservableMap[] providerMaps = BeansObservables.observeMaps(\r
+ providerList.getKnownElements(), NameRelationship.class, new String[]{"fromName", "toName", "type"});\r
+ tableViewer.setLabelProvider(new ObservableMapLabelProvider(providerMaps) {\r
+ public String getColumnText(Object element, int columnIndex) {\r
+ NameRelationship nameRelationship = (NameRelationship) element;\r
+ String returnString = null;\r
+ switch (columnIndex) {\r
+ case 0 :\r
+ String fromName = nameRelationship.getFromName().getTitleCache();\r
+ returnString = fromName;\r
+ break;\r
+ case 1 :\r
+ String relationshipType = nameRelationship.getType().getLabel();\r
+ returnString = " is " + relationshipType + " of ";\r
+ break;\r
+ case 2 :\r
+ String toName = nameRelationship.getToName().getTitleCache();\r
+ returnString = toName;\r
+ } \r
+ return returnString;\r
+ }\r
+ });\r
+ tableViewer.setInput(list);\r
+\r
+ final Button cancelButton = new Button(composite, SWT.NONE);\r
+ cancelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
+ cancelButton.setText("Cancel");\r
+ cancelButton.addMouseListener(new MouseAdapter() {\r
+ @Override\r
+ public void mouseUp(MouseEvent e) {\r
+ shell.dispose();\r
+ }\r
+ });\r
+ \r
+ final Button okButton = new Button(composite, SWT.NONE);\r
+ final GridData gd_okButton = new GridData();\r
+ okButton.setLayoutData(gd_okButton);\r
+ okButton.setText("OK");\r
+ okButton.addMouseListener(new MouseAdapter() {\r
+ @Override\r
+ public void mouseUp(MouseEvent e) {\r
+ result = new HashSet(list);\r
+ shell.dispose();\r
+ }\r
+ });\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.DialogCellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+\r
+/**\r
+ * Property sheet descriptor that pops up a dialog window\r
+ * returning a set.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+abstract public class NameRelationsPropertyDescriptor extends PropertyDescriptor {\r
+ private static final Logger logger = Logger\r
+ .getLogger(NameRelationsPropertyDescriptor.class);\r
+ \r
+ private TaxonNameBase name;\r
+ \r
+ public NameRelationsPropertyDescriptor(Object id, String displayName, TaxonNameBase name) {\r
+ super(id, displayName);\r
+ this.name = name;\r
+ }\r
+\r
+ public CellEditor createPropertyEditor(Composite parent) {\r
+ CellEditor editor = new DialogCellEditor(parent) {\r
+\r
+ protected Dialog dialog;\r
+ \r
+ @Override\r
+ protected Object openDialogBox(\r
+ Control cellEditorWindow) {\r
+ dialog = new NameRelationsDialog(cellEditorWindow.getShell(), name.getNameRelations());\r
+ Object value = ((NameRelationsDialog) dialog).open();\r
+ if (value instanceof Set) {\r
+ logger.warn("Dialog returned set with " + ((Set) value).size() + " elements.");\r
+ saveNameRelations((Set) value);\r
+ }\r
+ return null;\r
+ }\r
+ \r
+ };\r
+ if (getValidator() != null) {\r
+ editor.setValidator(getValidator());\r
+ }\r
+ return editor;\r
+ }\r
+ \r
+ abstract protected void saveNameRelations(Set set); \r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.05.2008\r
+ * @version 1.0\r
+ */\r
+public class NomStatusPropertySource extends CollectionPropertySource {\r
+ private static final Logger logger = Logger.\r
+ getLogger(NomStatusPropertySource.class);\r
+\r
+ public NomStatusPropertySource(Collection collection) {\r
+ super(collection);\r
+ }\r
+\r
+ static OrderedTermVocabulary<NomenclaturalStatusType> nomStatusVocabulary = \r
+ TaxEditorPlugin.getDefault().getNomStatusVocabulary();\r
+ static NomenclaturalStatusType[] nomStatusTypes = null;\r
+ static String[] P_NOMSTATUS_MENU = null;\r
+ private static void populateNomStatusTypes() {\r
+ \r
+ // Get terms from nom status vocabulary\r
+ List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
+ nomStatusTypesList.addAll(TaxEditorPlugin.getDefault().getNomStatusVocabulary().getTerms());\r
+ \r
+ // Populate nom status type menu labels \r
+ List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
+ for (NomenclaturalStatusType nomStatusType : nomStatusTypesList) {\r
+ nomStatusTypesMenuList.add(nomStatusType.getLabel());\r
+ }\r
+ \r
+ // Add an empty element for "nothing selected" in the rank drop-down \r
+ nomStatusTypesList.add(0, null);\r
+ nomStatusTypesMenuList.add(0, "");\r
+ \r
+ // Convert rank lists to array\r
+ nomStatusTypes = nomStatusTypesList.toArray(new NomenclaturalStatusType[nomStatusTypesList.size()]);\r
+ P_NOMSTATUS_MENU = nomStatusTypesMenuList.toArray(new String[nomStatusTypesMenuList.size()]); \r
+ } \r
+ \r
+\r
+ @Override\r
+ protected String getItemDisplayName(Object item) {\r
+ // No display names on individual nom statii\r
+ return "";\r
+ }\r
+\r
+ @Override\r
+ public Object getPropertyValue(Object id) {\r
+ if (id instanceof NomenclaturalStatus) {\r
+ NomenclaturalStatus nomenclaturalStatus = (NomenclaturalStatus) id;\r
+ NomenclaturalStatusType statusType = nomenclaturalStatus.getType(); \r
+ if (statusType != null) {\r
+ return statusType.getLabel();\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public void setPropertyValue(Object id, Object value) {\r
+ // Fields not editable in property sheet view \r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ // "Nom. Status" header has no value\r
+ return "";\r
+ }\r
+}
\ No newline at end of file
import java.util.Vector;\r
\r
import org.apache.log4j.Logger;\r
-import org.eclipse.jface.viewers.CellEditor;\r
-import org.eclipse.jface.viewers.DialogCellEditor;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Dialog;\r
import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
import org.eclipse.ui.views.properties.IPropertySource;\r
\r
import eu.etaxonomy.cdm.model.common.Annotation;\r
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
\r
/**\r
public static final String P_ID_MARKERS = "markers";\r
public static final String P_ID_CREATED = "created";\r
public static final String P_ID_CREATEDBY = "createdby";\r
- public static final String P_ID_NOMENCLATURALCODE = "nomenclaturalcode";\r
+ public static final String P_ID_NOMENCLATURAL_CODE = "nomenclaturalcode";\r
public static final String P_ID_NOMENCLATURAL_REF = "nomenclaturalref";\r
public static final String P_ID_NOMENCLATURAL_MICROREF = "nomenclaturalmicroref";\r
\r
public static final String P_MARKERS = "13:Markers";\r
public static final String P_CREATED = "15:Created";\r
public static final String P_CREATEDBY = "16:Created By";\r
- public static final String P_NOMENCLATURALCODE = "02:Nomenclatural Code";\r
+ public static final String P_NOMENCLATURAL_CODE = "02:Nomenclatural Code";\r
public static final String P_NOMENCLATURAL_REF = "09:Nomenclatural Reference";\r
public static final String P_NOMENCLATURAL_MICROREF = "10:Nomenclatural Micro Reference";\r
\r
protected static final String[] TOP_LEVEL_PROPERTIES = new String[] {P_ID_PARSED, P_ID_RANK, P_ID_TITLECACHE, \r
P_ID_ANNOTATIONS, P_ID_NOMSTATUS, P_ID_NAMERELATIONS, P_ID_UUID, P_ID_NOMENCLATURAL_REF,\r
- P_ID_TYPE, P_ID_CREATED, P_ID_CREATEDBY, P_ID_NOMENCLATURALCODE }; \r
+ P_ID_TYPE, P_ID_CREATED, P_ID_CREATEDBY, P_ID_NOMENCLATURAL_CODE }; \r
\r
// ***********************************************************\r
// RANKS\r
// ***********************************************************\r
// NOMENCLATURAL STATUS\r
// ***********************************************************\r
-// static OrderedTermVocabulary<NomenclaturalStatusType> nomStatusVocabulary = \r
-// TaxEditorPlugin.getDefault().getNomStatusVocabulary();\r
-// static NomenclaturalStatusType[] nomStatusTypes = null;\r
-// static String[] P_NOMSTATUS_MENU = null;\r
-// private static void populateNomStatusTypes() {\r
-// \r
-// // Get terms from nom status vocabulary\r
-// List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
-// nomStatusTypesList.addAll(TaxEditorPlugin.getDefault().getNomStatusVocabulary().getTerms());\r
-// \r
-//// // Populate nom status type menu labels \r
-// List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
-// for (NomenclaturalStatusType nomStatusType : nomStatusTypesList) {\r
-// nomStatusTypesMenuList.add(nomStatusType.getLabel());\r
-// }\r
-// \r
-// // Add an empty element for "nothing selected" in the rank drop-down \r
-// nomStatusTypesList.add(0, null);\r
-// nomStatusTypesMenuList.add(0, "");\r
-// \r
-// // Convert rank lists to array\r
-// nomStatusTypes = nomStatusTypesList.toArray(new NomenclaturalStatusType[nomStatusTypesList.size()]);\r
-// P_NOMSTATUS_MENU = nomStatusTypesMenuList.toArray(new String[nomStatusTypesMenuList.size()]); \r
-// } \r
+ static OrderedTermVocabulary<NomenclaturalStatusType> nomStatusVocabulary = \r
+ TaxEditorPlugin.getDefault().getNomStatusVocabulary();\r
+ static NomenclaturalStatusType[] nomStatusTypes = null;\r
+ static String[] P_NOMSTATUS_MENU = null;\r
+ private static void populateNomStatusTypes() {\r
+ \r
+ // Get terms from nom status vocabulary\r
+ List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
+ nomStatusTypesList.addAll(TaxEditorPlugin.getDefault().getNomStatusVocabulary().getTerms());\r
+ \r
+// // Populate nom status type menu labels \r
+ List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
+ for (NomenclaturalStatusType nomStatusType : nomStatusTypesList) {\r
+ nomStatusTypesMenuList.add(nomStatusType.getLabel());\r
+ }\r
+ \r
+ // Add an empty element for "nothing selected" in the rank drop-down \r
+ nomStatusTypesList.add(0, null);\r
+ nomStatusTypesMenuList.add(0, "");\r
+ \r
+ // Convert rank lists to array\r
+ nomStatusTypes = nomStatusTypesList.toArray(new NomenclaturalStatusType[nomStatusTypesList.size()]);\r
+ P_NOMSTATUS_MENU = nomStatusTypesMenuList.toArray(new String[nomStatusTypesMenuList.size()]);\r
+ } \r
\r
// If this is a property with a parent, the parent's ID\r
private String parentid;\r
}\r
if (id.equals(P_ID_NAMERELATIONS)) {\r
descriptors.addElement(\r
- new PropertyDescriptor(P_ID_NAMERELATIONS, P_NAMERELATIONS));\r
- }\r
+ new NameRelationsPropertyDescriptor(P_ID_NAMERELATIONS, P_NAMERELATIONS, name) {\r
+ @Override\r
+ protected void saveNameRelations(Set set) {\r
+ setPropertyValue(P_ID_NAMERELATIONS, set);\r
+ }\r
+ }\r
+ );\r
+ };\r
+ \r
if (id.equals(P_ID_TYPE)) {\r
descriptors.addElement(\r
new PropertyDescriptor(P_ID_TYPE, P_TYPE));\r
}\r
if (id.equals(P_ID_ANNOTATIONS)) {\r
descriptors.addElement(\r
- new PropertyDescriptor(P_ID_ANNOTATIONS, P_ANNOTATIONS) {\r
- public CellEditor createPropertyEditor(Composite parent) {\r
- CellEditor editor = new DialogCellEditor(parent) {\r
-\r
- @Override\r
- protected Object openDialogBox(\r
- Control cellEditorWindow) {\r
- Dialog dialog = new AnnotationsDialog(cellEditorWindow.getShell(), name.getAnnotations());\r
- Object value = ((AnnotationsDialog) dialog).open();\r
- if (value instanceof Set) {\r
- logger.warn("Dialog returned set with " + ((Set) value).size() + " elements.");\r
- setPropertyValue(P_ID_ANNOTATIONS, value);\r
- }\r
- return null;\r
- }\r
- \r
- };\r
- if (getValidator() != null) {\r
- editor.setValidator(getValidator());\r
- }\r
- return editor;\r
- }\r
- });\r
- }\r
+ new AnnotationsPropertyDescriptor(P_ID_ANNOTATIONS, P_ANNOTATIONS, name) {\r
+ @Override\r
+ protected void saveAnnotations(Set set) {\r
+ setPropertyValue(P_ID_ANNOTATIONS, set);\r
+ }\r
+ }\r
+ );\r
+ };\r
if (id.equals(P_ID_NOMSTATUS)) {\r
+ if (nomStatusTypes == null) {\r
+ populateNomStatusTypes();\r
+ }\r
descriptors.addElement(\r
- new PropertyDescriptor(P_ID_NOMSTATUS, P_NOMSTATUS));\r
- }\r
+ new ComboBoxPropertyDescriptor(P_ID_NOMSTATUS, P_NOMSTATUS, P_NOMSTATUS_MENU));\r
+ } \r
if (id.equals(P_ID_UUID)) {\r
descriptors.addElement(\r
new PropertyDescriptor(P_ID_UUID, P_UUID));\r
descriptors.addElement(\r
new PropertyDescriptor(P_ID_CREATEDBY, P_CREATEDBY));\r
}\r
- if (id.equals(P_ID_NOMENCLATURALCODE)) {\r
+ if (id.equals(P_ID_NOMENCLATURAL_CODE)) {\r
descriptors.addElement(\r
- new ComboBoxPropertyDescriptor(P_ID_NOMENCLATURALCODE, P_NOMENCLATURALCODE, P_NOMENCLATURALCODE_MENU));\r
+ new ComboBoxPropertyDescriptor(P_ID_NOMENCLATURAL_CODE, P_NOMENCLATURAL_CODE, P_NOMENCLATURALCODE_MENU));\r
}\r
if (id.equals(P_ID_NOMENCLATURAL_REF)) {\r
descriptors.addElement(\r
}\r
\r
@Override\r
- public Object getPropertyValue(Object id) { \r
+ public Object getPropertyValue(Object id) {\r
if (id.equals(P_ID_PARSED)) \r
return name.getHasProblem() == true ? "problem" : "parsed" ;\r
if (id.equals(P_ID_RANK)) {\r
- if (this.name.getRank() == null) return 0;\r
+ if (this.name.getRank() == null) {\r
+ return 0;\r
+ }\r
Rank rank = this.name.getRank();\r
for (int i = 0; i < ranks.length; i++) {\r
if (ranks[i] == null) continue;\r
return new AnnotationPropertySource(name.getAnnotations());\r
}\r
if (id.equals(P_ID_NOMSTATUS)) {\r
- return new NomStatusPropertySource(name.getStatus());\r
+// return new NomStatusPropertySource(name.getStatus());\r
+// if (this.name.getRank() == null) return 0;\r
+ Set<NomenclaturalStatus> nomStatusSet = this.name.getStatus();\r
+ \r
+ if (nomStatusSet == null || nomStatusSet.size() == 0) {\r
+ return 0;\r
+ }\r
+ // TODO for now, only showing first nom status - change!\r
+ NomenclaturalStatus nomStatus = (NomenclaturalStatus) nomStatusSet.toArray()[0];\r
+ for (int i = 0; i < nomStatusTypes.length; i++) {\r
+ if (nomStatusTypes[i] == null) continue;\r
+ if (nomStatus.getType().getUuid().equals(nomStatusTypes[i].getUuid())) \r
+ return i;\r
+ }\r
+ return 0; \r
}\r
if (id.equals(P_ID_NAMERELATIONS)) {\r
return new NameRelationsPropertySource(name, name.getNameRelations());\r
return subEmptyForNull(name.getCreatedBy().generateTitle());\r
}\r
}\r
- if (id.equals(P_ID_NOMENCLATURALCODE)) {\r
+ if (id.equals(P_ID_NOMENCLATURAL_CODE)) {\r
// TODO put in logic "if BotanicalName / ZoologicalName ..."\r
return 0;\r
}\r
*/\r
@Override\r
public void setPropertyValue(Object id, Object value) {\r
+ \r
+ // Since this is only called when the property value changes,\r
+ // it is a reliable place to fire the name's property change\r
+ // listener.\r
+ name.firePropertyChange((String) id, null, value);\r
+ \r
// TODO every time property value is set, refire property sheet\r
this.propertyChangeSupport.firePropertyChange(new PropertyChangeEvent(name, (String) id, null, value));\r
if (id.equals(P_ID_RANK)) {\r
if (value instanceof Set) {\r
for (Object object: (Set) value) {\r
if (object instanceof Annotation && !annotations.contains(object)) {\r
- logger.warn("Adding annotation");\r
name.addAnnotation((Annotation) object);\r
}\r
}\r
// TODO set name relations\r
}\r
if (id.equals(P_ID_NOMSTATUS)) {\r
- // TODO set nom status\r
+ NomenclaturalStatus nomStatus;\r
+ int index = ((Integer) value).intValue();\r
+ Set<NomenclaturalStatus> nomStatusSet = name.getStatus(); \r
+\r
+ if (nomStatusSet.size() > 0) {\r
+ nomStatus = (NomenclaturalStatus) nomStatusSet.toArray()[0];\r
+ \r
+ if (index == 0) {\r
+ nomStatusSet.remove(nomStatus);\r
+ } else {\r
+ nomStatus.setType(nomStatusTypes[index]);\r
+ }\r
+ \r
+ } else {\r
+ nomStatus = NomenclaturalStatus.NewInstance(nomStatusTypes[index]);\r
+ name.addStatus(nomStatus);\r
+ }\r
}\r
if (id.equals(P_ID_MARKERS)) {\r
// TODO set markers\r
}\r
- if (id.equals(P_ID_NOMENCLATURALCODE)) {\r
+ if (id.equals(P_ID_NOMENCLATURAL_CODE)) {\r
// TODO decide if this is editable at all, and if so, how to implement\r
}\r
if (id.equals(P_ID_NOMENCLATURAL_REF)) {\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.contentassist.ContentAssistEvent;\r
+import org.eclipse.jface.text.contentassist.ContentAssistant;\r
+import org.eclipse.jface.text.contentassist.ICompletionListener;\r
+import org.eclipse.jface.text.contentassist.ICompletionProposal;\r
+import org.eclipse.jface.text.contentassist.IContentAssistant;\r
+import org.eclipse.jface.text.source.ISourceViewer;\r
+import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.RGB;\r
+import org.eclipse.swt.widgets.Display;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class SourceViewerConfig extends SourceViewerConfiguration {\r
+ private static final Logger logger = Logger\r
+ .getLogger(SourceViewerConfig.class);\r
+ \r
+ public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {\r
+\r
+ ContentAssistant assistant = new ContentAssistant();\r
+ assistant.setContentAssistProcessor(\r
+ new CompletionProcessor(),\r
+ IDocument.DEFAULT_CONTENT_TYPE);\r
+ assistant.enableAutoActivation(true);\r
+ assistant.setAutoActivationDelay(50);\r
+ assistant.setProposalPopupOrientation(\r
+ IContentAssistant.PROPOSAL_OVERLAY);\r
+ assistant.setStatusLineVisible(true);\r
+// assistant.setStatusMessage("Create a nomenclatural or taxonomic relationship");\r
+ assistant.setProposalSelectorBackground(\r
+ new Color(Display.getCurrent(), new RGB(255, 255, 255)));\r
+ assistant.setInformationControlCreator(\r
+ getInformationControlCreator(sourceViewer)); // this is what pops up in the yellow context box\r
+ assistant.addCompletionListener(new ICompletionListener() {\r
+\r
+ @Override\r
+ public void assistSessionEnded(ContentAssistEvent event) {\r
+ // TODO Auto-generated method stub\r
+ }\r
+\r
+ @Override\r
+ public void assistSessionStarted(ContentAssistEvent event) {\r
+ // TODO Auto-generated method stub\r
+ }\r
+\r
+ @Override\r
+ public void selectionChanged(ICompletionProposal proposal,\r
+ boolean smartToggle) {\r
+ if (smartToggle) {\r
+ logger.warn("Inserting " + proposal.getDisplayString());\r
+ }\r
+ }\r
+ });\r
+ return assistant;\r
+ }\r
+}
\ No newline at end of file