implemented user management, fixes #803. Minor refactorings.
authorn.hoffmann <n.hoffmann@localhost>
Thu, 2 Jul 2009 14:41:24 +0000 (14:41 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 2 Jul 2009 14:41:24 +0000 (14:41 +0000)
77 files changed:
.gitattributes
taxeditor-application/META-INF/MANIFEST.MF
taxeditor-application/TaxEditor.product
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java
taxeditor-bulkeditor/.settings/org.eclipse.jdt.core.prefs
taxeditor-bulkeditor/META-INF/MANIFEST.MF
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupedComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/GalleryLabelComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/TaxonImageEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/YearValidator.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/DescriptionElementPropertySource.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/SynonymPropertySource.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/TaxonBasePropertySource.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/ChooseRelationWizardPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/ListNameRelationsWizardPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferencePropertySource.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertyDescriptor.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeDesignationWizard.java
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeListWizard.java
taxeditor-editor/src/main/resources/TaonDescriptionEditor.screen [new file with mode: 0644]
taxeditor-feature/feature.xml
taxeditor-navigation/META-INF/MANIFEST.MF
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonDropAdapterAssistant.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeLabelProvider.java
taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationActionBarAdvisor.java
taxeditor-store/plugin.xml
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/LoginDialog.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowUserManagerViewHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CommonHelper.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java [moved from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionUtil.java with 93% similarity]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesHelper.java [moved from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesUtil.java with 95% similarity]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/IterableSynonymyList.java [deleted file]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameHelper.java [moved from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameUtil.java with 98% similarity]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymHelper.java [moved from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymUtil.java with 98% similarity]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxeditorLoginModule.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonHelper.java [moved from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonUtil.java with 96% similarity]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeHelper.java [moved from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeUtil.java with 98% similarity]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPostOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeConceptRelationshipTypeOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeConceptToSynonymOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeHomotypicalGroupBasionymOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/CreateImageOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteConceptRelationOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteImageOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteUserOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/RemoveHomotypicalGroupBasionymOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/AuthenticatedUserBar.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/CreateUserHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/DeleteUserHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/EditUserHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerContentProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerLabelProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerView.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizard.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizardPage.java [new file with mode: 0644]
taxeditor-updateSite/artifacts.xml
taxeditor-updateSite/content.xml
taxeditor-updateSite/site.xml

index 404d7342b5e3c85e6a4fb30e9dc8d8a536744d48..73db9a294ba431b3e52760bbde454299b8c59e84 100644 (file)
@@ -845,6 +845,7 @@ taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeDesignationWizard.java -text
 taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeListWizard.java -text
+taxeditor-editor/src/main/resources/TaonDescriptionEditor.screen -text
 taxeditor-editor/src/main/resources/log4j.properties -text
 taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/Application.java -text
 taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationActionBarAdvisor.java -text
@@ -1004,6 +1005,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/SelectionDialogDeta
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/SelectionDialogSelectionLabelProvider.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/UriDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowDataSourceViewHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowUserManagerViewHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/io/AbstractExcelExportWizard.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/io/AbstractExcelImportWizard.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/io/AbstractExportWizard.java -text
@@ -1019,18 +1021,19 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/io/TcsExportWizard.java -te
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/io/TcsImportWizard.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/CommonHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DataChangeBridge.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/IDataChangeBehavior.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImageResources.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesUtil.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/IterableSynonymyList.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesHelper.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/Resources.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymHelper.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxeditorLoginModule.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonTransfer.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonUtil.java -text
-taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPersistentPostOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPostOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeConceptRelationshipTypeOperation.java -text
@@ -1055,6 +1058,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteMisapplica
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteSynonymOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteUserOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/IPostOperationEnabled.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/RemoveHomotypicalGroupBasionymOperation.java -text
@@ -1082,6 +1086,15 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.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/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
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/DeleteUserHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/EditUserHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerContentProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerLabelProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerView.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizard.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizardPage.java -text
 taxeditor-store/src/main/resources/eu/etaxonomy/cdm/defaultApplicationContext.xml -text
 taxeditor-store/src/main/resources/log4j.properties -text
 taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/CdmStoreTest.java -text
index d6adcaa0ec42eec488baf6c976fcf21ba9b4521b..7d13578bae7e4fc3d3fd4d4b9112c2183c681641 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2\r
 Bundle-Name: EDIT Taxonomic Editor\r
 Bundle-SymbolicName: eu.etaxonomy.taxeditor.application;singleton:=true\r
-Bundle-Version: 2.0.0.v20090624-1625\r
+Bundle-Version: 2.0.0.v20090630-1147\r
 Bundle-Activator: eu.etaxonomy.taxeditor.TaxonomicEditorPlugin\r
 Bundle-Vendor: EDIT\r
 Export-Package: eu.etaxonomy.taxeditor\r
index 83755e21e61c98ae2f74ada6a6a46c3ecf793504..991f39ebf584d769a1050c9a726e2adb9e661719 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.4"?>
 
-<product name="%productName" id="eu.etaxonomy.taxeditor.application.TaxonomicEditor" application="eu.etaxonomy.taxeditor.application.application" version="2.0.0.v20090624-1625" useFeatures="true">
+<product name="%productName" id="eu.etaxonomy.taxeditor.application.TaxonomicEditor" application="eu.etaxonomy.taxeditor.application.application" version="2.0.0.v20090630-1147" useFeatures="true">
 
    <aboutInfo>
       <text>
@@ -82,7 +82,7 @@
    </plugins>
 
    <features>
-      <feature id="eu.etaxonomy.taxeditor" version="2.0.0.v20090624-1625"/>
+      <feature id="eu.etaxonomy.taxeditor" version="2.0.0.v20090630-1147"/>
    </features>
 
 </product>
index d825581a873c8ac372bd4cd48fc6853ba1a7df9c..52d2180c11c85571904ed673f09da2bb12fd53a1 100644 (file)
@@ -5,8 +5,7 @@ import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
 
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * An action bar advisor is responsible for creating, adding, and disposing of
@@ -20,8 +19,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
        }
 
        protected void makeActions(final IWorkbenchWindow window) {
-               NavigationUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
-               EditorUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
+               StoreUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
        }
 
        protected void fillMenuBar(IMenuManager menuBar) {
index e82076f020324222e026c48966b98aa6b4027c94..60d9982c0dd9b59eaf6d625de4ebbf4efe442319 100644 (file)
@@ -3,14 +3,14 @@ package eu.etaxonomy.taxeditor;
 import org.apache.log4j.Logger;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.window.Window;
 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;
 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+import org.springframework.security.BadCredentialsException;
+import org.springframework.security.userdetails.UsernameNotFoundException;
 
 import eu.etaxonomy.taxeditor.dialogs.LoginDialog;
 import eu.etaxonomy.taxeditor.preference.InitNomenclaturalCodePrefDialog;
@@ -39,11 +39,11 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
        }
        
        public void postWindowOpen() {
-               
-               // authentication; activate when needed
-//             if(authenticate() != Window.OK){
-//                     PlatformUI.getWorkbench().close();
-//             }
+               try{
+                       authenticate();
+               }catch(BadCredentialsException e){
+                       logger.error("Bad credentials", e);
+               }
                
                checkNomenclaturalCode();
        }
index 351ab89883d5a532d285ced5cb0ed8fd7b91c6d0..f1a887558fc3f1f51197275cd797f89489e42731 100644 (file)
@@ -1,7 +1,7 @@
-#Thu Jun 25 13:48:31 CEST 2009\r
-eclipse.preferences.version=1\r
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5\r
-org.eclipse.jdt.core.compiler.compliance=1.5\r
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
-org.eclipse.jdt.core.compiler.source=1.5\r
+#Thu Jun 25 20:09:50 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
index 5a0345a080c81c9e875024a74d3b2eba10e6cfc7..0c7895d778a07a1bf9222f293a8e33e4080fc8d8 100644 (file)
@@ -2,16 +2,14 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: EDIT Taxonomic Editor - Bulk Editor Bundle
 Bundle-SymbolicName: eu.etaxonomy.taxeditor.bulkeditor;singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 2.0.0.v20090630-1147
 Bundle-ClassPath: .
 Bundle-Activator: eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.jface.text;bundle-version="3.4.2",
- org.eclipse.ui.editors,
- org.eclipse.ui.ide,
- org.eclipse.core.resources;bundle-version="3.4.2",
- eu.etaxonomy.cdmLibrary;bundle-version="2.1.0"
-Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.jface.text;bundle-version="3.4.2",org.eclipse.ui.editors,org.eclipse.ui.ide,org.eclipse.core.resources;bundle-version="3.4.2",eu.etaxonomy.cdmLibrary;bundle-version="2.1.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Export-Package: eu.etaxonomy.taxeditor.bulkeditor,
+ eu.etaxonomy.taxeditor.bulkeditor.handler,
+ eu.etaxonomy.taxeditor.bulkeditor.internal
+Bundle-Vendor: EDIT
index 7b21fe6fd3dc0f492f682f52e3197fa02b04e736..14735bec873abe12154e72f1aba4b363ed167df8 100644 (file)
@@ -172,10 +172,11 @@ public abstract class AbstractTaxonEditor extends EditorPart implements IAdaptab
                this.selectedObject = selectedObject;\r
                \r
                //  set background on selection TODO wanted to move this to setFocus() on the selectedObject but that doesn't work (infinite loop)\r
-               ((GroupedComposite) selectedObject).setBackground(Resources.getColor(Resources.COLOR_COMPOSITE_SELECTED));\r
+//             ((GroupedComposite) selectedObject).setBackground(Resources.getColor(Resources.COLOR_COMPOSITE_SELECTED));\r
                \r
                \r
                if (selectedObject instanceof Composite) {\r
+                       ((GroupedComposite) selectedObject).setBackground(Resources.getColor(Resources.COLOR_COMPOSITE_SELECTED));\r
                        this.selectedData = ((Composite) selectedObject).getData();\r
                }\r
                \r
index 17c03a4d7ad80b5169bb653a689772b0a03f5311..741f14c894686d9585f383624d0b267888a3963b 100644 (file)
@@ -13,24 +13,15 @@ import java.util.HashSet;
 import java.util.Set;\r
 import java.util.UUID;\r
 \r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
 import org.eclipse.core.commands.operations.IOperationHistory;\r
 import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.IStatusLineManager;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorPart;\r
 import org.eclipse.ui.IEditorReference;\r
 import org.eclipse.ui.IPageLayout;\r
 import org.eclipse.ui.IViewPart;\r
 import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;\r
 \r
-import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;\r
 import eu.etaxonomy.taxeditor.model.AbstractUtility;\r
 \r
 /**\r
@@ -39,12 +30,9 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility;
  * @version 1.0\r
  */\r
 public class EditorUtil extends AbstractUtility{\r
-       private static final Logger logger = Logger.getLogger(EditorUtil.class);\r
 \r
        private static boolean isSaving = false;\r
 \r
-       private static IStatusLineManager statusLineManager;\r
-\r
        private static IViewPart view;\r
        \r
        public static boolean closeAll() {\r
@@ -156,24 +144,6 @@ public class EditorUtil extends AbstractUtility{
                \r
                return editor.getPage(page);\r
        }\r
-       \r
-       public static IOperationHistory getOperationHistory() {\r
-               return TaxeditorEditorPlugin.getDefault().getWorkbench().\r
-                                       getOperationSupport().getOperationHistory();\r
-       }\r
-       \r
-       public static IStatus executeOperation(IUndoableOperation operation){\r
-               try {\r
-                       IStatus status = getOperationHistory().execute(operation, getMonitor(),\r
-                                                               WorkspaceUndoUtil.getUIInfoAdapter(getShell()));\r
-                       String statusString = status.equals(Status.OK_STATUS) ? "completed" : "cancelled";\r
-                       setStatusLine(operation.getLabel() + " " + statusString + ".");\r
-                       return status;\r
-               } catch (ExecutionException e) {\r
-                       logger.error("Error executing operation: " + operation.getLabel(), e);\r
-               }\r
-               return null;\r
-       }\r
 \r
        public static IUndoContext getUndoContext(MultiPageTaxonEditor editor){\r
                return editor.getUndoContext();\r
@@ -183,19 +153,6 @@ public class EditorUtil extends AbstractUtility{
                return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
        }\r
 \r
-       private static IProgressMonitor getMonitor() {\r
-               statusLineManager.setCancelEnabled(false);\r
-               return statusLineManager.getProgressMonitor();\r
-       }\r
-       \r
-       public static void setStatusLineManager(IStatusLineManager manager) {\r
-               statusLineManager = manager;\r
-       }\r
-\r
-       public static void setStatusLine(String message) {\r
-               statusLineManager.setMessage(message);\r
-       }\r
-\r
        public static void showPropertySheet() {\r
                if (getActivePage() == null) {\r
                        return;\r
index 93a185042a5dcdb86ac3bf11a902545baafeb237..de6bcb2492fb8af768e09905bd67db8f1aa64c3a 100644 (file)
@@ -136,6 +136,7 @@ abstract public class GroupedComposite extends Composite implements IHasProperty
                        public void focusGained(FocusEvent e) {\r
                                setFocus();\r
                        }\r
+               \r
                };\r
                \r
                textViewer.getTextWidget().addFocusListener(focusListener);\r
@@ -479,6 +480,7 @@ abstract public class GroupedComposite extends Composite implements IHasProperty
                                }\r
                        };\r
                        textViewer.getTextWidget().addModifyListener(parseListener);\r
+                       \r
                } else {\r
                        logger.warn("Can't create parser because textViewer has not been initalized.");\r
                }\r
index d521cb585f24b6e965419b40c5bb6eacaa439101..286baaba891f4f225ded3d06564a14bbc5298aec 100644 (file)
@@ -92,7 +92,7 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart implements IConver
                        addPage(Page.IMAGE.getIndex(), new TaxonImageEditor(this), getEditorInput());\r
                        setPageText(Page.IMAGE.getIndex(), Page.IMAGE.getTitle());\r
 \r
-//                     EditorUtil.showPropertySheet();\r
+                       EditorUtil.showPropertySheet();\r
                                        \r
                } catch (PartInitException e) {\r
                        logger.error("Could not create MultiPageTaxonEditor.", e);\r
index 7cda59bb1a5e603096886e5dccaf729bf2308925..8dacef85b4fc732143acd268ccbb96eba352b21a 100644 (file)
@@ -16,7 +16,7 @@ import org.eclipse.ui.views.properties.IPropertySource;
 \r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
-import eu.etaxonomy.taxeditor.model.DescriptionUtil;\r
+import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
 import eu.etaxonomy.taxeditor.model.ImageResources;\r
 import eu.etaxonomy.taxeditor.model.Resources;\r
 import eu.etaxonomy.taxeditor.propertysheet.description.DescriptionElementPropertySource;\r
@@ -78,7 +78,7 @@ public class DescriptionElementComposite extends GroupedComposite {
                \r
                String text = null;\r
 \r
-               text = DescriptionUtil.getCache(element);\r
+               text = DescriptionHelper.getCache(element);\r
                \r
                if (text.length() == 0) {\r
                        initEmptyText();\r
@@ -93,7 +93,7 @@ public class DescriptionElementComposite extends GroupedComposite {
        \r
        protected void parse(String text) {\r
                \r
-               DescriptionUtil.setCache(getElement(), text);\r
+               DescriptionHelper.setCache(getElement(), text);\r
                \r
                // Manually refresh the property sheet to reflect changes\r
                setSelection();\r
index 5e70a2e647c253b09f7cf4b3049605c53979f1f1..0bac927edf74af03c1080521fcd2b9b5ad24982b 100644 (file)
@@ -60,7 +60,7 @@ public class GalleryLabelComposite extends GroupedComposite {
                createBorderSupport();\r
                createLineWrapSupport();\r
 \r
-               createParser();\r
+//             createParser();\r
                createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
                \r
                setIsDraggable(false);\r
index 1a182bed771c5c735467eccbbb94dffd6cc8bee1..43ffad6adf6b6f7338c6aab1e01adfae87ff0f75 100644 (file)
@@ -26,7 +26,7 @@ import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;
 import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
 import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
-import eu.etaxonomy.taxeditor.model.ImagesUtil;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -88,7 +88,7 @@ public class TaxonImageEditor extends AbstractTaxonEditor {
                                        firstGroupedComposite = (GroupedComposite) labelComposite;\r
                                }\r
                                \r
-                               Set<ImageFile> imageFiles = ImagesUtil.getImages((TaxonDescription) description);\r
+                               Set<ImageFile> imageFiles = ImagesHelper.getImages((TaxonDescription) description);\r
                                \r
                                for(ImageFile imageFile : imageFiles){\r
                                        FreeTextElementFactory.getDefault().createImageElement(this, imageFile);\r
index b9511d9bab4306bad928748eb690f5a0470223ee..4058b477312b9df448970fc3de11830e454cc0a9 100644 (file)
@@ -14,6 +14,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.views.properties.IPropertySource;\r
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.AcceptedTaxonPropertySource;\r
 \r
@@ -22,14 +23,16 @@ import eu.etaxonomy.taxeditor.propertysheet.name.AcceptedTaxonPropertySource;
  * @created 13.01.2009\r
  * @version 1.0\r
  */\r
-public class AcceptedNameComposite extends NameComposite {\r
+public class AcceptedNameComposite extends NameComposite<Taxon> {\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger\r
                        .getLogger(AcceptedNameComposite.class);\r
        \r
        public AcceptedNameComposite(AbstractTaxonEditor editor, Composite groupComposite) {\r
-               super(editor, groupComposite, NameComposite.ACCEPTED_TAXON, editor.getTaxon());\r
-               \r
+               super(editor, groupComposite, editor.getTaxon());\r
+       }\r
+       \r
+       public void initializeComposite(){\r
 //             setIsDraggable(false);\r
                setIcon(ACCEPTED_ICON);\r
                setFont(getViewerFont());\r
@@ -48,7 +51,7 @@ public class AcceptedNameComposite extends NameComposite {
        }\r
 \r
        @Override\r
-       protected TaxonNameBase<?, ?> getName() {\r
+       protected TaxonNameBase getName() {\r
                return taxon.getName();\r
        }\r
        \r
index 5914b94216d8e0ceb47db229928ab00f77c42a0b..e213376870ae678d4f74e899ebaa3f07ad1ffda3 100644 (file)
@@ -22,8 +22,6 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
 import eu.etaxonomy.taxeditor.operations.ChangeConceptRelationshipTypeOperation;\r
 import eu.etaxonomy.taxeditor.operations.ChangeConceptToSynonymOperation;\r
-import eu.etaxonomy.taxeditor.operations.ChangeHomotypicGroupOperation;\r
-import eu.etaxonomy.taxeditor.operations.ChangeSynonymToMisapplicationOperation;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.ConceptPropertySource;\r
 \r
 /**\r
@@ -31,7 +29,7 @@ import eu.etaxonomy.taxeditor.propertysheet.name.ConceptPropertySource;
  * @created 26.01.2009\r
  * @version 1.0\r
  */\r
-public class ConceptComposite extends NameComposite {\r
+public class ConceptComposite extends NameComposite<Taxon> {\r
        \r
        private Taxon relatedTaxon;\r
        private TaxonRelationshipType relationshipType;\r
@@ -44,12 +42,18 @@ public class ConceptComposite extends NameComposite {
        private ConceptComposite(TaxonNameEditor editor, Composite parent,\r
                        Taxon relatedTaxon, TaxonRelationshipType relationshipType, \r
                        boolean acceptedTaxonIsFromTaxon) {\r
-               super(editor, parent, NameComposite.CONCEPTRELATION, relatedTaxon);\r
-               \r
-               this.taxon = editor.getTaxon();\r
+               super(editor, parent, relatedTaxon);\r
+\r
                this.relatedTaxon = relatedTaxon;\r
                this.relationshipType = relationshipType;\r
                this.setAcceptedTaxonIsFromTaxon(acceptedTaxonIsFromTaxon);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.name.NameComposite#initializeComposite()\r
+        */\r
+       @Override\r
+       protected void initializeComposite() {\r
                \r
                setIsDraggable(true);\r
                setIcon(CONCEPT_ICON);\r
index 5c82a784a488635ffb99d4155e161a522b769fcd..b532e2b4b18864e47e2a971548d7cad851bf429c 100644 (file)
@@ -26,16 +26,19 @@ import eu.etaxonomy.taxeditor.propertysheet.name.MisapplicationPropertySource;
  * @created 13.01.2009\r
  * @version 1.0\r
  */\r
-public class MisappliedNameComposite extends NameComposite {\r
-       \r
-       private Taxon misappliedName;\r
+public class MisappliedNameComposite extends NameComposite<Taxon> {\r
        \r
        public MisappliedNameComposite(TaxonNameEditor editor, Composite parent, Taxon misappliedName) {\r
-               super(editor, parent, NameComposite.MISAPPLIED_NAME, misappliedName);\r
-               \r
-               this.taxon = editor.getTaxon();\r
-               this.misappliedName = misappliedName;\r
-               \r
+               super(editor, parent, misappliedName);\r
+\r
+       }\r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.name.NameComposite#initializeComposite()\r
+        */\r
+       @Override\r
+       protected void initializeComposite() {\r
                setIsDraggable(true);\r
                setIcon(MISAPPLIEDNAME_ICON);\r
                setFont(getViewerFont());\r
@@ -43,23 +46,23 @@ public class MisappliedNameComposite extends NameComposite {
                \r
                showSec();              \r
                \r
-               initTextViewer(misappliedName);\r
+               initTextViewer(getMisappliedName());\r
        }\r
 \r
        private void showSec() {\r
-               if (misappliedName == null) {\r
+               if (getMisappliedName() == null) {\r
                        return;\r
                }\r
                \r
-               if (misappliedName.getSec() == null) {\r
+               if (getMisappliedName().getSec() == null) {\r
                        setNonEditableInfo("sec. ???");\r
                } else {\r
-                       setNonEditableInfo("sec. " + misappliedName.getSec().getTitleCache());\r
+                       setNonEditableInfo("sec. " + getMisappliedName().getSec().getTitleCache());\r
                }\r
        }\r
        \r
        public Taxon getMisappliedName() {\r
-               return misappliedName;\r
+               return getTaxonBase();\r
        }\r
                \r
        public boolean setParent(Composite parent) {\r
@@ -73,7 +76,7 @@ public class MisappliedNameComposite extends NameComposite {
                                        ((HomotypicalGroupComposite)parent).getGroup();\r
                        \r
                        IUndoableOperation operation = new ChangeConceptToSynonymOperation\r
-                                       ("change misapplication to synonym", editor.getUndoContext(), taxon, misappliedName, homotypicalGroup, editor);\r
+                                       ("change misapplication to synonym", editor.getUndoContext(), taxon, getMisappliedName(), homotypicalGroup, editor);\r
                        EditorUtil.executeOperation(operation);\r
                        \r
                        doSetParent = true;\r
@@ -82,7 +85,7 @@ public class MisappliedNameComposite extends NameComposite {
        }\r
        \r
        public IPropertySource getPropertySource() {\r
-               return new MisapplicationPropertySource(misappliedName);\r
+               return new MisapplicationPropertySource(getMisappliedName());\r
        }\r
 \r
        @Override\r
@@ -93,15 +96,16 @@ public class MisappliedNameComposite extends NameComposite {
        protected void calculateErrors() {\r
                super.calculateErrors();\r
                \r
-               textViewer.setShowSecError(misappliedName);\r
+               textViewer.setShowSecError(getMisappliedName());\r
        }\r
 \r
        @Override\r
        protected TaxonNameBase<?, ?> getName() {\r
-               return misappliedName.getName();\r
+               return getMisappliedName().getName();\r
        }\r
        \r
        public Object getData () {\r
                return getMisappliedName();\r
        }\r
+\r
 }
\ No newline at end of file
index acebf8c282df8f8a89c57a108fa4d221530e29e2..418fb3b53e2a204dac1b3b2aac27154fadee3c53 100644 (file)
@@ -30,7 +30,7 @@ import eu.etaxonomy.taxeditor.editor.GroupedComposite;
 import eu.etaxonomy.taxeditor.editor.labels.ILabelImageStrategy;\r
 import eu.etaxonomy.taxeditor.editor.labels.LabelImageProvider;\r
 import eu.etaxonomy.taxeditor.model.ImageResources;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 import eu.etaxonomy.taxeditor.model.Resources;\r
 import eu.etaxonomy.taxeditor.operations.CreateSynonymInNewGroupOperation;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.BotanicalNamePropertySource;\r
@@ -45,7 +45,7 @@ import eu.etaxonomy.taxeditor.propertysheet.name.ZoologicalNamePropertySource;
  * @created 02.06.2008\r
  * @version 1.0\r
  */\r
-public abstract class NameComposite extends GroupedComposite{\r
+public abstract class NameComposite<T extends TaxonBase> extends GroupedComposite{\r
 \r
        /**\r
         * ************ COMPOSITE TYPES ************\r
@@ -116,6 +116,7 @@ public abstract class NameComposite extends GroupedComposite{
        private boolean isUseParser = false;\r
 \r
        protected boolean isParsing;\r
+       private T taxonBase;\r
        \r
        /**\r
         * The constructor for a DescriptionElementComposite. Takes a parent Composite on which to\r
@@ -126,10 +127,11 @@ public abstract class NameComposite extends GroupedComposite{
         * @param parent\r
         * @param managedForm\r
         */\r
-       public NameComposite(AbstractTaxonEditor editor, Composite parent, \r
-                       String compositeType, TaxonBase<?> taxonBase) {\r
+       public NameComposite(AbstractTaxonEditor editor, Composite parent, T taxonBase) {\r
                super(editor, parent);\r
 \r
+               this.taxonBase = taxonBase;\r
+               \r
                createTextViewer();\r
                createBorderSupport();\r
                createLineWrapSupport();\r
@@ -139,10 +141,18 @@ public abstract class NameComposite extends GroupedComposite{
                \r
                setDraggableControl(textViewer.getRulerControl());\r
                \r
-               createParser();\r
                createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
+               \r
+               initializeComposite();\r
+               createParser();\r
        }\r
        \r
+       /**\r
+        * Initialize the composite specific code\r
+        * \r
+        */\r
+       protected abstract void initializeComposite();\r
+       \r
        protected String getEmptyTextPrompt() {\r
                return EMPTY_NAME_PROMPT;\r
        }\r
@@ -177,7 +187,7 @@ public abstract class NameComposite extends GroupedComposite{
                                relatedName = nameRelation.getFromName();\r
                        }\r
                        \r
-                       setNonEditableInfo(typeLabel + " " + NameUtil.getDisplayName(relatedName));\r
+                       setNonEditableInfo(typeLabel + " " + NameHelper.getDisplayName(relatedName));\r
                }\r
        }\r
                \r
@@ -185,7 +195,7 @@ public abstract class NameComposite extends GroupedComposite{
                \r
                showNameRelations();\r
                \r
-               String text = NameUtil.getDisplayNameWithRef(taxonBase);\r
+               String text = NameHelper.getDisplayNameWithRef(taxonBase);\r
                \r
                if (text.length() == 0) {\r
                        initEmptyText();\r
@@ -275,7 +285,7 @@ public abstract class NameComposite extends GroupedComposite{
                \r
                showNameRelations();\r
                \r
-               String text = NameUtil.getDisplayNameWithRef((TaxonBase) getData());\r
+               String text = NameHelper.getDisplayNameWithRef((TaxonBase) getData());\r
                \r
                if (text.length() == 0) {\r
                        initEmptyText();\r
@@ -295,4 +305,11 @@ public abstract class NameComposite extends GroupedComposite{
                \r
                return false;\r
        }\r
+\r
+       /**\r
+        * @return the taxonBase\r
+        */\r
+       public T getTaxonBase() {\r
+               return taxonBase;\r
+       }\r
 }
\ No newline at end of file
index 4bd08111cd95e62b8b12f671d326f8176f4cd8df..ad5fb4612dc843d2f5dc68c94671ff316bad1fde 100644 (file)
@@ -19,7 +19,7 @@ import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 import eu.etaxonomy.taxeditor.operations.ChangeHomotypicGroupOperation;\r
 import eu.etaxonomy.taxeditor.operations.ChangeSynonymToMisapplicationOperation;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.SynonymPropertySource;\r
@@ -29,47 +29,48 @@ import eu.etaxonomy.taxeditor.propertysheet.name.SynonymPropertySource;
  * @created 13.01.2009\r
  * @version 1.0\r
  */\r
-public class SynonymComposite extends NameComposite {\r
+public class SynonymComposite extends NameComposite<Synonym> {\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger\r
                        .getLogger(SynonymComposite.class);\r
        \r
-       private Synonym synonym;\r
-       \r
        public SynonymComposite(TaxonNameEditor editor, Composite parent, Synonym synonym) {\r
-               super(editor, parent, null, synonym);\r
-               \r
-               this.taxon = editor.getTaxon();\r
-               this.synonym = synonym;\r
-               \r
+               super(editor, parent, synonym);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.name.NameComposite#initializeComposite()\r
+        */\r
+       @Override\r
+       protected void initializeComposite() {\r
                setIsDraggable(true);\r
                setFont(getViewerFont());\r
                setIndent(SYNONYM_INDENT);\r
                \r
                if (isHomotypic()) {\r
-                       if (NameUtil.isNameGroupBasionym(synonym.getName())) {\r
+                       if (NameHelper.isNameGroupBasionym(getSynonym().getName())) {\r
                                setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
                        } else {\r
                                setIcon(HOMOTYPIC_SYNONYM_ICON);\r
                        }       \r
                } else {\r
-                       if (NameUtil.isNameGroupBasionym(synonym.getName())) {\r
+                       if (NameHelper.isNameGroupBasionym(getSynonym().getName())) {\r
                                setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
                        } else {\r
                                setIcon(HETEROTYPIC_SYNONYM_ICON);\r
                        }\r
                }\r
                \r
-               initTextViewer(synonym);\r
+               initTextViewer(getSynonym());\r
        }\r
        \r
        private boolean isHomotypic() {\r
-               HomotypicalGroup group = synonym.getHomotypicGroup();\r
+               HomotypicalGroup group = getSynonym().getHomotypicGroup();\r
                return group.equals(taxon.getHomotypicGroup()); \r
        }\r
        \r
        public Synonym getSynonym() {\r
-               return synonym;\r
+               return getTaxonBase();\r
        }\r
 \r
        public boolean setParent(Composite parent) {\r
@@ -79,7 +80,7 @@ public class SynonymComposite extends NameComposite {
                // Has this been moved to the misapplied names group?\r
                if (parent instanceof MisappliedGroupComposite) {\r
                        IUndoableOperation operation = new ChangeSynonymToMisapplicationOperation\r
-                                       ("change to misapplication", editor.getUndoContext(), taxon, synonym, editor); //$NON-NLS-1$\r
+                                       ("change to misapplication", editor.getUndoContext(), taxon, getSynonym(), editor); //$NON-NLS-1$\r
                        EditorUtil.executeOperation(operation);\r
                        \r
                        doSetParent = true;\r
@@ -92,9 +93,9 @@ public class SynonymComposite extends NameComposite {
                                        ((HomotypicalGroupComposite)parent).getGroup();\r
                        \r
                        // Make sure we are not dropping synonym on its own group\r
-                       if (!homotypicalGroup.equals(synonym.getHomotypicGroup())) {\r
+                       if (!homotypicalGroup.equals(getSynonym().getHomotypicGroup())) {\r
                                IUndoableOperation operation = new ChangeHomotypicGroupOperation\r
-                                               ("change type", editor.getUndoContext(), taxon, synonym, homotypicalGroup, editor); //$NON-NLS-1$\r
+                                               ("change type", editor.getUndoContext(), taxon, getSynonym(), homotypicalGroup, editor); //$NON-NLS-1$\r
                                EditorUtil.executeOperation(operation);\r
                                \r
                                doSetParent = true;\r
@@ -104,10 +105,10 @@ public class SynonymComposite extends NameComposite {
        }\r
                \r
        public IPropertySource getPropertySource() {\r
-               if (NameUtil.isNameGroupBasionym(synonym.getName())) {\r
-                       return new BasionymSynonymPropertySource(synonym);\r
+               if (NameHelper.isNameGroupBasionym(getSynonym().getName())) {\r
+                       return new BasionymSynonymPropertySource(getSynonym());\r
                } else {\r
-                       return new SynonymPropertySource(synonym);\r
+                       return new SynonymPropertySource(getSynonym());\r
                }\r
        }\r
 \r
@@ -117,7 +118,7 @@ public class SynonymComposite extends NameComposite {
 \r
        @Override\r
        protected TaxonNameBase<?, ?> getName() {\r
-               return synonym.getName();\r
+               return getSynonym().getName();\r
        }\r
        \r
        public Object getData () {\r
index 15aef4a6d778274d1dd5c8f00a47f365e2145983..0e6533fcc7acd23511ebc1de5b24a5c7158a684a 100644 (file)
@@ -11,10 +11,14 @@ package eu.etaxonomy.taxeditor.editor.name;
 \r
 import java.beans.PropertyChangeEvent;\r
 import java.beans.PropertyChangeListener;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
 import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.core.runtime.Assert;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.swt.dnd.DND;\r
 import org.eclipse.swt.dnd.DropTarget;\r
@@ -22,21 +26,23 @@ import org.eclipse.swt.dnd.DropTargetAdapter;
 import org.eclipse.swt.dnd.DropTargetEvent;\r
 import org.eclipse.swt.dnd.Transfer;\r
 import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.swt.widgets.Event;\r
 import org.eclipse.swt.widgets.Listener;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
 \r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
 import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;\r
 import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
-import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
+import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
 import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
 import eu.etaxonomy.taxeditor.editor.WidgetTransfer;\r
@@ -54,6 +60,7 @@ public class TaxonNameEditor extends AbstractTaxonEditor
        private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);\r
                \r
        private static final String ID = "eu.etaxonomy.taxeditor.taxonNameEditor";\r
+\r
        \r
        public TaxonNameEditor(MultiPageTaxonEditor editor){\r
                super(editor);\r
@@ -70,6 +77,12 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                        }\r
                }\r
        };\r
+\r
+       private Map<HomotypicalGroup, HomotypicalGroupComposite> homotypicGroupComposites;\r
+\r
+       private MisappliedGroupComposite misappliedGroupComposite;\r
+\r
+       private ConceptGroupComposite conceptGroupComposite;\r
        \r
        @Override\r
        public void doSave(IProgressMonitor monitor) {}\r
@@ -105,17 +118,45 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                \r
                Taxon taxon = getTaxon();\r
                \r
-               firstGroupedComposite = (NameComposite) FreeTextElementFactory.getDefault().\r
-                               createAcceptedTaxon(this);\r
+               firstGroupedComposite = createAcceptedTaxon();\r
                                \r
-               // Draw synonym and misapplied name elements\r
-               for (TaxonBase<?> taxonBase : new IterableSynonymyList(taxon)) {\r
-                       if (taxonBase instanceof Synonym) {\r
-                               FreeTextElementFactory.getDefault().createSynonym(this, (Synonym) taxonBase);                           \r
-                       } else {\r
-                               FreeTextElementFactory.getDefault().createMisappliedName(this, (Taxon) taxonBase);\r
+               // Draw homotypic group synonyms\r
+               HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
+               \r
+               if (homotypicGroup != null) {\r
+                       List<Synonym> homotypicSynonyms = homotypicGroup.getSynonymsInGroup(taxon.getSec());\r
+                       for (Synonym synonym : homotypicSynonyms) {\r
+\r
+                               // Make sure synonym belongs to the taxon\r
+                               if (synonym.getAcceptedTaxa().contains(taxon)) {\r
+                                       createSynonym(synonym);\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               // Draw heterotypic synonym groups\r
+               List<HomotypicalGroup> heterotypicGroups = taxon.getHeterotypicSynonymyGroups();\r
+               for (HomotypicalGroup heterotypicGroup : heterotypicGroups) {\r
+                       \r
+                       // Make sure this is not the taxon's homotypic group\r
+                       if (!heterotypicGroup.equals(homotypicGroup)) {\r
+                                                       \r
+                               List<Synonym> heterotypicSynonyms = heterotypicGroup.\r
+                                               getSynonymsInGroup(taxon.getSec());\r
+                               for (Synonym synonym : heterotypicSynonyms) {\r
+\r
+                                       // Make sure synonym belongs to the taxon\r
+                                       if (synonym.getAcceptedTaxa().contains(taxon)) {\r
+                                               createSynonym(synonym);\r
+                                       }\r
+                               }\r
                        }\r
                }\r
+               \r
+               // Draw misapplied name elements\r
+               for(Taxon misappliedName : taxon.getMisappliedNames()){\r
+                       createMisappliedName(misappliedName);\r
+               }               \r
 \r
                // Draw concept relation elements\r
                Set<TaxonRelationship> taxonRelations = taxon.getTaxonRelations();\r
@@ -126,9 +167,22 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                                continue;\r
                        }\r
                                                        \r
-                       FreeTextElementFactory.getDefault().createConcept(this, relationship);\r
+                       createConcept(relationship);\r
                }               \r
                        \r
+               createDragSupport();\r
+               \r
+               setFocus();\r
+\r
+               // Redraw composite\r
+               composite.layout();\r
+       }\r
+               \r
+       \r
+       /**\r
+        * \r
+        */\r
+       private void createDragSupport() {\r
                // Listen for names being dragged outside of existing homotypic groups -\r
                //  user wants to create a new group\r
                Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
@@ -178,54 +232,47 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                                \r
 \r
                        }               \r
-               });                             \r
-               setFocus();\r
-\r
-               // Redraw composite\r
-               composite.layout();\r
+               });             \r
        }\r
-               \r
-       \r
+\r
        public Composite getAcceptedName() {\r
-               for(Composite c : getGroupedComposites()){\r
-                       if(c instanceof AcceptedNameComposite){\r
-                               return c;\r
-                       }\r
+               // accepted name should always reside in firstGroupComposite\r
+               if(firstGroupedComposite instanceof AcceptedNameComposite){\r
+                       return firstGroupedComposite;\r
                }\r
+               \r
+//             for(Composite c : getGroupedComposites()){\r
+//                     if(c instanceof AcceptedNameComposite){\r
+//                             return c;\r
+//                     }\r
+//             }\r
                return null;\r
        }\r
 \r
-       \r
-       public Composite getHomotypicGroup(HomotypicalGroup group) {\r
-               for(Composite c : getGroupComposites()){\r
-                       if(c instanceof HomotypicalGroupComposite){\r
-                               if (group.equals(\r
-                                               ((HomotypicalGroupComposite) c).getGroup())) {\r
-                                       return c;\r
-                               }\r
-                       }\r
+       /**\r
+        * @return\r
+        */\r
+       private Map<HomotypicalGroup, HomotypicalGroupComposite> getHomotypicGroups() {\r
+               if(homotypicGroupComposites == null){\r
+                       homotypicGroupComposites = new HashMap<HomotypicalGroup, HomotypicalGroupComposite>();\r
                }\r
-               return null;\r
+               return homotypicGroupComposites;\r
+       }\r
+       \r
+       public HomotypicalGroupComposite getHomotypicGroup(HomotypicalGroup group) {\r
+               return getHomotypicGroups().get(group);\r
        }\r
 \r
        \r
        public Composite getMisappliedGroup() {\r
-               for(Composite c : getGroupComposites()){\r
-                       if(c instanceof MisappliedGroupComposite){\r
-                               return c;\r
-                       }\r
-               }\r
-               return null;\r
+               return misappliedGroupComposite;\r
        }\r
 \r
        \r
        public Composite getMisappliedName(Taxon misappliedName) {\r
-               for(Composite c : getGroupedComposites()){\r
-                       if(c instanceof MisappliedNameComposite){\r
-                               if (misappliedName.equals(\r
-                                               ((MisappliedNameComposite) c).getMisappliedName())) {\r
-                                       return c;\r
-                               }\r
+               for(Control child : getMisappliedGroup().getChildren()){\r
+                       if(child instanceof MisappliedNameComposite){\r
+                               return (MisappliedNameComposite) child;\r
                        }\r
                }\r
                return null;\r
@@ -233,37 +280,34 @@ public class TaxonNameEditor extends AbstractTaxonEditor
 \r
        \r
        public Composite getSynonym(Synonym synonym) {\r
-               for(Composite c : getGroupedComposites()){\r
-                       if(c instanceof SynonymComposite){\r
-                               if (synonym.equals \r
-                                               (((SynonymComposite) c).getSynonym())) {\r
-                                       return c;\r
-                               }\r
+                               \r
+               GroupComposite groupComposite = getHomotypicGroup(synonym.getHomotypicGroup());\r
+               \r
+               for (Control child : groupComposite.getChildren()){\r
+                       if(child instanceof SynonymComposite \r
+                                       && synonym.equals(((SynonymComposite) child).getSynonym())){\r
+                               return (SynonymComposite) child;\r
                        }\r
                }\r
+               \r
                return null;\r
        }\r
 \r
        \r
        public Composite getConceptGroup() {\r
-               for(Composite c : getGroupComposites()){\r
-                       if(c instanceof ConceptGroupComposite){\r
-                               return c;\r
-                       }\r
-               }\r
-               return null;\r
+               return conceptGroupComposite;\r
        }\r
 \r
        \r
        public Composite getConcept(Taxon relatedConcept) {\r
-               for(Composite c : getGroupedComposites()){\r
-                       if(c instanceof ConceptComposite){\r
-                               if (relatedConcept.equals \r
-                                               (((ConceptComposite) c).getRelatedTaxon())) {\r
-                                       return c;\r
-                               }\r
+               for (Control child : getConceptGroup().getChildren()){\r
+                       if(child instanceof ConceptComposite \r
+                                       && relatedConcept.equals \r
+                                       (((ConceptComposite) child).getRelatedTaxon())){\r
+                               return (ConceptComposite) child;\r
                        }\r
                }\r
+\r
                return null;\r
        }\r
 \r
@@ -276,4 +320,111 @@ public class TaxonNameEditor extends AbstractTaxonEditor
        }\r
        \r
        \r
+       /***********************************************************************/\r
+       \r
+       private GroupedComposite createAcceptedTaxon() {\r
+               // Create a homotypic group composite for the accepted taxon\r
+               HomotypicalGroup group = getTaxon().getHomotypicGroup();\r
+               Assert.isNotNull(group, "Taxon does not have a homotypic group");\r
+               \r
+               createHomotypicalGroup(group);\r
+               \r
+               // Create a name composite for the accepted taxon\r
+               return new AcceptedNameComposite(this, getHomotypicGroup(group));\r
+       }\r
+       \r
+       private HomotypicalGroupComposite createHomotypicalGroup(HomotypicalGroup group) {\r
+\r
+               // Create the group composite\r
+               HomotypicalGroupComposite groupComposite = new HomotypicalGroupComposite(this, getTopLevelComposite(), group);\r
+\r
+               \r
+               //groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, editor.getManagedForm()));               \r
+                               \r
+               groupComposite.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+               getManagedForm().getToolkit().paintBordersFor(groupComposite.getParent());\r
+               \r
+               getHomotypicGroups().put(group, groupComposite);\r
+               \r
+               return groupComposite;\r
+       }\r
+\r
+\r
+       private Composite createSynonym(Synonym synonym) {              \r
+               // Get the synonym's homotypic group\r
+               HomotypicalGroup group = synonym.getHomotypicGroup();\r
+               Assert.isNotNull(group, "Synonym does not have a homotypic group");\r
+               \r
+               // If the group doesn't yet have a composite, create one and add it to the repository\r
+               HomotypicalGroupComposite groupComposite = getHomotypicGroup(group);\r
+               if (groupComposite == null) {\r
+                       groupComposite = createHomotypicalGroup(group);\r
+               }\r
+                               \r
+               // Create a synonym composite in the homotypical group\r
+               Composite synonymComposite = new SynonymComposite(this, groupComposite, synonym);\r
+                               \r
+               return synonymComposite;\r
+       }\r
+       \r
+       public Composite createMisappliedName(Taxon misappliedName) {\r
+               \r
+               // If there is no composite for misapplied names, \r
+               //      create one and add it to the repository\r
+               Composite groupComposite = getMisappliedGroup();\r
+               if (groupComposite == null) {\r
+                       groupComposite = createMisappliedGroup();\r
+               }\r
+               \r
+               // Create the name's composite\r
+               Composite composite = new MisappliedNameComposite(this, groupComposite, misappliedName);\r
+               \r
+               return composite;\r
+       }\r
+       \r
+       \r
+       public MisappliedGroupComposite createMisappliedGroup() {\r
+               // Create the group composite\r
+               misappliedGroupComposite = new MisappliedGroupComposite(this, this.getTopLevelComposite());\r
+               misappliedGroupComposite.addFocusListener(new CompositeBorderDecorator(misappliedGroupComposite, this.getManagedForm()));\r
+               \r
+               // Put the group composite before concept group composite, if any\r
+               Composite conceptGroupComposite = this.getConceptGroup();\r
+               if (conceptGroupComposite != null) {\r
+                       misappliedGroupComposite.moveAbove(conceptGroupComposite);\r
+               }\r
+               \r
+               return misappliedGroupComposite;\r
+       }\r
+       \r
+       \r
+       public Composite createConcept(TaxonRelationship relationship) {        \r
+               // If there is no composite for misapplied names, \r
+               //      create one and add it to the repository\r
+               Composite groupComposite = this.getConceptGroup();\r
+               if (groupComposite == null) {\r
+                       groupComposite = createConceptGroup();\r
+               }\r
+               \r
+               // Create the name's composite\r
+               Composite composite = ConceptComposite.getNewInstance(this, groupComposite, relationship);\r
+                               \r
+               return composite;\r
+       }\r
+\r
+       \r
+       public Composite createConceptGroup() {\r
+               // Create the group composite\r
+               conceptGroupComposite = new ConceptGroupComposite(this, this.getTopLevelComposite());\r
+               conceptGroupComposite.addFocusListener(new CompositeBorderDecorator(conceptGroupComposite, this.getManagedForm()));\r
+               \r
+               // Put the group composite after misapplied group composite, if any\r
+               Composite misappliedGroupComposite = this.getMisappliedGroup();\r
+               if (misappliedGroupComposite != null) {\r
+                       conceptGroupComposite.moveBelow(misappliedGroupComposite);\r
+               }\r
+               \r
+               return conceptGroupComposite;\r
+\r
+       }\r
 }
\ No newline at end of file
index e8afbefa13ad294526e06fe2d73ea8746782ee5f..d49f701a499fb2d6aca6c90075abfdf3db311fc6 100644 (file)
@@ -11,7 +11,7 @@ package eu.etaxonomy.taxeditor.propertysheet;
 \r
 import org.eclipse.jface.viewers.ICellEditorValidator;\r
 \r
-import eu.etaxonomy.taxeditor.model.TimeUtil;\r
+import eu.etaxonomy.taxeditor.model.TimeHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -29,7 +29,7 @@ public class YearValidator implements ICellEditorValidator {
                        return null;\r
                }\r
                try {\r
-                       TimeUtil.convertTimePeriod(year);\r
+                       TimeHelper.convertTimePeriod(year);\r
                } catch (NumberFormatException e) {\r
                        return "Year must be between 1750 and 2030. Two years can also be given in the format 'xxxx-xxxx'.";\r
                }\r
index 626af71b633da10c9e956059c9828bddde7f2bb2..9afea5b7f47bb89379795287235ee59e48ce082e 100644 (file)
@@ -30,7 +30,7 @@ import eu.etaxonomy.cdm.model.description.QuantitativeData;
 import eu.etaxonomy.cdm.model.description.TaxonInteraction;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.taxeditor.model.DescriptionUtil;\r
+import eu.etaxonomy.taxeditor.model.DescriptionHelper;\r
 import eu.etaxonomy.taxeditor.propertysheet.ICdmBasePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
 \r
@@ -216,7 +216,7 @@ public class DescriptionElementPropertySource implements ICdmBasePropertySource
                }\r
                \r
                if (id.equals(P_ID_ELEMENT_TEXT)) {\r
-                       return DescriptionUtil.getCache(descriptionElement);    \r
+                       return DescriptionHelper.getCache(descriptionElement);  \r
                }\r
 \r
                if (id.equals(P_ID_MICROREF)) {\r
@@ -253,7 +253,7 @@ public class DescriptionElementPropertySource implements ICdmBasePropertySource
                }\r
                \r
                if (id.equals(P_ID_ELEMENT_TEXT)) {\r
-                       DescriptionUtil.setCache(descriptionElement, (String) value);\r
+                       DescriptionHelper.setCache(descriptionElement, (String) value);\r
                }\r
                \r
                if (id.equals(P_ID_MICROREF)) {\r
index 6f3a0d888b94afc85272e0afa50b21e85f597ae8..c6b308586ca8ac6d037b78f17ee863a7a38d9b38 100644 (file)
@@ -5,7 +5,7 @@ package eu.etaxonomy.taxeditor.propertysheet.name;
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -30,6 +30,6 @@ public class SynonymPropertySource extends TaxonBasePropertySource {
         */\r
        private void setIsBasionym() {\r
                TaxonNameBase name = getTaxonBase().getName();\r
-               isBasionym = NameUtil.isNameGroupBasionym(name);\r
+               isBasionym = NameHelper.isNameGroupBasionym(name);\r
        }\r
 }\r
index c39bb3f905f2a70dfa243320b5e6140533f61177..2c63af7a9e25ece79ee4544cc3d515c2594b5420 100644 (file)
@@ -26,7 +26,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 import eu.etaxonomy.taxeditor.propertysheet.ICdmBasePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
@@ -61,7 +61,7 @@ public class TaxonBasePropertySource implements ICdmBasePropertySource {
                this.P_TAXONNAME = nameTitle;\r
                \r
                if (taxon != null && taxon.getName() != null && \r
-                               !NameUtil.isNameSupraSpecific(taxon.getName())) {\r
+                               !NameHelper.isNameSupraSpecific(taxon.getName())) {\r
                        P_TYPES = "Specimen Types";\r
                }\r
                \r
@@ -169,7 +169,7 @@ public class TaxonBasePropertySource implements ICdmBasePropertySource {
                                // TODO return NameTypeDesignations\r
                                TaxonNameBase<?, ?> name = taxonBase.getName();\r
                                Set<?> typeDesignations = null;\r
-                               if (NameUtil.isNameSupraSpecific(name)) {\r
+                               if (NameHelper.isNameSupraSpecific(name)) {\r
                                        typeDesignations = name.getNameTypeDesignations();\r
                                } else {\r
                                        typeDesignations = name.getSpecimenTypeDesignations();\r
index 844fb2cc745c5c35c4d78bcaa57c25c50864372e..70cba36f578c4cc4869725147bfaf5753b600030 100644 (file)
@@ -36,7 +36,7 @@ import eu.etaxonomy.taxeditor.editor.labels.ILabelImageStrategy;
 import eu.etaxonomy.taxeditor.editor.labels.LabelImageProvider;\r
 import eu.etaxonomy.taxeditor.editor.name.NameSelectComposite;\r
 import eu.etaxonomy.taxeditor.editor.reference.ReferenceSelectComposite;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
 import eu.etaxonomy.taxeditor.store.VocabularyStore;\r
 \r
@@ -105,7 +105,7 @@ public class ChooseRelationWizardPage extends WizardPage {
                \r
                setTitle("Create name relationship.");  \r
                setDescription("Create a relationship for  \""\r
-                               + NameUtil.getDisplayName(baseName) + "\".");\r
+                               + NameHelper.getDisplayName(baseName) + "\".");\r
        }\r
                \r
        public void createControl(Composite parent) {\r
@@ -203,12 +203,12 @@ public class ChooseRelationWizardPage extends WizardPage {
        }\r
        \r
        private void setDirectionLabels() {\r
-               String strDirection1 = "\"" + NameUtil.getDisplayName(relatedName) + "\" "\r
+               String strDirection1 = "\"" + NameHelper.getDisplayName(relatedName) + "\" "\r
                                + "is " + typeCombo.getText() + " " + "\""\r
-                               + NameUtil.getDisplayName(baseName) + "\"";\r
-               String strDirection2 = "\"" + NameUtil.getDisplayName(baseName) + "\" "\r
+                               + NameHelper.getDisplayName(baseName) + "\"";\r
+               String strDirection2 = "\"" + NameHelper.getDisplayName(baseName) + "\" "\r
                                + "is " + typeCombo.getText() + " " + "\""\r
-                               + NameUtil.getDisplayName(relatedName) + "\"";\r
+                               + NameHelper.getDisplayName(relatedName) + "\"";\r
                \r
                btnFromRelatedToBase.setText(strDirection1);\r
                btnFromBaseToRelated.setText(strDirection2);            \r
index 2528bca588b07522c40d29052ca6ecfd131d208b..8f54f4135ca57a831381dcc38dd9938bc43053f2 100644 (file)
@@ -36,7 +36,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
 import eu.etaxonomy.taxeditor.editor.labels.ILabelImageStrategy;\r
 import eu.etaxonomy.taxeditor.editor.labels.LabelImageProvider;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -66,7 +66,7 @@ public class ListNameRelationsWizardPage extends WizardPage {
                this.labelProvider = new LabelImageProvider(strategy);\r
 \r
                setTitle("Nomenclatural relations for \""\r
-                               + NameUtil.getDisplayName(name) + "\".");\r
+                               + NameHelper.getDisplayName(name) + "\".");\r
                setDescription("Select a relation and click \"Edit ...\" or \"Remove\", or click \"Add ...\" to create a new relation.");\r
        }\r
 \r
@@ -196,7 +196,7 @@ public class ListNameRelationsWizardPage extends WizardPage {
                if (nameRelationship.getFromName() == null) {\r
                        fromName = "";\r
                } else {\r
-                       fromName = NameUtil.getDisplayName(nameRelationship.getFromName());\r
+                       fromName = NameHelper.getDisplayName(nameRelationship.getFromName());\r
                }\r
                if (nameRelationship.getType() == null) {\r
                        type = "";\r
@@ -206,7 +206,7 @@ public class ListNameRelationsWizardPage extends WizardPage {
                if (nameRelationship.getToName() == null) {\r
                        toName = "";\r
                } else {\r
-                       toName = NameUtil.getDisplayName(nameRelationship.getToName());\r
+                       toName = NameHelper.getDisplayName(nameRelationship.getToName());\r
                }\r
                return "\"" + fromName + "\" is \"" + type + "\" of \"" + toName + "\"";\r
        }\r
index 31ebf16e90d79ffc59fb30c5fb8ba4ad5fae3b44..011c81dddecbcd5ae873ab8468bfe31fcc6c55be 100644 (file)
@@ -55,7 +55,7 @@ import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
 import eu.etaxonomy.cdm.model.reference.Thesis;\r
 import eu.etaxonomy.cdm.model.reference.WebPage;\r
 import eu.etaxonomy.taxeditor.model.Resources;\r
-import eu.etaxonomy.taxeditor.model.TimeUtil;\r
+import eu.etaxonomy.taxeditor.model.TimeHelper;\r
 import eu.etaxonomy.taxeditor.propertysheet.ICdmBasePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.TimePeriodPropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.YearValidator;\r
@@ -1092,7 +1092,7 @@ public class ReferencePropertySource implements ICdmBasePropertySource {
                                if (!year.equals("")) {\r
                                        \r
                                        // Convert to a TimePeriod\r
-                                       yearsPublished = TimeUtil.convertTimePeriod(year);\r
+                                       yearsPublished = TimeHelper.convertTimePeriod(year);\r
                                        \r
                                        // Update reference's dataPublished field\r
                                        TimePeriod datePublished = ((StrictReferenceBase<?>) reference).getDatePublished();\r
index 392364072299bcd8ddad7dd9d0d387b11011b90f..61c94010f7da233e198f6e6c5288bc0358d46e62 100644 (file)
@@ -20,7 +20,7 @@ import org.eclipse.ui.views.properties.PropertyDescriptor;
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 import eu.etaxonomy.taxeditor.propertysheet.type.wizard.TypeListWizard;\r
 \r
 /**\r
@@ -55,7 +55,7 @@ public class TypePropertyDescriptor extends PropertyDescriptor {
                                int returnCode = dialog.open();\r
                                \r
                                if (returnCode == Window.OK) {\r
-                                       if (NameUtil.isNameSupraSpecific(name)) {\r
+                                       if (NameHelper.isNameSupraSpecific(name)) {\r
                                                return new TypeCollectionPropertySource(name, name.getNameTypeDesignations());\r
                                        } else {\r
                                                return new TypeCollectionPropertySource(name, name.getSpecimenTypeDesignations());\r
index 22a320768b21aaedb0a1ce984f16f87b85a3e286..a54529b9478c3a2271c1580faf61f6577d61297e 100644 (file)
@@ -36,7 +36,7 @@ import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
 import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -57,7 +57,7 @@ public class ListTypeWizardPage extends WizardPage {
                this.typeDesignationsList = typeDesignationsList;\r
 \r
                setTitle("Type designations for \""\r
-                               + NameUtil.getDisplayName(name) + "\".");\r
+                               + NameHelper.getDisplayName(name) + "\".");\r
                setDescription("Select a type designation and click \"Edit ...\" or \"Remove\", or click \"Add ...\" to create a new designation.");\r
        }\r
        \r
index 2917181f421d34eecfdc20c5eaaa063b2cf931a2..24a71b90e1287b13cc80e83ccc29f3b0501c8a60 100644 (file)
@@ -15,7 +15,7 @@ import org.eclipse.jface.wizard.WizardPage;
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 \r
 \r
 /**\r
@@ -47,7 +47,7 @@ public class TypeDesignationWizard extends Wizard {
         * @see org.eclipse.jface.wizard.Wizard#addPages()\r
         */\r
        public void addPages() {\r
-               if (NameUtil.isNameSupraSpecific(name)) {\r
+               if (NameHelper.isNameSupraSpecific(name)) {\r
                        chooseTypePage = new ChooseNameTypeWizardPage(typeDesignation, name, typeDesignationsList);\r
                } else {\r
                        chooseTypePage = new ChooseSpecimenTypeWizardPage(typeDesignation, name, typeDesignationsList);\r
index 88e5cb77c04429d86b91cc07d51c736e62c9211e..87c3634fd62c252637625366846718874ce5849b 100644 (file)
@@ -19,7 +19,7 @@ import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -40,7 +40,7 @@ public class TypeListWizard extends Wizard {
                this.name = name;\r
                this.typeDesignationsList = new WritableList();\r
                if (name != null) {\r
-                       if (NameUtil.isNameSupraSpecific(name)) {\r
+                       if (NameHelper.isNameSupraSpecific(name)) {\r
                                this.typeDesignationsList.addAll(name.getNameTypeDesignations());\r
                        } else {\r
                                this.typeDesignationsList.addAll(name.getSpecimenTypeDesignations());                           \r
@@ -61,7 +61,7 @@ public class TypeListWizard extends Wizard {
                \r
                if (name != null) {\r
                        \r
-                       if (NameUtil.isNameSupraSpecific(name)) {\r
+                       if (NameHelper.isNameSupraSpecific(name)) {\r
                                \r
                                // Remove all designations\r
                                for (Object typeDesignation : name.getNameTypeDesignations()) {\r
diff --git a/taxeditor-editor/src/main/resources/TaonDescriptionEditor.screen b/taxeditor-editor/src/main/resources/TaonDescriptionEditor.screen
new file mode 100644 (file)
index 0000000..cefc604
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<model:Screen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:model="http://wireframesketcher.com/1.0/model.ecore">
+  <widgets xsi:type="model:Panel" x="104" y="80" width="849" height="529"/>
+  <widgets xsi:type="model:Panel" x="144" y="112" width="377" height="465"/>
+  <widgets xsi:type="model:VScrollbar" x="520" y="113" height="464"/>
+  <widgets xsi:type="model:Button" x="552" y="113" width="41" text="Add"/>
+  <widgets xsi:type="model:Button" x="552" y="152" width="41" text="Remove"/>
+  <widgets xsi:type="model:Label" x="265" y="132">
+    <font size="32"/>
+  </widgets>
+  <hRuler/>
+  <vRuler/>
+  <font/>
+</model:Screen>
index 9fe4707065e999210c03bf4fc5919f1258913610..4931fd22538bbeb306bd79311fc83da97319d915 100644 (file)
@@ -2,7 +2,7 @@
 <feature
       id="eu.etaxonomy.taxeditor"
       label="Taxeditor Feature"
-      version="2.0.0.v20090624-1625"
+      version="2.0.0.v20090630-1147"
       provider-name="EDIT">
 
    <description url="http://www.example.com/description">
          id="eu.etaxonomy.taxeditor.application"
          download-size="0"
          install-size="0"
-         version="2.0.0.v20090624-1625"
+         version="2.0.0.v20090630-1147"
          unpack="false"/>
 
    <plugin
          id="eu.etaxonomy.taxeditor.editor"
          download-size="0"
          install-size="0"
-         version="2.0.0.v20090624-1625"
+         version="2.0.0.v20090630-1147"
          unpack="false"/>
 
    <plugin
          id="eu.etaxonomy.taxeditor.navigation"
          download-size="0"
          install-size="0"
-         version="2.0.0.v20090624-1625"
+         version="2.0.0.v20090630-1147"
          unpack="false"/>
 
    <plugin
          id="eu.etaxonomy.taxeditor.store"
          download-size="0"
          install-size="0"
-         version="2.0.0.v20090624-1625"
+         version="2.0.0.v20090630-1147"
+         unpack="false"/>
+
+   <plugin
+         id="eu.etaxonomy.taxeditor.bulkeditor"
+         download-size="0"
+         install-size="0"
+         version="2.0.0.v20090630-1147"
          unpack="false"/>
 
 </feature>
index fbfbf1a89b68d994cad96c80895c189172aba812..66450b12adb5fab170d8a849939c3c22ca923c3e 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: EDIT Taxonomic Editor - Navigation Bundle
 Bundle-SymbolicName: eu.etaxonomy.taxeditor.navigation;singleton:=true
-Bundle-Version: 2.0.0.v20090624-1625
+Bundle-Version: 2.0.0.v20090630-1147
 Bundle-Activator: eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin
 Bundle-Vendor: EDIT
 Export-Package: eu.etaxonomy.taxeditor.navigation,
index bfe4f19586bf0211749cf39a8aecabd4ea44d2fe..6c13ec8ccfa8af979b40a306eebd96e1d48a7ec9 100644 (file)
@@ -15,15 +15,8 @@ import java.util.UUID;
 
 import org.apache.log4j.Logger;
 import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.IOperationHistory;
 import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.commands.operations.UndoContext;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeSelection;
@@ -32,7 +25,6 @@ import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.navigator.CommonViewer;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -53,7 +45,6 @@ import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
  */
 public class NavigationUtil extends AbstractUtility{
        private static final Logger logger = Logger.getLogger(NavigationUtil.class);
-       private static IStatusLineManager statusLineManager;
        private static IUndoContext defaultUndoContext;
        
        /**
@@ -91,40 +82,10 @@ public class NavigationUtil extends AbstractUtility{
                }
        }
        
-       public static IOperationHistory getWorkbenchOperationHistory() {
-               return TaxeditorEditorPlugin.getDefault().getWorkbench().
-                                       getOperationSupport().getOperationHistory();
-       }
-       
        public static IUndoContext getWorkbenchUndoContext() {
                return TaxeditorEditorPlugin.getDefault().getWorkbench().
                                        getOperationSupport().getUndoContext();
        }
-       
-       public static void executeOperation(IUndoableOperation operation){
-               try {
-                       IStatus status = getWorkbenchOperationHistory().execute(operation, getMonitor(),
-                                                               WorkspaceUndoUtil.getUIInfoAdapter(getShell()));
-                       String statusString = status.equals(Status.OK_STATUS) ? "completed" : "cancelled";
-                       setStatusLine(operation.getLabel() + " " + statusString + ".");
-               } catch (ExecutionException e) {
-                       logger.error("Error executing operation: " + operation.getLabel(), e);
-               }
-       }
-       
-       private static IProgressMonitor getMonitor() {
-               statusLineManager.setCancelEnabled(false);
-               return statusLineManager.getProgressMonitor();
-       }
-       
-       public static void setStatusLineManager(IStatusLineManager manager) {
-               statusLineManager = manager;
-       }
-
-       public static void setStatusLine(String message) {
-               statusLineManager.setMessage(message);
-       }
-       
 
        /**
         * Returns the selected taxon for referencing in context menus
index 59a34fbc3d4445be08cd973028d1eb90f57a202f..9ca40c319a7a5101a9ca3d062fb8260a56c4e60b 100644 (file)
@@ -26,7 +26,7 @@ import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
 \r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
-import eu.etaxonomy.taxeditor.model.NameUtil;\r
+import eu.etaxonomy.taxeditor.model.NameHelper;\r
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;\r
 import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
 import eu.etaxonomy.taxeditor.operations.MoveTaxonOperation;\r
@@ -93,8 +93,8 @@ public class TaxonDropAdapterAssistant extends CommonDropAdapterAssistant implem
                if (childTaxonNode.getParent().equals(newParentTaxonNode)){\r
                        \r
                        MessageDialog.openError(NavigationUtil.getShell(), "Can't move taxon.",\r
-                                       "'" + NameUtil.getDisplayName(childTaxonNode.getTaxon()) + "' sits above " +\r
-                                       "'" + NameUtil.getDisplayName(newParentTaxonNode.getTaxon()) + "' " +\r
+                                       "'" + NameHelper.getDisplayName(childTaxonNode.getTaxon()) + "' sits above " +\r
+                                       "'" + NameHelper.getDisplayName(newParentTaxonNode.getTaxon()) + "' " +\r
                                        "in the taxonomic hierarchy.");\r
                        \r
                        return Status.CANCEL_STATUS;\r
index 391ec61585c417ce4c0705a2297632f42d61c181..aba36dd275349c45843199d901e3ac2b69cb3b08 100644 (file)
@@ -23,12 +23,14 @@ 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.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
 
+import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.model.Resources;
 import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin;
 
@@ -39,78 +41,81 @@ import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin;
  */
 public class SearchBar extends WorkbenchWindowControlContribution{
        private static final Logger logger = Logger.getLogger(SearchBar.class);
-       private Composite searchComposite;
-       private Text searchText;
-       private Button searchButton;
+       private Text text_search;
+       private Button button_search;
        private String srv;
        
        private String defaultText = "Use \"*\" for wildcard searching";
+       private Button button_configure;
 
        @Override
        protected Control createControl(Composite parent) {
                //parent.setLayout(new FillLayout());
                
-               searchComposite = new Composite(parent, SWT.NONE);
+               Composite composite = new Composite(parent, SWT.NONE);
                final GridLayout gridLayout = new GridLayout();
-               gridLayout.numColumns = 2;
+               gridLayout.numColumns = 3;
                gridLayout.marginWidth = 0;
                gridLayout.marginHeight = 0;
                gridLayout.verticalSpacing = 0;
                gridLayout.horizontalSpacing = 0;
-               searchComposite.setLayout(gridLayout);
+               composite.setLayout(gridLayout);
                // FIXME we have this here for debugging purposes, remove color once the layout of the search bar is correct
-               searchComposite.setBackground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
+               composite.setBackground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
                
-               searchText = new Text(searchComposite, SWT.SEARCH);
+               text_search = new Text(composite, SWT.SEARCH);
                GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
 
-               searchText.setLayoutData(gridData);
-               searchText.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
-               searchText.setText(defaultText);
+               text_search.setLayoutData(gridData);
+               text_search.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
+               text_search.setText(defaultText);
 
-               searchText.addFocusListener(new FocusListener() {
+               text_search.addFocusListener(new FocusListener() {
 
                        public void focusGained(FocusEvent e) {
-                               searchText.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOCUS));
-                               searchText.setText("");
+                               text_search.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOCUS));
+                               text_search.setText("");
                        }
 
                        public void focusLost(FocusEvent e) {
-                               if (searchText.getText() == "") {
-                                       searchText.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
-                                       searchText.setText(defaultText);                                        
+                               if (text_search.getText() == "") {
+                                       text_search.setForeground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
+                                       text_search.setText(defaultText);                                       
                                }       
                        }
                });
-               searchText.addKeyListener(new KeyAdapter() {
+               text_search.addKeyListener(new KeyAdapter() {
                        public void keyReleased(KeyEvent e) {
                                int key = e.keyCode;
                                if (key == SWT.CR) {
-                                       openSearchResultsView(searchText);
+                                       openSearchResultsView(text_search);
                                } else {
                                        setSearchButtonEnabled();
                                }
                        }
                });
                
-               searchButton = new Button(searchComposite, SWT.NONE);
-               searchButton.setText("Search");
-               searchButton.setEnabled(false);
-               searchButton.addMouseListener(new MouseAdapter() {
+               button_configure = new Button(composite, SWT.DROP_DOWN);
+               button_configure.setImage(ImageResources.getImage(ImageResources.MOVE_ICON));
+               
+               button_search = new Button(composite, SWT.PUSH);
+               button_search.setText("Search");
+               button_search.setEnabled(false);
+               button_search.addMouseListener(new MouseAdapter() {
                        
                        // Populate search results resultsTable after clicking button
                        public void mouseUp(MouseEvent e) {
-                               openSearchResultsView(searchText);
+                               openSearchResultsView(text_search);
                        }
                });
-               return searchComposite;
+               return composite;
        }
 
        protected void setSearchButtonEnabled() {
-               if (searchText.getText().length() == 0) {
-                       searchButton.setEnabled(false);
+               if (text_search.getText().length() == 0) {
+                       button_search.setEnabled(false);
                } else {
-                       searchButton.setEnabled(true);                  
+                       button_search.setEnabled(true);                 
                }
        }
 
index a55ed0e826c5341da6737f22bbeb07c75e746c55..8beba2eccebc5148f172ff7ca368364331385219 100644 (file)
@@ -12,7 +12,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;
-import eu.etaxonomy.taxeditor.model.NameUtil;
+import eu.etaxonomy.taxeditor.model.NameHelper;
 
 /**
  * 
@@ -73,14 +73,14 @@ import eu.etaxonomy.taxeditor.model.NameUtil;
        private String getSynonymyListDisplay(Taxon taxon) {
                IterableSynonymyList synonymyList = new IterableSynonymyList(
                                taxon);
-               String synonymyListDisplay = NameUtil
+               String synonymyListDisplay = NameHelper
                                .getDisplayName(taxon);
                
                for (TaxonBase<?> synonymOrMisName : synonymyList) {
                        TaxonNameBase<?, ?> name = synonymOrMisName.getName();
                        if (name != null) {
                                synonymyListDisplay += "\n      "
-                                               + NameUtil.getDisplayName(name);
+                                               + NameHelper.getDisplayName(name);
                        }
                }
                return synonymyListDisplay;
index 085173b5ce904af28e487e3c25be3d2576076227..e13335aca08694bc9be683229f2302c0fc3a2d4f 100644 (file)
@@ -9,6 +9,8 @@ import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
 
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
 /**
  * An action bar advisor is responsible for creating, adding, and disposing of
  * the actions added to a workbench window. Each window will be populated with
@@ -34,7 +36,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                // Registering also provides automatic disposal of the actions when
                // the window is closed.
 
-               NavigationUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
+               StoreUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
                
                exitAction = ActionFactory.QUIT.create(window);
                register(exitAction);
index c515e0b3418d0b51d0e7e1576e55f0e86a43756e..65c6d83057cb3a1f9dafabe46b4c0bc6a00d6129 100644 (file)
             name="Datasource"
             restorable="true">
       </view>
+      <view
+            class="eu.etaxonomy.taxeditor.user.view.UserManagerView"
+            id="eu.etaxonomy.taxeditor.store.userManagerView"
+            name="User Manager"
+            restorable="true">
+      </view>
    </extension>
    <extension
          point="org.eclipse.ui.menus">
                      label="Datasource"
                      style="push">
                </command>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.store.operations.showUserManagerView"
+                     label="User Manager"
+                     style="push">
+               </command>
             </menu>
          </menu>
       </menuContribution>
                style="push">
          </command>
       </menuContribution>
+      <menuContribution
+            locationURI="DISABLEDtoolbar:org.eclipse.ui.main.toolbar">
+         <toolbar
+               id="eu.etaxonomy.taxeditor.store.authentication.toolbar">
+            <control
+                  class="eu.etaxonomy.taxeditor.user.AuthenticatedUserBar">
+            </control>
+         </toolbar>
+      </menuContribution>
+      <menuContribution
+            locationURI="popup:eu.etaxonomy.taxeditor.store.userManagerView">
+         <command
+               commandId="eu.etaxonomy.taxeditor.store.createUser"
+               label="New"
+               style="push">
+         </command>
+         <command
+               commandId="eu.etaxonomy.taxeditor.store.editUser"
+               label="Edit"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.store.userManager.separator"
+               visible="true">
+         </separator>
+         <command
+               commandId="eu.etaxonomy.taxeditor.store.deleteUser"
+               label="Delete"
+               style="push">
+         </command>
+      </menuContribution>
    </extension>
    <extension
          name="Window Menu Commands"
             id="eu.etaxonomy.taxeditor.store.operations.showDatasourceView"
             name="Show Datasource View">
       </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.handler.ShowUserManagerViewHandler"
+            id="eu.etaxonomy.taxeditor.store.operations.showUserManagerView"
+            name="Show User Manager View">
+      </command>
    </extension>
    <extension
          name="Popup Menu Commands"
             name="Delete Datasource">
       </command>
    </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.user.handler.CreateUserHandler"
+            id="eu.etaxonomy.taxeditor.store.createUser"
+            name="Create User">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.user.handler.EditUserHandler"
+            id="eu.etaxonomy.taxeditor.store.editUser"
+            name="Edit User">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.user.handler.DeleteUserHandler"
+            id="eu.etaxonomy.taxeditor.store.deleteUser"
+            name="Delete User">
+      </command>
+   </extension>
    <extension
          point="org.eclipse.ui.perspectiveExtensions">
       <perspectiveExtension
index 539f162fd5c820f4233c26caa74f733ff07dac1f..115ace77c0ea8b483aeb4bccad45e9dbba46e412 100644 (file)
@@ -24,8 +24,12 @@ import org.springframework.security.LockedException;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
+ * TODO wrap in a LoginModule 
+ * see: http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/spi/LoginModule.html
+ * 
  * @author n.hoffmann
  * @created 16.06.2009
  * @version 1.0
@@ -35,8 +39,8 @@ public class LoginDialog extends Dialog {
 
        private static final Logger logger = Logger.getLogger(LoginDialog.class);
 
-       private static Text passwordText;
-       private static Text usernameText;
+       private static Text text_password;
+       private static Text text_username;
 
        /**
         * @param parentShell
@@ -64,17 +68,17 @@ public class LoginDialog extends Dialog {
                userNameLabel.setText("Username");
 
                // Textfield for the username
-               usernameText = new Text(composite, SWT.BORDER);
-               usernameText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               text_username = new Text(composite, SWT.BORDER);
+               text_username.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
                // Label for the password
                final CLabel passwordLabel = new CLabel(composite, SWT.NONE);
                passwordLabel.setText("Password");
 
                // Textfield for the password
-               passwordText = new Text(composite, SWT.BORDER);
-               passwordText.setEchoChar('*');
-               passwordText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               text_password = new Text(composite, SWT.BORDER);
+               text_password.setEchoChar('*');
+               text_password.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
                
                
                return composite;
@@ -86,21 +90,19 @@ public class LoginDialog extends Dialog {
         */
        @Override
        protected void okPressed() {
+               String username = text_username.getText().trim();
+               String password = text_password.getText().trim();
                
-               String username = usernameText.getText().trim();
-               String password = passwordText.getText().trim();
-               
-               // password is stored as salted md5 hash
-               String passwordHash = password;
-               
-               UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, passwordHash); 
+               UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); 
                
                try{
-                       CdmStore.getAuthenticationManager().authenticate(token);
+                       CdmStore.authenticate(token);                   
                }catch(BadCredentialsException e){
                        logger.error("Bad credentials", e);
+                       StoreUtil.warningDialog("Could not authenticate. Reason: Bad Credentials");
                }catch(LockedException e){
                        logger.error("Account is locked", e);
+                       StoreUtil.warningDialog("Could not authenticate. Reason: Account is locked");
                }catch(IllegalArgumentException e){
                        logger.error("Null argument for either user or password", e);
                }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowUserManagerViewHandler.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowUserManagerViewHandler.java
new file mode 100644 (file)
index 0000000..878cb25
--- /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.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
+import eu.etaxonomy.taxeditor.user.view.UserManagerView;
+
+/**
+ * @author n.hoffmann
+ * @created 01.07.2009
+ * @version 1.0
+ */
+public class ShowUserManagerViewHandler  extends AbstractHandler implements IHandler{
+       private static final Logger logger = Logger
+                       .getLogger(ShowUserManagerViewHandler.class);
+       
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               try {
+                       TaxeditorStorePlugin.getDefault().getWorkbench()
+                               .getActiveWorkbenchWindow().getActivePage().showView(UserManagerView.ID, 
+                                       null, IWorkbenchPage.VIEW_VISIBLE);
+               } catch (PartInitException e) {
+                       logger.error("Error opening user management view.", e);
+               }
+               return null;
+       }
+}
index cfd94de7d1a4583b74578e0cf5db23f188a39680..e1757216ef2b213c8aac9ff87aa0a6042ea58a4d 100644 (file)
 
 package eu.etaxonomy.taxeditor.model;
 
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.resource.ColorRegistry;
 import org.eclipse.jface.resource.FontRegistry;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.themes.ITheme;
 import org.eclipse.ui.themes.IThemeManager;
 
-import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 /**
@@ -28,6 +36,9 @@ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
  * @version 1.0
  */
 public abstract class AbstractUtility {
+       private static final Logger logger = Logger.getLogger(AbstractUtility.class);
+       
+       protected static IStatusLineManager statusLineManager;
        
        /**
         * @return
@@ -85,4 +96,34 @@ public abstract class AbstractUtility {
                messageBox.open();
        }
        
+       public static IStatus executeOperation(IUndoableOperation operation){
+               if(getOperationHistory() == null){
+                       throw new IllegalArgumentException("Ther is no operation history for this context");
+               }
+               
+               try {
+                       IStatus status = getOperationHistory().execute(operation, getMonitor(),
+                                                               WorkspaceUndoUtil.getUIInfoAdapter(getShell()));
+                       String statusString = status.equals(Status.OK_STATUS) ? "completed" : "cancelled";
+                       setStatusLine(operation.getLabel() + " " + statusString + ".");
+                       return status;
+               } catch (ExecutionException e) {
+                       logger.error("Error executing operation: " + operation.getLabel(), e);
+               }
+               return null;
+       }
+       
+       public static IOperationHistory getOperationHistory(){
+               return TaxeditorStorePlugin.getDefault().getWorkbench().
+                                                       getOperationSupport().getOperationHistory();
+       }
+       
+       public static void setStatusLine(String message) {
+               statusLineManager.setMessage(message);
+       }
+       
+       protected static IProgressMonitor getMonitor() {
+               statusLineManager.setCancelEnabled(false);
+               return statusLineManager.getProgressMonitor();
+       }
 }
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CommonHelper.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CommonHelper.java
new file mode 100644 (file)
index 0000000..23d7f34
--- /dev/null
@@ -0,0 +1,39 @@
+// $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 org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class CommonHelper {
+       private static final Logger logger = Logger.getLogger(CommonHelper.class);
+       
+       /**
+        * 
+        * @param text
+        * @param listener
+        * @param string
+        */
+       public static void editTextWithoutTriggeringListeners(Text text, ModifyListener listener, String string){
+               text.removeModifyListener(listener);
+               
+               String textString = string != null ? string : "";
+               
+               text.setText(textString);
+               text.addModifyListener(listener);
+       }
+}
similarity index 93%
rename from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionUtil.java
rename to taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java
index 79b8fb69eef4bb904c9196f9636cdb75ce5e61c7..a7f3d446cf39a0065a303e9173f9d96e5264f439 100644 (file)
@@ -23,9 +23,9 @@ import eu.etaxonomy.cdm.model.description.TextData;
  * @created 02.04.2009\r
  * @version 1.0\r
  */\r
-public class DescriptionUtil {\r
+public class DescriptionHelper {\r
        private static final Logger logger = Logger\r
-                       .getLogger(DescriptionUtil.class);\r
+                       .getLogger(DescriptionHelper.class);\r
 \r
        /**\r
         * Returns whatever the element's title cache equivalent is,\r
similarity index 95%
rename from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesUtil.java
rename to taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ImagesHelper.java
index 33a404e903dbc916ab107e20b86b20f83932c8af..34f5942d1f17daa230de19ca94ef0206b40be0ad 100644 (file)
@@ -30,7 +30,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  * @created 31.03.2009\r
  * @version 1.0\r
  */\r
-public class ImagesUtil {\r
+public class ImagesHelper {\r
        \r
        public static Set<ImageFile> getImages(TaxonDescription description){\r
                Set<ImageFile> images = new HashSet<ImageFile>();\r
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/IterableSynonymyList.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/IterableSynonymyList.java
deleted file mode 100644 (file)
index ffd787a..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.taxeditor.model;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-\r
-/**\r
- * Retrieves the elements of a <code>Taxon</code>'s synonymy list, including misapplied names,\r
- * using an iterator. \r
- * <p> \r
- * Note: does not return an entry for the <code>Taxon</code> itself.\r
- * </p>\r
- * \r
- * @author p.ciardelli\r
- * @created 09.05.2008\r
- * @version 1.0\r
- */\r
-@SuppressWarnings("unchecked")\r
-public class IterableSynonymyList implements Iterable<TaxonBase> {\r
-       \r
-       private Taxon taxon;\r
-\r
-       public IterableSynonymyList(Taxon taxon) {\r
-               this.taxon = taxon;\r
-       }\r
-\r
-       public Iterator<TaxonBase> iterator() {\r
-               return new TaxonIterator(taxon);\r
-       }\r
-       \r
-       class TaxonIterator implements Iterator<TaxonBase> {\r
-\r
-               List<TaxonBase> synonymyList;\r
-               int index = 0;\r
-               \r
-               public TaxonIterator(Taxon taxon) {\r
-                       synonymyList = new ArrayList<TaxonBase>();\r
-                       HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
-                       \r
-                       if (homotypicGroup != null) {\r
-                               List<Synonym> homotypicSynonyms = homotypicGroup.getSynonymsInGroup(taxon.getSec());\r
-                               for (Synonym synonym : homotypicSynonyms) {\r
-\r
-                                       // Make sure synonym belongs to the taxon\r
-                                       if (synonym.getAcceptedTaxa().contains(taxon)) {\r
-                                               synonymyList.add(synonym);\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-                       List<HomotypicalGroup> heterotypicGroups = taxon.getHeterotypicSynonymyGroups();\r
-                       for (HomotypicalGroup heterotypicGroup : heterotypicGroups) {\r
-                               \r
-                               // Make sure this is not the taxon's homotypic group\r
-                               if (!heterotypicGroup.equals(homotypicGroup)) {\r
-                                                               \r
-                                       List<Synonym> heterotypicSynonyms = heterotypicGroup.\r
-                                                       getSynonymsInGroup(taxon.getSec());\r
-                                       for (Synonym synonym : heterotypicSynonyms) {\r
-\r
-                                               // Make sure synonym belongs to the taxon\r
-                                               if (synonym.getAcceptedTaxa().contains(taxon)) {\r
-                                                       synonymyList.add(synonym);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-                       Set<Taxon> misappliedNames = taxon.getMisappliedNames();\r
-                       for (Taxon misappliedName : misappliedNames) {\r
-                               synonymyList.add(misappliedName);\r
-                       }\r
-                       \r
-               }\r
-\r
-               public boolean hasNext() {\r
-                       if (synonymyList.size() == index) {\r
-                               return false;\r
-                       }\r
-                       return true;\r
-               }\r
-\r
-               public TaxonBase<?> next() {\r
-                       TaxonBase<?> next = synonymyList.get(index);\r
-                       index++;\r
-                       return next;\r
-               }\r
-\r
-               public void remove() {}\r
-       }\r
-}\r
similarity index 98%
rename from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameUtil.java
rename to taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/NameHelper.java
index 94e2957a84476255d14f1659106ba44cf4ca8cd8..440d78e7bf3491f3e08249752546c9b0b23f6c66 100644 (file)
@@ -21,7 +21,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
  * @created 18.03.2009
  * @version 1.0
  */
-public class NameUtil {        
+public class NameHelper {      
 
        @SuppressWarnings("unchecked")
        public static String getDisplayName(TaxonNameBase name){
similarity index 98%
rename from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymUtil.java
rename to taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymHelper.java
index 278cf53b0bb685e65677808c8cbdd2d3d7a27cd0..92096de8ea09e221045b73ea437e72ee9456e3d3 100644 (file)
@@ -29,7 +29,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
  * @created 22.04.2009
  * @version 1.0
  */
-public class SynonymUtil {
+public class SynonymHelper {
        
        /**
         * Creates a basionym relationship between basionymName and
@@ -241,7 +241,7 @@ public class SynonymUtil {
                }
                
                // Swap taxon and synonym
-               if (NameUtil.isNameHomotypic(newSynonym.getName(), newTaxon)) {
+               if (NameHelper.isNameHomotypic(newSynonym.getName(), newTaxon)) {
                        newTaxon.addSynonym(newSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());
                } else {
                        newTaxon.addSynonym(newSynonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());                      
@@ -250,7 +250,7 @@ public class SynonymUtil {
                //      Move the other synonyms from old accepted taxon to new accepted taxon
                for (Synonym synonym : oldTaxon.getSynonyms()) {
                        SynonymRelationshipType synRelType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();
-                       if (NameUtil.isNameHomotypic(synonym.getName(), newTaxon) != true) {
+                       if (NameHelper.isNameHomotypic(synonym.getName(), newTaxon) != true) {
                                synRelType = SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF();
                        }
                        newTaxon.addSynonym(synonym, synRelType);
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxeditorLoginModule.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxeditorLoginModule.java
new file mode 100644 (file)
index 0000000..f8c89f6
--- /dev/null
@@ -0,0 +1,80 @@
+// $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 java.util.Map;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+
+import org.apache.log4j.Logger;
+
+/**
+ * @author n.hoffmann
+ * @created 01.07.2009
+ * @version 1.0
+ */
+public class TaxeditorLoginModule implements LoginModule {
+       private static final Logger logger = Logger
+                       .getLogger(TaxeditorLoginModule.class);
+
+       /* (non-Javadoc)
+        * @see javax.security.auth.spi.LoginModule#abort()
+        */
+       public boolean abort() throws LoginException {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see javax.security.auth.spi.LoginModule#commit()
+        */
+       public boolean commit() throws LoginException {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see javax.security.auth.spi.LoginModule#initialize(javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler, java.util.Map, java.util.Map)
+        */
+       public void initialize(Subject subject, CallbackHandler callbackHandler,
+                       Map<String, ?> sharedState, Map<String, ?> options) {
+               // TODO Auto-generated method stub
+
+       }
+
+       /* (non-Javadoc)
+        * @see javax.security.auth.spi.LoginModule#login()
+        */
+       public boolean login() throws LoginException {
+               
+//             Shell shell = TaxeditorStorePlugin.getDefault().getWorkbench()
+//             .getActiveWorkbenchWindow().getShell();
+//
+//             LoginDialog loginDialog = new LoginDialog(shell);
+//             token = loginDialog.open();
+//             
+//             Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token);
+//             SecurityContextHolder.getContext().setAuthentication(authentication);
+//             
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see javax.security.auth.spi.LoginModule#logout()
+        */
+       public boolean logout() throws LoginException {
+               // TODO Auto-generated method stub
+               return false;
+       }
+}
similarity index 96%
rename from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonUtil.java
rename to taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonHelper.java
index a98598ae8e3b494e691371a7e6b01375b48961c6..770dc2104ae7d6e3704919be86fd66df2be09fe2 100644 (file)
@@ -22,9 +22,9 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
  * @created 25.03.2009
  * @version 1.0
  */
-public class TaxonUtil {
+public class TaxonHelper {
        private static final Logger logger = Logger
-               .getLogger(TaxonUtil.class);
+               .getLogger(TaxonHelper.class);
        
        
        /**
similarity index 98%
rename from taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeUtil.java
rename to taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeHelper.java
index f74859459027231d6722a1999389ed39f4b5349b..abe5b450a8a9681ba8ca2a74253917db0e4e2040 100644 (file)
@@ -17,7 +17,7 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
  * @created 18.03.2009
  * @version 1.0
  */
-public class TimeUtil {
+public class TimeHelper {
        /**
         * Converts a <code>String</code> whose format is either a valid year 
         * or two valid years with the format "XXXX-XXXX" into a TimePeriod. 
index e8b8a0d6ff24b82d2a72ca0cdf9eee7b0abc86d5..40ac2d9de53bea00211b058760fc86446c2d8b6e 100644 (file)
@@ -105,6 +105,17 @@ public abstract class AbstractPostOperation extends AbstractOperation {
                this.postOperationEnabled = postOperationEnabled;\r
        }\r
        \r
+       /**\r
+        * @param label\r
+        * @param undoContext\r
+        * @param postOperationEnabled2\r
+        */\r
+       public AbstractPostOperation(String label, IUndoContext undoContext,\r
+                       IPostOperationEnabled postOperationEnabled) {\r
+               this(label, undoContext);\r
+               this.postOperationEnabled = postOperationEnabled;\r
+       }\r
+\r
        /**\r
         * This method will try to call the post operation on a possibly registered\r
         * IPostOperationEnabled implementor. Objects that were affected by the operation \r
index 2538d928313c6079632e3a9749154911e9de112d..fa4c13b6b0c1f9e6d37bf3381ecbd0b773ca462b 100644 (file)
@@ -19,7 +19,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
-import eu.etaxonomy.taxeditor.model.TaxonUtil;\r
+import eu.etaxonomy.taxeditor.model.TaxonHelper;\r
 \r
 /**\r
  * @author n.hoffmann\r
@@ -45,7 +45,7 @@ public class ChangeConceptRelationshipTypeOperation extends AbstractPostOperatio
                super(label, undoContext, taxon, postOperationEnabled);\r
                this.relatedTaxon = relatedTaxon;\r
                                \r
-               this.taxonRelationship = TaxonUtil.getRelationshipBetweenTwoTaxa(relatedTaxon, taxon);\r
+               this.taxonRelationship = TaxonHelper.getRelationshipBetweenTwoTaxa(relatedTaxon, taxon);\r
                this.oldRelationshipType = taxonRelationship.getType();\r
                this.newRelationshipType = type;\r
        }\r
index 607a953233c1efe1047f8c40c95030958517e79a..1166d3be9aed118367369f2e28cc6a86b5275b24 100644 (file)
@@ -22,7 +22,7 @@ import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
-import eu.etaxonomy.taxeditor.model.TaxonUtil;\r
+import eu.etaxonomy.taxeditor.model.TaxonHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -45,7 +45,7 @@ public class ChangeConceptToSynonymOperation extends
                        IPostOperationEnabled editor) {\r
                super(label, undoContext, taxon, editor);\r
                \r
-               this.taxonRelationship = TaxonUtil.getRelationshipBetweenTwoTaxa(concept, taxon);\r
+               this.taxonRelationship = TaxonHelper.getRelationshipBetweenTwoTaxa(concept, taxon);\r
                this.oldRelationshipType = taxonRelationship.getType();\r
                \r
                this.concept = concept;\r
index 49550275694f01797b92bca0b490a2c23236abb9..d5521e981634c6a9826df8f38b18f3deccd02eaa 100644 (file)
@@ -18,7 +18,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.model.SynonymUtil;\r
+import eu.etaxonomy.taxeditor.model.SynonymHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -45,7 +45,7 @@ public class ChangeHomotypicalGroupBasionymOperation extends
                \r
                TaxonNameBase<?, ?> oldSynonymName = synonym.getName();\r
                // TODO replace w method from cdmlib\r
-               SynonymUtil.setGroupBasionym(oldSynonymName);\r
+               SynonymHelper.setGroupBasionym(oldSynonymName);\r
                                \r
                return postExecute(synonym);\r
        }\r
index ea769601af559b718f2b2558e9c4436e61bdb5da..9731ce5524765282286f882d6fea232f2003065c 100644 (file)
@@ -19,7 +19,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.media.ImageFile;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.model.ImagesUtil;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -52,7 +52,7 @@ public class CreateImageOperation extends AbstractPostOperation {
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
                \r
-               ImagesUtil.addTaxonImage(taxon, description, imageFile);\r
+               ImagesHelper.addTaxonImage(taxon, description, imageFile);\r
                \r
                return postExecute(null);\r
        }\r
@@ -64,7 +64,7 @@ public class CreateImageOperation extends AbstractPostOperation {
        public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
                \r
-               ImagesUtil.addTaxonImage(taxon, description, imageFile);\r
+               ImagesHelper.addTaxonImage(taxon, description, imageFile);\r
                \r
                return postExecute(null);\r
        }\r
@@ -76,7 +76,7 @@ public class CreateImageOperation extends AbstractPostOperation {
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
                \r
-               ImagesUtil.removeTaxonImage(taxon, description, imageFile);\r
+               ImagesHelper.removeTaxonImage(taxon, description, imageFile);\r
                \r
                return postExecute(null);\r
        }\r
index 39aba56e4ad2c592b961cb085b76752722828ac7..b1b77ab93b8e755bbc86a449c9371942d0e1b93d 100644 (file)
@@ -19,7 +19,7 @@ import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
-import eu.etaxonomy.taxeditor.model.TaxonUtil;\r
+import eu.etaxonomy.taxeditor.model.TaxonHelper;\r
 \r
 /**\r
  * Deletes a relation between two taxa. \r
@@ -47,7 +47,7 @@ public class DeleteConceptRelationOperation extends AbstractPostOperation {
                \r
                this.relatedTaxon = relatedTaxon;\r
                \r
-               relationship = TaxonUtil.getRelationshipBetweenTwoTaxa(relatedTaxon, taxon);\r
+               relationship = TaxonHelper.getRelationshipBetweenTwoTaxa(relatedTaxon, taxon);\r
 \r
                relationshipType = relationship.getType();\r
                \r
index bd1d0bb43b3ea2191f8ebecb2fe52583ff796355..9a6f116a26bd7eb77ba76e7d7e81cd579992b168 100644 (file)
@@ -19,7 +19,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.media.ImageFile;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.model.ImagesUtil;\r
+import eu.etaxonomy.taxeditor.model.ImagesHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -53,7 +53,7 @@ public class DeleteImageOperation extends AbstractPostOperation {
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
                \r
-               ImagesUtil.removeTaxonImage(taxon, description, imageFile);\r
+               ImagesHelper.removeTaxonImage(taxon, description, imageFile);\r
                \r
                \r
                return postExecute(null);\r
@@ -75,7 +75,7 @@ public class DeleteImageOperation extends AbstractPostOperation {
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
                \r
-               ImagesUtil.addTaxonImage(taxon, description, imageFile);\r
+               ImagesHelper.addTaxonImage(taxon, description, imageFile);\r
                \r
                return postExecute(null);\r
        }\r
index d20297416d8052a3c8a79c1ef56712db3dacb541..bf4107176074ce803e051fbba1444cede25f558a 100644 (file)
@@ -47,7 +47,7 @@ public class DeleteTaxonomicTreeOperation extends AbstractPostOperation {
         */
        public DeleteTaxonomicTreeOperation(String label, IUndoContext undoContext,
                        TaxonomicTree taxonomicTree) {
-               super(label, undoContext, null);
+               super(label, undoContext);
                
                this.taxonomicTree = taxonomicTree;
                
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteUserOperation.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteUserOperation.java
new file mode 100644 (file)
index 0000000..c5965cb
--- /dev/null
@@ -0,0 +1,92 @@
+// $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.operations;
+
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class DeleteUserOperation extends AbstractPostOperation {
+
+       private static final Logger logger = Logger
+                       .getLogger(DeleteUserOperation.class);
+
+       private UUID userUuid;
+
+       private User user;
+
+       /**
+        * @param label
+        * @param undoContext
+        * @param parentNodeUuid
+        * @param postOperationEnabled
+        */
+       public DeleteUserOperation(String label, IUndoContext undoContext,
+                       UUID userUuid, IPostOperationEnabled postOperationEnabled) {
+               super(label, undoContext, postOperationEnabled);
+               
+               this.userUuid = userUuid;
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+        */
+       @Override
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+                       throws ExecutionException {
+               
+               ConversationHolder conversation = CdmStore.NewTransactionalConversation();
+               user = CdmStore.getUserService().findByUuid(userUuid);
+               CdmStore.getUserService().delete(user);
+               conversation.commit();
+               
+               return postExecute(null);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+        */
+       @Override
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+                       throws ExecutionException {
+
+               return execute(monitor, info);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+        */
+       @Override
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+                       throws ExecutionException {
+               
+               ConversationHolder conversation = CdmStore.NewTransactionalConversation();
+               // store uuid for consecutive undo/redo steps
+               userUuid = CdmStore.getUserService().save(user);
+               conversation.commit();
+               
+               return postExecute(null);
+       }
+}
index e78b5024796d274cfdcea367bd09de6542f3f940..8318bd6893a57489e6782c5622f689749d1d80e8 100644 (file)
@@ -24,7 +24,7 @@ import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
-import eu.etaxonomy.taxeditor.model.TaxonUtil;\r
+import eu.etaxonomy.taxeditor.model.TaxonHelper;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
 /**\r
index c0d633e8dbc6416ae5a69bed09b25953983df28a..358ae4340212d47764de40f115b2caf89f570cc1 100644 (file)
@@ -18,7 +18,7 @@ import org.eclipse.core.runtime.IStatus;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.model.SynonymUtil;\r
+import eu.etaxonomy.taxeditor.model.SynonymHelper;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -46,7 +46,7 @@ public class RemoveHomotypicalGroupBasionymOperation extends
                \r
                TaxonNameBase<?, ?> oldSynonymName = synonym.getName();\r
                // TODO replace w method from cdmlib\r
-               SynonymUtil.removeGroupBasionym(oldSynonymName);\r
+               SynonymHelper.removeGroupBasionym(oldSynonymName);\r
                                \r
                return postExecute(synonym);\r
        }\r
@@ -68,7 +68,7 @@ public class RemoveHomotypicalGroupBasionymOperation extends
                        throws ExecutionException {\r
                // TODO replace w method from cdmlib\r
                // FIXME this is also old code: reimplement\r
-               SynonymUtil.setGroupBasionym(synonym.getName());\r
+               SynonymHelper.setGroupBasionym(synonym.getName());\r
                                \r
                return postExecute(synonym);\r
        }\r
index ad79d9bdc8c882223c81bc6b9eb84224fe80d3d1..e9abec031477e0d1329f0d26dd1f16acab12351d 100644 (file)
@@ -14,8 +14,13 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.UUID;
 
+import javax.security.auth.spi.LoginModule;
+
 import org.apache.log4j.Logger;
+import org.springframework.security.Authentication;
+import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.providers.ProviderManager;
+import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
@@ -23,12 +28,14 @@ import eu.etaxonomy.cdm.api.service.ILocationService;
 import eu.etaxonomy.cdm.api.service.INameService;
 import eu.etaxonomy.cdm.api.service.IReferenceService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.IUserService;
 import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;
 import eu.etaxonomy.cdm.api.service.config.impl.TaxonServiceConfiguratorImpl;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.Article;
 import eu.etaxonomy.cdm.model.reference.Book;
@@ -39,6 +46,8 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
+import eu.etaxonomy.taxeditor.model.TaxeditorLoginModule;
+import eu.etaxonomy.taxeditor.user.AuthenticatedUserBar;
 
 /**
  * This implementation of ICdmDataRepository depends on hibernate sessions to store the data correctly 
@@ -66,6 +75,8 @@ public class CdmStore{
        private ConversationHolder globalReadOnlyConversation;
        
        private static DbSchemaValidation dbSchemaValidation;
+
+       private static LoginModule loginModule;
        
        /**
         * 
@@ -210,6 +221,7 @@ public class CdmStore{
 
        public static ProviderManager getAuthenticationManager() { return getDefault().getApplicationControllerInternal().getAuthenticationManager();}
 
+       public static IUserService getUserService() { return getDefault().getApplicationControllerInternal().getUserService(); }
        
        /**
         * @param searchText
@@ -300,4 +312,37 @@ public class CdmStore{
                return nomReferenceTypeMap;
        }
 
+       /**
+        * TODO implement LoginModule to handle the whole login stuff
+        * 
+        * @param token
+        */
+       public static void authenticate(UsernamePasswordAuthenticationToken token){
+               Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token);
+               SecurityContextHolder.getContext().setAuthentication(authentication);
+               
+               // TODO register a listener on LoginModule instead of calling a set method here
+//             AuthenticatedUserBar.setAuthenticatedUser(getAuthenticatedUser().getUsername());
+       }
+       
+       public static User getAuthenticatedUser(){
+               Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+               
+               if(authentication != null 
+                               && authentication.getPrincipal() != null 
+                               && authentication.getPrincipal() instanceof User){
+                       return (User)authentication.getPrincipal();
+               }
+               return null;
+       }
+       
+       /**
+        * incomplete! do note use!
+        */
+       public static LoginModule getLoginModule(){
+               if(loginModule == null){
+                       loginModule = new TaxeditorLoginModule();
+               }
+               return loginModule;
+       }
 }
index 4cc13b0ad2a7002b54c6363d74ffc12479642c0f..a09cbd8d97b64782c7b4c7a58338353617db29e2 100644 (file)
@@ -12,7 +12,12 @@ package eu.etaxonomy.taxeditor.store;
 
 import java.util.UUID;
 
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.jface.action.IStatusLineManager;
+
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 /**
  * @author n.hoffmann
@@ -26,4 +31,19 @@ public class StoreUtil extends AbstractUtility {
 //             logger.warn("Couldn't find taxon with UUID " + uuid);
 //             return null;
 //        }
-       }}
+       }
+       
+       public static IOperationHistory getOperationHistory() {
+               return TaxeditorStorePlugin.getDefault().getWorkbench().
+                                       getOperationSupport().getOperationHistory();
+       }
+       
+       public static void setStatusLineManager(IStatusLineManager manager) {
+               statusLineManager = manager;
+       }
+       
+
+       public static IUndoContext getUndoContext(){
+               return IOperationHistory.GLOBAL_UNDO_CONTEXT;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/AuthenticatedUserBar.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/AuthenticatedUserBar.java
new file mode 100644 (file)
index 0000000..5cd128a
--- /dev/null
@@ -0,0 +1,63 @@
+// $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.user;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.CellEditor.LayoutData;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
+
+/**
+ * @author n.hoffmann
+ * @created 01.07.2009
+ * @version 1.0
+ */
+public class AuthenticatedUserBar extends WorkbenchWindowControlContribution {
+       private static final Logger logger = Logger
+                       .getLogger(AuthenticatedUserBar.class);
+       
+       private static CLabel label_authenticatedUser;
+
+       private Composite composite;
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.action.ControlContribution#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected Control createControl(Composite parent) {
+               composite = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               composite.setLayout(layout);
+               
+               CLabel label = new CLabel(composite, SWT.NULL);
+               label.setText("Authenticated as: ");
+               
+               label_authenticatedUser = new CLabel(composite, SWT.NULL);
+               LayoutData layoutData = new LayoutData();
+//             layoutData.minimumWidth = 30;
+               label_authenticatedUser.setLayoutData(layoutData);
+               return composite;
+       }
+       
+       /**
+        * TODO implement a LoginModule and register as a listener there
+        * 
+        * @param username
+        */
+       public static void setAuthenticatedUser(String username){
+               label_authenticatedUser.setText(username);
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/CreateUserHandler.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/CreateUserHandler.java
new file mode 100644 (file)
index 0000000..bc92c6d
--- /dev/null
@@ -0,0 +1,46 @@
+// $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.user.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.taxeditor.user.view.UserManagerView;
+import eu.etaxonomy.taxeditor.user.wizard.UserWizard;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class CreateUserHandler extends AbstractHandler {
+       private static final Logger logger = Logger
+                       .getLogger(CreateUserHandler.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               Shell shell = HandlerUtil.getActiveShell(event);
+               
+               UserManagerView part = (UserManagerView) HandlerUtil.getActivePart(event);
+               UserWizard wizard = new UserWizard(part); 
+               
+               WizardDialog dialog = new WizardDialog(shell, wizard);
+           dialog.open();
+               return null;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/DeleteUserHandler.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/DeleteUserHandler.java
new file mode 100644 (file)
index 0000000..26a7e2c
--- /dev/null
@@ -0,0 +1,60 @@
+// $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.user.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.taxeditor.operations.DeleteUserOperation;
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class DeleteUserHandler extends AbstractHandler {
+       private static final Logger logger = Logger
+                       .getLogger(DeleteUserHandler.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               
+               ISelection menuSelection = HandlerUtil.getActiveMenuSelection(event);
+               User user = (User) ((StructuredSelection) menuSelection).getFirstElement();
+
+               // TODO refresh the list -> set postOperationEnabled to the real deal
+               IPostOperationEnabled postOperationEnabled = (IPostOperationEnabled) HandlerUtil.getActivePart(event);
+               
+               IUndoableOperation operation = null;
+               try {
+                       operation = new DeleteUserOperation(event.getCommand().getName(), 
+                                               StoreUtil.getUndoContext(), user.getUuid(), postOperationEnabled);
+                       
+                       StoreUtil.executeOperation(operation);
+               } catch (NotDefinedException e) {
+                       logger.warn("Command name not set");
+               }
+
+               return null;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/EditUserHandler.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/handler/EditUserHandler.java
new file mode 100644 (file)
index 0000000..e6bf32f
--- /dev/null
@@ -0,0 +1,50 @@
+// $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.user.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.taxeditor.user.view.UserManagerView;
+import eu.etaxonomy.taxeditor.user.wizard.UserWizard;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class EditUserHandler extends AbstractHandler {
+       private static final Logger logger = Logger
+                       .getLogger(EditUserHandler.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection menuSelection = HandlerUtil.getActiveMenuSelection(event);
+               User user = (User) ((StructuredSelection) menuSelection).getFirstElement();
+
+               UserManagerView part = (UserManagerView) HandlerUtil.getActivePart(event);
+               
+               UserWizard wizard = new UserWizard(part, user);
+               WizardDialog dialog = new WizardDialog(HandlerUtil.getActiveShell(event), wizard);
+           dialog.open();
+           
+               return null;
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerContentProvider.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerContentProvider.java
new file mode 100644 (file)
index 0000000..e8bcf48
--- /dev/null
@@ -0,0 +1,53 @@
+// $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.user.view;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+import eu.etaxonomy.cdm.model.common.User;
+
+/**
+ * @author n.hoffmann
+ * @created 01.07.2009
+ * @version 1.0
+ */
+public class UserManagerContentProvider implements IStructuredContentProvider {
+       private static final Logger logger = Logger
+                       .getLogger(UserManagerContentProvider.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+        */
+       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)
+        */
+       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)
+        */
+       public Object[] getElements(Object inputElement) {
+               List<User> users = (List<User>) inputElement;
+               return users.toArray();
+       }
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerLabelProvider.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerLabelProvider.java
new file mode 100644 (file)
index 0000000..0ed46d6
--- /dev/null
@@ -0,0 +1,41 @@
+// $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.user.view;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created 01.07.2009
+ * @version 1.0
+ */
+public class UserManagerLabelProvider extends LabelProvider {
+       private static final Logger logger = Logger
+                       .getLogger(UserManagerLabelProvider.class);
+
+       public Image getImage(Object element) {
+               return null;
+       }
+
+       public String getText(Object element) {
+               User user = (User) element;
+               
+               User authenticatedUser = CdmStore.getAuthenticatedUser();
+               
+               return user.equals(authenticatedUser) ? "* " + user.getUsername() : user.getUsername();
+       }
+
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerView.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/view/UserManagerView.java
new file mode 100644 (file)
index 0000000..5ca9a1f
--- /dev/null
@@ -0,0 +1,129 @@
+// $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.user.view;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.part.ViewPart;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created 01.07.2009
+ * @version 1.0
+ */
+public class UserManagerView extends ViewPart implements IConversationEnabled, IPostOperationEnabled{
+       private static final Logger logger = Logger
+                       .getLogger(UserManagerView.class);
+       
+       public static String ID = "eu.etaxonomy.taxeditor.store.userManagerView";
+       
+       private ListViewer listViewer;
+
+       private ConversationHolder conversation;
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void createPartControl(Composite parent) {
+               
+               conversation = CdmStore.NewTransactionalConversation();
+               
+               FillLayout fillLayout = new FillLayout();
+               fillLayout.marginWidth = 0;
+               fillLayout.marginHeight = 0;
+               fillLayout.type = SWT.VERTICAL; 
+               parent.setLayout(fillLayout);
+               
+               Composite composite = new Composite(parent, SWT.NULL);
+               GridLayout layout = new GridLayout();
+               composite.setLayout(layout);
+               
+               
+               listViewer = new ListViewer(composite);
+               Control control = listViewer.getControl();
+               control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               // register context menu
+               MenuManager menuMgr = new MenuManager();
+               menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+               getSite().registerContextMenu(menuMgr, listViewer);
+
+               Menu menu = menuMgr.createContextMenu(control);
+               control.setMenu(menu);  
+               
+               listViewer.setContentProvider(new UserManagerContentProvider());
+               listViewer.setLabelProvider(new UserManagerLabelProvider());
+                               
+               listViewer.setInput(getAllUser());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+        */
+       @Override
+       public void setFocus() {
+               conversation.bind();
+               listViewer.getControl().setFocus();
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
+        */
+       public boolean postOperation(CdmBase objectAffectedByOperation) {
+               listViewer.setInput(getAllUser());
+               listViewer.refresh();
+               
+               return true;
+       }
+       
+       /**
+        * 
+        * @return
+        */
+       private List<User> getAllUser(){
+               return CdmStore.getUserService().list(100000, 0);
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
+        */
+       public ConversationHolder getConversationHolder() {
+               return conversation;
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+        */
+       public void update(CdmDataChangeMap changeEvents) {
+               // data changes can only be generate here at the moment
+       }
+       
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizard.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizard.java
new file mode 100644 (file)
index 0000000..5e2e497
--- /dev/null
@@ -0,0 +1,66 @@
+// $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.user.wizard;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.wizard.Wizard;
+
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.user.view.UserManagerView;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class UserWizard extends Wizard {
+       private static final Logger logger = Logger.getLogger(UserWizard.class);
+       private User user;
+       private UserWizardPage page;
+       private UserManagerView view;
+
+       public UserWizard(UserManagerView view){
+               this.view = view;
+               setWindowTitle("User Wizard");
+       }
+       
+       public UserWizard(UserManagerView view, User user){
+               this(view);
+               this.user = user;
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.wizard.Wizard#addPages()
+        */
+       @Override
+       public void addPages() {
+               super.addPages();
+               
+               page = new UserWizardPage(user);
+               
+               addPage(page);
+               
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.wizard.Wizard#performFinish()
+        */
+       @Override
+       public boolean performFinish() {
+               
+               CdmStore.getUserService().saveOrUpdate(page.getUser());
+               view.getConversationHolder().commit(true);
+               
+               return view.postOperation(user);
+       }
+
+}
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizardPage.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/user/wizard/UserWizardPage.java
new file mode 100644 (file)
index 0000000..367b58c
--- /dev/null
@@ -0,0 +1,196 @@
+// $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.user.wizard;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.taxeditor.model.CommonHelper;
+import eu.etaxonomy.taxeditor.model.Resources;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created 02.07.2009
+ * @version 1.0
+ */
+public class UserWizardPage extends WizardPage implements ModifyListener{
+       private Composite composite;
+       private Text text_username;
+       private Text text_oldPassword;
+       private Text text_password;
+       private Text text_passwordRepeat;
+       private User user;
+       private boolean newMode = false;
+       private Group group_person;
+       private Text text_personFirstName;
+       private Text text_personLastName;
+       private Text text_userEmail;
+
+       /**
+        * @param pageName
+        */
+       protected UserWizardPage(User user) {
+               super("USER_WIZARD_PAGE");
+               
+               this.user = user;
+               
+               if(user == null){
+                       setTitle("Create new user");
+                       setDescription("Enter information for new user.");
+                       newMode = true;
+                       this.user = User.NewInstance(null, null);
+               }else{
+                       setTitle("Edit existing user");
+                       setDescription("Edit information for the selected user.");
+                       
+               }               
+       }
+
+       private static final Logger logger = Logger.getLogger(UserWizardPage.class);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       public void createControl(Composite parent) {
+               // right - edit Form
+               composite = new Composite(parent, SWT.NULL);
+               GridLayout compositeLayout = new GridLayout();
+               compositeLayout.numColumns = 2;
+               composite.setLayout(compositeLayout);
+               composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               
+               CLabel label_username = new CLabel(composite, SWT.NULL);
+               label_username.setText("Username");
+               text_username = new Text(composite, SWT.BORDER);
+               text_username.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               text_username.addModifyListener(this);
+               
+               if(! newMode){
+                       text_username.setEditable(false);
+                       text_username.setBackground(Resources.getColor(Resources.SEARCH_VIEW_FOREGROUND));
+               }
+               
+               if(newMode){
+                       createPasswordFieldsNew(composite);
+               }else if(CdmStore.getAuthenticatedUser().equals(user)){
+                       createPasswordFieldsEdit(composite);
+               }
+
+               group_person = createPersonGroup(composite);
+               group_person.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
+               
+               setControl(composite);
+               
+               init();
+       }
+
+       private void createPasswordFieldsEdit(Composite parent){
+               CLabel label_oldPassword = new CLabel(parent, SWT.NULL);
+               label_oldPassword.setText("Old Password");
+               text_oldPassword = new Text(parent, SWT.BORDER);
+               text_oldPassword.setEchoChar('*');
+               text_oldPassword.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               text_oldPassword.addModifyListener(this);
+               
+               createPasswordFieldsNew(parent);
+       }
+       
+       private void createPasswordFieldsNew(Composite parent){
+               CLabel label_password = new CLabel(parent, SWT.NULL);
+               label_password.setText("Password");
+               
+               text_password = new Text(parent, SWT.BORDER);
+               text_password.setEchoChar('*');
+               text_password.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               text_password.addModifyListener(this);
+               
+               new CLabel(parent, SWT.NULL);
+               text_passwordRepeat = new Text(parent, SWT.BORDER);
+               text_passwordRepeat.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               text_passwordRepeat.setEchoChar('*');
+               text_passwordRepeat.addModifyListener(this);
+       }
+       
+       private Group createPersonGroup(Composite parent){
+
+               Group group = new Group(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               group.setLayout(layout);
+               
+               CLabel label_personFirstName = new CLabel(group, SWT.NULL);
+               label_personFirstName.setText("First Name");
+               text_personFirstName = new Text(group, SWT.BORDER);
+               text_personFirstName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               text_personFirstName.addModifyListener(this);
+               
+               CLabel label_personLastName = new CLabel(group, SWT.NULL);
+               label_personLastName.setText("Last Name");
+               text_personLastName = new Text(group, SWT.BORDER);
+               text_personLastName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               text_personLastName.addModifyListener(this);
+               
+               
+               CLabel label_userEmail = new CLabel(group, SWT.NULL);
+               label_userEmail.setText("Email");
+               text_userEmail = new Text(group, SWT.BORDER);
+               text_userEmail.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               text_userEmail.addModifyListener(this);
+               
+               return group;
+       }
+       
+       /**
+        * 
+        */
+       private void init() {
+               CommonHelper.editTextWithoutTriggeringListeners(text_username, this, user.getUsername());
+               if(user.getPerson() == null){
+                       user.setPerson(Person.NewInstance());
+               }else{  
+                       CommonHelper.editTextWithoutTriggeringListeners(text_personFirstName, this, user.getPerson().getFirstname());
+                       CommonHelper.editTextWithoutTriggeringListeners(text_personLastName, this, user.getPerson().getLastname());
+                       CommonHelper.editTextWithoutTriggeringListeners(text_userEmail, this, user.getEmailAddress());
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+        */
+       public void modifyText(ModifyEvent e) {
+               if(newMode){
+                       user.setUsername(text_username.getText().trim());
+                       user.setPassword(text_password.getText());
+               }
+               user.getPerson().setFirstname(text_personFirstName.getText());
+               user.getPerson().setLastname(text_personLastName.getText());
+               user.setEmailAddress(text_userEmail.getText());
+       }
+
+       /**
+        * @return
+        */
+       public User getUser() {
+               return user;
+       }
+}
index d11e0d6f70916994bf00348945134e15b60704f1..de5915a5eb9f7e9c51567deb981ec4d5f12c6e56 100644 (file)
@@ -3,14 +3,14 @@
 <repository name='file:/Users/nho/Documents/workspace/taxeditor/taxeditor-updateSite/ - artifacts' type='org.eclipse.equinox.p2.artifact.repository.simpleRepository' version='1.0.0'>
   <properties size='2'>
     <property name='p2.compressed' value='false'/>
-    <property name='p2.timestamp' value='1245854419803'/>
+    <property name='p2.timestamp' value='1246356310911'/>
   </properties>
   <mappings size='3'>
     <rule filter='(&amp; (classifier=osgi.bundle))' output='${repoUrl}/plugins/${id}_${version}.jar'/>
     <rule filter='(&amp; (classifier=binary))' output='${repoUrl}/binary/${id}_${version}'/>
     <rule filter='(&amp; (classifier=org.eclipse.update.feature))' output='${repoUrl}/features/${id}_${version}.jar'/>
   </mappings>
-  <artifacts size='82'>
+  <artifacts size='91'>
     <artifact classifier='osgi.bundle' id='org.eclipse.osgi.services' version='3.1.200.v20071203'>
       <properties size='3'>
         <property name='artifact.size' value='63665'/>
         <property name='download.size' value='1702'/>
       </properties>
     </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.bulkeditor' version='2.0.0.v20090630-1147'>
+      <properties size='3'>
+        <property name='artifact.size' value='29786'/>
+        <property name='download.size' value='29786'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090624-1200'>
       <properties size='3'>
         <property name='artifact.size' value='49600336'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
-    <artifact classifier='osgi.bundle' id='org.eclipse.ui' version='3.4.2.M20090204-0800'>
+    <artifact classifier='osgi.bundle' id='org.eclipse.core.resources' version='3.4.2.R34x_v20090126'>
       <properties size='3'>
-        <property name='artifact.size' value='145333'/>
-        <property name='download.size' value='145333'/>
+        <property name='artifact.size' value='700059'/>
+        <property name='download.size' value='700059'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
-    <artifact classifier='osgi.bundle' id='org.eclipse.core.resources' version='3.4.2.R34x_v20090126'>
+    <artifact classifier='osgi.bundle' id='org.eclipse.ui' version='3.4.2.M20090204-0800'>
       <properties size='3'>
-        <property name='artifact.size' value='700059'/>
-        <property name='download.size' value='700059'/>
+        <property name='artifact.size' value='145333'/>
+        <property name='download.size' value='145333'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'>
+      <properties size='3'>
+        <property name='artifact.size' value='70172392'/>
+        <property name='download.size' value='70172392'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.editor' version='2.0.0.v20090630-1147'>
+      <properties size='3'>
+        <property name='artifact.size' value='819666'/>
+        <property name='download.size' value='819666'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='org.eclipse.ui.win32' version='3.2.100.v20080408-0800'>
       <properties size='3'>
         <property name='artifact.size' value='23398'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.navigation' version='2.0.0.v20090630-1147'>
+      <properties size='3'>
+        <property name='artifact.size' value='70492'/>
+        <property name='download.size' value='70492'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='org.eclipse.ui.carbon' version='4.0.0.I20080610-1200'>
       <properties size='3'>
         <property name='artifact.size' value='15178'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
+    <artifact classifier='org.eclipse.update.feature' id='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'>
+      <properties size='2'>
+        <property name='artifact.size' value='761'/>
+        <property name='download.size' value='761'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='org.eclipse.ui.forms' version='3.3.103.v20081027_34x'>
       <properties size='3'>
         <property name='artifact.size' value='298080'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.store' version='2.0.0.v20090630-1147'>
+      <properties size='3'>
+        <property name='artifact.size' value='331113'/>
+        <property name='download.size' value='331113'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
     <artifact classifier='org.eclipse.update.feature' id='eu.etaxonomy.taxeditor.feature.dependencies' version='2.0.0.v20090617-1416'>
       <properties size='2'>
         <property name='artifact.size' value='1653'/>
         <property name='download.size' value='1653'/>
       </properties>
     </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.store' version='2.0.0.v20090630-1147'>
+      <properties size='3'>
+        <property name='artifact.size' value='680310'/>
+        <property name='download.size' value='680310'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='org.eclipse.core.net' version='1.1.0.I20080604'>
       <properties size='3'>
         <property name='artifact.size' value='55332'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
+    <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.application' version='2.0.0.v20090630-1147'>
+      <properties size='3'>
+        <property name='artifact.size' value='251021'/>
+        <property name='download.size' value='251021'/>
+        <property name='download.contentType' value='application/zip'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.editor' version='2.0.0.v20090617-1416'>
       <properties size='3'>
         <property name='artifact.size' value='804890'/>
         <property name='download.contentType' value='application/zip'/>
       </properties>
     </artifact>
+    <artifact classifier='org.eclipse.update.feature' id='eu.etaxonomy.taxeditor' version='2.0.0.v20090630-1147'>
+      <properties size='2'>
+        <property name='artifact.size' value='846'/>
+        <property name='download.size' value='846'/>
+      </properties>
+    </artifact>
     <artifact classifier='osgi.bundle' id='org.eclipse.core.filesystem.macosx' version='1.0.0.v20080604-1400'>
       <properties size='3'>
         <property name='artifact.size' value='9594'/>
index faabc43858071cb68ff58e0a87861d6a1412bbe0..6775616381477bcfab087f8c631f4521170be9e2 100644 (file)
@@ -3,13 +3,13 @@
 <repository name='file:/Users/nho/Documents/workspace/taxeditor/taxeditor-updateSite/ - metadata' type='org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository' version='1.0.0'>
   <properties size='2'>
     <property name='p2.compressed' value='false'/>
-    <property name='p2.timestamp' value='1245854419810'/>
+    <property name='p2.timestamp' value='1246356310919'/>
   </properties>
   <references size='2'>
     <repository url='http://wp5.e-taxonomy.eu/taxeditor/update' type='1' options='0'/>
     <repository url='http://wp5.e-taxonomy.eu/taxeditor/update' type='0' options='0'/>
   </references>
-  <units size='110'>
+  <units size='120'>
     <unit id='eu.etaxonomy.taxeditor.application' version='2.0.0.v20090603_1756'>
       <update id='eu.etaxonomy.taxeditor.application' range='[0.0.0,2.0.0.v20090603_1756)' severity='0'/>
       <properties size='2'>
       <touchpointData size='1'>
         <instructions size='2'>
           <instruction key='manifest'>
-            Bundle-ManifestVersion: 2&#xA;Bundle-Version: 2.1.0.v20090624-1200&#xA;Export-Package: eu.etaxonomy.cdm,eu.etaxonomy.cdm.api.application,eu.etaxonomy.cdm.api.application.eclipse,eu.etaxonomy.cdm.api.conversation,eu.etaxonomy.cdm.api.service,eu.etaxonomy.cdm.api.service.config,eu.etaxonomy.cdm.api.service.config.impl,eu.etaxonomy.cdm.api.service.pager,eu.etaxonomy.cdm.api.service.pager.impl,eu.etaxonomy.cdm.aspectj,eu.etaxonomy.cdm.common,eu.etaxonomy.cdm.database,eu.etaxonomy.cdm.database.types,eu.etaxonomy.cdm.datagenerator,eu.etaxonomy.cdm.ext,eu.etaxonomy.cdm.hibernate,eu.etaxonomy.cdm.io.abcd206,eu.etaxonomy.cdm.io.berlinModel,eu.etaxonomy.cdm.io.berlinModel.in,eu.etaxonomy.cdm.io.berlinModel.out,eu.etaxonomy.cdm.io.berlinModel.out.mapper,eu.etaxonomy.cdm.io.common,eu.etaxonomy.cdm.io.excel.common,eu.etaxonomy.cdm.io.excel.distribution,eu.etaxonomy.cdm.io.excel.taxa,eu.etaxonomy.cdm.io.faunaEuropaea,eu.etaxonomy.cdm.io.jaxb,eu.etaxonomy.cdm.io.sdd,eu.etaxonomy.cdm.io.synthesys,eu.etaxonomy.cdm.io.taxonx,eu.etaxonomy.cdm.io.tcsrdf,eu.etaxonomy.cdm.io.tcsxml,eu.etaxonomy.cdm.io.tcsxml.in,eu.etaxonomy.cdm.io.tcsxml.out,eu.etaxonomy.cdm.jaxb,eu.etaxonomy.cdm.model.agent,eu.etaxonomy.cdm.model.common,eu.etaxonomy.cdm.model.common.init,eu.etaxonomy.cdm.model.description,eu.etaxonomy.cdm.model.location,eu.etaxonomy.cdm.model.media,eu.etaxonomy.cdm.model.molecular,eu.etaxonomy.cdm.model.name,eu.etaxonomy.cdm.model.occurrence,eu.etaxonomy.cdm.model.reference,eu.etaxonomy.cdm.model.taxon,eu.etaxonomy.cdm.model.view,eu.etaxonomy.cdm.persistence.hibernate,eu.etaxonomy.cdm.persistence.query,eu.etaxonomy.cdm.strategy,eu.etaxonomy.cdm.strategy.cache.agent,eu.etaxonomy.cdm.strategy.cache.common,eu.etaxonomy.cdm.strategy.cache.name,eu.etaxonomy.cdm.strategy.cache.reference,eu.etaxonomy.cdm.strategy.exceptions,eu.etaxonomy.cdm.strategy.parser,org.apache.log4j;uses:=&quot;org.apache.log4j.helpers,org.apache.log4j.or,org.apache.log4j.spi&quot;,org.apache.log4j.chainsaw; uses:=&quot;org.apache.log4j,  javax.swing,  javax.swing.table,  org.apache.log4j.spi,  javax.swing.event,  org.xml.sax.helpers,  org.xml.sax&quot;,org.apache.log4j.config;uses:=&quot;org.apache.log4j&quot;,org.apache.log4j.helpers;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.jdbc;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.jmx;uses:=&quot;org.apache.log4j,org.apache.log4j.spi,javax.management&quot;,org.apache.log4j.lf5;uses:=&quot;org.apache.log4j.lf5.viewer,org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.lf5.config,org.apache.log4j.lf5.util;uses:=&quot;org.apache.log4j.lf5.viewer,org.apache.log4j.lf5&quot;,org.apache.log4j.lf5.viewer; uses:=&quot;org.apache.log4j.lf5.util,  org.apache.log4j.lf5.viewer.categoryexplorer,  org.apache.log4j.lf5,  javax.swing,  javax.swing.table,  javax.swing.event,  org.apache.log4j.lf5.viewer.configure&quot;,org.apache.log4j.lf5.viewer.categoryexplorer; uses:=&quot;org.apache.log4j.lf5,  javax.swing.tree,  javax.swing,  javax.swing.table,  javax.swing.event&quot;,org.apache.log4j.lf5.viewer.configure;uses:=&quot;org.apache.log4j.lf5.viewer,javax.swing.tree,org.w3c.dom&quot;,org.apache.log4j.lf5.viewer.images,org.apache.log4j.net; uses:=&quot;javax.naming,  org.apache.log4j.helpers,  org.apache.log4j,  javax.jms,  javax.mail.internet,  org.apache.log4j.spi,  javax.mail&quot;,org.apache.log4j.nt;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.or;uses:=&quot;org.apache.log4j.spi&quot;,org.apache.log4j.or.jms;uses:=&quot;org.apache.log4j.or&quot;,org.apache.log4j.or.sax;uses:=&quot;org.apache.log4j.or&quot;,org.apache.log4j.spi;uses:=&quot;org.apache.log4j,org.apache.log4j.or&quot;,org.apache.log4j.varia;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.xml; uses:=&quot;org.apache.log4j.config,  org.apache.log4j.helpers,  org.apache.log4j,  javax.xml.parsers,  org.apache.log4j.spi,  org.w3c.dom,  org.xml.sax&quot;,org.joda.time; uses:=&quot;org.joda.time.base,  org.joda.time.field,  org.joda.time.chrono,  org.joda.time.tz,  org.joda.time.format&quot;,org.joda.time.base;uses:=&quot;org.joda.time,org.joda.time.format&quot;,org.joda.time.chrono;uses:=&quot;org.joda.time.field,org.joda.time&quot;,org.joda.time.convert;uses:=&quot;org.joda.time,org.joda.time.format&quot;,org.joda.time.field;uses:=&quot;org.joda.time&quot;,org.joda.time.format;uses:=&quot;org.joda.time&quot;,org.joda.time.tz;uses:=&quot;org.joda.time&quot;,org.springframework.core,org.springframework.core.io,org.springframework.orm.hibernate3,org.springframework.security,org.springframework.security.acl,org.springframework.security.acl.basic,org.springframework.security.acl.basic.cache,org.springframework.security.acl.basic.jdbc,org.springframework.security.adapters,org.springframework.security.afterinvocation,org.springframework.security.authoritymapping,org.springframework.security.concurrent,org.springframework.security.config,org.springframework.security.context,org.springframework.security.context.httpinvoker,org.springframework.security.context.rmi,org.springframework.security.event.authentication,org.springframework.security.event.authorization,org.springframework.security.intercept,org.springframework.security.intercept.method,org.springframework.security.intercept.method.aopalliance,org.springframework.security.intercept.method.aspectj,org.springframework.security.intercept.web,org.springframework.security.ldap,org.springframework.security.ldap.populator,org.springframework.security.ldap.search,org.springframework.security.providers,org.springframework.security.providers.anonymous,org.springframework.security.providers.dao,org.springframework.security.providers.dao.cache,org.springframework.security.providers.dao.salt,org.springframework.security.providers.encoding,org.springframework.security.providers.jaas,org.springframework.security.providers.jaas.event,org.springframework.security.providers.ldap,org.springframework.security.providers.ldap.authenticator,org.springframework.security.providers.preauth,org.springframework.security.providers.rcp,org.springframework.security.providers.rememberme,org.springframework.security.providers.x509,org.springframework.security.providers.x509.cache,org.springframework.security.providers.x509.populator,org.springframework.security.runas,org.springframework.security.securechannel,org.springframework.security.token,org.springframework.security.ui,org.springframework.security.ui.basicauth,org.springframework.security.ui.digestauth,org.springframework.security.ui.logout,org.springframework.security.ui.preauth,org.springframework.security.ui.preauth.header,org.springframework.security.ui.preauth.j2ee,org.springframework.security.ui.preauth.websphere,org.springframework.security.ui.preauth.x509,org.springframework.security.ui.rememberme,org.springframework.security.ui.savedrequest,org.springframework.security.ui.session,org.springframework.security.ui.switchuser,org.springframework.security.ui.webapp,org.springframework.security.ui.x509,org.springframework.security.userdetails,org.springframework.security.userdetails.checker,org.springframework.security.userdetails.hierarchicalroles,org.springframework.security.userdetails.jdbc,org.springframework.security.userdetails.ldap,org.springframework.security.userdetails.memory,org.springframework.security.util,org.springframework.security.vote,org.springframework.security.wrapper,org.springframework.transaction;uses:=&quot;org.springframework.core&quot;,org.springframework.transaction.annotation,org.springframework.transaction.config,org.springframework.transaction.interceptor,org.springframework.transaction.jta,org.springframework.transaction.support&#xA;Require-Bundle: org.eclipse.osgi,org.eclipse.pde.source&#xA;Manifest-Version: 1.0&#xA;Bundle-SymbolicName: eu.etaxonomy.cdmLibrary;singleton:=true&#xA;Bundle-Name: CDM Library Plug-in&#xA;Bundle-ClassPath: antlr-2.7.6.jar,asm-attrs.jar,asm.jar,cglib-2.1.3.jar,commons-collections-3.2.jar,commons-logging-1.0.4.jar,dom4j-1.6.1.jar,ehcache-1.2.3.jar,ejb3-persistence.jar,hibernate-annotations-3.4.0-SNAPSHOT.jar,hibernate-commons-annotations-3.4.0-SNAPSHOT.jar,hibernate-core-3.4.0-SNAPSHOT.jar,hibernate-envers-3.4.0-SNAPSHOT.jar,hibernate-search-3.1.0.GA.jar,hibernate-tools-3.2.0.ga.jar,slf4j-api-1.5.2.jar,slf4j-log4j12-1.5.2.jar,javassist.jar,jdbc2_0-stdext.jar,jta.jar,junit-4.4.jar,log4j-1.2.14.jar,mysql-connector-java-3.1.14-bin.jar,xml-apis.jar,xercesImpl.jar,hsqldb.jar,jaxb-api.jar,jaxb-impl-2.0.jar,jdom-1.0.jar,opencsv-1.8.jar,jtds-1.2.2.jar,postgresql-8.2-504.jdbc4.jar,aopalliance-1.0.jar,spring-2.5.jar,spring-beans-2.5.jar,spring-context-2.5.jar,spring-core-2.5.jar,spring-jdbc-2.5.jar,spring-orm-2.5.jar,spring-test-2.5.jar,spring-tx-2.5.jar,h2-1.0.73.jar,joda-time-1.5.jar,joda-time-hibernate-1.0.jar,sanselan-0.94-incubator.jar,poi-3.1-FINAL.jar,spring-security-core-2.0.4.jar,aspectjweaver-1.5.4.jar,lucene-core-2.4.0.jar,lucene-spellchecker-2.4.0.jar,lsid-client-1.1.2.jar,lsid-server-1.1.2.jar,wsdl4j-1.6.1.jar,spring-2.5.6.jar,spring-aop-2.5.6.jar,spring-beans-2.5.6.jar,spring-context-2.5.6.jar,spring-core-2.5.6.jar,spring-jdbc-2.5.6.jar,spring-modules-lucene-0.8a.jar,spring-orm-2.5.6.jar,spring-test-2.5.6.jar,spring-web-2.5.6.jar,spring-webmvc-2.5.6.jar,unitils-1.0.jar,jsr250-api-1.0.jar,cdmlib-commons-2.1.jar,cdmlib-ext-2.1.jar,cdmlib-io-2.1.jar,cdmlib-model-2.1.jar,cdmlib-persistence-2.1.jar,cdmlib-services-2.1.jar,cdmlib-persistence-2.1-tests.jar,hibernate-validator-3.1.0.GA.jar,aspectjrt-1.6.3.jar,aspectjweaver-1.6.3.jar,aspectjtools-1.6.3.jar,spring-aspects-2.5.6.jar,spring-agent-2.5.6.jar,jdbc-1.2.jar&#xA;
+            Bundle-ManifestVersion: 2&#xA;Bundle-Version: 2.1.0.v20090624-1200&#xA;Export-Package: eu.etaxonomy.cdm,eu.etaxonomy.cdm.api.application,eu.etaxonomy.cdm.api.application.eclipse,eu.etaxonomy.cdm.api.conversation,eu.etaxonomy.cdm.api.service,eu.etaxonomy.cdm.api.service.config,eu.etaxonomy.cdm.api.service.config.impl,eu.etaxonomy.cdm.api.service.pager,eu.etaxonomy.cdm.api.service.pager.impl,eu.etaxonomy.cdm.aspectj,eu.etaxonomy.cdm.common,eu.etaxonomy.cdm.database,eu.etaxonomy.cdm.database.types,eu.etaxonomy.cdm.datagenerator,eu.etaxonomy.cdm.ext,eu.etaxonomy.cdm.hibernate,eu.etaxonomy.cdm.io.abcd206,eu.etaxonomy.cdm.io.berlinModel,eu.etaxonomy.cdm.io.berlinModel.in,eu.etaxonomy.cdm.io.berlinModel.out,eu.etaxonomy.cdm.io.berlinModel.out.mapper,eu.etaxonomy.cdm.io.common,eu.etaxonomy.cdm.io.excel.common,eu.etaxonomy.cdm.io.excel.distribution,eu.etaxonomy.cdm.io.excel.taxa,eu.etaxonomy.cdm.io.faunaEuropaea,eu.etaxonomy.cdm.io.jaxb,eu.etaxonomy.cdm.io.sdd,eu.etaxonomy.cdm.io.synthesys,eu.etaxonomy.cdm.io.taxonx,eu.etaxonomy.cdm.io.tcsrdf,eu.etaxonomy.cdm.io.tcsxml,eu.etaxonomy.cdm.io.tcsxml.in,eu.etaxonomy.cdm.io.tcsxml.out,eu.etaxonomy.cdm.jaxb,eu.etaxonomy.cdm.model.agent,eu.etaxonomy.cdm.model.common,eu.etaxonomy.cdm.model.common.init,eu.etaxonomy.cdm.model.description,eu.etaxonomy.cdm.model.location,eu.etaxonomy.cdm.model.media,eu.etaxonomy.cdm.model.molecular,eu.etaxonomy.cdm.model.name,eu.etaxonomy.cdm.model.occurrence,eu.etaxonomy.cdm.model.reference,eu.etaxonomy.cdm.model.taxon,eu.etaxonomy.cdm.model.view,eu.etaxonomy.cdm.persistence.hibernate,eu.etaxonomy.cdm.persistence.query,eu.etaxonomy.cdm.strategy,eu.etaxonomy.cdm.strategy.cache.agent,eu.etaxonomy.cdm.strategy.cache.common,eu.etaxonomy.cdm.strategy.cache.name,eu.etaxonomy.cdm.strategy.cache.reference,eu.etaxonomy.cdm.strategy.exceptions,eu.etaxonomy.cdm.strategy.parser,org.apache.log4j;uses:=&quot;org.apache.log4j.helpers,org.apache.log4j.or,org.apache.log4j.spi&quot;,org.apache.log4j.chainsaw; uses:=&quot;org.apache.log4j,  javax.swing,  javax.swing.table,  org.apache.log4j.spi,  javax.swing.event,  org.xml.sax.helpers,  org.xml.sax&quot;,org.apache.log4j.config;uses:=&quot;org.apache.log4j&quot;,org.apache.log4j.helpers;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.jdbc;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.jmx;uses:=&quot;org.apache.log4j,org.apache.log4j.spi,javax.management&quot;,org.apache.log4j.lf5;uses:=&quot;org.apache.log4j.lf5.viewer,org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.lf5.config,org.apache.log4j.lf5.util;uses:=&quot;org.apache.log4j.lf5.viewer,org.apache.log4j.lf5&quot;,org.apache.log4j.lf5.viewer; uses:=&quot;org.apache.log4j.lf5.util,  org.apache.log4j.lf5.viewer.categoryexplorer,  org.apache.log4j.lf5,  javax.swing,  javax.swing.table,  javax.swing.event,  org.apache.log4j.lf5.viewer.configure&quot;,org.apache.log4j.lf5.viewer.categoryexplorer; uses:=&quot;org.apache.log4j.lf5,  javax.swing.tree,  javax.swing,  javax.swing.table,  javax.swing.event&quot;,org.apache.log4j.lf5.viewer.configure;uses:=&quot;org.apache.log4j.lf5.viewer,javax.swing.tree,org.w3c.dom&quot;,org.apache.log4j.lf5.viewer.images,org.apache.log4j.net; uses:=&quot;javax.naming,  org.apache.log4j.helpers,  org.apache.log4j,  javax.jms,  javax.mail.internet,  org.apache.log4j.spi,  javax.mail&quot;,org.apache.log4j.nt;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.or;uses:=&quot;org.apache.log4j.spi&quot;,org.apache.log4j.or.jms;uses:=&quot;org.apache.log4j.or&quot;,org.apache.log4j.or.sax;uses:=&quot;org.apache.log4j.or&quot;,org.apache.log4j.spi;uses:=&quot;org.apache.log4j,org.apache.log4j.or&quot;,org.apache.log4j.varia;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.xml; uses:=&quot;org.apache.log4j.config,  org.apache.log4j.helpers,  org.apache.log4j,  javax.xml.parsers,  org.apache.log4j.spi,  org.w3c.dom,  org.xml.sax&quot;,org.joda.time; uses:=&quot;org.joda.time.base,  org.joda.time.field,  org.joda.time.chrono,  org.joda.time.tz,  org.joda.time.format&quot;,org.joda.time.base;uses:=&quot;org.joda.time,org.joda.time.format&quot;,org.joda.time.chrono;uses:=&quot;org.joda.time.field,org.joda.time&quot;,org.joda.time.convert;uses:=&quot;org.joda.time,org.joda.time.format&quot;,org.joda.time.field;uses:=&quot;org.joda.time&quot;,org.joda.time.format;uses:=&quot;org.joda.time&quot;,org.joda.time.tz;uses:=&quot;org.joda.time&quot;,org.springframework.core,org.springframework.core.io,org.springframework.orm.hibernate3,org.springframework.security,org.springframework.security.acl,org.springframework.security.acl.basic,org.springframework.security.acl.basic.cache,org.springframework.security.acl.basic.jdbc,org.springframework.security.adapters,org.springframework.security.afterinvocation,org.springframework.security.authoritymapping,org.springframework.security.concurrent,org.springframework.security.config,org.springframework.security.context,org.springframework.security.context.httpinvoker,org.springframework.security.context.rmi,org.springframework.security.event.authentication,org.springframework.security.event.authorization,org.springframework.security.intercept,org.springframework.security.intercept.method,org.springframework.security.intercept.method.aopalliance,org.springframework.security.intercept.method.aspectj,org.springframework.security.intercept.web,org.springframework.security.ldap,org.springframework.security.ldap.populator,org.springframework.security.ldap.search,org.springframework.security.providers,org.springframework.security.providers.anonymous,org.springframework.security.providers.dao,org.springframework.security.providers.dao.cache,org.springframework.security.providers.dao.salt,org.springframework.security.providers.encoding,org.springframework.security.providers.jaas,org.springframework.security.providers.jaas.event,org.springframework.security.providers.ldap,org.springframework.security.providers.ldap.authenticator,org.springframework.security.providers.preauth,org.springframework.security.providers.rcp,org.springframework.security.providers.rememberme,org.springframework.security.providers.x509,org.springframework.security.providers.x509.cache,org.springframework.security.providers.x509.populator,org.springframework.security.runas,org.springframework.security.securechannel,org.springframework.security.token,org.springframework.security.ui,org.springframework.security.ui.basicauth,org.springframework.security.ui.digestauth,org.springframework.security.ui.logout,org.springframework.security.ui.preauth,org.springframework.security.ui.preauth.header,org.springframework.security.ui.preauth.j2ee,org.springframework.security.ui.preauth.websphere,org.springframework.security.ui.preauth.x509,org.springframework.security.ui.rememberme,org.springframework.security.ui.savedrequest,org.springframework.security.ui.session,org.springframework.security.ui.switchuser,org.springframework.security.ui.webapp,org.springframework.security.ui.x509,org.springframework.security.userdetails,org.springframework.security.userdetails.checker,org.springframework.security.userdetails.hierarchicalroles,org.springframework.security.userdetails.jdbc,org.springframework.security.userdetails.ldap,org.springframework.security.userdetails.memory,org.springframework.security.util,org.springframework.security.vote,org.springframework.security.wrapper,org.springframework.transaction;uses:=&quot;org.springframework.core&quot;,org.springframework.transaction.annotation,org.springframework.transaction.config,org.springframework.transaction.interceptor,org.springframework.transaction.jta,org.springframework.transaction.support&#xA;Require-Bundle: org.eclipse.osgi,org.eclipse.pde.source&#xA;Manifest-Version: 1.0&#xA;Bundle-SymbolicName: eu.etaxonomy.cdmLibrary;singleton:=true&#xA;Bundle-Name: CDM Library Plug-in&#xA;Bundle-ClassPath: antlr-2.7.6.jar,asm-attrs.jar,asm.jar,cglib-2.1.3.jar,commons-collections-3.2.jar,commons-logging-1.0.4.jar,dom4j-1.6.1.jar,ehcache-1.2.3.jar,ejb3-persistence.jar,hibernate-annotations-3.4.0-SNAPSHOT.jar,hibernate-commons-annotations-3.4.0-SNAPSHOT.jar,hibernate-core-3.4.0-SNAPSHOT.jar,hibernate-envers-3.4.0-SNAPSHOT.jar,hibernate-search-3.1.0.GA.jar,hibernate-tools-3.2.0.ga.jar,slf4j-api-1.5.2.jar,slf4j-log4j12-1.5.2.jar,javassist.jar,jdbc2_0-stdext.jar,jta.jar,junit-4.4.jar,log4j-1.2.14.jar,mysql-connector-java-3.1.14-bin.jar,xml-apis.jar,xercesImpl.jar,hsqldb.jar,jaxb-api.jar,jaxb-impl-2.0.jar,jdom-1.0.jar,opencsv-1.8.jar,jtds-1.2.2.jar,postgresql-8.2-504.jdbc4.jar,aopalliance-1.0.jar,spring-2.5.jar,spring-beans-2.5.jar,spring-context-2.5.jar,spring-core-2.5.jar,spring-jdbc-2.5.jar,spring-orm-2.5.jar,spring-test-2.5.jar,spring-tx-2.5.jar,h2-1.0.73.jar,joda-time-1.5.jar,joda-time-hibernate-1.0.jar,sanselan-0.94-incubator.jar,poi-3.1-FINAL.jar,spring-security-core-2.0.4.jar,aspectjweaver-1.5.4.jar,lucene-core-2.4.0.jar,lucene-spellchecker-2.4.0.jar,lsid-client-1.1.2.jar,lsid-server-1.1.2.jar,wsdl4j-1.6.1.jar,spring-2.5.6.jar,spring-aop-2.5.6.jar,spring-beans-2.5.6.jar,spring-context-2.5.6.jar,spring-core-2.5.6.jar,spring-jdbc-2.5.6.jar,spring-modules-lucene-0.8a.jar,spring-orm-2.5.6.jar,spring-test-2.5.6.jar,spring-web-2.5.6.jar,spring-webmvc-2.5.6.jar,unitils-1.0.jar,jsr250-api-1.0.jar,cdmlib-commons-2.1.jar,cdmlib-ext-2.1.jar,cdmlib-io-2.1.jar,cdmlib-model-2.1.jar,cdmlib-persistence-2.1.jar,cdmlib-services-2.1.jar,cdmlib-persistence-2.1-tests.jar,hibernate-validator-3.1.0.GA.jar,aspectjrt-1.6.3.jar,aspectjweaver-1.6.3.jar,aspectjtools-1.6.3.jar,spring-aspects-2.5.6.jar,spring-agent-2.5.6.jar,jdbc-1.2.jar
           </instruction>
           <instruction key='zipped'>
             true
         [Enter Copyright Description here.]
       </copyright>
     </unit>
+    <unit id='eu.etaxonomy.taxeditor.editor' version='2.0.0.v20090630-1147'>
+      <update id='eu.etaxonomy.taxeditor.editor' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='4'>
+        <property name='df_LT.Bundle-Vendor.0' value='EDIT'/>
+        <property name='df_LT.Bundle-Name.0' value='EDIT Taxonomic Editor - Editor Bundle'/>
+        <property name='org.eclipse.equinox.p2.name' value='%Bundle-Name.0'/>
+        <property name='org.eclipse.equinox.p2.provider' value='%Bundle-Vendor.0'/>
+      </properties>
+      <provides size='22'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.editor' version='2.0.0.v20090630-1147'/>
+        <provided namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.editor' version='2.0.0.v20090630-1147'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.description' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.description.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.images' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.images.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.internal' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.name' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.name.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.editor.reference' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.description' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.images' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.name' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.namerelations.wizard' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.reference' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.type' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.propertysheet.type.wizard' version='0.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+      </provides>
+      <requires size='16'>
+        <required namespace='osgi.bundle' name='org.eclipse.ui' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='3.4.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.databinding' range='1.1.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.databinding.beans' range='1.1.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.editors' range='3.4.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jface' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jface.databinding' range='1.2.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.ide' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.resources' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.filesystem' range='1.2.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.expressions' range='3.4.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.forms' range='3.3.101'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jface.text' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.views.properties.tabbed' range='3.4.2'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.cdmLibrary' range='2.0.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.store' range='1.0.0'/>
+      </requires>
+      <artifacts size='1'>
+        <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.editor' version='2.0.0.v20090630-1147'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='manifest'>
+            Bundle-RequiredExecutionEnvironment: J2SE-1.5&#xA;Bundle-Name: %Bundle-Name.0&#xA;Bundle-Activator: eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin&#xA;Manifest-Version: 1.0&#xA;Bundle-Vendor: %Bundle-Vendor.0&#xA;Bundle-ClassPath: .,icons/&#xA;Bundle-ActivationPolicy: lazy&#xA;Bundle-SymbolicName: eu.etaxonomy.taxeditor.editor;singleton:=true&#xA;Bundle-ManifestVersion: 2&#xA;Bundle-Version: 2.0.0.v20090630-1147&#xA;Bundle-Localization: plugin&#xA;Export-Package: eu.etaxonomy.taxeditor.editor,eu.etaxonomy.taxeditor.editor.description,eu.etaxonomy.taxeditor.editor.description.handler,eu.etaxonomy.taxeditor.editor.handler,eu.etaxonomy.taxeditor.editor.images,eu.etaxonomy.taxeditor.editor.images.handler,eu.etaxonomy.taxeditor.editor.internal,eu.etaxonomy.taxeditor.editor.name,eu.etaxonomy.taxeditor.editor.name.handler,eu.etaxonomy.taxeditor.editor.reference,eu.etaxonomy.taxeditor.propertysheet,eu.etaxonomy.taxeditor.propertysheet.description,eu.etaxonomy.taxeditor.propertysheet.images,eu.etaxonomy.taxeditor.propertysheet.name,eu.etaxonomy.taxeditor.propertysheet.namerelations.wizard,eu.etaxonomy.taxeditor.propertysheet.reference,eu.etaxonomy.taxeditor.propertysheet.type,eu.etaxonomy.taxeditor.propertysheet.type.wizard&#xA;Require-Bundle: org.eclipse.ui;bundle-version=&quot;3.4.1&quot;,org.eclipse.core.runtime;bundle-version=&quot;3.4.0&quot;,org.eclipse.core.databinding;bundle-version=&quot;1.1.1&quot;,org.eclipse.core.databinding.beans;bundle-version=&quot;1.1.1&quot;,org.eclipse.ui.editors;bundle-version=&quot;3.4.0&quot;,org.eclipse.jface;bundle-version=&quot;3.4.1&quot;,org.eclipse.jface.databinding;bundle-version=&quot;1.2.1&quot;,org.eclipse.ui.ide;bundle-version=&quot;3.4.1&quot;,org.eclipse.core.resources;bundle-version=&quot;3.4.1&quot;,org.eclipse.core.filesystem;bundle-version=&quot;1.2.0&quot;,org.eclipse.core.expressions;bundle-version=&quot;3.4.0&quot;,org.eclipse.ui.forms;bundle-version=&quot;3.3.101&quot;,org.eclipse.jface.text;bundle-version=&quot;3.4.1&quot;,org.eclipse.ui.views.properties.tabbed;bundle-version=&quot;3.4.2&quot;,eu.etaxonomy.cdmLibrary;bundle-version=&quot;2.0.0&quot;,eu.etaxonomy.taxeditor.store;bundle-version=&quot;1.0.0&quot;
+          </instruction>
+        </instructions>
+      </touchpointData>
+    </unit>
+    <unit id='eu.etaxonomy.taxeditor.feature.group' version='2.0.0.v20090630-1147' singleton='false'>
+      <update id='eu.etaxonomy.taxeditor.feature.group' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='5'>
+        <property name='org.eclipse.equinox.p2.name' value='Taxeditor Feature'/>
+        <property name='org.eclipse.equinox.p2.description' value='[Enter Feature Description here.]'/>
+        <property name='org.eclipse.equinox.p2.description.url' value='http://www.example.com/description'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+        <property name='org.eclipse.equinox.p2.type.group' value='true'/>
+      </properties>
+      <provides size='1'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.feature.group' version='2.0.0.v20090630-1147'/>
+      </provides>
+      <requires size='8'>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.feature.dependencies.feature.group' range='[2.0.0.v20090617-1416,2.0.0.v20090617-1416]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.cdmLibrary.feature.group' range='[2.1.0.v20090629-1736,2.1.0.v20090629-1736]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.application' range='[2.0.0.v20090630-1147,2.0.0.v20090630-1147]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.editor' range='[2.0.0.v20090630-1147,2.0.0.v20090630-1147]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.navigation' range='[2.0.0.v20090630-1147,2.0.0.v20090630-1147]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.store' range='[2.0.0.v20090630-1147,2.0.0.v20090630-1147]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.bulkeditor' range='[2.0.0.v20090630-1147,2.0.0.v20090630-1147]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.feature.jar' range='[2.0.0.v20090630-1147,2.0.0.v20090630-1147]'>
+          <filter>
+            (org.eclipse.update.install.features=true)
+          </filter>
+        </required>
+      </requires>
+      <touchpoint id='null' version='0.0.0'/>
+      <licenses size='1'>
+        <license url='http://www.example.com/license'>
+          [Enter License Description here.]
+        </license>
+      </licenses>
+      <copyright url='http://www.example.com/copyright'>
+        [Enter Copyright Description here.]
+      </copyright>
+    </unit>
+    <unit id='eu.etaxonomy.taxeditor.navigation' version='2.0.0.v20090630-1147'>
+      <update id='eu.etaxonomy.taxeditor.navigation' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='2'>
+        <property name='org.eclipse.equinox.p2.name' value='EDIT Taxonomic Editor - Navigation Bundle'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+      </properties>
+      <provides size='9'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.navigation' version='2.0.0.v20090630-1147'/>
+        <provided namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.navigation' version='2.0.0.v20090630-1147'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.navigation' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.navigation.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.navigation.internal' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.navigation.navigator' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.navigation.search' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.navigation.taxonomictree' version='0.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      </provides>
+      <requires size='14'>
+        <required namespace='osgi.bundle' name='org.eclipse.core.resources' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='3.4.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.navigator' range='3.3.101'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.navigator.resources' range='3.3.101'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.ide' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.forms' range='3.3.101'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.cdmLibrary' range='2.1.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.store' range='1.0.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.editor' range='1.0.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.databinding.beans' range='1.1.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.databinding' range='1.1.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jface.databinding' range='1.2.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.expressions' range='0.0.0'/>
+      </requires>
+      <artifacts size='1'>
+        <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.navigation' version='2.0.0.v20090630-1147'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='manifest'>
+            Bundle-ManifestVersion: 2&#xA;Require-Bundle: org.eclipse.core.resources;bundle-version=&quot;3.4.1&quot;,org.eclipse.core.runtime;bundle-version=&quot;3.4.0&quot;,org.eclipse.ui;bundle-version=&quot;3.4.1&quot;,org.eclipse.ui.navigator;bundle-version=&quot;3.3.101&quot;,org.eclipse.ui.navigator.resources;bundle-version=&quot;3.3.101&quot;,org.eclipse.ui.ide;bundle-version=&quot;3.4.1&quot;,org.eclipse.ui.forms;bundle-version=&quot;3.3.101&quot;,eu.etaxonomy.cdmLibrary;bundle-version=&quot;2.1.0&quot;,eu.etaxonomy.taxeditor.store;bundle-version=&quot;1.0.0&quot;,eu.etaxonomy.taxeditor.editor;bundle-version=&quot;1.0.0&quot;,org.eclipse.core.databinding.beans;bundle-version=&quot;1.1.1&quot;,org.eclipse.core.databinding;bundle-version=&quot;1.1.1&quot;,org.eclipse.jface.databinding;bundle-version=&quot;1.2.1&quot;,org.eclipse.core.expressions&#xA;Manifest-Version: 1.0&#xA;Bundle-Activator: eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin&#xA;Bundle-Version: 2.0.0.v20090630-1147&#xA;Export-Package: eu.etaxonomy.taxeditor.navigation,eu.etaxonomy.taxeditor.navigation.handler,eu.etaxonomy.taxeditor.navigation.internal,eu.etaxonomy.taxeditor.navigation.navigator,eu.etaxonomy.taxeditor.navigation.search,eu.etaxonomy.taxeditor.navigation.taxonomictree&#xA;Bundle-SymbolicName: eu.etaxonomy.taxeditor.navigation;singleton:=true&#xA;Bundle-ActivationPolicy: lazy&#xA;Bundle-Name: EDIT Taxonomic Editor - Navigation Bundle&#xA;Bundle-Vendor: EDIT
+          </instruction>
+        </instructions>
+      </touchpointData>
+    </unit>
+    <unit id='eu.etaxonomy.taxeditor.application' version='2.0.0.v20090630-1147'>
+      <update id='eu.etaxonomy.taxeditor.application' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='2'>
+        <property name='org.eclipse.equinox.p2.name' value='EDIT Taxonomic Editor'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+      </properties>
+      <provides size='4'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.application' version='2.0.0.v20090630-1147'/>
+        <provided namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.application' version='2.0.0.v20090630-1147'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor' version='0.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      </provides>
+      <requires size='9'>
+        <required namespace='osgi.bundle' name='org.eclipse.ui' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.ide' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='3.4.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.resources' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.cdmLibrary' range='2.1.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.store' range='1.0.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.editor' range='1.0.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.navigation' range='1.0.0'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.bulkeditor' range='1.0.0'/>
+      </requires>
+      <artifacts size='1'>
+        <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.application' version='2.0.0.v20090630-1147'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='manifest'>
+            Bundle-Vendor: EDIT&#xA;Bundle-ManifestVersion: 2&#xA;Bundle-Activator: eu.etaxonomy.taxeditor.TaxonomicEditorPlugin&#xA;Bundle-Localization: plugin&#xA;Bundle-Name: EDIT Taxonomic Editor&#xA;Require-Bundle: org.eclipse.ui;bundle-version=&quot;3.4.1&quot;,org.eclipse.ui.ide;bundle-version=&quot;3.4.1&quot;,org.eclipse.core.runtime;bundle-version=&quot;3.4.0&quot;,org.eclipse.core.resources;bundle-version=&quot;3.4.1&quot;,eu.etaxonomy.cdmLibrary;bundle-version=&quot;2.1.0&quot;,eu.etaxonomy.taxeditor.store;bundle-version=&quot;1.0.0&quot;,eu.etaxonomy.taxeditor.editor;bundle-version=&quot;1.0.0&quot;,eu.etaxonomy.taxeditor.navigation;bundle-version=&quot;1.0.0&quot;,eu.etaxonomy.taxeditor.bulkeditor;bundle-version=&quot;1.0.0&quot;&#xA;Bundle-ActivationPolicy: lazy&#xA;Manifest-Version: 1.0&#xA;Bundle-SymbolicName: eu.etaxonomy.taxeditor.application;singleton:=true&#xA;Bundle-Version: 2.0.0.v20090630-1147&#xA;Export-Package: eu.etaxonomy.taxeditor
+          </instruction>
+        </instructions>
+      </touchpointData>
+    </unit>
+    <unit id='eu.etaxonomy.taxeditor.bulkeditor' version='2.0.0.v20090630-1147'>
+      <update id='eu.etaxonomy.taxeditor.bulkeditor' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='2'>
+        <property name='org.eclipse.equinox.p2.name' value='EDIT Taxonomic Editor - Bulk Editor Bundle'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+      </properties>
+      <provides size='6'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.bulkeditor' version='2.0.0.v20090630-1147'/>
+        <provided namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.bulkeditor' version='2.0.0.v20090630-1147'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.bulkeditor' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.bulkeditor.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.bulkeditor.internal' version='0.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      </provides>
+      <requires size='7'>
+        <required namespace='osgi.bundle' name='org.eclipse.ui' range='0.0.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='0.0.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jface.text' range='3.4.2'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.editors' range='0.0.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.ide' range='0.0.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.resources' range='3.4.2'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.cdmLibrary' range='2.1.0'/>
+      </requires>
+      <artifacts size='1'>
+        <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.bulkeditor' version='2.0.0.v20090630-1147'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='manifest'>
+            Bundle-RequiredExecutionEnvironment: J2SE-1.5&#xA;Bundle-Name: EDIT Taxonomic Editor - Bulk Editor Bundle&#xA;Bundle-Activator: eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin&#xA;Manifest-Version: 1.0&#xA;Bundle-Vendor: EDIT&#xA;Bundle-ClassPath: .&#xA;Bundle-ActivationPolicy: lazy&#xA;Bundle-SymbolicName: eu.etaxonomy.taxeditor.bulkeditor;singleton:=true&#xA;Bundle-ManifestVersion: 2&#xA;Bundle-Version: 2.0.0.v20090630-1147&#xA;Bundle-Localization: plugin&#xA;Export-Package: eu.etaxonomy.taxeditor.bulkeditor,eu.etaxonomy.taxeditor.bulkeditor.handler,eu.etaxonomy.taxeditor.bulkeditor.internal&#xA;Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.jface.text;bundle-version=&quot;3.4.2&quot;,org.eclipse.ui.editors,org.eclipse.ui.ide,org.eclipse.core.resources;bundle-version=&quot;3.4.2&quot;,eu.etaxonomy.cdmLibrary;bundle-version=&quot;2.1.0&quot;
+          </instruction>
+        </instructions>
+      </touchpointData>
+    </unit>
+    <unit id='eu.etaxonomy.taxeditor.store' version='2.0.0.v20090630-1147'>
+      <update id='eu.etaxonomy.taxeditor.store' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='2'>
+        <property name='org.eclipse.equinox.p2.name' value='EDIT Taxonomic Editor - DataStore Bundle'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+      </properties>
+      <provides size='15'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.store' version='2.0.0.v20090630-1147'/>
+        <provided namespace='osgi.bundle' name='eu.etaxonomy.taxeditor.store' version='2.0.0.v20090630-1147'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.datasource' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.datasource.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.datasource.view' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.datasource.wizard' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.dialogs' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.handler' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.model' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.operations' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.parser' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.preference' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.store' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.taxeditor.store.internal' version='0.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      </provides>
+      <requires size='13'>
+        <required namespace='osgi.bundle' name='org.eclipse.ui' range='[3.2.0,4.0.0)'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='[3.2.0,4.0.0)'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.filesystem' range='1.2.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.core.resources' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='eu.etaxonomy.cdmLibrary' range='2.1.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.editors' range='3.4.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jface.text' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.ui.ide' range='3.4.2'/>
+        <required namespace='osgi.bundle' name='org.eclipse.debug.core' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jdt.launching' range='3.4.1'/>
+        <required namespace='osgi.bundle' name='org.eclipse.jdt.core' range='3.4.4'/>
+        <required namespace='java.package' name='junit.framework' range='0.0.0'/>
+        <required namespace='java.package' name='org.junit' range='0.0.0'/>
+      </requires>
+      <artifacts size='1'>
+        <artifact classifier='osgi.bundle' id='eu.etaxonomy.taxeditor.store' version='2.0.0.v20090630-1147'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='manifest'>
+            Bundle-ManifestVersion: 2&#xA;Export-Package: eu.etaxonomy.taxeditor.datasource,eu.etaxonomy.taxeditor.datasource.handler,eu.etaxonomy.taxeditor.datasource.view,eu.etaxonomy.taxeditor.datasource.wizard,eu.etaxonomy.taxeditor.dialogs,eu.etaxonomy.taxeditor.handler,eu.etaxonomy.taxeditor.model;uses:=&quot;eu.etaxonomy.cdm.model.common,eu.etaxonomy.cdm.model.name,eu.etaxonomy.cdm.model.taxon&quot;,eu.etaxonomy.taxeditor.operations,eu.etaxonomy.taxeditor.parser,eu.etaxonomy.taxeditor.preference,eu.etaxonomy.taxeditor.store,eu.etaxonomy.taxeditor.store.internal&#xA;Bundle-RequiredExecutionEnvironment: J2SE-1.5&#xA;Require-Bundle: org.eclipse.ui;bundle-version=&quot;[3.2.0,4.0.0)&quot;,org.eclipse.core.runtime;bundle-version=&quot;[3.2.0,4.0.0)&quot;,org.eclipse.core.filesystem;bundle-version=&quot;1.2.0&quot;,org.eclipse.core.resources;bundle-version=&quot;3.4.1&quot;,eu.etaxonomy.cdmLibrary;bundle-version=&quot;2.1.0&quot;,org.eclipse.ui.editors;bundle-version=&quot;3.4.0&quot;,org.eclipse.jface.text;bundle-version=&quot;3.4.1&quot;,org.eclipse.ui.ide;bundle-version=&quot;3.4.2&quot;,org.eclipse.debug.core;bundle-version=&quot;3.4.1&quot;,org.eclipse.jdt.launching;bundle-version=&quot;3.4.1&quot;,org.eclipse.jdt.core;bundle-version=&quot;3.4.4&quot;&#xA;Bundle-Activator: eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin&#xA;Bundle-Name: EDIT Taxonomic Editor - DataStore Bundle&#xA;Bundle-Version: 2.0.0.v20090630-1147&#xA;Bundle-Vendor: EDIT&#xA;Bundle-SymbolicName: eu.etaxonomy.taxeditor.store;singleton:=true&#xA;Import-Package: junit.framework,org.junit&#xA;Bundle-ActivationPolicy: lazy&#xA;Manifest-Version: 1.0
+          </instruction>
+        </instructions>
+      </touchpointData>
+    </unit>
+    <unit id='eu.etaxonomy.taxeditor.feature.jar' version='2.0.0.v20090630-1147'>
+      <update id='eu.etaxonomy.taxeditor.feature.jar' range='[0.0.0,2.0.0.v20090630-1147)' severity='0'/>
+      <properties size='4'>
+        <property name='org.eclipse.equinox.p2.name' value='Taxeditor Feature'/>
+        <property name='org.eclipse.equinox.p2.description' value='[Enter Feature Description here.]'/>
+        <property name='org.eclipse.equinox.p2.description.url' value='http://www.example.com/description'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+      </properties>
+      <provides size='3'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.taxeditor.feature.jar' version='2.0.0.v20090630-1147'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='feature' version='1.0.0'/>
+        <provided namespace='org.eclipse.update.feature' name='eu.etaxonomy.taxeditor' version='2.0.0.v20090630-1147'/>
+      </provides>
+      <filter>
+        (org.eclipse.update.install.features=true)
+      </filter>
+      <artifacts size='1'>
+        <artifact classifier='org.eclipse.update.feature' id='eu.etaxonomy.taxeditor' version='2.0.0.v20090630-1147'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='zipped'>
+            true
+          </instruction>
+        </instructions>
+      </touchpointData>
+      <licenses size='1'>
+        <license url='http://www.example.com/license'>
+          [Enter License Description here.]
+        </license>
+      </licenses>
+      <copyright url='http://www.example.com/copyright'>
+        [Enter Copyright Description here.]
+      </copyright>
+    </unit>
+    <unit id='eu.etaxonomy.cdmLibrary.feature.jar' version='2.1.0.v20090629-1736'>
+      <update id='eu.etaxonomy.cdmLibrary.feature.jar' range='[0.0.0,2.1.0.v20090629-1736)' severity='0'/>
+      <properties size='4'>
+        <property name='org.eclipse.equinox.p2.name' value='CDM Library'/>
+        <property name='org.eclipse.equinox.p2.description' value='cdmLibrary eclipse plugin feature'/>
+        <property name='org.eclipse.equinox.p2.description.url' value='http://www.example.com/description'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+      </properties>
+      <provides size='3'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.cdmLibrary.feature.jar' version='2.1.0.v20090629-1736'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='feature' version='1.0.0'/>
+        <provided namespace='org.eclipse.update.feature' name='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'/>
+      </provides>
+      <filter>
+        (org.eclipse.update.install.features=true)
+      </filter>
+      <artifacts size='1'>
+        <artifact classifier='org.eclipse.update.feature' id='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='1'>
+          <instruction key='zipped'>
+            true
+          </instruction>
+        </instructions>
+      </touchpointData>
+      <licenses size='1'>
+        <license url='http://www.example.com/license'>
+          to be added
+        </license>
+      </licenses>
+      <copyright url='http://www.example.com/copyright'>
+        [Enter Copyright Description here.]
+      </copyright>
+    </unit>
+    <unit id='eu.etaxonomy.cdmLibrary.feature.group' version='2.1.0.v20090629-1736' singleton='false'>
+      <update id='eu.etaxonomy.cdmLibrary.feature.group' range='[0.0.0,2.1.0.v20090629-1736)' severity='0'/>
+      <properties size='5'>
+        <property name='org.eclipse.equinox.p2.name' value='CDM Library'/>
+        <property name='org.eclipse.equinox.p2.description' value='cdmLibrary eclipse plugin feature'/>
+        <property name='org.eclipse.equinox.p2.description.url' value='http://www.example.com/description'/>
+        <property name='org.eclipse.equinox.p2.provider' value='EDIT'/>
+        <property name='org.eclipse.equinox.p2.type.group' value='true'/>
+      </properties>
+      <provides size='1'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.cdmLibrary.feature.group' version='2.1.0.v20090629-1736'/>
+      </provides>
+      <requires size='2'>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.cdmLibrary' range='[2.1.0.v20090629-1736,2.1.0.v20090629-1736]'/>
+        <required namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.cdmLibrary.feature.jar' range='[2.1.0.v20090629-1736,2.1.0.v20090629-1736]'>
+          <filter>
+            (org.eclipse.update.install.features=true)
+          </filter>
+        </required>
+      </requires>
+      <touchpoint id='null' version='0.0.0'/>
+      <licenses size='1'>
+        <license url='http://www.example.com/license'>
+          to be added
+        </license>
+      </licenses>
+      <copyright url='http://www.example.com/copyright'>
+        [Enter Copyright Description here.]
+      </copyright>
+    </unit>
+    <unit id='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'>
+      <update id='eu.etaxonomy.cdmLibrary' range='[0.0.0,2.1.0.v20090629-1736)' severity='0'/>
+      <properties size='1'>
+        <property name='org.eclipse.equinox.p2.name' value='CDM Library Plug-in'/>
+      </properties>
+      <provides size='162'>
+        <provided namespace='org.eclipse.equinox.p2.iu' name='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'/>
+        <provided namespace='osgi.bundle' name='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.application' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.application.eclipse' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.conversation' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.service' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.service.config' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.service.config.impl' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.service.pager' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.api.service.pager.impl' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.aspectj' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.common' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.database' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.database.types' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.datagenerator' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.ext' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.hibernate' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.abcd206' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.berlinModel' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.berlinModel.in' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.berlinModel.out' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.berlinModel.out.mapper' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.common' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.excel.common' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.excel.distribution' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.excel.taxa' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.faunaEuropaea' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.jaxb' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.sdd' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.synthesys' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.taxonx' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.tcsrdf' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.tcsxml' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.tcsxml.in' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.io.tcsxml.out' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.jaxb' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.agent' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.common' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.common.init' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.description' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.location' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.media' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.molecular' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.name' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.occurrence' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.reference' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.taxon' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.model.view' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.persistence.hibernate' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.persistence.query' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy.cache.agent' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy.cache.common' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy.cache.name' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy.cache.reference' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy.exceptions' version='0.0.0'/>
+        <provided namespace='java.package' name='eu.etaxonomy.cdm.strategy.parser' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.chainsaw' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.config' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.helpers' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.jdbc' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.jmx' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5.config' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5.util' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5.viewer' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5.viewer.categoryexplorer' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5.viewer.configure' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.lf5.viewer.images' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.net' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.nt' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.or' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.or.jms' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.or.sax' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.spi' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.varia' version='0.0.0'/>
+        <provided namespace='java.package' name='org.apache.log4j.xml' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time.base' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time.chrono' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time.convert' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time.field' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time.format' version='0.0.0'/>
+        <provided namespace='java.package' name='org.joda.time.tz' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.core' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.core.io' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.orm.hibernate3' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.acl' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.acl.basic' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.acl.basic.cache' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.acl.basic.jdbc' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.adapters' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.afterinvocation' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.authoritymapping' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.concurrent' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.config' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.context' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.context.httpinvoker' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.context.rmi' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.event.authentication' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.event.authorization' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.intercept' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.intercept.method' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.intercept.method.aopalliance' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.intercept.method.aspectj' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.intercept.web' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ldap' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ldap.populator' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ldap.search' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.anonymous' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.dao' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.dao.cache' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.dao.salt' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.encoding' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.jaas' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.jaas.event' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.ldap' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.ldap.authenticator' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.preauth' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.rcp' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.rememberme' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.x509' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.x509.cache' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.providers.x509.populator' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.runas' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.securechannel' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.token' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.basicauth' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.digestauth' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.logout' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.preauth' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.preauth.header' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.preauth.j2ee' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.preauth.websphere' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.preauth.x509' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.rememberme' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.savedrequest' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.session' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.switchuser' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.webapp' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.ui.x509' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.userdetails' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.userdetails.checker' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.userdetails.hierarchicalroles' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.userdetails.jdbc' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.userdetails.ldap' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.userdetails.memory' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.util' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.vote' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.security.wrapper' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.transaction' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.transaction.annotation' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.transaction.config' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.transaction.interceptor' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.transaction.jta' version='0.0.0'/>
+        <provided namespace='java.package' name='org.springframework.transaction.support' version='0.0.0'/>
+        <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      </provides>
+      <requires size='2'>
+        <required namespace='osgi.bundle' name='org.eclipse.osgi' range='0.0.0'/>
+        <required namespace='osgi.bundle' name='org.eclipse.pde.source' range='0.0.0'/>
+      </requires>
+      <artifacts size='1'>
+        <artifact classifier='osgi.bundle' id='eu.etaxonomy.cdmLibrary' version='2.1.0.v20090629-1736'/>
+      </artifacts>
+      <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+      <touchpointData size='1'>
+        <instructions size='2'>
+          <instruction key='manifest'>
+            Bundle-ManifestVersion: 2&#xA;Bundle-Version: 2.1.0.v20090629-1736&#xA;Export-Package: eu.etaxonomy.cdm,eu.etaxonomy.cdm.api.application,eu.etaxonomy.cdm.api.application.eclipse,eu.etaxonomy.cdm.api.conversation,eu.etaxonomy.cdm.api.service,eu.etaxonomy.cdm.api.service.config,eu.etaxonomy.cdm.api.service.config.impl,eu.etaxonomy.cdm.api.service.pager,eu.etaxonomy.cdm.api.service.pager.impl,eu.etaxonomy.cdm.aspectj,eu.etaxonomy.cdm.common,eu.etaxonomy.cdm.database,eu.etaxonomy.cdm.database.types,eu.etaxonomy.cdm.datagenerator,eu.etaxonomy.cdm.ext,eu.etaxonomy.cdm.hibernate,eu.etaxonomy.cdm.io.abcd206,eu.etaxonomy.cdm.io.berlinModel,eu.etaxonomy.cdm.io.berlinModel.in,eu.etaxonomy.cdm.io.berlinModel.out,eu.etaxonomy.cdm.io.berlinModel.out.mapper,eu.etaxonomy.cdm.io.common,eu.etaxonomy.cdm.io.excel.common,eu.etaxonomy.cdm.io.excel.distribution,eu.etaxonomy.cdm.io.excel.taxa,eu.etaxonomy.cdm.io.faunaEuropaea,eu.etaxonomy.cdm.io.jaxb,eu.etaxonomy.cdm.io.sdd,eu.etaxonomy.cdm.io.synthesys,eu.etaxonomy.cdm.io.taxonx,eu.etaxonomy.cdm.io.tcsrdf,eu.etaxonomy.cdm.io.tcsxml,eu.etaxonomy.cdm.io.tcsxml.in,eu.etaxonomy.cdm.io.tcsxml.out,eu.etaxonomy.cdm.jaxb,eu.etaxonomy.cdm.model.agent,eu.etaxonomy.cdm.model.common,eu.etaxonomy.cdm.model.common.init,eu.etaxonomy.cdm.model.description,eu.etaxonomy.cdm.model.location,eu.etaxonomy.cdm.model.media,eu.etaxonomy.cdm.model.molecular,eu.etaxonomy.cdm.model.name,eu.etaxonomy.cdm.model.occurrence,eu.etaxonomy.cdm.model.reference,eu.etaxonomy.cdm.model.taxon,eu.etaxonomy.cdm.model.view,eu.etaxonomy.cdm.persistence.hibernate,eu.etaxonomy.cdm.persistence.query,eu.etaxonomy.cdm.strategy,eu.etaxonomy.cdm.strategy.cache.agent,eu.etaxonomy.cdm.strategy.cache.common,eu.etaxonomy.cdm.strategy.cache.name,eu.etaxonomy.cdm.strategy.cache.reference,eu.etaxonomy.cdm.strategy.exceptions,eu.etaxonomy.cdm.strategy.parser,org.apache.log4j;uses:=&quot;org.apache.log4j.helpers,org.apache.log4j.or,org.apache.log4j.spi&quot;,org.apache.log4j.chainsaw; uses:=&quot;org.apache.log4j,  javax.swing,  javax.swing.table,  org.apache.log4j.spi,  javax.swing.event,  org.xml.sax.helpers,  org.xml.sax&quot;,org.apache.log4j.config;uses:=&quot;org.apache.log4j&quot;,org.apache.log4j.helpers;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.jdbc;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.jmx;uses:=&quot;org.apache.log4j,org.apache.log4j.spi,javax.management&quot;,org.apache.log4j.lf5;uses:=&quot;org.apache.log4j.lf5.viewer,org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.lf5.config,org.apache.log4j.lf5.util;uses:=&quot;org.apache.log4j.lf5.viewer,org.apache.log4j.lf5&quot;,org.apache.log4j.lf5.viewer; uses:=&quot;org.apache.log4j.lf5.util,  org.apache.log4j.lf5.viewer.categoryexplorer,  org.apache.log4j.lf5,  javax.swing,  javax.swing.table,  javax.swing.event,  org.apache.log4j.lf5.viewer.configure&quot;,org.apache.log4j.lf5.viewer.categoryexplorer; uses:=&quot;org.apache.log4j.lf5,  javax.swing.tree,  javax.swing,  javax.swing.table,  javax.swing.event&quot;,org.apache.log4j.lf5.viewer.configure;uses:=&quot;org.apache.log4j.lf5.viewer,javax.swing.tree,org.w3c.dom&quot;,org.apache.log4j.lf5.viewer.images,org.apache.log4j.net; uses:=&quot;javax.naming,  org.apache.log4j.helpers,  org.apache.log4j,  javax.jms,  javax.mail.internet,  org.apache.log4j.spi,  javax.mail&quot;,org.apache.log4j.nt;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.or;uses:=&quot;org.apache.log4j.spi&quot;,org.apache.log4j.or.jms;uses:=&quot;org.apache.log4j.or&quot;,org.apache.log4j.or.sax;uses:=&quot;org.apache.log4j.or&quot;,org.apache.log4j.spi;uses:=&quot;org.apache.log4j,org.apache.log4j.or&quot;,org.apache.log4j.varia;uses:=&quot;org.apache.log4j,org.apache.log4j.spi&quot;,org.apache.log4j.xml; uses:=&quot;org.apache.log4j.config,  org.apache.log4j.helpers,  org.apache.log4j,  javax.xml.parsers,  org.apache.log4j.spi,  org.w3c.dom,  org.xml.sax&quot;,org.joda.time; uses:=&quot;org.joda.time.base,  org.joda.time.field,  org.joda.time.chrono,  org.joda.time.tz,  org.joda.time.format&quot;,org.joda.time.base;uses:=&quot;org.joda.time,org.joda.time.format&quot;,org.joda.time.chrono;uses:=&quot;org.joda.time.field,org.joda.time&quot;,org.joda.time.convert;uses:=&quot;org.joda.time,org.joda.time.format&quot;,org.joda.time.field;uses:=&quot;org.joda.time&quot;,org.joda.time.format;uses:=&quot;org.joda.time&quot;,org.joda.time.tz;uses:=&quot;org.joda.time&quot;,org.springframework.core,org.springframework.core.io,org.springframework.orm.hibernate3,org.springframework.security,org.springframework.security.acl,org.springframework.security.acl.basic,org.springframework.security.acl.basic.cache,org.springframework.security.acl.basic.jdbc,org.springframework.security.adapters,org.springframework.security.afterinvocation,org.springframework.security.authoritymapping,org.springframework.security.concurrent,org.springframework.security.config,org.springframework.security.context,org.springframework.security.context.httpinvoker,org.springframework.security.context.rmi,org.springframework.security.event.authentication,org.springframework.security.event.authorization,org.springframework.security.intercept,org.springframework.security.intercept.method,org.springframework.security.intercept.method.aopalliance,org.springframework.security.intercept.method.aspectj,org.springframework.security.intercept.web,org.springframework.security.ldap,org.springframework.security.ldap.populator,org.springframework.security.ldap.search,org.springframework.security.providers,org.springframework.security.providers.anonymous,org.springframework.security.providers.dao,org.springframework.security.providers.dao.cache,org.springframework.security.providers.dao.salt,org.springframework.security.providers.encoding,org.springframework.security.providers.jaas,org.springframework.security.providers.jaas.event,org.springframework.security.providers.ldap,org.springframework.security.providers.ldap.authenticator,org.springframework.security.providers.preauth,org.springframework.security.providers.rcp,org.springframework.security.providers.rememberme,org.springframework.security.providers.x509,org.springframework.security.providers.x509.cache,org.springframework.security.providers.x509.populator,org.springframework.security.runas,org.springframework.security.securechannel,org.springframework.security.token,org.springframework.security.ui,org.springframework.security.ui.basicauth,org.springframework.security.ui.digestauth,org.springframework.security.ui.logout,org.springframework.security.ui.preauth,org.springframework.security.ui.preauth.header,org.springframework.security.ui.preauth.j2ee,org.springframework.security.ui.preauth.websphere,org.springframework.security.ui.preauth.x509,org.springframework.security.ui.rememberme,org.springframework.security.ui.savedrequest,org.springframework.security.ui.session,org.springframework.security.ui.switchuser,org.springframework.security.ui.webapp,org.springframework.security.ui.x509,org.springframework.security.userdetails,org.springframework.security.userdetails.checker,org.springframework.security.userdetails.hierarchicalroles,org.springframework.security.userdetails.jdbc,org.springframework.security.userdetails.ldap,org.springframework.security.userdetails.memory,org.springframework.security.util,org.springframework.security.vote,org.springframework.security.wrapper,org.springframework.transaction;uses:=&quot;org.springframework.core&quot;,org.springframework.transaction.annotation,org.springframework.transaction.config,org.springframework.transaction.interceptor,org.springframework.transaction.jta,org.springframework.transaction.support&#xA;Require-Bundle: org.eclipse.osgi,org.eclipse.pde.source&#xA;Manifest-Version: 1.0&#xA;Bundle-SymbolicName: eu.etaxonomy.cdmLibrary;singleton:=true&#xA;Bundle-Name: CDM Library Plug-in&#xA;Bundle-ClassPath: antlr-2.7.6.jar,asm-attrs.jar,asm.jar,cglib-2.1.3.jar,commons-collections-3.2.jar,commons-logging-1.0.4.jar,dom4j-1.6.1.jar,ehcache-1.2.3.jar,ejb3-persistence.jar,hibernate-annotations-3.4.0-SNAPSHOT.jar,hibernate-commons-annotations-3.4.0-SNAPSHOT.jar,hibernate-core-3.4.0-SNAPSHOT.jar,hibernate-envers-3.4.0-SNAPSHOT.jar,hibernate-search-3.1.0.GA.jar,hibernate-tools-3.2.0.ga.jar,slf4j-api-1.5.2.jar,slf4j-log4j12-1.5.2.jar,javassist.jar,jdbc2_0-stdext.jar,jta.jar,junit-4.4.jar,log4j-1.2.14.jar,mysql-connector-java-3.1.14-bin.jar,xml-apis.jar,xercesImpl.jar,hsqldb.jar,jaxb-api.jar,jaxb-impl-2.0.jar,jdom-1.0.jar,opencsv-1.8.jar,jtds-1.2.2.jar,postgresql-8.2-504.jdbc4.jar,aopalliance-1.0.jar,spring-2.5.jar,spring-beans-2.5.jar,spring-context-2.5.jar,spring-core-2.5.jar,spring-jdbc-2.5.jar,spring-orm-2.5.jar,spring-test-2.5.jar,spring-tx-2.5.jar,h2-1.0.73.jar,joda-time-1.5.jar,joda-time-hibernate-1.0.jar,sanselan-0.94-incubator.jar,poi-3.1-FINAL.jar,spring-security-core-2.0.4.jar,aspectjweaver-1.5.4.jar,lucene-core-2.4.0.jar,lucene-spellchecker-2.4.0.jar,lsid-client-1.1.2.jar,lsid-server-1.1.2.jar,wsdl4j-1.6.1.jar,spring-2.5.6.jar,spring-aop-2.5.6.jar,spring-beans-2.5.6.jar,spring-context-2.5.6.jar,spring-core-2.5.6.jar,spring-jdbc-2.5.6.jar,spring-modules-lucene-0.8a.jar,spring-orm-2.5.6.jar,spring-test-2.5.6.jar,spring-web-2.5.6.jar,spring-webmvc-2.5.6.jar,unitils-1.0.jar,jsr250-api-1.0.jar,cdmlib-commons-2.1.jar,cdmlib-ext-2.1.jar,cdmlib-io-2.1.jar,cdmlib-model-2.1.jar,cdmlib-persistence-2.1.jar,cdmlib-services-2.1.jar,cdmlib-persistence-2.1-tests.jar,hibernate-validator-3.1.0.GA.jar,aspectjrt-1.6.3.jar,aspectjweaver-1.6.3.jar,aspectjtools-1.6.3.jar,spring-aspects-2.5.6.jar,spring-agent-2.5.6.jar,jdbc-1.2.jar
+          </instruction>
+          <instruction key='zipped'>
+            true
+          </instruction>
+        </instructions>
+      </touchpointData>
+    </unit>
   </units>
 </repository>
index b86a4417d93e8d0629d67a7b9798cbcd0ff07220..2bda2366ce6003f788435bbffdbb3ffa8af2208b 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/eu.etaxonomy.cdmLibrary_2.1.0.v20090624-1200.jar" id="eu.etaxonomy.cdmLibrary" version="2.1.0.v20090624-1200">
+   <feature url="features/eu.etaxonomy.cdmLibrary_2.1.0.v20090629-1736.jar" id="eu.etaxonomy.cdmLibrary" version="2.1.0.v20090629-1736">
       <category name="Cdm Library"/>
    </feature>
-   <feature url="features/eu.etaxonomy.taxeditor_2.0.0.v20090624-1625.jar" id="eu.etaxonomy.taxeditor" version="2.0.0.v20090624-1625">
+   <feature url="features/eu.etaxonomy.taxeditor_2.0.0.v20090630-1147.jar" id="eu.etaxonomy.taxeditor" version="2.0.0.v20090630-1147">
       <category name="Taxonomic Editor"/>
    </feature>
    <category-def name="Taxonomic Editor" label="Taxonomic Editor"/>