merging changes from branches/taxeditor/nho_dev to trunk
authorn.hoffmann <n.hoffmann@localhost>
Thu, 9 Sep 2010 12:05:37 +0000 (12:05 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 9 Sep 2010 12:05:37 +0000 (12:05 +0000)
85 files changed:
.gitattributes
taxeditor-application/META-INF/MANIFEST.MF
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalHelpHandler.java
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/P2Util.java [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java
taxeditor-bulkeditor/META-INF/MANIFEST.MF
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorMarkerPreferenceComposite.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/BulkEditorInputTypeValues.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/command/SetMarkerContributionItems.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsLabelProvider.java
taxeditor-bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java
taxeditor-editor/META-INF/MANIFEST.MF
taxeditor-editor/plugin.xml
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredClassificationSelectionDialog.java [moved from taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonomicTreeSelectionDialog.java with 80% similarity]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonNodeSelectionDialog.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/GroupBasionymContributionItem.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/AbstractCdmDataViewer.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/DetailsViewer.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/AbstractCdmEntityWizardPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/TimePeriodElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/selection/AbstractSelectionElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/forms/selection/EditFromSelectionWizard.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/description/DescriptionElementDetailSection.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/AuthorshipDetailElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/NameDetailElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/NonViralNameDetailElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/NonViralNameWizardPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/name/ProtologueSection.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/reference/ReferenceBaseDetailElement.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/section/taxon/TaxonBaseDetailElement.java
taxeditor-feature-platform/feature.xml
taxeditor-feature-product/feature.xml
taxeditor-feature-product/taxeditor.product
taxeditor-navigation/META-INF/MANIFEST.MF
taxeditor-navigation/plugin.xml
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/wizard/NewTaxonNodeWizardPage.java
taxeditor-store/META-INF/MANIFEST.MF
taxeditor-store/plugin.xml
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceView.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/labels/DefaultLabelStrategy.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameHelper.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/AbstractMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseContentProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseLabelProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/ExtensionTypeMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/FeatureMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/LanguageMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/MarkerTypeMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NameRelationshipTypeMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NameTypeDesignationStatusMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NamedAreaTypeMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/NomenclaturalStatusTypeMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/PresenceAbsenceMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/PreservationMethodMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/RankMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/SpecimenTypeDesignationStatusMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/StageMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/TaxonRelationshipTypeMenuPreferences.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/VocabularyTermWizard.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/VocabularyStore.java [deleted file]
taxeditor-store/src/main/resources/eu/etaxonomy/cdm/editorApplicationContext.xml
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/CdmStoreTest.java

index ad818e6894e5c29b93daf0dc0be952fd768741c6..4ee2704853b18a67d07af207d1cdf658f1301a4c 100644 (file)
@@ -222,6 +222,7 @@ taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchW
 taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalAboutPlatformHandler.java -text
 taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalHelpHandler.java -text
 taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/OpenExternalParserHelpHandler.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/P2Util.java -text
 taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Perspective.java -text
 taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/SaveAllHandler.java -text
 taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/SaveHandler.java -text
@@ -311,6 +312,7 @@ taxeditor-editor/plugin.xml -text
 taxeditor-editor/pom.xml -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/AbstractFilteredCdmResourceSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredAgentSelectionDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredClassificationSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredDerivedUnitSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredFieldObservationSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredNameSelectionDialog.java -text
@@ -320,7 +322,6 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredReferenceSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonNodeSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonSelectionDialog.java -text
-taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTaxonomicTreeSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/dialogs/filteredSelection/FilteredTeamSelectionDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmDataTransfer.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java -text
@@ -832,6 +833,14 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSo
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/LoginDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/NewReferenceInputDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/UriDialog.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowDataSourceViewHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowLoginWindowHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowUserManagerViewHandler.java -text
@@ -864,6 +873,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/labels/LabelImageProvider.j
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/labels/ZoologicalNameLabelStrategy.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractDataChangeBehaviour.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ColorFactory.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CommonHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DataChangeBridge.java -text
@@ -934,6 +944,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/parser/MatchStrategyConfigu
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/parser/ParseHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferences.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/DescriptionPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/IPreferenceKeys.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/InitNomenclaturalCodePrefDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/MatchingPreferences.java -text
@@ -947,6 +958,8 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/NonVira
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/ReferenceMatchingPreference.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/TeamOrPersonMatchingPreference.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/AbstractMenuPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseContentProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseLabelProvider.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/ExtensionTypeMenuPreferences.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/FeatureMenuPreferences.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/LanguageMenuPreferences.java -text
@@ -966,7 +979,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/Vocabular
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/VocabularyStore.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/internal/TaxeditorStorePlugin.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/AuthenticatedUserBar.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/CreateUserHandler.java -text
index e1503098eb2e67724d80cc7549626d45080f4b21..070ed45089251532543f7decf40cbcdd46937413 100644 (file)
@@ -8,16 +8,22 @@ Bundle-Vendor: EDIT
 Bundle-Localization: plugin
 Export-Package: eu.etaxonomy.taxeditor
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Import-Package: org.apache.log4j,
  org.eclipse.equinox.app,
  org.osgi.framework,
  org.osgi.service.packageadmin
-Require-Bundle: org.eclipse.ui;bundle-version="3.5.2",
- org.eclipse.core.runtime;bundle-version="3.5.0",
+Require-Bundle: eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
  eu.etaxonomy.taxeditor.navigation;bundle-version="2.1.0",
  eu.etaxonomy.taxeditor.bulkeditor;bundle-version="2.1.0",
  eu.etaxonomy.taxeditor.editor;bundle-version="2.1.0",
- eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
+ eu.etaxonomy.printpublisher.plugin;bundle-version="1.0.0",
+ org.eclipse.core.runtime;bundle-version="3.5.0",
+ org.eclipse.equinox.ds;bundle-version="1.2.0",
+ org.eclipse.equinox.util;bundle-version="1.0.200",
+ org.eclipse.equinox.p2.core;bundle-version="2.0.0",
  org.eclipse.equinox.p2.ui;bundle-version="1.0.101",
- org.eclipse.equinox.p2.updatechecker;bundle-version="1.1.0"
+ org.eclipse.equinox.p2.ui.sdk;bundle-version="1.0.100",
+ org.eclipse.equinox.p2.updatechecker;bundle-version="1.1.0",
+ org.eclipse.equinox.p2.operations;bundle-version="2.0.0",
+ org.eclipse.ui;bundle-version="3.5.2"
index 15c2798bd0045a6d94b4f3ba46e4709be939dd77..cbf2b67dd350d17d4af3c2772ed52f6445c25801 100644 (file)
@@ -1,8 +1,21 @@
 package eu.etaxonomy.taxeditor;
 
+import java.lang.reflect.InvocationTargetException;
+
 import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.operations.UpdateOperation;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
@@ -15,6 +28,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
        private static final Logger logger = Logger.getLogger(ApplicationWorkbenchWindowAdvisor.class);
 
+       private static final String JUSTUPDATED = "justUpdated";
+       
        public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
                super(configurer);
        }
@@ -39,6 +54,9 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 
                if(PreferencesUtil.shouldConnectAtStartUp())
                        CdmStore.initialize();
+               
+               automaticUpdate();
+               
        }
        
        private int authenticate(){
@@ -48,5 +66,50 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
                LoginDialog loginDialog = new LoginDialog(shell);
                return loginDialog.open();
        }
+       
+       private void automaticUpdate(){
+               final IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper.getService(TaxonomicEditorPlugin.bundleContext,
+                               IProvisioningAgent.SERVICE_NAME);
+               if (agent == null) {
+                       logger.error("No provisioning agent found. This application is not set up for updates.");
+                       return;
+               }
+               // if we're restarting after updating, don't check again.
+               final IPreferenceStore prefStore = TaxonomicEditorPlugin.getDefault().getPreferenceStore();
+               if (prefStore.getBoolean(JUSTUPDATED)) {
+                       prefStore.setValue(JUSTUPDATED, false);
+                       return;
+               }
+               
+               // check for updates before starting up.
+               // If an update is performed, restart. Otherwise log
+               // the status.
+               IRunnableWithProgress runnable = new IRunnableWithProgress() {
+                       public void run(IProgressMonitor monitor)
+                                       throws InvocationTargetException, InterruptedException {
+                               IStatus updateStatus = P2Util.checkForUpdates(agent, monitor);
+                               if (updateStatus.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
+                                       PlatformUI.getWorkbench().getDisplay()
+                                                       .asyncExec(new Runnable() {
+                                                               public void run() {
+                                                                       MessageDialog.openInformation(null,
+                                                                                       "Updates", "No updates were found");
+                                                               }
+                                                       });
+                               } else if (updateStatus.getSeverity() != IStatus.ERROR) {
+                                       prefStore.setValue(JUSTUPDATED, true);
+                                       PlatformUI.getWorkbench().restart();
+                               } else {
+                                       logger.info(updateStatus);
+                               }
+                       }
+               };
+               try {
+                       new ProgressMonitorDialog(null).run(true, true, runnable);
+               } catch (InvocationTargetException e) {
+                       e.printStackTrace();
+               } catch (InterruptedException e) {
+               }
+       }
 }
  
\ No newline at end of file
index 27f522488e6fc2db6ad4e43c7e0eac7f9f17e459..f150a6e06a2229449c628a982c9ceba1c51193c2 100644 (file)
@@ -33,7 +33,7 @@ public class OpenExternalHelpHandler extends AbstractHandler {
         * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
         */\r
        public Object execute(ExecutionEvent event) throws ExecutionException {\r
-               String url = "http://wp5.e-taxonomy.eu/taxeditor/TaxonomicEditor-UserManual-Version2.1.pdf";\r
+               String url = "http://wp5.e-taxonomy.eu/download/taxeditor/stable/EDITTaxonomicEditor-UserManual.pdf";\r
        \r
                try {\r
                        PlatformUI.getWorkbench().getBrowserSupport().createBrowser\r
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/P2Util.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/P2Util.java
new file mode 100644 (file)
index 0000000..f664280
--- /dev/null
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.operations.ProvisioningJob;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
+import org.eclipse.equinox.p2.operations.UpdateOperation;
+
+/**
+ * This class shows an example for checking for updates and performing the
+ * update synchronously.  It is up to the caller to run this in a job if 
+ * a background update check is desired.  This is a reasonable way to run an
+ * operation when user intervention is not required.   Another approach is
+ * to separately perform the resolution and provisioning steps, deciding
+ * whether to perform these synchronously or in a job.
+ * 
+ * Any p2 operation can be run modally (synchronously), or the job
+ * can be requested and scheduled by the caller.
+ * 
+ * @see UpdateOperation#resolveModal(IProgressMonitor)
+ * @see UpdateOperation#getResolveJob(IProgressMonitor)
+ * @see UpdateOperation#getProvisioningJob(IProgressMonitor)
+ */
+public class P2Util {
+       // XXX Check for updates to this application and return a status.
+       static IStatus checkForUpdates(IProvisioningAgent agent, IProgressMonitor monitor) throws OperationCanceledException {
+               ProvisioningSession session = new ProvisioningSession(agent);
+               // the default update operation looks for updates to the currently
+               // running profile, using the default profile root marker. To change
+               // which installable units are being updated, use the more detailed
+               // constructors.
+               UpdateOperation operation = new UpdateOperation(session);
+               SubMonitor sub = SubMonitor.convert(monitor,
+                               "Checking for application updates...", 200);
+               IStatus status = operation.resolveModal(sub.newChild(100));
+               if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
+                       return status;
+               }
+               if (status.getSeverity() == IStatus.CANCEL)
+                       throw new OperationCanceledException();
+               
+               if (status.getSeverity() != IStatus.ERROR) {
+                       // More complex status handling might include showing the user what updates
+                       // are available if there are multiples, differentiating patches vs. updates, etc.
+                       // In this example, we simply update as suggested by the operation.
+                       ProvisioningJob job = operation.getProvisioningJob(null);
+                       status = job.runModal(sub.newChild(100));
+                       if (status.getSeverity() == IStatus.CANCEL)
+                               throw new OperationCanceledException();
+               }
+               return status;
+       }
+}
index 31c97048751f15cf254096c6cc934722db5f0ffe..bd9e24ce6ec1ad445c052336ed3807fd47cf7886 100644 (file)
@@ -25,7 +25,7 @@ public class TaxonomicEditorPlugin extends AbstractUIPlugin {
 
        private ServiceReference packageAdminRef;
 
-       private BundleContext bundleContext;
+       protected static BundleContext bundleContext;
 
 
        private ServiceRegistration policyRegistration;
index b08c59139e7bd8217b0de129fa97306521f895cb..1d438e025db1e177fad42f3cb8c599dddd35cab7 100644 (file)
@@ -13,7 +13,7 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.core.expressions,
  eu.etaxonomy.cdmlib;bundle-version="2.3.0",
  eu.etaxonomy.taxeditor.store;bundle-version="2.1.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.core.runtime,
  org.eclipse.equinox.app,
index 5e57b77bd8172e8e883695dbddc2d84390931325..512fb382e490a9ad180bb2471ad9a0da4ea0b9b6 100644 (file)
@@ -48,7 +48,7 @@ import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -187,7 +187,7 @@ public class BulkEditor extends AnnotatedLineEditor implements PropertyChangeLis
         * @return\r
         */\r
        private boolean isEditableMarkerTypes() { \r
-               for (MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+               for (MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
                        if (((AbstractBulkEditorInput) getEditorInput()).isMarkerTypeEditingEnabled(markerType)) {\r
                                return true;\r
                        }\r
index afcae2ef86a19c746821219a9b9dbc3b3ee5f52c..8f4d88eade9fcc54bdd740747ce5f713adaa8373 100644 (file)
@@ -87,13 +87,19 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy {
         * @see eu.etaxonomy.taxeditor.bulkeditor.ILineDisplayStrategy#getText(java.lang.Object)\r
         */\r
        public String getText(Object entity) {          \r
+               String text = null;\r
+               \r
                if(entity instanceof IdentifiableEntity){\r
                        IdentifiableEntity identifiableEntity = (IdentifiableEntity) HibernateProxyHelper.deproxy(entity);\r
-                       String text = identifiableEntity.getTitleCache();\r
-                       return text == null ? "" : text;\r
+                       if(identifiableEntity instanceof TaxonNameBase){\r
+                               // TODO it is not very nice to do this here. Please refactor\r
+                               text = ((TaxonNameBase) identifiableEntity).getFullTitleCache();\r
+                       }else{\r
+                               text = identifiableEntity.getTitleCache();\r
+                       }\r
                }\r
                \r
-               return "";\r
+               return text == null ? "" : text;\r
        }\r
 \r
 \r
index dc448a10920f86028bef98e624956ef4d1b97263..2b6b0d120ed51b0956ed556c073a96263a0b0d38 100644 (file)
@@ -24,7 +24,7 @@ import org.eclipse.swt.widgets.Composite;
 import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -69,7 +69,7 @@ public class BulkEditorMarkerPreferenceComposite extends Composite {
                gridLayout.marginWidth = 12;\r
                setLayout(gridLayout);\r
                \r
-               for (final MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+               for (final MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
                        if (editorInput.isMarkerTypeEditingEnabled(markerType)) {\r
                                final Button button = new Button(this, SWT.CHECK);\r
                                button.setText("Edit " + markerType.getLabel() + " markers");\r
index 4a2eea62a9facabcf6bd4fd16b851f58b766f755..36f2f6769be3b4f3f5a69d84611e470b62acf170 100644 (file)
@@ -117,9 +117,7 @@ public class BulkEditorInputTypeValues implements IParameterValues {
                \r
                // TODO user role determines which editor inputs are returned\r
                for (BulkEditorInputType inputType : BulkEditorInputType.values()){\r
-                       // do not add the occurrence bulk editor\r
-                       if(! inputType.label.equals(BulkEditorInputType.OCCURRENCE.label))\r
-                               values.put(inputType.label, inputType.id);\r
+                       values.put(inputType.label, inputType.id);\r
                }               \r
                \r
                return values;\r
index d75f0bd14fbfea336d6c33c65fd9ea51d5568466..3e6e868c0105b92da57fd7fe450036de5d8469fb 100644 (file)
@@ -30,7 +30,7 @@ import org.eclipse.ui.handlers.IHandlerService;
 import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -52,7 +52,7 @@ public class SetMarkerContributionItems extends CompoundContributionItem {
                IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();\r
                if (editor.getEditorInput() instanceof AbstractBulkEditorInput) {\r
                        AbstractBulkEditorInput input = (AbstractBulkEditorInput) editor.getEditorInput();              \r
-                       for (final MarkerType markerType : VocabularyStore.getNonTechnicalMarkerTypes()) {\r
+                       for (final MarkerType markerType : TermStore.getNonTechnicalMarkerTypes()) {\r
                                if (input.isMarkerTypeEditingEnabled(markerType) && PreferencesUtil.getEditMarkerTypePreference(input, markerType)) {\r
                                        contributions.add(new ContributionItem() {\r
                                                /* (non-Javadoc)\r
index 4a57ccc1d47296d8a5287a2faca98f8133efb0af..6e3187b086ba6ba6e770bb02db96944cec7a3a91 100644 (file)
@@ -16,6 +16,7 @@ import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;\r
 \r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
 \r
 /**\r
@@ -49,12 +50,24 @@ public class ReferencingObjectsLabelProvider extends LabelProvider implements IT
         */\r
        public String getColumnText(Object element, int columnIndex) {\r
                String text = null;\r
+               \r
+               Object deproxiedElement = HibernateProxyHelper.deproxy(element);\r
+               \r
                if (columnIndex == 0) {\r
-                       text = (HibernateProxyHelper.deproxy(element)).getClass().getSimpleName();\r
-               }\r
-               if (columnIndex == 1) {\r
-                       text = DescriptionHelper.getObjectDescription(element);\r
+                       text = DescriptionHelper.getObjectClassname(deproxiedElement);\r
+               }else if (columnIndex == 1) {\r
+                       text = DescriptionHelper.getObjectDescription(deproxiedElement);\r
+               }else if (columnIndex == 2) {\r
+                       if(element instanceof CdmBase){\r
+                               text = ((CdmBase) element).getUuid().toString();\r
+                       }\r
+               }else if (columnIndex == 3) {\r
+                       if(element instanceof CdmBase){\r
+                               text = ((CdmBase) element).getId() + "";\r
+                       }\r
                }\r
+               \r
                return text == null ? element.toString() : text;\r
+               \r
        }\r
 }\r
index 0dcdb1bf0ec66ac25540919694ec09594a8c5cee..b378a60f8c76bc8f44d827bcf14cd10ad0c8b964 100644 (file)
@@ -10,7 +10,6 @@
 \r
 package eu.etaxonomy.taxeditor.bulkeditor.referencingobjects;\r
 \r
-import java.lang.reflect.InvocationTargetException;\r
 import java.util.ArrayList;\r
 import java.util.Collections;\r
 import java.util.Comparator;\r
@@ -22,13 +21,12 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;\r
 import org.eclipse.core.runtime.Status;\r
 import org.eclipse.core.runtime.jobs.Job;\r
-import org.eclipse.jface.operation.IRunnableWithProgress;\r
 import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.jface.viewers.TableViewer;\r
 import org.eclipse.jface.viewers.TableViewerColumn;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Table;\r
 import org.eclipse.ui.ISelectionListener;\r
 import org.eclipse.ui.ISelectionService;\r
@@ -36,12 +34,9 @@ import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.part.ViewPart;\r
 \r
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
-import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorUtil;\r
 import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
 import eu.etaxonomy.taxeditor.model.LineSelection;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -63,8 +58,6 @@ public class ReferencingObjectsView extends ViewPart implements ISelectionListen
 \r
        private CdmBase referencedObject;\r
 \r
-       private ArrayList<CdmBase> referencingObjects;\r
-\r
        \r
        public ReferencingObjectsView() {}\r
        \r
@@ -95,8 +88,8 @@ public class ReferencingObjectsView extends ViewPart implements ISelectionListen
        // This will create the columns for the table\r
        private void createColumns(TableViewer viewer) {\r
                Table table = viewer.getTable();\r
-               String[] titles = {"Class", "Description" };\r
-               int[] bounds = { 100, 200 };\r
+               String[] titles = {"Class", "Description", "UUID", "Object ID" };\r
+               int[] bounds = { 100, 200, 100, 70};\r
 \r
                for (int i = 0; i < titles.length; i++) {\r
                        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);\r
@@ -122,64 +115,57 @@ public class ReferencingObjectsView extends ViewPart implements ISelectionListen
         * \r
         */\r
        public void updateReferencingObjects(final IdentifiableEntity entity) {\r
-//        IEditorPart editor = getSite().getPage().getActiveEditor();\r
-//        ISelection selection = editor.getEditorSite().getSelectionProvider()\r
-//                                     .getSelection();\r
-//\r
-//        if ((selection != null) && selection instanceof LineSelection) {\r
-//             final Object entity = ((IStructuredSelection) selection).getFirstElement();\r
+               \r
+               final Display display = Display.getCurrent();\r
                \r
                Job job = new Job("Update Referencing Objects") {\r
                        \r
                        @Override\r
                        protected IStatus run(IProgressMonitor monitor) {\r
                                monitor.beginTask("Calculating referencing objects", 10);\r
-                               ConversationHolder conversation = CdmStore.createConversation();\r
-                               conversation.bind();\r
+                               \r
                                monitor.worked(3);\r
-                               doUpdateReferencingObjects(entity);\r
+                               \r
+                               \r
+                               display.asyncExec(new Runnable() {\r
+                                       \r
+                                       @Override\r
+                                       public void run() {\r
+                                               ConversationHolder conversation = CdmStore.createConversation();\r
+                                               List<CdmBase> referencingObjects = getReferencingObjects(entity);\r
+                                               updateView(referencingObjects);\r
+                                               conversation.close();\r
+                                       }\r
+                               });\r
+                               \r
                                monitor.done();\r
-                               conversation.close();\r
+                               \r
+                               \r
                                return Status.OK_STATUS;\r
                        }\r
                };\r
-       \r
-       IRunnableWithProgress runnable = new IRunnableWithProgress() {\r
-                       \r
-                       public void run(IProgressMonitor monitor) throws InvocationTargetException,\r
-                                       InterruptedException {\r
-                               monitor.beginTask("Calculating referencing objects", 10);\r
-                               ConversationHolder conversation = CdmStore.createConversation();\r
-                               conversation.bind();\r
-                               monitor.worked(3);\r
-                               doUpdateReferencingObjects(entity);\r
-                               monitor.done();\r
-                               conversation.close();\r
-                       }\r
-               };\r
-               \r
-//                     BulkEditorUtil.busyCursorWhile(runnable);\r
-                       \r
-//                     BulkEditorUtil.runAsynchroneously(runnable);\r
-                       \r
+               \r
                job.schedule();\r
                        \r
-               updateView();\r
+               \r
        }\r
 \r
-       private void doUpdateReferencingObjects(Object entity) {\r
+       private List<CdmBase> getReferencingObjects(Object entity) {\r
         try {\r
                if(entity instanceof CdmBase){\r
                        referencedObject = (CdmBase) entity;\r
                        Set<CdmBase> setOfReferencingObjects = CdmStore.getCommonService().getReferencingObjects(referencedObject);\r
                        \r
-                       referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects);\r
+                       List<CdmBase> referencingObjects = new ArrayList<CdmBase>(setOfReferencingObjects);                     \r
                        \r
                        Collections.sort(referencingObjects, new ReferencingClassComparator());\r
+                       \r
+                       return referencingObjects;\r
                }\r
         } catch (Exception e) {\r
             logger.error("Error retrieving referencing objects", e);\r
         }\r
+               return null;\r
        }\r
        \r
        class ReferencingClassComparator implements Comparator<CdmBase> {\r
@@ -204,7 +190,7 @@ public class ReferencingObjectsView extends ViewPart implements ISelectionListen
        /**\r
         * \r
         */\r
-       private void updateView() {\r
+       private void updateView(List<CdmBase> referencingObjects) {\r
                referencingObjectsViewer.setInput(referencingObjects);\r
                setContentDescription("'" + referencedObject + "' is referenced by:");\r
        }\r
@@ -233,6 +219,7 @@ public class ReferencingObjectsView extends ViewPart implements ISelectionListen
        @Override\r
        public void dispose() {\r
                selectionService.removePostSelectionListener(this);\r
+               selectionService.removeSelectionListener(this);\r
                super.dispose();\r
        }\r
        \r
index ebee0955fc0216512d12ed650be760c0fdbe26af..29db7f0fc5a24b0b115c4ba8339951ff393dd51a 100644 (file)
@@ -36,14 +36,14 @@ Export-Package: eu.etaxonomy.taxeditor.dialogs.filteredSelection,
  eu.etaxonomy.taxeditor.section.reference,
  eu.etaxonomy.taxeditor.section.supplemental,
  eu.etaxonomy.taxeditor.section.taxon
-Require-Bundle: org.eclipse.ui;bundle-version="3.4.1",
+Require-Bundle: org.eclipse.ui;bundle-version="3.5.2",
  org.eclipse.core.runtime;bundle-version="3.5.0",
  org.eclipse.core.expressions;bundle-version="3.4.0",
  org.eclipse.ui.forms;bundle-version="3.4.1",
- eu.etaxonomy.cdmlib;bundle-version="2.3.0",
+ eu.etaxonomy.cdmlib;bundle-version="2.4.0",
  eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
  eu.etaxonomy.taxeditor.bulkeditor;bundle-version="2.1.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.core.databinding.beans,
  org.eclipse.core.databinding.observable.list,
@@ -57,5 +57,4 @@ Import-Package: org.eclipse.core.databinding.beans,
  org.eclipse.jface.text.source,
  org.eclipse.ui.forms.widgets,
  org.eclipse.ui.texteditor,
- org.eclipse.ui.views.properties.tabbed,
  org.osgi.framework
index 0adc12222e100313f21bf8e94bbcf195b7964e8b..b5059cb71323badb36bc374f8beb127d886a5f20 100644 (file)
                id="eu.etaxonomy.taxeditor.new.person"
                name="Person">
          </wizard>
-         <!--wizard
+         <wizard
                category="eu.etaxonomy.taxeditor.new.category.cdm"
                class="eu.etaxonomy.taxeditor.editor.newWizard.NewDerivedUnitBaseWizard"
                hasPages="true"
                id="eu.etaxonomy.taxeditor.new.specimen"
                name="Specimen">
-         </wizard-->
+         </wizard>
       </extension>
       <extension
             point="org.eclipse.ui.menus">
                   label="Person"
                   style="push">
             </command>
-            <!--command
+            <command
                   commandId="eu.etaxonomy.taxeditor.editor.command.new.specimen"
                   label="Specimen"
                   style="push">
-            </command-->
+            </command>
          </menuContribution>
       </extension>
       <extension
@@ -27,11 +27,11 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created Sep 21, 2009
  * @version 1.0
  */
-public class FilteredTaxonomicTreeSelectionDialog extends
+public class FilteredClassificationSelectionDialog extends
                AbstractFilteredCdmResourceSelectionDialog<TaxonomicTree> {
        
        private static final Logger logger = Logger
-       .getLogger(FilteredTaxonomicTreeSelectionDialog.class);
+       .getLogger(FilteredClassificationSelectionDialog.class);
 
        
        /**
@@ -39,8 +39,8 @@ public class FilteredTaxonomicTreeSelectionDialog extends
        * @return
        */
        public static TaxonomicTree selectTaxonomicTree(Shell shell, ConversationHolder conversation) {
-               FilteredTaxonomicTreeSelectionDialog dialog = new FilteredTaxonomicTreeSelectionDialog(shell, conversation,
-                               "Choose a taxonomic tree", false, "", null);
+               FilteredClassificationSelectionDialog dialog = new FilteredClassificationSelectionDialog(shell, conversation,
+                               "Choose a Classification", false, "", null);
                return getSelectionFromDialog(dialog);
        }
        
@@ -50,9 +50,9 @@ public class FilteredTaxonomicTreeSelectionDialog extends
         * @param multi
         * @param settings
         */
-       protected FilteredTaxonomicTreeSelectionDialog(Shell shell, ConversationHolder conversation, String title,
-                       boolean multi, String settings, TaxonomicTree tree) {
-               super(shell, conversation, title, multi, settings, tree);
+       protected FilteredClassificationSelectionDialog(Shell shell, ConversationHolder conversation, String title,
+                       boolean multi, String settings, TaxonomicTree classification) {
+               super(shell, conversation, title, multi, settings, classification);
        }
        
        /* (non-Javadoc)
index b5853388cda2a18eac2f8aa46581bc92f8eac2f5..7a87179de0cc421ec59dcaa53a6a2604da6cb3bf 100644 (file)
@@ -88,16 +88,16 @@ public class FilteredTaxonNodeSelectionDialog extends AbstractFilteredCdmResourc
        private Control createTreeSelectionCombo(Composite parent){\r
 //             classifications = CdmStore.getTaxonTreeService().list(null, null, null, null, null);\r
                \r
-               Composite taxonomicTreeSelection = new Composite(parent, SWT.NULL);\r
-               taxonomicTreeSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
+               Composite classificationSelection = new Composite(parent, SWT.NULL);\r
+               classificationSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
                \r
                GridLayout layout = new GridLayout();\r
-               taxonomicTreeSelection.setLayout(layout);\r
+               classificationSelection.setLayout(layout);\r
                \r
-               Label label = new Label(taxonomicTreeSelection, SWT.NULL);\r
+               Label label = new Label(classificationSelection, SWT.NULL);\r
                // TODO not working is not really true but leave it there to remind everyone that this is under construction\r
-               label.setText("Select Taxonomic Tree (not completely working at the moment)");\r
-               classificationSelectionCombo = new Combo(taxonomicTreeSelection, SWT.BORDER | SWT.READ_ONLY);\r
+               label.setText("Select Classification (experimental)");\r
+               classificationSelectionCombo = new Combo(classificationSelection, SWT.BORDER | SWT.READ_ONLY);\r
                classificationSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
                \r
                for(TaxonomicTree tree : classifications){\r
@@ -110,7 +110,7 @@ public class FilteredTaxonNodeSelectionDialog extends AbstractFilteredCdmResourc
                \r
                classificationSelectionCombo.addSelectionListener(this);\r
                \r
-               return taxonomicTreeSelection;\r
+               return classificationSelection;\r
        }\r
 \r
        @Override\r
index cde4841c828756c6ee75075b2b76eae3e501983b..56d779b8befcba3ce81c332aa78f603151e80a92 100644 (file)
@@ -19,7 +19,6 @@ import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.jface.dialogs.MessageDialog;\r
 import org.eclipse.jface.viewers.ISelection;\r
 import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Shell;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorPart;\r
@@ -96,19 +95,6 @@ public class EditorUtil extends AbstractUtility{
                open(input);\r
        }\r
        \r
-       /**\r
-        * Taxon Editors may be opened by supplying a taxon uuid only.\r
-        * Session gets initialised here and is passed to the editor\r
-        * \r
-        * @param taxonNodeUuid\r
-        * @return\r
-        * @throws PartInitException \r
-        */\r
-       public static void openTaxon(UUID taxonUuid) throws PartInitException {\r
-               TaxonEditorInput input = TaxonEditorInput.NewInstanceFromTaxon(taxonUuid); \r
-               open(input);\r
-       }\r
-       \r
        public static void openTaxonBase(UUID taxonBaseUuid) throws PartInitException {\r
                TaxonEditorInput input = TaxonEditorInput.NewInstanceFromTaxonBase(taxonBaseUuid); \r
                open(input);\r
index 4e3f84acfa6c3de20cf68f57f891faf3500e8950..5f6d007872780550ab58b67190b20e17262e21d3 100644 (file)
@@ -48,32 +48,12 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
 
        private ConversationHolder conversation;
        
-       private static List<String> propertyPaths = Arrays.asList(new String[]{"*", 
-                       "taxonomicTree.*",
-                       "referenceForParentChildRelation.*",
-                       "taxon.*", 
-                       "taxon.relationsFromThisTaxon.*",
-                       "taxon.relationsToThisTaxon.*",
-                       //
-                       "taxon.synonymRelations.synonym.name.*",
-                       "taxon.synonymRelations.synonym.name.nomenclaturalReference.*",
-                       "taxon.synonymRelations.synonym.name.combinationAuthorTeam.*",
-                       "taxon.synonymRelations.synonym.name.exCombinationAuthorTeam.*",
-                       "taxon.synonymRelations.synonym.name.basionymAuthorTeam.*",
-                       "taxon.synonymRelations.synonym.name.exBasionymAuthorTeam.*",
-                       //
-                       "taxon.name.*", 
-                       "taxon.name.homotypicalGroup.*",
-                       "taxon.name.nomenclaturalReference.*",
-                       "taxon.name.combinationAuthorTeam.*",
-                       "taxon.name.exCombinationAuthorTeam.*",
-                       "taxon.name.basionymAuthorTeam.*",
-                       "taxon.name.exBasionymAuthorTeam.*"});
-
        private TaxonNode taxonNode;
 
        private TaxonEditorInputDataChangeBehaviour dataChangeBehavior;
        
+       private TaxonBase initiallySelectedTaxonBase;
+       
        private TaxonEditorInput(TaxonNode taxonNode, ConversationHolder conversation){
                this.conversation = conversation;
                this.taxonNode = taxonNode;
@@ -106,22 +86,11 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
        return new TaxonEditorInput(taxonNode, conversation);
     }
     
-    @Deprecated
-    public static TaxonEditorInput NewInstanceFromTaxon(UUID taxonUuid){
-       ConversationHolder conversation = CdmStore.createConversation();
-       
-       Taxon taxon = (Taxon) CdmStore.getTaxonService().find(taxonUuid);
-       
-       if(taxon.isMisappliedName()){
-               logger.warn("Mispplied Name in Search Result");
-       }
-       
-       return getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
-    }
-    
     public static TaxonEditorInput NewInstanceFromTaxonBase(UUID taxonBaseUuid){
        ConversationHolder conversation = CdmStore.createConversation();
        
+       TaxonEditorInput input = null;
+       
        TaxonBase taxonBase = CdmStore.getTaxonService().find(taxonBaseUuid);
        
        if(taxonBase instanceof Taxon){
@@ -138,21 +107,27 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
                                        acceptedTaxa.add(relation.getToTaxon());
                                }
                        }
-                       return getInputForMultipleTaxa(conversation, acceptedTaxa);
+                       input =  getInputForMultipleTaxa(conversation, acceptedTaxa);
                        
                }else{
-                       return getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
+                       input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
                }
        }else if(taxonBase instanceof Synonym){
                Synonym synonym = (Synonym) taxonBase;
                
                Set<Taxon> taxa = synonym.getAcceptedTaxa();
-               return getInputForMultipleTaxa(conversation, taxa);
+               input = getInputForMultipleTaxa(conversation, taxa);
        }
-       return null;
+       
+       input.setInitiallySelectedTaxonBase(taxonBase);
+       
+       return input;
     }
-    
-    private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> taxonNodes){
+
+
+
+
+       private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> taxonNodes){
        if(taxonNodes.size() == 1){
                TaxonNode taxonNode = taxonNodes.iterator().next();
                return NewInstance(taxonNode.getUuid(), conversation);
@@ -326,4 +301,13 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
        public void saveState(IMemento memento) {
                TaxonEditorInputFactory.saveState(memento, this);
        }
+
+    
+    private void setInitiallySelectedTaxonBase(TaxonBase taxonBase) {
+               this.initiallySelectedTaxonBase = taxonBase;
+       }
+
+       public TaxonBase getInitiallySelectedTaxonBase() {
+               return initiallySelectedTaxonBase;
+       }
 }
index 87fcb31ea94a5ce000dcb66c76762b80bedf757f..8e3b2a7ae8eb5bedda5cf36ae395a9992cc33723 100644 (file)
@@ -59,6 +59,7 @@ import eu.etaxonomy.taxeditor.editor.IDropTargetable;
 import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
 import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
 import eu.etaxonomy.taxeditor.model.IPartChangeListener;\r
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;\r
 import eu.etaxonomy.taxeditor.model.TaxeditorPartService;\r
@@ -568,6 +569,16 @@ public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditor
 \r
        public AbstractGroupedContainer getSelectedObject(){\r
                if(selectedObject == null){\r
+                       TaxonEditorInput input = (TaxonEditorInput) editor.getEditorInput();\r
+                       \r
+                       if(input.getInitiallySelectedTaxonBase() != null){\r
+                               TaxonBase initiallySelectedTaxonBase = input.getInitiallySelectedTaxonBase();\r
+                               AbstractGroupedContainer container = getContainerForData(initiallySelectedTaxonBase);\r
+                               if(container != null){\r
+                                       return container;\r
+                               }\r
+                       }\r
+                       \r
                        return acceptedNameContainer;\r
                }else{\r
                        return selectedObject;\r
index 4029e4cc3be703e200c1e0544b798ae0b75bf514..360308232652a80d37905c0429b6dbd4921e5a24 100644 (file)
@@ -99,6 +99,6 @@ public class GroupBasionymContributionItem extends CompoundContributionItem {
                ILabelImageStrategy strategy = LabelImageProvider.getLabelStrategy(name);\r
                LabelImageProvider labelProvider = new LabelImageProvider(strategy);\r
                return (name.isGroupsBasionym() ? "Remove" : "Set")\r
-                       + " as " + labelProvider.getNameRelationTypeDescription(NameRelationshipType.BASIONYM()) + " for Group";\r
+                       + " as " + labelProvider.getNameRelationTypeDescription(NameRelationshipType.BASIONYM()) + " for Homotypic Group";\r
        }\r
 }
\ No newline at end of file
index 97846669cdcb966bf9e08513a6864894f5a3f6d5..3c36bd4b633f890dd0cc9dfea5e8073cc529b02e 100644 (file)
@@ -21,7 +21,6 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.forms.IFormPart;
 import org.eclipse.ui.forms.ManagedForm;
-import org.eclipse.ui.forms.events.IExpansionListener;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
index e002e615c1c32bec637f82bec345e08641db106b..88dccfd577176bf2ddcc927278546d1d7f967868 100644 (file)
@@ -36,6 +36,8 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchPart;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.DescriptionBase;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
@@ -172,15 +174,18 @@ public class DescriptiveViewPart extends AbstractCdmViewPart implements IPartCon
        public boolean postOperation(CdmBase objectAffectedByOperation) {
                boolean result = super.postOperation(objectAffectedByOperation);
                
-               StructuredSelection selection;
-               if(objectAffectedByOperation == null){
-                       selection = new StructuredSelection();
-               }else {
-                       selection = new StructuredSelection(objectAffectedByOperation);
+               if(objectAffectedByOperation != null){
+                       
+                       if(objectAffectedByOperation instanceof DescriptionElementBase){
+                               DescriptionElementBase descriptionElement = (DescriptionElementBase) objectAffectedByOperation;
+                               TaxonDescriptionFeature taxonDescriptionFeature = getTaxonDescriptionFeatureForDescriptionElement(descriptionElement);
+                               descriptionViewer.expandToLevel(taxonDescriptionFeature, 1);
+                       }
+                       
+                       StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
+                       descriptionViewer.setSelection(selection, true);
                }
-               descriptionViewer.setSelection(selection, true);
-               
-               
+
                return result;
        }
        
@@ -204,6 +209,10 @@ public class DescriptiveViewPart extends AbstractCdmViewPart implements IPartCon
        }
 
 
+       private TaxonDescriptionFeature getTaxonDescriptionFeatureForDescriptionElement(DescriptionElementBase descriptionElement){
+               Map<Feature, TaxonDescriptionFeature> map = descriptionFeatureCache.get(descriptionElement.getInDescription());
+               return map.get(descriptionElement.getFeature());
+       }
 
        public boolean onComplete() {
                // TODO Auto-generated method stub
index 154e32a474b6e434ae9be1975e38b1d9676a85a7..ff5083f079dfbec257edeffcb0775ccd051b61e7 100644 (file)
@@ -231,10 +231,42 @@ public class DetailsViewer extends AbstractCdmDataViewer {
        
        private void createNameSections(RootElement parent) {
                destroySections();
-               AbstractFormSection nameDetailSection = 
+               AbstractFormSection nonViralNameSection = 
                        formFactory.createCdmDetailSection(DetailType.NONVIRALNAME, getConversationHolder(), parent, this, Section.EXPANDED);
                
-               addPart(nameDetailSection);     
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               
+               AbstractFormSection referenceBaseDetailSection = 
+                        formFactory.createCdmDetailSection(DetailType.NOMENCLATURALREFERENCE, getConversationHolder(), parent, this, Section.TWISTIE);
+               
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               
+               AbstractFormSection nomenclaturalStatusSection = 
+                        formFactory.createEntityDetailSection(EntityDetailType.NOMENCLATURALSTATUS, getConversationHolder(), parent, Section.TWISTIE);
+               
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               
+               AbstractFormSection protologSection = 
+                        formFactory.createEntityDetailSection(EntityDetailType.PROTOLOG, getConversationHolder(), parent, Section.TWISTIE);
+               
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               
+               AbstractFormSection typeDesignationSection = 
+                       formFactory.createEntityDetailSection(EntityDetailType.TYPEDESIGNATION, getConversationHolder(), parent, Section.TWISTIE);
+               
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               
+               AbstractFormSection nameRelationshipSection = 
+                       formFactory.createEntityDetailSection(EntityDetailType.NAME_RELATIONSHIP, getConversationHolder(), parent, Section.TWISTIE);
+               
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               
+               addPart(nonViralNameSection);           
+               addPart(nomenclaturalStatusSection);
+               addPart(protologSection);               
+               addPart(referenceBaseDetailSection);
+               addPart(typeDesignationSection);
+               addPart(nameRelationshipSection);
        }
        
        private void createReferenceSections(RootElement parent) {
index 1074f79cbd28786d7e371d5dfe7c4feb4b5a41b7..dbdd7e43ba8b30be612c8388831a83484151abfd 100644 (file)
@@ -99,5 +99,11 @@ public abstract class AbstractCdmEntityWizardPage<T extends IdentifiableEntity>
                return conversation;
        }
        
+       @Override
+       public void dispose() {
+               super.dispose();
+               detailElement.removeElements();
+       }
+       
        public void update(CdmDataChangeMap changeEvents) {}
 }
index 1387e0952c7ad922d1db3abba89d26998a327c45..1a79e04343c55479746a65da386400366eb404ca 100644 (file)
@@ -76,9 +76,27 @@ public class TimePeriodElement extends AbstractCdmFormElement{
                        String freeText = text_freeText.getText();
                        
                        timePeriod = TimePeriod.parseString(freeText);
+                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
                }else if(eventSource == section_dateDetails){
                        timePeriod = section_dateDetails.getTimePeriod();
+                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
                }
+               
+               
+       }
+
+       /**
+        * @param timePeriod the timePeriod to set
+        */
+       public void setTimePeriod(TimePeriod timePeriod) {
+               this.timePeriod = timePeriod;
+       }
+
+       /**
+        * @return the timePeriod
+        */
+       public TimePeriod getTimePeriod() {
+               return timePeriod;
        }
        
 }
index 7eda3685dc596a8719123c800b2c525f72fab501..2fe52fd6d6efa8463fd77a03eb8fa0d3c879cebc 100644 (file)
@@ -131,21 +131,21 @@ public abstract class AbstractSelectionElement<T extends IdentifiableEntity> ext
                
                button_selection = formFactory.createButton(selectableComposite, null, SWT.PUSH);
                button_selection.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
-               button_selection.setToolTipText("Browse existing entities");
+               button_selection.setToolTipText("Browse existing");
                addControl(button_selection);
                button_selection.addSelectionListener(this);
                
                if(isEditable){
                        button_edit = formFactory.createButton(selectableComposite, null, SWT.PUSH);
                        button_edit.setImage(ImageResources.getImage(ImageResources.EDIT_ICON));
-                       button_edit.setToolTipText("Edit entity");
+                       button_edit.setToolTipText("Edit");
                        addControl(button_edit);
                }
                
                if(isDeletable){
                        button_remove = formFactory.createButton(selectableComposite, null, SWT.PUSH);
                        button_remove.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
-                       button_remove.setToolTipText("Remove entity");
+                       button_remove.setToolTipText("Remove");
                        addControl(button_remove);
                        button_remove.addSelectionListener(new DeleteListener(this));
                }
@@ -207,7 +207,8 @@ public abstract class AbstractSelectionElement<T extends IdentifiableEntity> ext
         * Updates this elements view
         */
        protected void updateElement(){
-               text.setText(CdmUtils.Nz(getTitle())); // title can be null
+               String title = CdmUtils.Nz(getTitle());
+               text.setText(title); // title can be null
                if(isEditable){
                        button_edit.setEnabled(entity != null);
                }
index d26ba87454c7ac9e657e52cf378de3c704b23bc3..f0f257f8d3df17a6c94b74aa575102510fba7e14 100644 (file)
@@ -85,6 +85,7 @@ public class EditFromSelectionWizard extends Wizard implements SelectionListener
         */
        @Override
        public boolean performFinish() {
+               page.dispose();
                return true;
        }
 
index 1a499b97cd46a7930bba46a86c6f6dd414cf63d5..d8e87f3d1b9d74381e29745d6165c3d4e20c28fb 100644 (file)
@@ -22,10 +22,9 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
-import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory.DetailType;
+import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.operations.ChangeDescriptionElementType;
-import eu.etaxonomy.taxeditor.operations.ChangeDescriptionElementType.DestinationType;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
@@ -43,12 +42,14 @@ public class DescriptionElementDetailSection extends
        public DescriptionElementDetailSection(CdmFormFactory cdmFormFactory, ConversationHolder conversation,
                        ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
                super(cdmFormFactory, conversation, parentElement, selectionProvider, style);
-               
-               setTextClient(createToolbar());
        }
        
        
        private Control createToolbar() {
+               if(! hasSpecificElement()){
+                       return null;
+               }
+               
                ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
                
                final String destinationString = (getEntity() instanceof TextData) ? "the specific element" : "free text";
@@ -61,9 +62,11 @@ public class DescriptionElementDetailSection extends
                         */
                        @Override
                        public void run() {
-                               boolean confirmed = EditorUtil.confirmDialog("Confirmation", "Do you really want to change to " + destinationString + "? Current data will be lost.");
+                               boolean confirmed = EditorUtil.confirmDialog("Confirmation", "Do you really want to change to "
+                                               + destinationString + "? Current data will be lost.");
                                if (confirmed) {
-                                       ChangeDescriptionElementType operation = new ChangeDescriptionElementType(label, getEntity(), EditorUtil.getDetailsView(), EditorUtil.getActiveMultiPageTaxonEditor().getUndoContext());
+                                       ChangeDescriptionElementType operation = new ChangeDescriptionElementType(label, 
+                                                       getEntity(), EditorUtil.getDetailsView(), EditorUtil.getActiveMultiPageTaxonEditor().getUndoContext());
                                        EditorUtil.executeOperation(operation);
                                }
                        }
@@ -99,5 +102,15 @@ public class DescriptionElementDetailSection extends
        @Override
        protected void setSectionTitle() {
                this.setText(getHeading() + ": " + getEntity().getFeature().getLabel(CdmStore.getDefaultLanguage()));
+               setTextClient(createToolbar());
+       }
+       
+       private boolean hasSpecificElement(){
+               return  getEntity().getFeature().isSupportsCategoricalData() 
+                               || getEntity().getFeature().isSupportsCommonTaxonName()
+                               || getEntity().getFeature().isSupportsDistribution()
+                               || getEntity().getFeature().isSupportsIndividualAssociation()
+                               || getEntity().getFeature().isSupportsQuantitativeData()
+                               || getEntity().getFeature().isSupportsTaxonInteraction();
        }
 }
index 7fd13f4eab614b68a42c15beec87a1c59396f9b9..692905f6ee0173920264397ae292dee6b300827f 100644 (file)
@@ -19,12 +19,13 @@ import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
 import eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.forms.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
 import eu.etaxonomy.taxeditor.forms.selection.AbstractSelectionElement;
+import eu.etaxonomy.taxeditor.model.AuthorHelper;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
 
@@ -51,13 +52,17 @@ public class AuthorshipDetailElement extends AbstractCdmDetailElement<NonViralNa
        protected void createControls(ICdmFormElement formElement, NonViralName entity, int style) {
                toggleable_cache = formFactory.createToggleableTextField(this, "Authorship Cache", entity.getAuthorshipCache(), entity.isProtectedAuthorshipCache(), style);
                
-               selection_combinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Combination Author Team", getAuthor(entity.getCombinationAuthorTeam()), style);
+               selection_combinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(),
+                               formElement, "Combination Author", AuthorHelper.getAuthor(entity.getCombinationAuthorTeam()), style);
                addElement(selection_combinationAuthorTeam);
-               selection_exCombinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Ex Combination Author Team",getAuthor(entity.getExCombinationAuthorTeam()), style);
+               selection_exCombinationAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), 
+                               formElement, "Ex Combination Author", AuthorHelper.getAuthor(entity.getExCombinationAuthorTeam()), style);
                addElement(selection_exCombinationAuthorTeam);
-               selection_basionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Basionym Author Team", getAuthor(entity.getBasionymAuthorTeam()), style);
+               selection_basionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), 
+                               formElement, "Basionym Author", AuthorHelper.getAuthor(entity.getBasionymAuthorTeam()), style);
                addElement(selection_basionymAuthorTeam);
-               selection_exBasionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), formElement, "Ex Basionym Author Team", getAuthor(entity.getExBasionymAuthorTeam()), style);
+               selection_exBasionymAuthorTeam = formFactory.createSelectionElement(SelectionType.AUTHOR_TEAM, getConversationHolder(), 
+                               formElement, "Ex Basionym Author", AuthorHelper.getAuthor(entity.getExBasionymAuthorTeam()), style);
                addElement(selection_exBasionymAuthorTeam);
        }
 
@@ -107,22 +112,4 @@ public class AuthorshipDetailElement extends AbstractCdmDetailElement<NonViralNa
                if(getParentElement() instanceof AbstractCdmDetailSection)
                        firePropertyChangeEvent(new CdmPropertyChangeEvent(getParentElement(), null));
        }
-       
-       private TeamOrPersonBase getAuthor(Object object){
-               if(object == null){
-                       return null;
-               }
-               Object deproxiedObject = HibernateProxyHelper.deproxy(object);
-               if(deproxiedObject instanceof Person){
-                       Person person = (Person) deproxiedObject;
-                       Team team = Team.NewInstance();
-                       team.addTeamMember(person);
-                       return team;
-               }
-               else if(deproxiedObject instanceof Team){
-                       return (Team) deproxiedObject;
-               }else{
-                       throw new IllegalArgumentException("Given object os of the wrong type");
-               }
-       }
 }
index 0c292f49d03d20bf1efc948a2eaf58a624fd4e06..356b76971f68a5cc2ad71ba4613e66c68ff08d3a 100644 (file)
@@ -21,7 +21,10 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.name.ZoologicalName;
 import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.Page;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.TermComboType;
 import eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent;
 import eu.etaxonomy.taxeditor.forms.CheckboxElement;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
@@ -31,7 +34,6 @@ import eu.etaxonomy.taxeditor.forms.IntegerTextWithLabelElement;
 import eu.etaxonomy.taxeditor.forms.SelectionArbitrator;
 import eu.etaxonomy.taxeditor.forms.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.TermComboType;
 import eu.etaxonomy.taxeditor.forms.term.AbstractTermComboElement;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
@@ -91,6 +93,9 @@ public class NameDetailElement extends AbstractCdmDetailElement<NonViralName> im
        protected void clearCheckRankWarnings() {
                if(getEntity().hasProblem(ParserProblem.CheckRank)){
                        getEntity().removeParsingProblem(ParserProblem.CheckRank);
+                       
+                       TaxonNameEditor nameEditor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
+                       nameEditor.getSelectedObject().getNameViewer().clearErrors();
                }
        }
 
@@ -172,6 +177,8 @@ public class NameDetailElement extends AbstractCdmDetailElement<NonViralName> im
                if(eventSource == combo_rank){
                        getEntity().setRank(combo_rank.getSelection());
                        clearCheckRankWarnings();       
+                       // TODO
+                       logger.warn("Refreshing the details view at this stage may lead to 'Widget is disposed' errors. They can be ignored.");
                        EditorUtil.refreshDetailsViewer();
                }               
                else if(eventSource == text_appendedPhrase){
@@ -198,8 +205,9 @@ public class NameDetailElement extends AbstractCdmDetailElement<NonViralName> im
                        ((BotanicalName)getEntity()).setAnamorphic(checkbox_anamorphic.getSelection());
                }
                
+               
                if(eventSource != toggleable_cache){
-                       toggleable_cache.setText(getEntity().getTitleCache());
+                       toggleable_cache.setText(getEntity().getNameCache());
                }
                
                // we have to notify the parent if this is embedded in the nonviral name section
index b30e052f5355dd97cdf451fcea53c7eccff2c838..85eaceeb8febb0e383631acec6f5f8ded6a9ce5f 100644 (file)
@@ -52,7 +52,7 @@ public class NonViralNameDetailElement extends AbstractCdmDetailElement<NonViral
        @Override
        protected void createControls(ICdmFormElement formElement,
                        NonViralName entity, int style) {
-               toggleable_cache = formFactory.createToggleableTextField(formElement, "Cache", entity.getTitleCache(), entity.isProtectedTitleCache(), style);
+               toggleable_cache = formFactory.createToggleableTextField(formElement, "Cache", entity.getTitleCache(), entity.isProtectedTitleCache() || entity.isProtectedFullTitleCache(), style);
                
                combo_nomenclaturalCode = (NomenclaturalCodeComboElement) formFactory.createEnumComboElement(EnumComboType.NOMENCLATURALCODE, formElement, style);
                combo_nomenclaturalCode.setSelection(entity.getNomenclaturalCode());
@@ -88,11 +88,13 @@ public class NonViralNameDetailElement extends AbstractCdmDetailElement<NonViral
        public void removeElements() {
                super.removeElements();
                if(section_name != null){
+                       section_name.removeElements();
                        removeControl(section_name);
                        section_name.dispose();
                        section_name = null;
                }
                if(section_author != null){
+                       section_author.removeElements();
                        removeControl(section_author);
                        section_author.dispose();
                        section_author = null;
@@ -106,6 +108,9 @@ public class NonViralNameDetailElement extends AbstractCdmDetailElement<NonViral
        public void handleEvent(Object eventSource) {
                if(eventSource == toggleable_cache){
                        getEntity().setTitleCache(toggleable_cache.getText(), toggleable_cache.getState());
+                       // we never want the fullTitleCache to be protected since we only use it for 
+                       // initiating the free text name editor
+                       getEntity().setProtectedFullTitleCache(false);
                        boolean irrelevant = toggleable_cache.getState();
                        List<Object> except = Arrays.asList(new Object[]{toggleable_cache});
                        setIrrelevant(irrelevant, except);
index df93aecc1b95414f02215f8460aef5d12ab1053a..90061da4d2ed87efefe02c5fd56c7b5c3d304c55 100644 (file)
@@ -31,6 +31,7 @@ public class NonViralNameWizardPage extends AbstractCdmEntityWizardPage<NonViral
 
        private static final Logger logger = Logger
                        .getLogger(NonViralNameWizardPage.class);
+       private NonViralNameDetailElement nameElement;
 
        public NonViralNameWizardPage(CdmFormFactory formFactory, ConversationHolder conversation,
                        NonViralName entity) {
@@ -40,8 +41,14 @@ public class NonViralNameWizardPage extends AbstractCdmEntityWizardPage<NonViral
        
        @Override
        public AbstractCdmDetailElement createElement(ICdmFormElement rootElement) {
-               NonViralNameDetailElement nameElement = (NonViralNameDetailElement) formFactory.createCdmDetailElement(DetailType.NONVIRALNAME, rootElement, SWT.NULL);
+               nameElement = (NonViralNameDetailElement) formFactory.createCdmDetailElement(DetailType.NONVIRALNAME, rootElement, SWT.NULL);
                nameElement.setEntity(entity);
                return nameElement;
        }
+       
+       @Override
+       public void dispose() {
+               nameElement.removeElements();
+               super.dispose();
+       }
 }
index 21e0261f3475870f43fc51fbe3775aa116b609d4..689e75f0bfd584bfa60c7d90e9b14bc4d59299e6 100644 (file)
@@ -21,6 +21,7 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
@@ -32,7 +33,7 @@ import eu.etaxonomy.taxeditor.section.ITaxonDetailSection;
  * @created Nov 5, 2009
  * @version 1.0
  */
-public class ProtologueSection extends AbstractEntityCollectionSection<TaxonNameDescription, DescriptionElementBase> implements ITaxonDetailSection{
+public class ProtologueSection extends AbstractEntityCollectionSection<TaxonNameBase, DescriptionElementBase> implements ITaxonDetailSection{
        
        private static final Logger logger = Logger
        .getLogger(ProtologueSection.class);
@@ -55,9 +56,9 @@ public class ProtologueSection extends AbstractEntityCollectionSection<TaxonName
 
        @Override
        public Collection<DescriptionElementBase> getCollection(
-                       TaxonNameDescription entity) {
+                       TaxonNameBase entity) {
                if(entity != null){
-                       return entity.getElements();
+                       return getTaxonNameDescription(entity).getElements();
                }
                return null;
        }
@@ -76,22 +77,26 @@ public class ProtologueSection extends AbstractEntityCollectionSection<TaxonName
 
        @Override
        public void addElement(DescriptionElementBase element) {
-               getEntity().addElement(element);
+               getTaxonNameDescription(getEntity()).addElement(element);
        }
 
        @Override
        public void removeElement(DescriptionElementBase element) {
-               getEntity().removeElement(element);
+               getTaxonNameDescription(getEntity()).removeElement(element);
        }
 
        public void setTaxon(TaxonBase taxon) {
                
                NonViralName name = (NonViralName) HibernateProxyHelper.deproxy(taxon.getName());
                
+               setEntity(name);
+       }
+       
+       private TaxonNameDescription getTaxonNameDescription(TaxonNameBase name){
                // FIXME does not handle multiple name descriptions at the moment
                if(name.getDescriptions().size() == 0){
                        name.addDescription(TaxonNameDescription.NewInstance(name));
                }
-               setEntity((TaxonNameDescription) name.getDescriptions().iterator().next());
+               return (TaxonNameDescription) name.getDescriptions().iterator().next();
        }
 }
index 042d16fa97fd9f047e4791467e232964081341ed..d332eadc30daac10e0c453e97546cf8a85dcb674 100644 (file)
@@ -31,6 +31,7 @@ import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
 import eu.etaxonomy.taxeditor.forms.selection.AbstractSelectionElement;
 import eu.etaxonomy.taxeditor.forms.selection.ReferenceSelectionElement;
 import eu.etaxonomy.taxeditor.forms.term.ReferenceTypeComboElement;
+import eu.etaxonomy.taxeditor.model.AuthorHelper;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
 
 /**
@@ -89,7 +90,7 @@ public class ReferenceBaseDetailElement extends AbstractCdmDetailElement<Referen
                text_title = formFactory.createTextWithLabelElement(formElement, "Title", entity.getTitle(), style);
                
                // author team
-               selection_authorTeam = formFactory.createSelectionElement(SelectionType.TEAM, getConversationHolder(), formElement, "Author Team", entity.getAuthorTeam(), style);
+               selection_authorTeam = formFactory.createSelectionElement(SelectionType.TEAM, getConversationHolder(), formElement, "Author", AuthorHelper.getAuthor(entity.getAuthorTeam()), style);
                
                ReferenceType referenceType = entity.getType();
                
@@ -279,7 +280,7 @@ public class ReferenceBaseDetailElement extends AbstractCdmDetailElement<Referen
                        getParentElement().refresh();
                }
                else if(eventSource == composite_timePeriod){
-                       // TODO
+                       getEntity().setDatePublished(composite_timePeriod.getTimePeriod());
                }
                // selections
                else if(eventSource == selection_authorTeam){
@@ -288,6 +289,9 @@ public class ReferenceBaseDetailElement extends AbstractCdmDetailElement<Referen
                else if(eventSource == selection_inReference){
                        getEntity().setInReference(selection_inReference.getSelection());
                }
+               else if(eventSource == selection_inSeries){
+                       getEntity().setInReference(selection_inSeries.getSelection());
+               }
                else if(eventSource == selection_institution){
                        getEntity().setInstitution(selection_institution.getSelection());
                }
index 7f28edccf716311ceacf800d67448c38321a17c0..d45cfc2e5401153088ea28ab81492d73665d7d96 100644 (file)
@@ -13,17 +13,21 @@ package eu.etaxonomy.taxeditor.section.taxon;
 import java.util.Arrays;
 
 import org.apache.log4j.Logger;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
+import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
 import eu.etaxonomy.taxeditor.forms.CheckboxElement;
 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
 import eu.etaxonomy.taxeditor.forms.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.forms.ToggleableTextElement;
-import eu.etaxonomy.taxeditor.forms.CdmFormFactory.SelectionType;
 import eu.etaxonomy.taxeditor.forms.selection.ReferenceSelectionElement;
 import eu.etaxonomy.taxeditor.section.AbstractCdmDetailElement;
+import eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection;
+import eu.etaxonomy.taxeditor.section.name.NameDetailElement;
+import eu.etaxonomy.taxeditor.section.name.NonViralNameDetailElement;
 
 /**
  * @author n.hoffmann
@@ -68,6 +72,23 @@ public class TaxonBaseDetailElement extends AbstractCdmDetailElement<TaxonBase>{
                setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[]{toggleable_cache}));
        }
        
+       @Override
+       public void propertyChange(PropertyChangeEvent event) {
+               Object eventSource = event.getSource();
+               if(eventSource instanceof ICdmFormElement){
+                       ICdmFormElement element = (ICdmFormElement) eventSource;
+                       ICdmFormElement parentElement = element.getParentElement();
+                       if(parentElement instanceof NonViralNameDetailElement){
+                               String title = getEntity().generateTitle();
+                               getEntity().setTitleCache(title);
+                               toggleable_cache.setText(title);
+                               if(getParentElement() instanceof AbstractCdmDetailSection)
+                                       ((AbstractCdmDetailSection)getParentElement()).updateTitle();
+                       }                               
+               }
+               
+               super.propertyChange(event);
+       }
        
        @Override
        public void handleEvent(Object eventSource) {
index b62b8f291a6aa057ce2e94dae0664ef0747a0517..829b4d6b1371b274c6af164a031491484cbe9b2b 100644 (file)
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.equinox.ds"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.ui.sdk"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.util"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
index e014bf3e238ee43de67ceb22638ae19a3af5ebcf..e82d78e2da2946e0280b99a4e45cd99470a68099 100644 (file)
          id="org.eclipse.equinox.p2.user.ui"
          version="0.0.0"/>
 
+   <includes
+         id="eu.etaxonomy.printpublisher.feature"
+         version="0.0.0"/>
+
    <plugin
          id="eu.etaxonomy.cdmlib"
          download-size="0"
index 768b2b0ed423267e7873fd304c9c53098c914b2e..349358bac874e9d8569c6cb3023d2700a12a1a93 100644 (file)
@@ -13,7 +13,7 @@
    </configIni>
 
    <launcherArgs>
-      <vmArgs>-Xmx256M</vmArgs>
+      <vmArgs>-Xmx256M -XX:MaxPermSize=128m</vmArgs>
       <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
    </launcherArgs>
 
index 2291b3be285ff5354f795cd26970db26144b7332..fdbd2ddd43830263d4afebd404bfb95261ad75d0 100644 (file)
@@ -17,7 +17,7 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.4.1",
  eu.etaxonomy.taxeditor.store;bundle-version="2.1.0",
  eu.etaxonomy.taxeditor.editor;bundle-version="2.1.0",
  org.eclipse.core.expressions,
- eu.etaxonomy.cdmlib;bundle-version="2.3.0"
+ eu.etaxonomy.cdmlib;bundle-version="2.4.0"
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.core.resources,
  org.eclipse.core.runtime,
@@ -25,4 +25,4 @@ Import-Package: org.eclipse.core.resources,
  org.eclipse.equinox.app,
  org.osgi.framework
 Bundle-Activator: eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
index b22685b18416fa8bb14c4c2ade2464ad8ca44538..e2a956475b1999013dfd7fa6ae34be73f4ef6133 100644 (file)
          </command>
          <command
                commandId="eu.etaxonomy.taxeditor.navigation.command.moveTaxon"
-               label="Move Taxon (with Subtree)"
+               label="Move Taxon (with child taxa)"
                style="push">
             <visibleWhen>
                <reference
          </separator>
          <command
                commandId="org.eclipse.ui.file.refresh"
-               label="Refresh Tree"
+               label="Refresh"
                style="push">
          </command>
       </menuContribution>
index 3753ece3bce5f32f3c107afd1d6cf39bd2a52572..eedb6670f080f2478726ba0a5faba8b30d8180d7 100644 (file)
@@ -40,6 +40,7 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
+import eu.etaxonomy.taxeditor.model.IContextListener;\r
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;\r
 import eu.etaxonomy.taxeditor.navigation.search.SearchBar.SearchOption;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -50,7 +51,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @version 1.0\r
  * @author n.hoffmann\r
  */\r
-public class SearchResultView extends ViewPart implements IConversationEnabled{\r
+public class SearchResultView extends ViewPart implements IConversationEnabled, IContextListener{\r
        private static final Logger logger = Logger\r
                        .getLogger(SearchResultView.class);\r
 \r
@@ -78,6 +79,8 @@ public class SearchResultView extends ViewPart implements IConversationEnabled{
                \r
                conversation = CdmStore.createConversation();\r
                \r
+               CdmStore.addContextListener(this);\r
+               \r
                GridLayout layout = new GridLayout();\r
                layout.marginWidth = 0;\r
                layout.marginHeight = 0;\r
@@ -170,6 +173,7 @@ public class SearchResultView extends ViewPart implements IConversationEnabled{
                \r
                searchJob = new SearchJob(Display.getCurrent(), configurator);\r
                searchJob.schedule();\r
+               \r
        }\r
        \r
        protected void displaySearchResult(List<IdentifiableEntity> result) {\r
@@ -216,6 +220,7 @@ public class SearchResultView extends ViewPart implements IConversationEnabled{
                conversation.close();\r
                if(searchJob != null)\r
                        searchJob.cancel();\r
+               CdmStore.removeContextListener(this);\r
        }\r
        \r
        /**\r
@@ -234,7 +239,7 @@ public class SearchResultView extends ViewPart implements IConversationEnabled{
                 * @param name\r
                 */\r
                public SearchJob(Display display, ITaxonServiceConfigurator configurator) {\r
-                       super("searchJob");\r
+                       super("Performing Search");\r
                        this.display = display;\r
                        this.configurator = configurator;\r
                }\r
@@ -244,20 +249,36 @@ public class SearchResultView extends ViewPart implements IConversationEnabled{
                 */\r
                @Override\r
                protected IStatus run(IProgressMonitor monitor) {\r
-//                     monitor.beginTask("Performing Search", 100);\r
-//                     monitor.worked(20);\r
+                       monitor.beginTask("", 100);\r
+                       monitor.worked(20);\r
                        \r
                        final List<IdentifiableEntity> searchResult = CdmStore.findTaxaAndNames(configurator);\r
-//                     monitor.worked(40);\r
-                       display.asyncExec(new Runnable() {\r
-                               \r
-                               public void run() {\r
-                                       displaySearchResult(searchResult);\r
-                               }\r
-                       });\r
-//                     monitor.done();\r
+                       monitor.worked(40);\r
+                       \r
+                       if(! monitor.isCanceled()){\r
+                               display.asyncExec(new Runnable() {\r
+                                       public void run() {\r
+                                               displaySearchResult(searchResult);\r
+                                       }\r
+                               });\r
+                       }else{\r
+                               display.asyncExec(new Runnable() {\r
+                                       public void run() {\r
+                                               status.setText("Cancelled");\r
+                                       }\r
+                               });\r
+                       }\r
+                       monitor.done();\r
                        return Status.OK_STATUS;\r
                }\r
                \r
        }\r
+\r
+       @Override\r
+       public boolean onContextEvent(EventType eventType) {\r
+               if(eventType.equals(EventType.STOP)){\r
+                       NavigationUtil.hideView(this);\r
+               }\r
+               return true;\r
+       }\r
 }\r
index fe673b3aa939ad834ea00dfa5455347ce9dde429..186460fca3e4493778847150647f097555b4163b 100644 (file)
@@ -33,7 +33,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredNameSelectionDialog;
 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonNodeSelectionDialog;
 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonSelectionDialog;
-import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonomicTreeSelectionDialog;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredClassificationSelectionDialog;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 import eu.etaxonomy.taxeditor.parser.ParseHandler;
 
@@ -49,9 +49,9 @@ public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener
        
        private static final String BUTTON_TEXT_BROWSE = "Browse";
        
-       private static final String ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY = "Taxonomic Tree must not be empty";
+       private static final String ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY = "Classification must not be empty";
 
-       private TaxonomicTree taxonomicTree;
+       private TaxonomicTree classification;
        
        private ParseHandler parseHandler;
        
@@ -93,9 +93,9 @@ public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener
                                
                                if(parentNode instanceof TaxonNode){
                                        parentTaxonNode = (TaxonNode) parentNode;
-                                       taxonomicTree = parentTaxonNode.getTaxonomicTree();
+                                       classification = parentTaxonNode.getTaxonomicTree();
                                }else{
-                                       taxonomicTree = (TaxonomicTree) parentNode;
+                                       classification = (TaxonomicTree) parentNode;
                                }
                        }
                }else{
@@ -115,13 +115,13 @@ public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener
                
                // taxonomic tree
                Label label_taxonomicTree = new Label(composite, SWT.NULL);
-               label_taxonomicTree.setText("Taxonomic Tree");
+               label_taxonomicTree.setText("Classification");
                
                text_taxonomicTree = new Text(composite, SWT.BORDER | SWT.SINGLE);
                text_taxonomicTree.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
                text_taxonomicTree.setEnabled(false);
                text_taxonomicTree.addModifyListener(this);
-               text_taxonomicTree.setText(taxonomicTree != null ? taxonomicTree.getTitleCache() : "");
+               text_taxonomicTree.setText(classification != null ? classification.getTitleCache() : "");
                
                Button button_taxonomicTree = new Button(composite, SWT.PUSH);
                button_taxonomicTree.setText(BUTTON_TEXT_BROWSE);
@@ -130,7 +130,7 @@ public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener
                
                // parental node
                Label label_parentTaxonNode = new Label(composite, SWT.NULL);
-               label_parentTaxonNode.setText("Parent Taxon Node");
+               label_parentTaxonNode.setText("Parent Taxon");
                
                text_parentTaxonNode = new Text(composite, SWT.BORDER | SWT.SINGLE);
                text_parentTaxonNode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
@@ -212,7 +212,7 @@ public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener
         * @return
         */
        public ITreeNode getParentNode() {
-               return parentTaxonNode != null ? parentTaxonNode : taxonomicTree;
+               return parentTaxonNode != null ? parentTaxonNode : classification;
        }
        
        public boolean openInEditor(){
@@ -234,9 +234,9 @@ public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener
                @Override
                public void widgetSelected(SelectionEvent e) {
                        super.widgetSelected(e);
-                       taxonomicTree = FilteredTaxonomicTreeSelectionDialog.selectTaxonomicTree(NavigationUtil.getShell(), null);
-                       if (taxonomicTree != null) {
-                               text_taxonomicTree.setText(taxonomicTree.getTitleCache());
+                       classification = FilteredClassificationSelectionDialog.selectTaxonomicTree(NavigationUtil.getShell(), null);
+                       if (classification != null) {
+                               text_taxonomicTree.setText(classification.getTitleCache());
                                text_parentTaxonNode.setText("");
                                parentTaxonNode = null;
                        }
index 2262a366c21db35cf66443a383d6e3b485663845..10bb0ed7a9bd5f777c6dab04bef5bbee1869d6fa 100644 (file)
@@ -13,6 +13,7 @@ Export-Package: dbscripts,
  eu.etaxonomy.taxeditor.datasource.view,
  eu.etaxonomy.taxeditor.datasource.wizard,
  eu.etaxonomy.taxeditor.dialogs,
+ eu.etaxonomy.taxeditor.featuretree,
  eu.etaxonomy.taxeditor.forms.section,
  eu.etaxonomy.taxeditor.forms.section.reference,
  eu.etaxonomy.taxeditor.handler,
@@ -36,11 +37,10 @@ Export-Package: dbscripts,
  eu.etaxonomy.taxeditor.user.wizard
 Require-Bundle: org.eclipse.osgi;bundle-version="3.5.2",
  org.eclipse.ui;bundle-version="3.5.1",
- eu.etaxonomy.cdmlib;bundle-version="2.3.0",
+ eu.etaxonomy.cdmlib;bundle-version="2.4.0",
  org.eclipse.jface.text,
  org.eclipse.ui.forms,
  org.eclipse.core.runtime;bundle-version="3.5.0"
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Import-Package: junit.framework,
  org.eclipse.core.commands,
  org.eclipse.core.commands.operations,
@@ -59,3 +59,4 @@ Import-Package: junit.framework,
  org.junit,
  org.osgi.framework
 Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
index 43ebed11e8a3315116743f90122b458ca10f5d05..dbf2adb21d106e5cf9670bbbb02c4b9cb5624274 100644 (file)
             id="eu.etaxonomy.taxeditor.preferences.preservationMethod"
             name="Preservation Method">
       </page>
+      <page
+            category="eu.etaxonomy.taxeditor.preferences.general"
+            class="eu.etaxonomy.taxeditor.preference.FeatureTreePreferences"
+            id="eu.etaxonomy.taxeditor.preferences.featureTree"
+            name="Feature Tree">
+      </page>
    </extension>
    <extension
          point="org.eclipse.ui.views">
                categoryId="eu.etaxonomy.taxeditor.preferences.themeElementCategory.nameEditor"
                id="eu.etaxonomy.taxeditor.preferences.colorDefinition.nameEditor.colorContainerSelectedFocus"
                label="Container Selected Focus"
-               value="181,213,255">
+               value="232,242,254">
          </colorDefinition>
          <colorDefinition
                categoryId="eu.etaxonomy.taxeditor.preferences.themeElementCategory.nameEditor"
index 73f11a4329532acf9ffbcda4dc41af8880a2f0ec..0d6ea5aca987120f9a6440ab89a330448e742f6c 100644 (file)
@@ -115,7 +115,7 @@ public class CdmDataSourceView extends ViewPart implements IContextListener{
        private void createColumns(TableViewer viewer) {
                Table table = viewer.getTable();
                String[] titles = {"Connected", "Name", "Server", "Type", "Database", "Nomenclatural Code", "Created", "CDM Version", "Notes"};
-               int[] bounds = { 20, 100, 100, 100 , 100, 150, 100, 100, 100};
+               int[] bounds = { 24, 200, 100, 100 , 200, 120, 100, 100, 100};
 
                for (int i = 0; i < titles.length; i++) {
                        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java
new file mode 100644 (file)
index 0000000..c433ca2
--- /dev/null
@@ -0,0 +1,56 @@
+// $Id$
+/**
+* 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.featuretree;
+
+import java.util.List;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.wizard.Wizard;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class AvailableFeaturesWizard extends Wizard {
+       private static final Logger logger = Logger
+                       .getLogger(AvailableFeaturesWizard.class);
+       
+       private FeatureTree featureTree;
+
+       private AvailableFeaturesWizardPage page;
+
+       private Set<Feature> additionalFeatures;
+       
+       public AvailableFeaturesWizard(FeatureTree featureTree){
+               this.featureTree = featureTree;
+       }
+       
+       @Override
+       public void addPages() {
+               page = new AvailableFeaturesWizardPage(featureTree);
+               addPage(page);
+       }
+       
+       @Override
+       public boolean performFinish() {
+               additionalFeatures = page.getSelectedFeatures();
+               return additionalFeatures.size() > 0;
+       }
+
+       public Set<Feature> getAdditionalFeatures() {
+               return additionalFeatures;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java
new file mode 100644 (file)
index 0000000..88fddbd
--- /dev/null
@@ -0,0 +1,78 @@
+// $Id$
+/**
+* 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.featuretree;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.preference.menu.DefinedTermBaseContentProvider;
+import eu.etaxonomy.taxeditor.preference.menu.DefinedTermBaseLabelProvider;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class AvailableFeaturesWizardPage extends WizardPage {
+
+
+       private static final Logger logger = Logger
+                       .getLogger(AvailableFeaturesWizardPage.class);
+       private CheckboxTableViewer viewer;
+
+       protected AvailableFeaturesWizardPage(FeatureTree featureTree) {
+               super("AvailableFeaturesWizardPage");
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NULL);
+               composite.setLayout(new GridLayout());
+               
+               viewer = CheckboxTableViewer.newCheckList(composite, SWT.NULL);
+               
+               viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               
+               viewer.setContentProvider(new DefinedTermBaseContentProvider());                
+               viewer.setLabelProvider(new DefinedTermBaseLabelProvider());
+               
+               viewer.setInput(PreferencesUtil.getPreferredFeatures());
+               
+               setControl(composite);
+       }
+
+       public Set<Feature> getSelectedFeatures() {
+               
+               Object[] checkedElements = viewer.getCheckedElements();
+               
+               Set<Feature> features = new HashSet<Feature>(checkedElements.length);
+               
+               for(Object element : checkedElements){
+                       features.add((Feature) element);
+               }
+               
+               return features;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/EditFeatureTreeWizardPage.java
new file mode 100644 (file)
index 0000000..44f5dda
--- /dev/null
@@ -0,0 +1,302 @@
+// $Id$
+/**
+ * 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.featuretree;
+
+import java.util.Collection;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class EditFeatureTreeWizardPage extends WizardPage implements ModifyListener, ISelectionChangedListener{
+
+       private static final Logger logger = Logger
+                       .getLogger(EditFeatureTreeWizardPage.class);
+       private TreeViewer viewer;
+       private Label label_title;
+       private Text text_title;
+       private Button button_add;
+       private Button button_remove;
+       private Label label_treeInfo;
+       private FeatureTree featureTree;
+
+       protected EditFeatureTreeWizardPage(String pageName) {
+               super(pageName);
+               setMessage("Edit the Feature Tree.");
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
+        * .Composite)
+        */
+       @Override
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NULL);
+               composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               composite.setLayout(new GridLayout());
+
+               Composite composite_treeTitle = new Composite(composite, SWT.NULL);
+               composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+                               false));
+               composite_treeTitle.setLayout(new GridLayout(2, false));
+
+               label_title = new Label(composite_treeTitle, SWT.NULL);
+               label_title.setText("Title");
+
+               text_title = new Text(composite_treeTitle, SWT.NULL);
+               text_title.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+               Composite composite_treeContent = new Composite(composite, SWT.NULL);
+               composite_treeContent.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+                               true, true));
+               composite_treeContent.setLayout(new GridLayout(2, false));
+
+               viewer = new TreeViewer(composite_treeContent);
+               viewer.getControl().setLayoutData(
+                               new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               Composite composite_buttons = new Composite(composite_treeContent,
+                               SWT.NULL);
+               composite_buttons.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false,
+                               false));
+               composite_buttons.setLayout(new GridLayout());
+
+               button_add = new Button(composite_buttons, SWT.PUSH);
+               button_add.setText("Add");
+               button_add.setToolTipText("Add a feature to this feature treee.");
+               button_remove = new Button(composite_buttons, SWT.PUSH);
+               button_remove.setText("Remove");
+               button_remove
+                               .setToolTipText("Remove a feature from this feature tree.");
+
+               label_treeInfo = new Label(composite, SWT.NULL);
+               label_treeInfo.setText("Order and nesting of feature nodes may be changed through drag and drop.");
+
+               viewer.setContentProvider(new FeatureTreeContentProvider());
+               viewer.setLabelProvider(new FeatureTreeLabelProvider());
+
+               
+               
+               int ops = DND.DROP_COPY | DND.DROP_MOVE;
+               Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
+                               .getInstance() };
+               viewer.addDragSupport(ops, transfers, new FeatureNodeDragListener(
+                               viewer));
+               viewer.addDropSupport(ops, transfers,
+                               new FeatureNodeDropAdapter(viewer));
+
+               viewer.addSelectionChangedListener(this);
+               
+               button_add.addSelectionListener(new AddButtonListener());
+               button_remove.addSelectionListener(new RemoveSelectionListener());
+               
+               setControl(composite);
+       }
+
+       public void setSelectedTree(FeatureTree featureTree) {
+               this.featureTree = featureTree;
+               viewer.setInput(featureTree);
+               
+               text_title.removeModifyListener(this);
+               text_title.setText(featureTree.getTitleCache());
+               text_title.addModifyListener(this);
+       }
+
+       @Override
+       public void modifyText(ModifyEvent e) {
+               featureTree.setTitleCache(text_title.getText(), true);
+       }
+       
+       @Override
+       public void selectionChanged(SelectionChangedEvent event) {
+               IStructuredSelection selection = (IStructuredSelection) event.getSelection(); 
+               
+               button_add.setEnabled(selection.size() <= 1);
+               button_remove.setEnabled(selection.size() > 0);
+       }
+       
+       private class AddButtonListener extends SelectionAdapter{
+               @Override
+               public void widgetSelected(SelectionEvent e) {
+                       AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(featureTree);
+                       WizardDialog dialog = new WizardDialog(getShell(), wizard);
+                       
+                       if(dialog.open() == IStatus.OK){
+                               IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+                               FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection.getFirstElement() : ((FeatureTree) viewer.getInput()).getRoot());
+                               Collection<Feature> additionalFeatures = wizard.getAdditionalFeatures();
+                               for(Feature feature : additionalFeatures){
+                                       FeatureNode child = FeatureNode.NewInstance(feature);
+                                       CdmStore.getFeatureNodeService().saveOrUpdate(child);
+                                       parent.addChild(child);
+                               }
+                               viewer.refresh();
+                       }
+               }
+       }
+       
+       
+       private class RemoveSelectionListener extends SelectionAdapter{
+               @Override
+               public void widgetSelected(SelectionEvent e) {
+                       IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+                       
+                       for(Object selectedObject : selection.toArray()){
+                               FeatureNode featureNode = (FeatureNode) selectedObject;
+                               FeatureNode parent = featureNode.getParent();
+                               parent.removeChild(featureNode);
+                       }
+               }
+       }
+       
+       private class FeatureNodeDragListener extends DragSourceAdapter {
+
+               private TreeViewer viewer;
+
+               public FeatureNodeDragListener(TreeViewer viewer) {
+                       this.viewer = viewer;
+               }
+
+               /**
+                * Method declared on DragSourceListener
+                */
+               public void dragFinished(DragSourceEvent event) {
+                       if (!event.doit)
+                               return;
+                       // if the featureNode was moved, remove it from the source viewer
+                       if (event.detail == DND.DROP_MOVE) {
+                               IStructuredSelection selection = (IStructuredSelection) viewer
+                                               .getSelection();
+                               viewer.refresh();
+                       }
+               }
+
+               /**
+                * Method declared on DragSourceListener
+                */
+               public void dragSetData(DragSourceEvent event) {
+                       IStructuredSelection selection = (IStructuredSelection) viewer
+                                       .getSelection();
+                       FeatureNode[] featureNodes = (FeatureNode[]) selection.toList().toArray(new FeatureNode[selection.size()]);
+                       if (FeatureNodeTransfer.getInstance().isSupportedType(
+                                       event.dataType)) {
+                               event.data = featureNodes;
+                       }
+               }
+
+               /**
+                * Method declared on DragSourceListener
+                */
+               public void dragStart(DragSourceEvent event) {
+                       event.doit = !viewer.getSelection().isEmpty();
+               }
+
+       }
+
+       private class FeatureNodeDropAdapter extends ViewerDropAdapter {
+
+               protected FeatureNodeDropAdapter(Viewer viewer) {
+                       super(viewer);
+               }
+
+               @Override
+               public boolean performDrop(Object data) {
+                       FeatureNode target = (FeatureNode) getCurrentTarget();
+                       int position = 0;
+                       
+                       if (target != null) {
+                               int location = getCurrentLocation();
+                               FeatureNode parent = target.getParent();
+                               if (location == LOCATION_BEFORE){
+                                       position = parent.getIndex(target) - 1; 
+                                       target = parent;
+                               }
+                                               
+                               if(location == LOCATION_AFTER) {
+                                       position = parent.getIndex(target); 
+                                       target = parent;
+                               }
+                       }
+                       
+                       // set target to root node if there is no target specified
+                       if (target == null) {
+                               FeatureTree featureTree = (FeatureTree) getViewer().getInput();
+                               target = featureTree.getRoot();
+                       }
+                       
+                       FeatureNode[] droppedNodes = (FeatureNode[]) data;
+                       TreeViewer viewer = (TreeViewer) getViewer();
+
+                       // cannot drop a feature node onto itself
+                       for (FeatureNode droppedNode : droppedNodes) {
+                               if (droppedNode == null){
+                                       StoreUtil.warningDialog("Operation not supported yet", "We are currently unable to change the order of freshly created " +
+                                                       "feature trees nodes. Please close and reopen the dialog to change the order of features.");
+                                       return false;
+                               }
+                               if (droppedNode.equals(target)) {
+                                       return false;
+                               }
+                       }
+                       for (FeatureNode droppedNode : droppedNodes) {
+                               target.addChild(droppedNode, position);
+                               viewer.add(target, droppedNode);
+                               viewer.reveal(droppedNode);
+                       }
+                       return true;
+               }
+
+               @Override
+               public boolean validateDrop(Object target, int operation,
+                               TransferData transferData) {
+                       return FeatureNodeTransfer.getInstance().isSupportedType(
+                                       transferData);
+               }
+
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureNodeTransfer.java
new file mode 100644 (file)
index 0000000..f914bcc
--- /dev/null
@@ -0,0 +1,140 @@
+// $Id$
+/**
+ * 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.featuretree;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.TransferData;
+
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureNodeTransfer extends ByteArrayTransfer {
+       private static final Logger logger = Logger
+                       .getLogger(FeatureNodeTransfer.class);
+
+       private static FeatureNodeTransfer instance = new FeatureNodeTransfer();
+       private static final String TYPE_NAME = "featureNode-transfer-format";
+       private static final int TYPEID = registerType(TYPE_NAME);
+
+       public static synchronized FeatureNodeTransfer getInstance() {
+               return instance;
+       }
+
+       private FeatureNodeTransfer() {
+               
+       }
+
+       @Override
+       protected int[] getTypeIds() {
+               return new int[] { TYPEID };
+       }
+
+       @Override
+       protected String[] getTypeNames() {
+               return new String[] { TYPE_NAME };
+       }
+
+       /*
+        * Method declared on Transfer.
+        */
+       protected void javaToNative(Object object, TransferData transferData) {
+               byte[] bytes = toByteArray((FeatureNode[]) object);
+               if (bytes != null)
+                       super.javaToNative(bytes, transferData);
+       }
+
+       /*
+        * Method declared on Transfer.
+        */
+       protected Object nativeToJava(TransferData transferData) {
+               byte[] bytes = (byte[]) super.nativeToJava(transferData);
+               return fromByteArray(bytes);
+       }
+
+       protected byte[] toByteArray(FeatureNode[] featureNodes) {
+               /**
+                * Transfer data is an array of gadgets. Serialized version is: (int)
+                * number of gadgets (Gadget) gadget 1 (Gadget) gadget 2 ... repeat for
+                * each subsequent gadget see writeGadget for the (Gadget) format.
+                */
+               ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+               DataOutputStream out = new DataOutputStream(byteOut);
+
+               byte[] bytes = null;
+
+               try {
+                       
+                       for(FeatureNode featureNode : featureNodes){
+                               writeFeatureNode(featureNode, out);
+                       }
+                       out.close();
+                       bytes = byteOut.toByteArray();
+               } catch (IOException e) {
+                       // when in doubt send nothing
+               }
+               return bytes;
+       }
+
+       protected FeatureNode[] fromByteArray(byte[] bytes) {
+               DataInputStream in = new DataInputStream(
+                               new ByteArrayInputStream(bytes));
+
+               try {
+                       List<FeatureNode> featureNodes = new ArrayList<FeatureNode>();
+                       
+                       try{
+                               while(true){
+                                       featureNodes.add(readFeatureNode(in));
+                               }
+                       }catch(EOFException e){
+                               return featureNodes.toArray(new FeatureNode[]{});
+                       }
+               } catch (IOException e) {
+                       return null;
+               }
+       }
+
+       /**
+        * Reads and returns a single featureNode from the given stream.
+        */
+       private FeatureNode readFeatureNode(DataInputStream dataIn) throws IOException {
+               
+               UUID uuid = UUID.fromString(dataIn.readUTF());
+               
+               FeatureNode featureNode = CdmStore.getFeatureNodeService().load(uuid);
+               
+               return featureNode;
+       }
+
+       /**
+        * Writes the given featureNode to the stream.
+        */
+       private void writeFeatureNode(FeatureNode featureNode,
+                       DataOutputStream dataOut) throws IOException {
+               dataOut.writeUTF(featureNode.getUuid().toString());
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeContentProvider.java
new file mode 100644 (file)
index 0000000..fe7b8d2
--- /dev/null
@@ -0,0 +1,82 @@
+// $Id$
+/**
+* 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.featuretree;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreeContentProvider implements ITreeContentProvider {
+       private static final Logger logger = Logger
+                       .getLogger(FeatureTreeContentProvider.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+        */
+       @Override
+       public void dispose() {
+               // TODO Auto-generated method stub
+
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+        */
+       @Override
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               // TODO Auto-generated method stub
+
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+        */
+       @Override
+       public Object[] getElements(Object inputElement) {
+               return this.getChildren(inputElement);
+       }
+
+       @Override
+       public Object[] getChildren(Object parentElement) {
+               if(parentElement instanceof FeatureTree){
+                       List<FeatureNode> children = ((FeatureTree) parentElement).getRootChildren();
+                       return children.toArray();
+               }else if(parentElement instanceof FeatureNode){
+                       List<FeatureNode> children = ((FeatureNode) parentElement).getChildren();
+                       return children.toArray();
+               }else if(parentElement instanceof List){
+                       return ((List) parentElement).toArray();
+               }else{
+                       return new Object[]{};
+               }
+       }
+
+       @Override
+       public Object getParent(Object element) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public boolean hasChildren(Object element) {
+               return getChildren(element).length != 0;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeEditorWizard.java
new file mode 100644 (file)
index 0000000..0497be4
--- /dev/null
@@ -0,0 +1,79 @@
+// $Id$
+/**
+* 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.featuretree;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.wizard.Wizard;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreeEditorWizard extends Wizard {
+
+       private static final Logger logger = Logger
+                       .getLogger(FeatureTreeEditorWizard.class);
+       
+       private SelectFeatureTreeWizardPage selectFeatureTreePage;
+       private EditFeatureTreeWizardPage editFeatureTreePage;
+       
+       private FeatureTree selectedFeatureTree;
+
+       private ConversationHolder conversation;
+       
+       public FeatureTreeEditorWizard(){
+               conversation = CdmStore.createConversation();
+               setWindowTitle("Feature Tree Editor");
+       }
+       
+       public void addPages() {
+               selectFeatureTreePage = new SelectFeatureTreeWizardPage("SELECT");
+               addPage(selectFeatureTreePage);
+               
+               editFeatureTreePage = new EditFeatureTreeWizardPage("EDIT");
+               addPage(editFeatureTreePage);
+       }
+
+
+
+       @Override
+       public boolean performFinish() {
+               try{
+                       CdmStore.getFeatureTreeService().saveOrUpdate(selectedFeatureTree);
+                       conversation.commit();
+               }finally{
+                       conversation.close();
+               }
+               
+               return true;
+       }
+
+       /**
+        * @param selectedFeatureTree the selectedFeatureTree to set
+        */
+       public void setSelectedFeatureTree(FeatureTree selectedFeatureTree) {
+               this.selectedFeatureTree = selectedFeatureTree;
+               editFeatureTreePage.setSelectedTree(selectedFeatureTree);
+       }
+
+       /**
+        * @return the selectedFeatureTree
+        */
+       public FeatureTree getSelectedFeatureTree() {
+               return selectedFeatureTree;
+       }
+       
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/FeatureTreeLabelProvider.java
new file mode 100644 (file)
index 0000000..10bc2ae
--- /dev/null
@@ -0,0 +1,48 @@
+// $Id$
+/**
+* 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.featuretree;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.LabelProvider;
+
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreeLabelProvider extends LabelProvider {
+       private static final Logger logger = Logger
+                       .getLogger(FeatureTreeLabelProvider.class);
+       
+       private Feature feature;
+               
+       @Override
+       public String getText(Object element) {
+               if(element instanceof FeatureTree){
+                       return ((FeatureTree) element).getTitleCache();
+               }else if(element instanceof FeatureNode){
+                       feature = ((FeatureNode) element).getFeature();
+                       
+                       return feature.getTitleCache();
+                       
+               }else{
+                       return "No label provided";
+               }
+       }
+       
+       public Feature getFeature(){
+               return feature;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java
new file mode 100644 (file)
index 0000000..45f4484
--- /dev/null
@@ -0,0 +1,158 @@
+// $Id$
+/**
+* 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.featuretree;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class SelectFeatureTreeWizardPage extends WizardPage implements ISelectionChangedListener, ModifyListener{
+
+
+       private static final Logger logger = Logger
+                       .getLogger(SelectFeatureTreeWizardPage.class);
+       private ListViewer viewer;
+       private Text text_title;
+       private Button button_add;
+       private Button button_remove;
+
+       protected SelectFeatureTreeWizardPage(String pageName) {
+               super(pageName);
+               setMessage("Select a Feature Tree or create a new one.");
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NULL);
+               
+               composite.setLayout(new GridLayout());
+               
+               Composite composite_treeContent = new Composite(composite, SWT.NULL);
+               composite_treeContent.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+                               true, true));
+               composite_treeContent.setLayout(new GridLayout(2, false));
+               
+               viewer = new ListViewer(composite_treeContent);
+               viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+       
+               button_remove = new Button(composite_treeContent, SWT.PUSH);
+               button_remove.setText("Remove");
+               button_remove.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false));
+               
+               Composite composite_treeTitle = new Composite(composite, SWT.NULL);
+               composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+                               false));
+               composite_treeTitle.setLayout(new GridLayout(3, false));
+
+               
+               
+               Label label_title = new Label(composite_treeTitle, SWT.NULL);
+               label_title.setText("New Feature Tree");
+
+               text_title = new Text(composite_treeTitle, SWT.NULL);
+               text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               
+               button_add = new Button(composite_treeTitle, SWT.PUSH);
+               button_add.setText("Add");
+                               
+               viewer.setContentProvider(new FeatureTreeContentProvider());
+               viewer.setLabelProvider(new FeatureTreeLabelProvider());
+               
+               viewer.addSelectionChangedListener(this);
+               
+               text_title.addModifyListener(this);
+               button_add.addSelectionListener(new AddButtonSelectionListener());
+               button_remove.addSelectionListener(new RemoveButtonSelectionListener());
+               
+               List<FeatureTree> input = CdmStore.getFeatureTreeService().list(FeatureTree.class, null, null, null, null);
+               
+               viewer.setInput(input);
+               modifyText(null);
+               setControl(composite);
+       }
+
+       @Override
+       public void selectionChanged(SelectionChangedEvent event) {
+               IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+                       
+               if(selection.size() == 1){
+                       FeatureTree selectedFeatureTree = (FeatureTree) selection.getFirstElement();
+                       ((FeatureTreeEditorWizard) getWizard()).setSelectedFeatureTree(selectedFeatureTree);
+                       
+               }
+               
+               setPageComplete(true);
+               
+               button_remove.setEnabled(selection.size() >= 1);
+       }
+
+       @Override
+       public boolean canFlipToNextPage() {
+               return ((IStructuredSelection) viewer.getSelection()).size() == 1;
+       }
+       
+       @Override
+       public void modifyText(ModifyEvent e) {
+               button_add.setEnabled(! text_title.getText().isEmpty());
+       }
+       
+       private class AddButtonSelectionListener extends SelectionAdapter {
+               public void widgetSelected(SelectionEvent e) {
+                       FeatureTree featureTree = FeatureTree.NewInstance();
+                       featureTree.setTitleCache(text_title.getText(), true);
+                       
+                       viewer.add(featureTree);
+                       CdmStore.getFeatureTreeService().saveOrUpdate(featureTree);
+                       text_title.setText("");
+                       viewer.setSelection(new StructuredSelection(featureTree));
+                       
+               }
+       }
+       
+       private class RemoveButtonSelectionListener extends SelectionAdapter {
+               public void widgetSelected(SelectionEvent e) {
+                       IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+                       for(Object element : selection.toArray()){
+                               viewer.remove(element);
+                               CdmStore.getFeatureTreeService().delete((FeatureTree) element);
+                               viewer.setSelection(new StructuredSelection(new Object[0]));
+                       }
+               }
+       }
+}
index 91853ddc403898bc0b54be24143454bf881d3601..b4caae61a2faf9b8d0262c67c3b7af709d1f28a9 100644 (file)
@@ -3,13 +3,14 @@
  */\r
 package eu.etaxonomy.taxeditor.labels;\r
 \r
+import java.util.List;\r
 import java.util.SortedSet;\r
 \r
 import org.eclipse.swt.graphics.Image;\r
 \r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
 import eu.etaxonomy.taxeditor.model.ImageResources;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -21,8 +22,8 @@ public class DefaultLabelStrategy implements ILabelImageStrategy {
         * @see eu.etaxonomy.taxeditor.editor.labels.IEditorLabelStrategy#getNameRelationTypeLabel(eu.etaxonomy.cdm.model.name.NameRelationshipType)\r
         */\r
        public String getNameRelationTypeLabel(NameRelationshipType type) {\r
-               SortedSet<NameRelationshipType> vocab = \r
-                       VocabularyStore.getNameRelationshipTypes();\r
+               List<NameRelationshipType> vocab = \r
+                       TermStore.getNameRelationshipTypes();\r
        \r
                for (NameRelationshipType type1 : vocab) {\r
                        if (type1.equals(type)) {\r
@@ -37,8 +38,8 @@ public class DefaultLabelStrategy implements ILabelImageStrategy {
         */\r
        public String getNameRelationTypeInverseLabel(NameRelationshipType type) {\r
                \r
-               SortedSet<NameRelationshipType> vocab = \r
-                       VocabularyStore.getNameRelationshipTypes();\r
+               List<NameRelationshipType> vocab = \r
+                       TermStore.getNameRelationshipTypes();\r
 \r
                for (NameRelationshipType type1 : vocab) {\r
                        if (type1.equals(type)) {\r
index 105237af10a10d170cccef4d98f49f0c4d3635e7..01f17325db9072d08bf5744e14d5d05b2637cee4 100644 (file)
@@ -93,6 +93,10 @@ public abstract class AbstractUtility {
                }
        }
        
+       public static void hideView(IViewPart view){
+               PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(view);
+       }
+       
        public static IViewPart getView(String id, boolean restore){
                IViewReference[] references = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences();
                for (IViewReference reference : references){
@@ -276,7 +280,7 @@ public abstract class AbstractUtility {
                
        }
        
-       protected static IProgressMonitor getMonitor() {
+       public static IProgressMonitor getMonitor() {
                statusLineManager.setCancelEnabled(false);
                return statusLineManager.getProgressMonitor();
        }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java
new file mode 100644 (file)
index 0000000..948dd62
--- /dev/null
@@ -0,0 +1,44 @@
+// $Id$
+/**
+* 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.model;
+
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.Team;
+
+/**
+ * @author n.hoffmann
+ * @created Sep 8, 2010
+ * @version 1.0
+ */
+public class AuthorHelper {
+       private static final Logger logger = Logger.getLogger(AuthorHelper.class);
+       
+       public static Team getAuthor(Object object){
+               if(object == null){
+                       return null;
+               }
+               Object deproxiedObject = HibernateProxyHelper.deproxy(object);
+               if(deproxiedObject instanceof Person){
+                       Person person = (Person) deproxiedObject;
+                       Team team = Team.NewInstance();
+                       team.addTeamMember(person);
+                       return team;
+               }
+               else if(deproxiedObject instanceof Team){
+                       return (Team) deproxiedObject;
+               }else{
+                       throw new IllegalArgumentException("Given object os of the wrong type");
+               }
+       }
+}
index 912f7bb4b170dd3a7a67c78ac39367e02de51454..bbe94461491fac8f0dffee6beb83d934905c6259 100644 (file)
@@ -11,6 +11,7 @@
 package eu.etaxonomy.taxeditor.model;
 
 import org.apache.log4j.Logger;
+import org.hibernate.LazyInitializationException;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
@@ -141,28 +142,31 @@ public class DescriptionHelper {
                if (element instanceof IdentifiableEntity) {
                        try{
                                return ((IdentifiableEntity) element).getTitleCache();
-                       }catch(Exception e){
-                               // TODO we have to make sure that we will never get here. 
-                               // It is not clear at the moment how we can accomplish that.
-                               String result = "Error initializing title cache for object";
+                       }catch(LazyInitializationException e){
+                               String result = "No Session to initialize title cache for IdentifiableEntity";
                                logger.error(result);
-                               return "TODO" + result;
+                               return "TODO" + result;
                        }
                }
                if (element instanceof OriginalSourceBase) {
-                       OriginalSourceBase originalSource = (OriginalSourceBase) element;
-//                     ReferenceBase citation = HibernateProxyHelper.deproxy(originalSource.getCitation(), ReferenceBase.class);
-                       ISourceable sourcedObject = originalSource.getSourcedObj();
-                       String sourceObjectTitle = "";
-                       if(sourcedObject instanceof IIdentifiableEntity){
-                               sourceObjectTitle = ((IdentifiableEntity) sourcedObject).getTitleCache();
-                       }else if(sourcedObject instanceof DescriptionElementBase){
-                               sourceObjectTitle = "Element for description: " + ((DescriptionElementBase) sourcedObject).getInDescription().getTitleCache();
-                       }else{
-                               throw new IllegalStateException("Unknown ISourceable object for given OriginalSourceBase");
+                       try{
+                               OriginalSourceBase originalSource = (OriginalSourceBase) element;
+                               ISourceable sourcedObject = originalSource.getSourcedObj();
+                               String sourceObjectTitle = "";
+                               if(sourcedObject instanceof IIdentifiableEntity){
+                                       sourceObjectTitle = ((IdentifiableEntity) sourcedObject).getTitleCache();
+                               }else if(sourcedObject instanceof DescriptionElementBase){
+                                       sourceObjectTitle = "Element for description: " + ((DescriptionElementBase) sourcedObject).getInDescription().getTitleCache();
+                               }else{
+                                       throw new IllegalStateException("Unknown ISourceable object for given OriginalSourceBase");
+                               }
+                               
+                               return CdmUtils.concat("; ", new String[]{originalSource.getIdNamespace(), originalSource.getIdInSource(), sourceObjectTitle});
+                       }catch(LazyInitializationException e){
+                               String result = "Error initializing title cache for ISourceable of an OriginalSourceBase";
+                               logger.error(result);
+                               return "TODO: " + result;
                        }
-                       
-                       return CdmUtils.concat(";", new String[]{originalSource.getIdNamespace(), originalSource.getIdInSource(), sourceObjectTitle});
                }
                if (element instanceof LanguageStringBase) {
                        return ((LanguageStringBase) element).getText();
@@ -177,4 +181,8 @@ public class DescriptionHelper {
                // TODO write return texts for NameRelationship, HomotypicalGroup, SpecimenTypeDesignation, etc.
                return element.toString();
        }
+
+       public static String getObjectClassname(Object element) {
+               return element.getClass().getSimpleName();
+       }
 }
index 773798f907f5d19115ef4a9248b9c7a7ed707bc3..7aabba50001e1e90b27f013e9f9abf50534863ad 100644 (file)
@@ -9,6 +9,7 @@
 
 package eu.etaxonomy.taxeditor.model;
 
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 
@@ -31,7 +32,7 @@ public class NameHelper {
        
        @SuppressWarnings("unchecked")
        public static String getDisplayNameWithRef(TaxonBase taxonBase) {
-               TaxonNameBase name = taxonBase.getName();
+               TaxonNameBase name = (TaxonNameBase) HibernateProxyHelper.deproxy(taxonBase.getName());
                if (name != null) {
                        return name.generateFullTitle();
                }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/FeatureTreePreferences.java
new file mode 100644 (file)
index 0000000..79bc857
--- /dev/null
@@ -0,0 +1,96 @@
+// $Id$
+/**
+* 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.preference;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+import eu.etaxonomy.taxeditor.featuretree.FeatureTreeEditorWizard;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class FeatureTreePreferences extends PreferencePage implements
+               IWorkbenchPreferencePage {
+       private static final Logger logger = Logger
+                       .getLogger(FeatureTreePreferences.class);
+
+       /**
+        * 
+        */
+       public FeatureTreePreferences() {
+               // TODO Auto-generated constructor stub
+       }
+
+       /**
+        * @param title
+        */
+       public FeatureTreePreferences(String title) {
+               super(title);
+               // TODO Auto-generated constructor stub
+       }
+
+       /**
+        * @param title
+        * @param image
+        */
+       public FeatureTreePreferences(String title, ImageDescriptor image) {
+               super(title, image);
+               // TODO Auto-generated constructor stub
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+        */
+       @Override
+       public void init(IWorkbench workbench) {
+               // TODO Auto-generated method stub
+
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected Control createContents(Composite parent) {
+               
+               Composite composite = new Composite(parent, SWT.NULL);
+               composite.setLayout(new GridLayout());
+               
+               final Button button_openFeatureTree = new Button(composite, SWT.PUSH);
+               button_openFeatureTree.setText("Open FeatureTree Editor");
+               
+               button_openFeatureTree.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               FeatureTreeEditorWizard featureTreeEditorDialog = new FeatureTreeEditorWizard();
+                               WizardDialog dialog = new WizardDialog(getShell(), featureTreeEditorDialog);
+                               
+                               dialog.open();
+                       }
+               });
+               
+               return composite;
+       }
+}
index 1d331379347ae6e010350c210e45c8bea5c090be..f82f7c37138cc3003abdf19fe878ab8d075f2791 100644 (file)
@@ -51,7 +51,7 @@ import eu.etaxonomy.cdm.strategy.match.MatchException;
 import eu.etaxonomy.cdm.strategy.match.MatchMode;\r
 import eu.etaxonomy.taxeditor.model.NomenclaturalCodeHelper;\r
 import eu.etaxonomy.taxeditor.store.StoreUtil;\r
-import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;\r
 \r
 /**\r
@@ -196,17 +196,17 @@ public class PreferencesUtil implements IPreferenceKeys{
         * Generic method to get term preferences for a term vocabulary\r
         * \r
         * @param <T>\r
-        * @param initialTerms\r
+        * @param initialVocabulary\r
         * @return\r
         */\r
-       public static <T extends DefinedTermBase> List<T> getPreferredTerms(Set<T> initialTerms){\r
+       public static <T extends DefinedTermBase> List<T> getPreferredTerms(List<T> initialVocabulary){\r
                \r
                // set default for non existent preferences\r
-               defaultTerms(initialTerms);\r
+               defaultTerms(initialVocabulary);\r
                                \r
                List<T> preferredTerms = new ArrayList<T>();\r
                \r
-               for (T term : initialTerms){\r
+               for (T term : initialVocabulary){\r
                        if(getPreferenceStore().getBoolean(getPreferenceKey((ICdmBase) term))){\r
                                preferredTerms.add(term);\r
                        }\r
@@ -215,14 +215,14 @@ public class PreferencesUtil implements IPreferenceKeys{
                return preferredTerms;          \r
        }\r
        \r
-       private static <T extends DefinedTermBase> boolean defaultTerms(Set<T> initialTerms){\r
+       private static <T extends DefinedTermBase> boolean defaultTerms(List<T> initialVocabulary){\r
                // set default for non existen preferences\r
-               for(T term : initialTerms){\r
+               for(T term : initialVocabulary){\r
                        if(getPreferenceStore().getBoolean(term.getClass().getName())){\r
                                break;\r
                        }else{\r
                                getPreferenceStore().setValue(term.getClass().getName(), true);\r
-                               setPreferredTerms(new ArrayList(initialTerms), initialTerms);\r
+                               setPreferredTerms(new ArrayList(initialVocabulary), initialVocabulary);\r
                                break;\r
                        }\r
                }\r
@@ -231,61 +231,61 @@ public class PreferencesUtil implements IPreferenceKeys{
        \r
        \r
        /** @return a <code>List</code> containing user preferred <code>SpecimenTypeDesignationStatus</code> terms */\r
-       public static List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getPreferredTerms(VocabularyStore.getSpecimenTypeDesignationStatus());}\r
+       public static List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getPreferredTerms(TermStore.getSpecimenTypeDesignationStatus());}\r
 \r
        /** @return a <code>List</code> containing user preferred <code>NameTypeDesignationStatus</code> terms */\r
-       public static List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getPreferredTerms(VocabularyStore.getNameTypeDesignationStatus()); }\r
+       public static List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getPreferredTerms(TermStore.getNameTypeDesignationStatus()); }\r
        \r
        /** @return a <code>List</code> containing user preferred <code>TaxonRelationshipTypes</code> terms */\r
-       public static List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getPreferredTerms(VocabularyStore.getTaxonRelationshipTypes());}\r
+       public static List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getPreferredTerms(TermStore.getTaxonRelationshipTypes());}\r
        \r
        /** @return a <code>List</code> containing user preferred <code>Feature</code> terms */\r
-       public static List<Feature> getPreferredFeatures() { return getPreferredTerms(VocabularyStore.getFeatures());}\r
+       public static List<Feature> getPreferredFeatures() { return getPreferredTerms(TermStore.getFeatures());}\r
 \r
        /** @return a <code>List</code> containing user preferred <code>Rank</code> terms */\r
-       public static List<Rank> getPreferredRanks() { return getPreferredTerms(VocabularyStore.getRanks());}\r
+       public static List<Rank> getPreferredRanks() { return getPreferredTerms(TermStore.getRanks());}\r
        \r
        /** @return a <code>List</code> containing user preferred  <code>PresenceAbsenceTermBase</code> terms */\r
-       public static List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getPreferredTerms(VocabularyStore.getPresenceAbsenceTerms());}\r
+       public static List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getPreferredTerms(TermStore.getPresenceAbsenceTerms());}\r
        \r
        /** @return a <code>List</code> containing user preferred  <code>NomenclaturalStatusType</code> terms */\r
-       public static List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){     return getPreferredTerms(VocabularyStore.getNomenclaturalStatusTypes());}\r
+       public static List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){     return getPreferredTerms(TermStore.getNomenclaturalStatusTypes());}\r
        \r
        /** @return a <code>List</code> containing user preferred  <code>NameRelationshipType</code> terms */\r
-       public static List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getPreferredTerms(VocabularyStore.getNameRelationshipTypes());}\r
+       public static List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getPreferredTerms(TermStore.getNameRelationshipTypes());}\r
        \r
        /** @return a <code>List</code> containing user preferred  <code>Language</code> terms */\r
-       public static List<Language> getPreferredLanguages() { return getPreferredTerms(VocabularyStore.getLanguages()); }\r
+       public static List<Language> getPreferredLanguages() { return getPreferredTerms(TermStore.getLanguages()); }\r
        \r
        /** @return a <code>List</code> containing user preferred  <code>MarkerType</code> terms */\r
-       public static List<MarkerType> getPreferredMarkerTypes() { return getPreferredTerms(VocabularyStore.getNonTechnicalMarkerTypes()); }\r
+       public static List<MarkerType> getPreferredMarkerTypes() { return getPreferredTerms(TermStore.getNonTechnicalMarkerTypes()); }\r
        \r
        /** @return a <code>List</code> containing user preferred  <code>ExtensionType</code> terms */\r
-       public static List<ExtensionType> getPreferredExtensionTypes() { return getPreferredTerms(VocabularyStore.getExtensionTypes()); }\r
+       public static List<ExtensionType> getPreferredExtensionTypes() { return getPreferredTerms(TermStore.getExtensionTypes()); }\r
        \r
        /** @return     a <code>List</code> containing user preferred  <code>RightsType</code> terms  */\r
-       public static List<RightsTerm> getPreferredRightsTypes() {      return getPreferredTerms(VocabularyStore.getRightsTypes());}\r
+       public static List<RightsTerm> getPreferredRightsTypes() {      return getPreferredTerms(TermStore.getRightsTypes());}\r
        \r
        /** @return     a <code>List</code> containing user preferred  <code>NamedAreaType</code> terms  */\r
-       public static List<NamedAreaType> getPreferredNamedAreaTypes() { return getPreferredTerms(VocabularyStore.getNamedAreaTypes()); } \r
+       public static List<NamedAreaType> getPreferredNamedAreaTypes() { return getPreferredTerms(TermStore.getNamedAreaTypes()); } \r
        \r
        /** @return     a <code>List</code> containing user preferred  <code>AnnotationType</code> terms  */\r
-       public static List<AnnotationType> getPreferredAnnotationTypes() { return getPreferredTerms(VocabularyStore.getAnnotationTypes()); } \r
+       public static List<AnnotationType> getPreferredAnnotationTypes() { return getPreferredTerms(TermStore.getAnnotationTypes()); } \r
 \r
        /** @return     a <code>List</code> containing user preferred  <code>Stage</code> terms  */\r
-       public static List<Stage> getPreferredStages() { return getPreferredTerms(VocabularyStore.getStages()); }\r
+       public static List<Stage> getPreferredStages() { return getPreferredTerms(TermStore.getStages()); }\r
        \r
        /** @return     a <code>List</code> containing user preferred  <code>PreservationMethod</code> terms  */\r
-       public static List<PreservationMethod> getPreferredPreservationMethods() { return getPreferredTerms(VocabularyStore.getPreservationMethods()); }\r
+       public static List<PreservationMethod> getPreferredPreservationMethods() { return getPreferredTerms(TermStore.getPreservationMethods()); }\r
        \r
        /**\r
         * Generic method to set term preferences\r
         * \r
         * @param preferredTerms\r
-        * @param initialTerms\r
+        * @param initialVocabulary\r
         */\r
-       public static <T extends DefinedTermBase> void setPreferredTerms(List<T> preferredTerms, Set<T> initialTerms){\r
-               for(TermBase term : initialTerms){\r
+       public static <T extends DefinedTermBase> void setPreferredTerms(List<T> preferredTerms, List<T> initialVocabulary){\r
+               for(TermBase term : initialVocabulary){\r
                        getPreferenceStore().setValue(getPreferenceKey(term), preferredTerms.contains(term));\r
                }\r
        }\r
index 0b469b05c64eec46930a7c33510b0cbac4881139..c06c297f5ad61288f1627a4ce1e9a49d739d1d18 100644 (file)
@@ -17,14 +17,9 @@ import java.util.Set;
 
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -52,7 +47,7 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
        protected Button editButton;
        protected Button removeButton;
        
-       protected Set<T> vocabulary;
+       protected List<T> vocabulary;
        
        private List<T> preferedTerms;
        
@@ -76,7 +71,7 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
         *                      whether this vocabulary should be editable. Will render "New", "Edit", "Delete" buttons
         *                      Handler for these buttons have to be overriding addEditButtonListeners()
         */
-       public AbstractMenuPreferences(Set<T> initialVocabulary, String title, String description, boolean editable) {
+       public AbstractMenuPreferences(List<T> initialVocabulary, String title, String description, boolean editable) {
                super(title);
                vocabulary = initialVocabulary;
                preferedTerms = PreferencesUtil.getPreferredTerms(initialVocabulary);
@@ -101,8 +96,8 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
                tableLayoutData.heightHint = 300;
                tableViewer.getTable().setLayoutData(tableLayoutData);
                
-               tableViewer.setContentProvider(new MenuPreferenceContentProvider());
-               tableViewer.setLabelProvider(new MenuPreferenceLabelProvider());
+               tableViewer.setContentProvider(new DefinedTermBaseContentProvider());
+               tableViewer.setLabelProvider(new DefinedTermBaseLabelProvider());
                        
                tableViewer.setInput(vocabulary);
                
@@ -219,51 +214,6 @@ public abstract class AbstractMenuPreferences<T extends DefinedTermBase> extends
        protected void performDefaults() {
                tableViewer.setAllChecked(true);
        }
-       
-       /**
-        * 
-        * @author n.hoffmann
-        * @created 12.06.2009
-        * @version 1.0
-        */
-       private class MenuPreferenceContentProvider implements IStructuredContentProvider{
-
-               public Object[] getElements(Object inputElement) {                      
-                       return ((Set<?>) inputElement).toArray(new DefinedTermBase[0]);
-               }
-
-               public void dispose() {}
-
-               public void inputChanged(Viewer viewer, Object oldInput,
-                               Object newInput) {}
-               
-       };
-       
-       
-       
-       /**
-        * 
-        * @author n.hoffmann
-        * @created 12.06.2009
-        * @version 1.0
-        */
-       class MenuPreferenceLabelProvider extends LabelProvider implements ITableLabelProvider{
-
-               /* (non-Javadoc)
-                * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
-                */
-               public Image getColumnImage(Object element, int columnIndex) {
-                       return null;
-               }
-
-               /* (non-Javadoc)
-                * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
-                */
-               public String getColumnText(Object element, int columnIndex) {
-                       return ((DefinedTermBase)element).getLabel();
-               }
-               
-       }
 
        /**
         * @return the tableViewer
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseContentProvider.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseContentProvider.java
new file mode 100644 (file)
index 0000000..61af940
--- /dev/null
@@ -0,0 +1,43 @@
+// $Id$
+/**
+* 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.preference.menu;
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class DefinedTermBaseContentProvider implements
+               IStructuredContentProvider {
+       private static final Logger logger = Logger
+                       .getLogger(DefinedTermBaseContentProvider.class);
+
+       public Object[] getElements(Object inputElement) {      
+               if(inputElement instanceof Collection){
+                       return ((Collection<DefinedTermBase>) inputElement).toArray(new DefinedTermBase[0]);
+               }
+               return new Object[]{};
+       }
+
+       public void dispose() {}
+
+       public void inputChanged(Viewer viewer, Object oldInput,
+                       Object newInput) {}
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseLabelProvider.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/preference/menu/DefinedTermBaseLabelProvider.java
new file mode 100644 (file)
index 0000000..d3c71bd
--- /dev/null
@@ -0,0 +1,43 @@
+// $Id$
+/**
+* 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.preference.menu;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 5, 2010
+ * @version 1.0
+ */
+public class DefinedTermBaseLabelProvider extends LabelProvider implements
+               ITableLabelProvider {
+       private static final Logger logger = Logger
+                       .getLogger(DefinedTermBaseLabelProvider.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+        */
+       public Image getColumnImage(Object element, int columnIndex) {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+        */
+       public String getColumnText(Object element, int columnIndex) {
+               return ((DefinedTermBase)element).getLabel();
+       }
+}
index c061e0ca072d89f3880cdf04fec234cd374ca06c..254a867195150c0fc8d926c73ec0112d7ef905b0 100644 (file)
@@ -20,7 +20,7 @@ import eu.etaxonomy.cdm.model.common.ExtensionType;
 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
 import eu.etaxonomy.taxeditor.preference.wizard.VocabularyTermWizard;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -35,7 +35,7 @@ public class ExtensionTypeMenuPreferences extends AbstractMenuPreferences<Extens
         * 
         */
        public ExtensionTypeMenuPreferences() {
-               super(VocabularyStore.getExtensionTypes(),
+               super(TermStore.getExtensionTypes(),
                                "Extension Type Preferences" , 
                                "Choose which extension types to display",
                                true);
@@ -60,7 +60,7 @@ public class ExtensionTypeMenuPreferences extends AbstractMenuPreferences<Extens
                                WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
                            dialog.open();
                            
-                           tableViewer.setInput(VocabularyStore.getExtensionTypes());
+                           tableViewer.setInput(TermStore.getExtensionTypes());
                        }
                });
        }
index 5e9c4ecff714547e9b2d4bc6c5d54c1e576b7ee3..5c0f09afc6223801f2653ec08f561d74a4dce169 100644 (file)
@@ -19,7 +19,7 @@ import eu.etaxonomy.cdm.model.common.VocabularyEnum;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.taxeditor.preference.wizard.VocabularyTermWizard;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author p.ciardelli
@@ -32,7 +32,7 @@ public class FeatureMenuPreferences extends AbstractMenuPreferences<Feature> {
        public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.feature";
        
        public FeatureMenuPreferences() {
-               super(VocabularyStore.getFeatures(), 
+               super(TermStore.getFeatures(), 
                                "Feature Preferences", 
                                "Choose which features you would like to use for descriptive elements.", 
                                true);
@@ -57,7 +57,7 @@ public class FeatureMenuPreferences extends AbstractMenuPreferences<Feature> {
                                WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
                            dialog.open();
                            
-                           tableViewer.setInput(VocabularyStore.getFeatures());
+                           tableViewer.setInput(TermStore.getFeatures());
                        }
                });
        }
@@ -81,7 +81,7 @@ public class FeatureMenuPreferences extends AbstractMenuPreferences<Feature> {
                                WizardDialog dialog = new WizardDialog(StoreUtil.getShell(), wizard);
                            dialog.open();
                            
-                           tableViewer.setInput(VocabularyStore.getFeatures());
+                           tableViewer.setInput(TermStore.getFeatures());
                            tableViewer.reveal(selection);
                        }
                });
index b80188bc0e9f8cab3cfa2f2dfbdb81d695aa0f1c..d32b04041baa3862389e858d5b40e0ec7b669e94 100644 (file)
@@ -18,7 +18,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
 import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author p.ciardelli
@@ -35,7 +35,7 @@ public class LanguageMenuPreferences extends AbstractMenuPreferences<Language> {
         * @param description
         */
        public LanguageMenuPreferences() {
-               super(VocabularyStore.getLanguages(), 
+               super(TermStore.getLanguages(), 
                                "Language Preferences", 
                                "Configure language preferences.",
                                false);
index 1e5f2333303cb45859a4274ef72bfc8cac77d306..85351fecf7267315cb239b313fdef4e9dcbc8b0f 100644 (file)
@@ -15,7 +15,7 @@ import java.util.Set;
 import org.apache.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -34,7 +34,7 @@ public class MarkerTypeMenuPreferences extends AbstractMenuPreferences<MarkerTyp
         * @param description
         */
        public MarkerTypeMenuPreferences() {
-               super(VocabularyStore.getNonTechnicalMarkerTypes(), 
+               super(TermStore.getNonTechnicalMarkerTypes(), 
                                "Marker Type Preferences" , 
                                "Choose which markers to display",
                                false);
index 2d21a3aecf6c69491b050ac37bfa0dde63991883..ccc54281434422d2573aeffbf00df59b54249e3e 100644 (file)
@@ -18,8 +18,7 @@ import eu.etaxonomy.cdm.model.name.NameRelationshipType;
 import eu.etaxonomy.taxeditor.labels.ILabelImageStrategy;
 import eu.etaxonomy.taxeditor.labels.LabelImageProvider;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.preference.menu.AbstractMenuPreferences.MenuPreferenceLabelProvider;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -31,7 +30,7 @@ public class NameRelationshipTypeMenuPreferences extends
 
        
        public NameRelationshipTypeMenuPreferences() {
-               super(VocabularyStore.getNameRelationshipTypes(), 
+               super(TermStore.getNameRelationshipTypes(), 
                                "Name relationship types", 
                                "Configure name relationship types",
                                false);
@@ -47,7 +46,7 @@ public class NameRelationshipTypeMenuPreferences extends
                return container;
        }
        
-       public class NameRelationLabelProvider extends MenuPreferenceLabelProvider {
+       public class NameRelationLabelProvider extends DefinedTermBaseLabelProvider {
 
                private LabelImageProvider labelProvider;
 
index 3a2d93ed41e17e96cb2cd72ed1f0932fdb33e6c2..ecf7d414ed898f9d3352241d9b6b1e58f5cdb479 100644 (file)
@@ -11,7 +11,7 @@
 package eu.etaxonomy.taxeditor.preference.menu;
 
 import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -26,7 +26,7 @@ public class NameTypeDesignationStatusMenuPreferences extends
         * @param description
         */
        public NameTypeDesignationStatusMenuPreferences() {
-               super(VocabularyStore.getNameTypeDesignationStatus(), 
+               super(TermStore.getNameTypeDesignationStatus(), 
                                "Name Type Designation Status Preferences", 
                                "Configure name type designation status",
                                false);
index 81d2358edf3354b5aeb2a15ef5fd8e5f17e0a2b7..264f407fc9664cbebf24084e57b88abfe7c28489 100644 (file)
@@ -15,7 +15,7 @@ import java.util.Set;
 import org.apache.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.location.NamedAreaType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -28,7 +28,7 @@ public class NamedAreaTypeMenuPreferences extends AbstractMenuPreferences<NamedA
                        .getLogger(NamedAreaTypeMenuPreferences.class);
        
        public NamedAreaTypeMenuPreferences() {
-               super(VocabularyStore.getNamedAreaTypes(), 
+               super(TermStore.getNamedAreaTypes(), 
                                "Named Area Types", 
                                "Edit displayed named area types", 
                                true);
index 84a92e2c15ab736223ff411481d2c807283b9dfc..4c600cb0acc3809e3cb997f613eda66dde8a638c 100644 (file)
@@ -11,7 +11,7 @@
 package eu.etaxonomy.taxeditor.preference.menu;
 
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -22,7 +22,7 @@ public class NomenclaturalStatusTypeMenuPreferences extends
                AbstractMenuPreferences<NomenclaturalStatusType> {
 
        public NomenclaturalStatusTypeMenuPreferences() {
-               super(VocabularyStore.getNomenclaturalStatusTypes(), 
+               super(TermStore.getNomenclaturalStatusTypes(), 
                                "Nomenlcatural Status Type Preferences", 
                                "Configure nomenclatural status types",
                                false);
index aa269bd0772832594fe571a51b91475c8601ef25..9272c1933d35619d5abed8274079c4991ece15d6 100644 (file)
@@ -13,7 +13,7 @@ package eu.etaxonomy.taxeditor.preference.menu;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -31,7 +31,7 @@ public class PresenceAbsenceMenuPreferences extends AbstractMenuPreferences<Pres
         * @param description
         */
        public PresenceAbsenceMenuPreferences() {
-               super(VocabularyStore.getPresenceAbsenceTerms(), 
+               super(TermStore.getPresenceAbsenceTerms(), 
                                "Distribution Status Preferences", 
                                "Choose which distribution states should be shown.",
                                false);
index 05889e67da2fe590be78301879484a9a8ac24081..f6e7c1dbcdbaf2ad141ed811fbfd6533fc885f90 100644 (file)
@@ -13,7 +13,7 @@ package eu.etaxonomy.taxeditor.preference.menu;
 import org.apache.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -26,7 +26,7 @@ public class PreservationMethodMenuPreferences extends AbstractMenuPreferences<P
                        .getLogger(PreservationMethodMenuPreferences.class);
        
        public PreservationMethodMenuPreferences() {
-               super(VocabularyStore.getPreservationMethods(), 
+               super(TermStore.getPreservationMethods(), 
                                "Preservation Method Preferences", 
                                "Select preservation methods to be shown in selections", 
                                false);
index fb8a9e39ef23f15415b877f7c03d8dfd4d5cd614..0fa0bb8fb6b8620b170a78366b21825d03bf6ed4 100644 (file)
@@ -11,7 +11,7 @@ package eu.etaxonomy.taxeditor.preference.menu;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
 import eu.etaxonomy.cdm.model.name.Rank;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * Allows the user to choose which <code>Rank</code>s to display in the 
@@ -28,7 +28,7 @@ public class RankMenuPreferences extends AbstractMenuPreferences<Rank> implement
        public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.ranks";
 
        public RankMenuPreferences() {
-               super(VocabularyStore.getRanks(), 
+               super(TermStore.getRanks(), 
                                "Rank Preferences", 
                                "Choose which ranks to display in the property sheet drop-down menu.",
                                false);
index 20ad193ea29514267f9466f0403332a21eb96879..17e6bc7446998ee629a1d91c3f807550a714d132 100644 (file)
@@ -11,7 +11,7 @@
 package eu.etaxonomy.taxeditor.preference.menu;
 
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -26,7 +26,7 @@ public class SpecimenTypeDesignationStatusMenuPreferences extends
         * @param description
         */
        public SpecimenTypeDesignationStatusMenuPreferences() {
-               super(VocabularyStore.getSpecimenTypeDesignationStatus(), 
+               super(TermStore.getSpecimenTypeDesignationStatus(), 
                                "Specimen Type Designation Status Preferences", 
                                "Configure specimen type designation status",
                                false);
index b3161344e0d1e7f7c02755a263feb228a7fe6254..d570b7f7c288bf2f7324a3bf5f57d613ba6984fd 100644 (file)
@@ -15,7 +15,7 @@ import java.util.Set;
 import org.apache.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.description.Stage;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -28,7 +28,7 @@ public class StageMenuPreferences extends AbstractMenuPreferences<Stage> {
                        .getLogger(StageMenuPreferences.class);
        
        public StageMenuPreferences() {
-               super(VocabularyStore.getStages(), 
+               super(TermStore.getStages(), 
                                "Stage Preferences", 
                                "Choose stages to be shown in selection combos", 
                                false);
index 8a168be460b53f118179bfecc5a8d501ba70becf..fbdbb9f41fd1129080f000112a2251d286845438 100644 (file)
@@ -11,7 +11,7 @@
 package eu.etaxonomy.taxeditor.preference.menu;
 
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -27,7 +27,7 @@ public class TaxonRelationshipTypeMenuPreferences extends
         * @param description
         */
        public TaxonRelationshipTypeMenuPreferences() {
-               super(VocabularyStore.getTaxonRelationshipTypes(), 
+               super(TermStore.getTaxonRelationshipTypes(), 
                                "Taxon Relationship Type Preferences", 
                                "Configure taxon relationship types",
                                false);
index fb39d8cf6fa192da6eefe27206da196a47d32cf1..5e301f3b48ad9929bb20a1dfdf79e51d4c25e2f2 100644 (file)
@@ -18,7 +18,7 @@ import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Representation;
 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.VocabularyStore;
+import eu.etaxonomy.taxeditor.store.TermStore;
 
 /**
  * @author n.hoffmann
@@ -70,9 +70,9 @@ public class VocabularyTermWizard<T extends DefinedTermBase> extends Wizard {
                ConversationHolder conversation = CdmStore.createConversation();
                
                if(editMode){
-                       VocabularyStore.updateVocabulary(getTerm());
+                       TermStore.updateVocabulary(getTerm());
                }else{
-                       VocabularyStore.saveTerm(getTerm(), getVocabulary());
+                       TermStore.saveTerm(getTerm(), getVocabulary());
                }
                
                conversation.commit(false);
index 36ec394b60303ecfb6b6b6366f64d17af5667b0b..07ed99bca7dbc745d5c6cc96de945cb779b94a0f 100644 (file)
@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.swt.widgets.Display;
+import org.jdom.Element;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
 import org.springframework.security.authentication.ProviderManager;
@@ -30,6 +31,8 @@ import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IAgentService;
 import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
+import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.api.service.ILocationService;
 import eu.etaxonomy.cdm.api.service.IMediaService;
 import eu.etaxonomy.cdm.api.service.INameService;
@@ -57,6 +60,8 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
+import eu.etaxonomy.cdm.remote.view.BaseView;
+import eu.etaxonomy.cdm.remote.view.JsonView;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
 import eu.etaxonomy.taxeditor.datasource.view.CdmDataSourceView;
 import eu.etaxonomy.taxeditor.dialogs.LoginDialog;
@@ -81,7 +86,6 @@ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 public class CdmStore{
        private static final Logger logger = Logger.getLogger(CdmStore.class);
        
-       // FIXME change this to ClassPathResources as soon as it is included into the plugin
        private static final Resource DEFAULT_APPLICATION_CONTEXT = new ClassPathResource("/eu/etaxonomy/cdm/editorApplicationContext.xml", TaxeditorStorePlugin.class.getClassLoader());
        private static final DbSchemaValidation DEFAULT_DB_SCHEMA_VALIDATION = DbSchemaValidation.UPDATE;
        
@@ -103,7 +107,6 @@ public class CdmStore{
        
        private boolean isConnected;
        
-       
        /**
         * 
         * @param applicationContextBean
@@ -215,18 +218,22 @@ public class CdmStore{
                                        "datasource '" + datasource + "'. Please check settings in datasources.xml. If the datasource " +
                                                        "is located on a remote machine, make sure you are connected to the network.");
                        logger.error(e);
+                       throw new RuntimeException(e);
                } catch (NullPointerException e){
                        StoreUtil.errorDialog("Corrupt Datasource", "The configuration for the chosen " +
                                        "datasource '" + datasource + "' is corrupt. Please check settings in datasources.xml.");
                        logger.error(e);
+                       throw new RuntimeException(e);
                } catch (DatabaseSchemaMismatchException e){
                        StoreUtil.errorDialog("Database Schema incompatible", "The database schema for the chosen " +
                                        "datasource '" + datasource + "' is not valid for this version of the taxonomic editor.");
                        logger.error(e);
+                       throw new RuntimeException(e);
                } catch (Exception e){
                        StoreUtil.errorDialog("Unknown Datasource Error", "An error occurred while connecting to the datasource." +
                                        "Please refer to the error log.");
                        logger.error(e);
+                       throw new RuntimeException(e);
                } 
        }
 
@@ -273,6 +280,10 @@ public class CdmStore{
                }
                return null;
        }
+       
+       public static CdmApplicationController getCurrentApplicationController(){
+               return getDefault().getApplicationController();
+       }
 
        /*
         * CONVERSATIONS
@@ -323,6 +334,10 @@ public class CdmStore{
        
        public static IOccurrenceService getOccurrenceService() { return getDefault().getApplicationController().getOccurrenceService(); }
        
+       public static IFeatureTreeService getFeatureTreeService() { return getDefault().getApplicationController().getFeatureTreeService(); }
+       
+       public static IFeatureNodeService getFeatureNodeService() { return getDefault().getApplicationController().getFeatureNodeService(); }
+       
        public static IEditGeoService getGeoService(){
                return (IEditGeoService) getDefault().getApplicationController().getBean("editGeoService");
        }
@@ -496,7 +511,7 @@ public class CdmStore{
        }
        
        public static void notifyContextStart() {
-               logger.warn("Application event occured");
+               logger.info("Notifying context listeners, that the context has started.");
                
                instance.authenticate();
                
@@ -532,5 +547,4 @@ public class CdmStore{
                getTaxonTreeService().saveOrUpdate(defaultClassification);
                conversation.commit(true);
        }
-
 }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java
new file mode 100644 (file)
index 0000000..40c0800
--- /dev/null
@@ -0,0 +1,283 @@
+// $Id$
+/**
+* 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.store;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.common.OrderedTermBase;
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.common.VocabularyEnum;
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
+import eu.etaxonomy.cdm.model.description.PresenceTerm;
+import eu.etaxonomy.cdm.model.description.Stage;
+import eu.etaxonomy.cdm.model.location.NamedAreaType;
+import eu.etaxonomy.cdm.model.media.RightsTerm;
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;
+import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
+import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+
+/**
+ * All terms may be accessed through this store.
+ * Note: This is for internal use. When using vocabularies in the UI, try to use the preferred terms from
+ * PreferenceUtil
+ * 
+ * @author n.hoffmann
+ * @created 25.06.2009
+ * @version 1.0
+ */
+public class TermStore {
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationStatus() {
+               return getTerms(SpecimenTypeDesignationStatus.class);
+       }
+       
+
+       /**
+       *
+       * @return
+       */
+       public static List<NameTypeDesignationStatus> getNameTypeDesignationStatus() {
+               return getTerms(NameTypeDesignationStatus.class);
+       }
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<NamedAreaType> getNamedAreaTypes(){
+               return getTerms(NamedAreaType.class);
+       }
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<AnnotationType> getAnnotationTypes(){
+               return getTerms(AnnotationType.class);
+       }
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<TaxonRelationshipType> getTaxonRelationshipTypes(){
+               return getTerms(TaxonRelationshipType.class);
+       }
+       
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<Language> getLanguages(){
+               return getTerms(Language.class);
+       }
+       
+       
+       /**
+        * @param selected
+        */
+       public static void delete(DefinedTermBase selected) {
+               CdmStore.getTermService().delete(selected);
+       }
+       /**
+        * 
+        * @return
+        */
+       public static List<Feature> getFeatures() {
+               List<Feature> features = getTerms(Feature.class);
+               features.remove(Feature.IMAGE());
+               return features;
+
+       }
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<NameRelationshipType> getNameRelationshipTypes() {
+               return getTerms(NameRelationshipType.class);
+       }
+       
+       /**
+        * 
+        * @return
+        */
+       public static List<NomenclaturalStatusType> getNomenclaturalStatusTypes(){
+               return getTerms(NomenclaturalStatusType.class);
+       }
+       
+
+       /**
+        * @return 
+        * 
+        */
+       public static List<MarkerType> getNonTechnicalMarkerTypes() {
+               List<MarkerType> nonTechnicalMarkerTypes = new ArrayList<MarkerType>();
+               List<MarkerType> markerTypes = getTerms(MarkerType.class);
+               
+               for (Object type : markerTypes) {
+                       if (((MarkerType) type).isTechnical() == false) {
+                               nonTechnicalMarkerTypes.add((MarkerType) type);
+                       }
+               }
+               
+               return nonTechnicalMarkerTypes;
+       }
+       
+
+       /**
+        * @return
+        */
+       public static List<ExtensionType> getExtensionTypes() {
+               return getTerms(ExtensionType.class);
+       }
+       
+       /**
+        * @return
+        */
+       public static List<RightsTerm> getRightsTypes() {
+               return getTerms(RightsTerm.class);
+       }
+       
+       
+       /**
+        * Retrieve all ranks from data store.
+        * 
+        * @return
+        */
+       public static List<Rank> getRanks(){
+               return getTerms(Rank.class, new Comparator<Rank>(){
+
+                       @Override
+                       public int compare(Rank o1, Rank o2) {
+                               return o1.compareTo(o2);
+                       }
+                       
+               });
+       }
+       
+       
+       /**
+        * Retrieve all presence and absence terms from data store.
+        *  
+        * @return
+        */
+       public static List<PresenceAbsenceTermBase> getPresenceAbsenceTerms() {
+               List presenceAbsenceTerms = getTerms(PresenceTerm.class);
+               presenceAbsenceTerms.addAll(getTerms(AbsenceTerm.class));
+
+               return presenceAbsenceTerms;
+       }
+
+       /**
+        * Retrieve all stages from data store.
+        * 
+        * @return
+        */
+       public static List<Stage> getStages(){
+               return getTerms(Stage.class);
+       }
+       
+       /**
+        * Retrieve all preservation methods from data store.
+        * 
+        * @return
+        */
+       public static List<PreservationMethod> getPreservationMethods(){
+               return getTerms(PreservationMethod.class);
+       }
+       
+       
+       /*************** save methods ******************************/
+       /**
+        * Adds a term to a vocabulary
+        * 
+        * @param feature
+        */
+       public static void saveTerm(DefinedTermBase term, VocabularyEnum vocabularyType) {
+               TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);         
+               vocabulary.addTerm(term);
+               
+               CdmStore.getVocabularyService().save(vocabulary);
+       }
+       
+       /**
+        * Save a vacabulary to data store
+        * 
+        * @param feature
+        */
+       public static void updateVocabulary(DefinedTermBase term) {
+               CdmStore.getTermService().save(term);
+       }
+       
+       
+       
+       /*************** internal methods **************************/
+       
+       private static Language getDefaultLanguage(){
+               return CdmStore.getDefaultLanguage();
+       }
+       
+       private static OrderedTermVocabulary<? extends OrderedTermBase> getOrderedTermVocabulary(VocabularyEnum vocabularyType){
+               TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);         
+               return HibernateProxyHelper.deproxy(vocabulary, OrderedTermVocabulary.class);
+       }
+       
+       public static TermVocabulary<DefinedTermBase> getTermVocabulary(VocabularyEnum vocabularyType){
+               
+               return CdmStore.getVocabularyService().getVocabulary(vocabularyType);
+       }
+       
+       private static <TERM extends DefinedTermBase> List<TERM> getTerms(Class<TERM> clazz){
+               Comparator comparator = new Comparator<TERM>() {
+                       @Override
+                       public int compare(TERM o1, TERM o2) {
+                               String label1 = o1.getLabel(getDefaultLanguage()) != null ? o1.getLabel(getDefaultLanguage()) : o1.getTitleCache();
+                               String label2 = o2.getLabel(getDefaultLanguage()) != null ? o2.getLabel(getDefaultLanguage()) : o2.getTitleCache();
+                               return label1.compareTo(label2);
+                       }
+               };
+               
+               return getTerms(clazz, comparator);
+       }
+       
+       
+       private static <TERM extends DefinedTermBase> List<TERM> getTerms(Class<TERM> clazz, Comparator comparator){
+
+               List<TERM> terms = CdmStore.getTermService().listByTermClass(clazz, null, null, null, null);
+               
+               Collections.sort(terms, comparator); 
+               
+               return terms;
+               
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/VocabularyStore.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/VocabularyStore.java
deleted file mode 100644 (file)
index 81d6ca3..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-// $Id$
-/**
-* 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.store;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedSet;
-
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.AnnotationType;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.ExtensionType;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.cdm.model.common.OrderedTermBase;
-import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
-import eu.etaxonomy.cdm.model.common.VocabularyEnum;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
-import eu.etaxonomy.cdm.model.description.Stage;
-import eu.etaxonomy.cdm.model.location.NamedAreaType;
-import eu.etaxonomy.cdm.model.media.RightsTerm;
-import eu.etaxonomy.cdm.model.name.NameRelationshipType;
-import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
-import eu.etaxonomy.cdm.model.name.Rank;
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
-import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
-
-/**
- * All vocabularies may be accessed through this store.
- * Note: This is for internal use. When using vocabularies in the UI, try to use the preferred terms from
- * PreferenceUtil
- * 
- * @author n.hoffmann
- * @created 25.06.2009
- * @version 1.0
- */
-public class VocabularyStore {
-       
-       /**
-        * 
-        * @return
-        */
-       public static SortedSet<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationStatus() {
-               SortedSet specimenTypeDesignationStatus = getTermVocabulary(VocabularyEnum.SpecimenTypeDesignationStatus).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return specimenTypeDesignationStatus;
-       }
-       
-
-       /**
-       *
-       * @return
-       */
-       public static SortedSet<NameTypeDesignationStatus> getNameTypeDesignationStatus() {
-               SortedSet nameTypeDesignationStatus = getTermVocabulary(VocabularyEnum.NameTypeDesignationStatus).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return nameTypeDesignationStatus;
-       }
-       
-       /**
-        * 
-        * @return
-        */
-       public static SortedSet<NamedAreaType> getNamedAreaTypes(){
-               SortedSet namedAreaTypes = getTermVocabulary(VocabularyEnum.NamedAreaType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return namedAreaTypes;
-       }
-       
-       /**
-        * 
-        * @return
-        */
-       public static SortedSet<AnnotationType> getAnnotationTypes(){
-               SortedSet annotationTypes = getTermVocabulary(VocabularyEnum.AnnotationType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return annotationTypes;
-       }
-       
-       /**
-        * 
-        * @return
-        */
-       public static SortedSet<TaxonRelationshipType> getTaxonRelationshipTypes(){
-               SortedSet taxonRelationshipTypes = getOrderedTermVocabulary(VocabularyEnum.TaxonRelationshipType).getOrderedTerms();
-               return taxonRelationshipTypes;
-       }
-       
-       /**
-        * 
-        * @return
-        * 
-        * @deprecated handle via preferences
-        */
-       public static SortedSet<TaxonRelationshipType> getConceptRelationshipTypes() {
-               SortedSet<TaxonRelationshipType> conceptRelationshipTypes = getTaxonRelationshipTypes();
-               // remove these two relations as they are considered standard taxon relations
-               conceptRelationshipTypes.remove(TaxonRelationshipType.MISAPPLIED_NAME_FOR());
-               conceptRelationshipTypes.remove(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN());
-       
-               return conceptRelationshipTypes;
-       }
-       
-       /**
-        * 
-        * @return
-        */
-       public static Set<Language> getLanguages(){
-
-               Set languages = getTermVocabulary(VocabularyEnum.Language).getTerms();
-               
-//             SortedSet languages = getDefault().getTermVocabulary(VocabularyEnum.Language).getTermsOrderedByLabels(getDefaultLanguage());
-               return languages;
-       }
-       
-       public static SortedSet<? extends DefinedTermBase> getTerms(VocabularyEnum vocabularyType){
-               
-               TermVocabulary<DefinedTermBase> terms = getTermVocabulary(vocabularyType);
-               
-               if(terms != null) {
-                       return terms.getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               }
-               return null;
-       }
-       
-       /**
-        * @param selected
-        */
-       public static void delete(DefinedTermBase selected) {
-               CdmStore.getTermService().delete(selected);
-       }
-       /**
-        * 
-        * @return
-        */
-       public static SortedSet<Feature> getFeatures() {
-               SortedSet features = getTermVocabulary(VocabularyEnum.Feature).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               features.remove(Feature.IMAGE());
-               return features;
-
-       }
-       
-       /**
-        * 
-        * @return
-        */
-       public static SortedSet<NameRelationshipType> getNameRelationshipTypes() {
-               SortedSet nameRelationshipTypes = getTermVocabulary(VocabularyEnum.NameRelationshipType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return nameRelationshipTypes;
-       }
-       
-       /**
-        * 
-        * @return
-        */
-       public static Set<NomenclaturalStatusType> getNomenclaturalStatusTypes(){
-               // TODO sort types
-               Set nomenclaturalStatusTypes = getTermVocabulary(VocabularyEnum.NomenclaturalStatusType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return nomenclaturalStatusTypes;
-       }
-       
-
-       /**
-        * @return 
-        * 
-        */
-       public static Set<MarkerType> getNonTechnicalMarkerTypes() {
-               Set<MarkerType> nonTechnicalMarkerTypes = new HashSet<MarkerType>();
-               for (Object type : getTermVocabulary(VocabularyEnum.MarkerType).getTermsOrderedByLabels(CdmStore.getDefaultLanguage())) {
-                       if (((MarkerType) type).isTechnical() == false) {
-                               nonTechnicalMarkerTypes.add((MarkerType) type);
-                       }
-               }
-               
-               return nonTechnicalMarkerTypes;
-       }
-       
-
-       /**
-        * @return
-        */
-       public static Set<ExtensionType> getExtensionTypes() {
-               List<ExtensionType> extensionTypes = CdmStore.getTermService().listByTermClass(ExtensionType.class, null, null, null, null);
-               return new HashSet(extensionTypes);
-       }
-       
-       /**
-        * @return
-        */
-       public static Set<RightsTerm> getRightsTypes() {
-               Set rightsTypes = getTermVocabulary(VocabularyEnum.RightsTerm).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-               return rightsTypes;
-       }
-       
-       
-       /**
-        * Retrieve all ranks from data store.
-        * 
-        * @return
-        */
-       public static SortedSet<Rank> getRanks(){
-               SortedSet ranks = getOrderedTermVocabulary(VocabularyEnum.Rank).getOrderedTerms();
-               return ranks;
-       }
-       
-       
-       /**
-        * Retrieve all presence and absence terms from data store.
-        *  
-        * @return
-        */
-       public static SortedSet<PresenceAbsenceTermBase> getPresenceAbsenceTerms() {
-               SortedSet presenceAbsenceTerms = getTermVocabulary(VocabularyEnum.PresenceTerm).getTermsOrderedByLabels(CdmStore.getDefaultLanguage());
-                       presenceAbsenceTerms.addAll(getTermVocabulary(VocabularyEnum.AbsenceTerm).getTermsOrderedByLabels(CdmStore.getDefaultLanguage()));
-
-               return presenceAbsenceTerms;
-       }
-
-       /**
-        * Retrieve all stages from data store.
-        * 
-        * @return
-        */
-       public static SortedSet<Stage> getStages(){
-               SortedSet stages = getTermVocabulary(VocabularyEnum.Stage).getTermsOrderedByLabels(getDefaultLanguage());
-               return stages;
-       }
-       
-       /**
-        * Retrieve all preservation methods from data store.
-        * 
-        * @return
-        */
-       public static SortedSet<PreservationMethod> getPreservationMethods(){
-               SortedSet preservationMethods = getTermVocabulary(VocabularyEnum.PreservationMethod).getTermsOrderedByLabels(getDefaultLanguage());
-               return preservationMethods;
-       }
-       
-       
-       /*************** save methods ******************************/
-       /**
-        * Adds a term to a vocabulary
-        * 
-        * @param feature
-        */
-       public static void saveTerm(DefinedTermBase term, VocabularyEnum vocabularyType) {
-               TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);         
-               vocabulary.addTerm(term);
-               
-               CdmStore.getVocabularyService().save(vocabulary);
-       }
-       
-       /**
-        * Save a vacabulary to data store
-        * 
-        * @param feature
-        */
-       public static void updateVocabulary(DefinedTermBase term) {
-               CdmStore.getTermService().save(term);
-       }
-       
-       
-       
-       /*************** internal methods **************************/
-       
-       private static Language getDefaultLanguage(){
-               return CdmStore.getDefaultLanguage();
-       }
-       
-       private static OrderedTermVocabulary<? extends OrderedTermBase> getOrderedTermVocabulary(VocabularyEnum vocabularyType){
-               TermVocabulary<DefinedTermBase> vocabulary = getTermVocabulary(vocabularyType);         
-               return HibernateProxyHelper.deproxy(vocabulary, OrderedTermVocabulary.class);
-       }
-       
-       public static TermVocabulary<DefinedTermBase> getTermVocabulary(VocabularyEnum vocabularyType){
-               return CdmStore.getVocabularyService().getVocabulary(vocabularyType);
-       }
-
-}
index 4fe28345953d4182c5e927084295d48cd70d2fad..cd68d418eb55d5abaf3db56af4de33c2e02a2a01 100644 (file)
@@ -1,14 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <beans xmlns="http://www.springframework.org/schema/beans"\r
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-       xmlns:context="http://www.springframework.org/schema/context"\r
-       xmlns:tx="http://www.springframework.org/schema/tx"\r
-    xsi:schemaLocation=\r
-      "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\r
-    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+  xmlns:context="http://www.springframework.org/schema/context"\r
+  xmlns:tx="http://www.springframework.org/schema/tx"\r
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">\r
 \r
-    <import resource="classpath:/eu/etaxonomy/cdm/defaultApplicationContext.xml"/> \r
-    <context:component-scan base-package="eu/etaxonomy/cdm/ext"/>\r
\r
-</beans>
\ No newline at end of file
+  <import resource="classpath:/eu/etaxonomy/cdm/defaultApplicationContext.xml"/>\r
+  <import resource="classpath:/eu/etaxonomy/cdm/remote.xml"/>\r
+  <import resource="classpath:eu/etaxonomy/cdm/remote/json/jsonConfigurations.xml"/>\r
+\r
+  <context:component-scan base-package="eu/etaxonomy/cdm/remote">\r
+    <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.config\.DataSourceConfigurer" />\r
+    <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.config\.LoggingConfigurer" />\r
+    <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.view\.PatternViewResolver" />\r
+  </context:component-scan>\r
+  <context:component-scan base-package="eu/etaxonomy/cdm/ext"/>\r
+</beans>\r
index aebe703a4463511eef6ba329d45998cbbafd4704..f83f596237eaf3631655c872372680a508e49594 100644 (file)
@@ -10,7 +10,7 @@
 package eu.etaxonomy.taxeditor.store;
 
 
-import java.util.Set;
+import java.util.List;
 
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -67,7 +67,7 @@ public class CdmStoreTest /*extends CdmIntegrationTest */{
        @Ignore
        public void testGetConceptRelationshipTypes(){
                conversation.bind();
-               Set<TaxonRelationshipType> conceptRelationshipTypes = VocabularyStore.getTaxonRelationshipTypes();
+               List<TaxonRelationshipType> conceptRelationshipTypes = TermStore.getTaxonRelationshipTypes();
                Assert.assertNotNull(conceptRelationshipTypes);
        }
 }