Moving editor sources back into trunk
authorn.hoffmann <n.hoffmann@localhost>
Tue, 2 Jun 2009 09:05:16 +0000 (09:05 +0000)
committern.hoffmann <n.hoffmann@localhost>
Tue, 2 Jun 2009 09:05:16 +0000 (09:05 +0000)
419 files changed:
.gitattributes
.gitignore
taxeditor-application/META-INF/MANIFEST.MF [new file with mode: 0644]
taxeditor-application/TaxEditor.product [new file with mode: 0644]
taxeditor-application/build.properties [new file with mode: 0644]
taxeditor-application/icons/256color_16x16.gif [new file with mode: 0644]
taxeditor-application/icons/256color_32x32.gif [new file with mode: 0644]
taxeditor-application/icons/256color_48x48.gif [new file with mode: 0644]
taxeditor-application/icons/edit_16x16.gif [new file with mode: 0644]
taxeditor-application/plugin.properties [new file with mode: 0644]
taxeditor-application/plugin.xml [new file with mode: 0644]
taxeditor-application/plugin_customization.ini [new file with mode: 0644]
taxeditor-application/pom.xml [new file with mode: 0644]
taxeditor-application/splash.bmp [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Application.java [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Perspective.java [new file with mode: 0644]
taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java [new file with mode: 0644]
taxeditor-application/src/main/resources/log4j.properties [new file with mode: 0644]
taxeditor-editor/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
taxeditor-editor/META-INF/MANIFEST.MF [new file with mode: 0644]
taxeditor-editor/build.properties [new file with mode: 0644]
taxeditor-editor/plugin.properties [new file with mode: 0644]
taxeditor-editor/plugin.xml [new file with mode: 0644]
taxeditor-editor/pom.xml [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/CompositeBorderDecorator.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ContextMenu.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ErrorAnnotation.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupedComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineBreakListener.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSupport.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MenuConstants.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditorDataChangeBehaviour.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/Page.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ParseListener.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/SelectTaxonDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInputFactory.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TemporaryTaxon.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/UndoView.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ViewerConfiguration.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/WarningAnnotation.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/WidgetTransfer.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/CommonNameComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionFeatureGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionFeatureGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionMapDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DynamicFeatureMenu.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/IDescriptionEditorCompositeRepository.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/LanguageDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/handler/CreateDescriptionElementHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/handler/DeleteDescriptionElementHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/CreateChildTaxonHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/EditNewTaxonHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SaveAllHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SaveTaxonHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/ShowPropertySheetHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/GalleryLabelComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/ImageComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/ImagesGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/TaxonHasNoImagesComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/TaxonImageEditor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/handler/CreateImageHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/handler/DeleteImageHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/internal/TaxeditorEditorPlugin.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/BasionymSynonymPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/CdmParserController.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/INameEditorCompositeRepository.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameSearchDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameSelectComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameViewer.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonSearchDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/AbstractDynamicConceptRelationMenu.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeMenu.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToAcceptedTaxon.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToConceptRelationHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToConceptRelationMenu.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToMisapplicationHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToSynonymHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateConceptRelationHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateConceptRelationMenu.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHeterotypicSynonymHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateMisapplicationHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/RemoveBasionymHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SetBasionymHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/IReferenceSearch.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSearchDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationsDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationsPropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CheckboxCellEditor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CheckboxPropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CollectionPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CompletionProcessor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/DayValidator.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/EditorPropertySheetEntry.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/PropertySheetUtil.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SourceViewerConfig.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/TimePeriodPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/YearValidator.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/CommonNamePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/DescriptionElementPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/DistributionPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/TaxonDescriptionPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/images/ImagePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/AcceptedTaxonPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/BotanicalNamePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/ConceptPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/EditorComboBoxPropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/MisapplicationPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NameRelationsPropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NameRelationsPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NomStatusPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NomenclaturalAuthorshipPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NonViralNamePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/ScientificNamePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/SynonymPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/TaxonBasePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/ZoologicalNamePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/ChooseRelationWizardPage.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/ListNameRelationsWizardPage.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationWizard.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationsListWizard.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationshipTemp.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/IReferenceSearch.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/NomenclaturalReferencePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferencePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/SingleRefTypePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypeCollectionPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypeDesignationPropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertyDescriptor.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertySource.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeDesignationWizard.java [new file with mode: 0644]
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeListWizard.java [new file with mode: 0644]
taxeditor-editor/src/main/resources/log4j.properties [new file with mode: 0644]
taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/Application.java [new file with mode: 0644]
taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationActionBarAdvisor.java [new file with mode: 0644]
taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationWorkbenchAdvisor.java [new file with mode: 0644]
taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationWorkbenchWindowAdvisor.java [new file with mode: 0644]
taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/Perspective.java [new file with mode: 0644]
taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/TestOpenHandler.java [new file with mode: 0644]
taxeditor-feature-dependencies/.project [new file with mode: 0644]
taxeditor-feature-dependencies/build.properties [new file with mode: 0644]
taxeditor-feature-dependencies/feature.xml [new file with mode: 0644]
taxeditor-feature/build.properties [new file with mode: 0644]
taxeditor-feature/feature.xml [new file with mode: 0644]
taxeditor-navigation/META-INF/MANIFEST.MF [new file with mode: 0644]
taxeditor-navigation/build.properties [new file with mode: 0644]
taxeditor-navigation/icons/edit_16x16.gif [new file with mode: 0644]
taxeditor-navigation/plugin.xml [new file with mode: 0644]
taxeditor-navigation/pom.xml [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/RecentNamesContributionItem.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/CreateChildTaxonHandler.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonHandler.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/EditTaxonHandler.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/QuickCreateChildTaxonHandler.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/ShowTaxonomicTreeViewHandler.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/internal/TaxeditorNavigationPlugin.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultLabelProvider.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeContentProvider.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeLabelProvider.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeView.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeViewDataChangeBehaviour.java [new file with mode: 0644]
taxeditor-navigation/src/main/java/log4j.properties [new file with mode: 0644]
taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/Application.java [new file with mode: 0644]
taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationActionBarAdvisor.java [new file with mode: 0644]
taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationWorkbenchAdvisor.java [new file with mode: 0644]
taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationWorkbenchWindowAdvisor.java [new file with mode: 0644]
taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/Perspective.java [new file with mode: 0644]
taxeditor-navigation/src/test/java/log4j.properties [new file with mode: 0644]
taxeditor-navigation/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml [new file with mode: 0644]
taxeditor-navigation/src/test/resources/eu/etaxonomy/cdm/defaultApplicationContext.xml [new file with mode: 0644]
taxeditor-navigation/src/test/resources/log4j.properties [new file with mode: 0644]
taxeditor-store/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
taxeditor-store/META-INF/MANIFEST.MF [new file with mode: 0644]
taxeditor-store/build.properties [new file with mode: 0644]
taxeditor-store/icons/256color_16x16.bmp [new file with mode: 0644]
taxeditor-store/icons/256color_32x32.bmp [new file with mode: 0644]
taxeditor-store/icons/256color_48x48.bmp [new file with mode: 0644]
taxeditor-store/icons/EDIT-logo.jpg [new file with mode: 0644]
taxeditor-store/icons/Thumbs.db [new file with mode: 0644]
taxeditor-store/icons/a_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/accepted.gif [new file with mode: 0644]
taxeditor-store/icons/accepted_small.gif [new file with mode: 0644]
taxeditor-store/icons/add.gif [new file with mode: 0644]
taxeditor-store/icons/add_edit.gif [new file with mode: 0644]
taxeditor-store/icons/add_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/add_no_bg2.gif [new file with mode: 0644]
taxeditor-store/icons/alt_window_16.gif [new file with mode: 0644]
taxeditor-store/icons/alt_window_32.gif [new file with mode: 0644]
taxeditor-store/icons/autonym_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/basionym.gif [new file with mode: 0644]
taxeditor-store/icons/basionym_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/change.gif [new file with mode: 0644]
taxeditor-store/icons/close_view.gif [new file with mode: 0644]
taxeditor-store/icons/concept.gif [new file with mode: 0644]
taxeditor-store/icons/concept_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/correction_change.gif [new file with mode: 0644]
taxeditor-store/icons/cprj_obj.gif [new file with mode: 0644]
taxeditor-store/icons/db.gif [new file with mode: 0644]
taxeditor-store/icons/delete.gif [new file with mode: 0644]
taxeditor-store/icons/delete_edit.gif [new file with mode: 0644]
taxeditor-store/icons/edit_16x16.gif [new file with mode: 0644]
taxeditor-store/icons/edit_16x16.ico [new file with mode: 0644]
taxeditor-store/icons/error_co.gif [new file with mode: 0644]
taxeditor-store/icons/file_obj.gif [new file with mode: 0644]
taxeditor-store/icons/form_banner.gif [new file with mode: 0644]
taxeditor-store/icons/garland_logo.png [new file with mode: 0644]
taxeditor-store/icons/help_topic.gif [new file with mode: 0644]
taxeditor-store/icons/heterosyn.gif [new file with mode: 0644]
taxeditor-store/icons/heterosyn_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/heterosyn_original_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/homonym.gif [new file with mode: 0644]
taxeditor-store/icons/homonym_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/homosyn.gif [new file with mode: 0644]
taxeditor-store/icons/homosyn_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/homosyn_original_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/icon.ico [new file with mode: 0644]
taxeditor-store/icons/icon.png [new file with mode: 0644]
taxeditor-store/icons/large_image.gif [new file with mode: 0644]
taxeditor-store/icons/linkto_help.gif [new file with mode: 0644]
taxeditor-store/icons/misapplied.gif [new file with mode: 0644]
taxeditor-store/icons/misapplied_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/move.gif [new file with mode: 0644]
taxeditor-store/icons/move_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/new_child.gif [new file with mode: 0644]
taxeditor-store/icons/newprj_wiz.gif [new file with mode: 0644]
taxeditor-store/icons/open.gif [new file with mode: 0644]
taxeditor-store/icons/orthovariant.gif [new file with mode: 0644]
taxeditor-store/icons/orthovariant_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/prj_obj.gif [new file with mode: 0644]
taxeditor-store/icons/quick_add.gif [new file with mode: 0644]
taxeditor-store/icons/quickfix_error_obj.gif [new file with mode: 0644]
taxeditor-store/icons/quickfix_warning_obj.gif [new file with mode: 0644]
taxeditor-store/icons/rel_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/repsyn.gif [new file with mode: 0644]
taxeditor-store/icons/repsyn_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/sample.gif [new file with mode: 0644]
taxeditor-store/icons/save.gif [new file with mode: 0644]
taxeditor-store/icons/save_edit.gif [new file with mode: 0644]
taxeditor-store/icons/swap.gif [new file with mode: 0644]
taxeditor-store/icons/swap2.gif [new file with mode: 0644]
taxeditor-store/icons/tax_to_syn.gif [new file with mode: 0644]
taxeditor-store/icons/text.gif [new file with mode: 0644]
taxeditor-store/icons/th_horizontal.gif [new file with mode: 0644]
taxeditor-store/icons/th_vertical.gif [new file with mode: 0644]
taxeditor-store/icons/undo.gif [new file with mode: 0644]
taxeditor-store/icons/unknown.gif [new file with mode: 0644]
taxeditor-store/icons/unknown_no_bg.gif [new file with mode: 0644]
taxeditor-store/icons/warn_tsk.gif [new file with mode: 0644]
taxeditor-store/plugin.xml [new file with mode: 0644]
taxeditor-store/pom.xml [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowDataSourceViewHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/StoreUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/CdmDataSourceRepository.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/AbstractDataSourceHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/ChangeConnectionHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/CreateDataSourceHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/DeleteDataSourceHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/EditDataSourceHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/view/CdmDataSourceContentProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/view/CdmDataSourceLabelProvider.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/view/CdmDataSourceView.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceCredentialsWizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceH2WizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceMySQLWizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceWizard.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceWizardPage.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/internal/TaxeditorStorePlugin.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/AbstractDataChangeBehaviour.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/AbstractUtility.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/DataChangeBridge.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/DescriptionUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/IDataChangeBehavior.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/ImageResources.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/ImagesUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/IterableSynonymyList.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/LanguageUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/NameRelationsUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/NameUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/ReferenceUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/Resources.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/SynonymUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/TaxonTransfer.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/TaxonUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/TimeUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/UriDialog.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/AbstractPersistentPostOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/AbstractPostOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptRelationshipTypeOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptToSynonymOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicGroupOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicalGroupBasionymOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToConceptOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToHomotypicalGroupBasionymOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToMisapplicationOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToTaxonOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeTaxonToSynonymOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateChildTaxonOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateConceptRelationOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateDescriptionElementOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateImageOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateMisapplicationOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInExisitingHomotypicalGroupOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInNewGroupOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteConceptRelationOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteDescriptionElementOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteImageOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteMisapplicationOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteSynonymOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteTaxonOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/IPostOperationEnabled.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/RemoveHomotypicalGroupBasionymOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/SwapSynonymAndAcceptedOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/parser/CdmParserUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/CdmPreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/DescriptionPreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/FeaturePreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/InitNomenclaturalCodePrefDialog.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/InitializeDbPreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/NomenclaturalCodePreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/PreferencesUtil.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/RankMenuPreferences.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/TaxonomicPreferences.java [new file with mode: 0644]
taxeditor-store/src/main/resources/eu/etaxonomy/cdm/defaultApplicationContext.xml [new file with mode: 0644]
taxeditor-store/src/main/resources/log4j.properties [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/CdmStoreTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/NameProtectTitleCacheTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/AbstractTaxeditorOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptRelationshipTypeOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptToSynonymOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicGroupOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicalGroupBasionymOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToConceptOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToHomotypicalGroupBasionymOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToMisapplicationOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToTaxonOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeTaxonToSynonymOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateConceptRelationOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateDescriptionElementOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateMisapplicationOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInExisitingHomotypicalGroupOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInNewGroupOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteConceptRelationOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteDescriptionElementOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteMisapplicationOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteSynonymOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteTaxonOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/SwapSynonymAndAcceptedOperationTest.java [new file with mode: 0644]
taxeditor-store/src/test/resources/dbscripts/001_cdm.ddl [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/cdm/cdm.datasources.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/cdm/cdmfs.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/cdm/database/TermsDataSet.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/cdm/database/dataset.dtd [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/taxeditor/store/CdmStoreTest.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/eu/etaxonomy/taxeditor/store/ConcurrentSessionTest.xml [new file with mode: 0644]
taxeditor-store/src/test/resources/log4j.properties [new file with mode: 0644]
taxeditor-store/src/test/resources/unitils.properties [new file with mode: 0644]
taxeditor-updateSite/.project [new file with mode: 0644]
taxeditor-updateSite/artifacts.xml [new file with mode: 0644]
taxeditor-updateSite/content.xml [new file with mode: 0644]
taxeditor-updateSite/index.html [new file with mode: 0644]
taxeditor-updateSite/site.xml [new file with mode: 0644]
taxeditor-updateSite/web/site.css [new file with mode: 0644]
taxeditor-updateSite/web/site.xsl [new file with mode: 0644]

index 8da30dda98efd2a7a1f19f9bb84c1736e919c8c6..8c684243b0fcb2227b557533410ee9059cdea6fa 100644 (file)
@@ -619,3 +619,420 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeDesignationWizard.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeListWizard.java -text
+taxeditor-application/META-INF/MANIFEST.MF -text
+taxeditor-application/TaxEditor.product -text
+taxeditor-application/build.properties -text
+taxeditor-application/icons/256color_16x16.gif -text
+taxeditor-application/icons/256color_32x32.gif -text
+taxeditor-application/icons/256color_48x48.gif -text
+taxeditor-application/icons/edit_16x16.gif -text
+taxeditor-application/plugin.properties -text
+taxeditor-application/plugin.xml -text
+taxeditor-application/plugin_customization.ini -text
+taxeditor-application/pom.xml -text
+taxeditor-application/splash.bmp -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Application.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Perspective.java -text
+taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java -text
+taxeditor-application/src/main/resources/log4j.properties -text
+taxeditor-editor/.settings/org.eclipse.jdt.ui.prefs -text
+taxeditor-editor/META-INF/MANIFEST.MF -text
+taxeditor-editor/build.properties -text
+taxeditor-editor/plugin.properties -text
+taxeditor-editor/plugin.xml -text
+taxeditor-editor/pom.xml -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/CompositeBorderDecorator.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ContextMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ErrorAnnotation.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupedComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineBreakListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSupport.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MenuConstants.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditorDataChangeBehaviour.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/Page.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ParseListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/SelectTaxonDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInputFactory.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TemporaryTaxon.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/UndoView.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ViewerConfiguration.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/WarningAnnotation.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/WidgetTransfer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/CommonNameComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionFeatureGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionFeatureGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DistributionMapDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/DynamicFeatureMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/IDescriptionEditorCompositeRepository.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/LanguageDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/handler/CreateDescriptionElementHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/description/handler/DeleteDescriptionElementHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/CreateChildTaxonHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/EditNewTaxonHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SaveAllHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SaveTaxonHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/ShowPropertySheetHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/GalleryLabelComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/ImageComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/ImagesGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/TaxonHasNoImagesComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/TaxonImageEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/handler/CreateImageHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/images/handler/DeleteImageHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/internal/TaxeditorEditorPlugin.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/BasionymSynonymPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/CdmParserController.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/ConceptGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/INameEditorCompositeRepository.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameSearchDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameSelectComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/NameViewer.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonSearchDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/AbstractDynamicConceptRelationMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeConceptRelationshipTypeMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToAcceptedTaxon.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToConceptRelationHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToConceptRelationMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToMisapplicationHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeToSynonymHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateConceptRelationHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateConceptRelationMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHeterotypicSynonymHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateMisapplicationHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/RemoveBasionymHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SetBasionymHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/IReferenceSearch.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSearchDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationsDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/AnnotationsPropertyDescriptor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CheckboxCellEditor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CheckboxPropertyDescriptor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CollectionPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/CompletionProcessor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/DayValidator.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/EditorPropertySheetEntry.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/MarkersPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/PropertySheetUtil.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/SourceViewerConfig.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/TimePeriodPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/YearValidator.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/CommonNamePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/DescriptionElementPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/DistributionPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/description/TaxonDescriptionPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/images/ImagePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/AcceptedTaxonPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/BotanicalNamePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/ConceptPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/EditorComboBoxPropertyDescriptor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/MisapplicationPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NameRelationsPropertyDescriptor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NameRelationsPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NomStatusPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NomenclaturalAuthorshipPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/NonViralNamePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/ScientificNamePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/SynonymPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/TaxonBasePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/name/ZoologicalNamePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/ChooseRelationWizardPage.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/ListNameRelationsWizardPage.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationWizard.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationsListWizard.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationshipTemp.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/IReferenceSearch.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/NomenclaturalReferencePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferencePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDescriptor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDialog.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/reference/SingleRefTypePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypeCollectionPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypeDesignationPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertyDescriptor.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java -text
+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/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
+taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationWorkbenchAdvisor.java -text
+taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationWorkbenchWindowAdvisor.java -text
+taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/Perspective.java -text
+taxeditor-editor/src/test/java/eu/etaxonomy/taxeditor/editor/TestOpenHandler.java -text
+taxeditor-feature-dependencies/.project -text
+taxeditor-feature-dependencies/build.properties -text
+taxeditor-feature-dependencies/feature.xml -text
+taxeditor-feature/build.properties -text
+taxeditor-feature/feature.xml -text
+taxeditor-navigation/META-INF/MANIFEST.MF -text
+taxeditor-navigation/build.properties -text
+taxeditor-navigation/icons/edit_16x16.gif -text
+taxeditor-navigation/plugin.xml -text
+taxeditor-navigation/pom.xml -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/RecentNamesContributionItem.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/CreateChildTaxonHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/EditTaxonHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/QuickCreateChildTaxonHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/ShowTaxonomicTreeViewHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/internal/TaxeditorNavigationPlugin.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultLabelProvider.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeContentProvider.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeLabelProvider.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeView.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/taxonomictree/TaxonomicTreeViewDataChangeBehaviour.java -text
+taxeditor-navigation/src/main/java/log4j.properties -text
+taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/Application.java -text
+taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationActionBarAdvisor.java -text
+taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationWorkbenchAdvisor.java -text
+taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/ApplicationWorkbenchWindowAdvisor.java -text
+taxeditor-navigation/src/test/java/eu/etaxonomy/taxeditor/navigation/Perspective.java -text
+taxeditor-navigation/src/test/java/log4j.properties -text
+taxeditor-navigation/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml -text
+taxeditor-navigation/src/test/resources/eu/etaxonomy/cdm/defaultApplicationContext.xml -text
+taxeditor-navigation/src/test/resources/log4j.properties -text
+taxeditor-store/.settings/org.eclipse.jdt.core.prefs -text
+taxeditor-store/META-INF/MANIFEST.MF -text
+taxeditor-store/build.properties -text
+taxeditor-store/icons/256color_16x16.bmp -text
+taxeditor-store/icons/256color_32x32.bmp -text
+taxeditor-store/icons/256color_48x48.bmp -text
+taxeditor-store/icons/EDIT-logo.jpg -text
+taxeditor-store/icons/Thumbs.db -text
+taxeditor-store/icons/a_no_bg.gif -text
+taxeditor-store/icons/accepted.gif -text
+taxeditor-store/icons/accepted_small.gif -text
+taxeditor-store/icons/add.gif -text
+taxeditor-store/icons/add_edit.gif -text
+taxeditor-store/icons/add_no_bg.gif -text
+taxeditor-store/icons/add_no_bg2.gif -text
+taxeditor-store/icons/alt_window_16.gif -text
+taxeditor-store/icons/alt_window_32.gif -text
+taxeditor-store/icons/autonym_no_bg.gif -text
+taxeditor-store/icons/basionym.gif -text
+taxeditor-store/icons/basionym_no_bg.gif -text
+taxeditor-store/icons/change.gif -text
+taxeditor-store/icons/close_view.gif -text
+taxeditor-store/icons/concept.gif -text
+taxeditor-store/icons/concept_no_bg.gif -text
+taxeditor-store/icons/correction_change.gif -text
+taxeditor-store/icons/cprj_obj.gif -text
+taxeditor-store/icons/db.gif -text
+taxeditor-store/icons/delete.gif -text
+taxeditor-store/icons/delete_edit.gif -text
+taxeditor-store/icons/edit_16x16.gif -text
+taxeditor-store/icons/edit_16x16.ico -text
+taxeditor-store/icons/error_co.gif -text
+taxeditor-store/icons/file_obj.gif -text
+taxeditor-store/icons/form_banner.gif -text
+taxeditor-store/icons/garland_logo.png -text
+taxeditor-store/icons/help_topic.gif -text
+taxeditor-store/icons/heterosyn.gif -text
+taxeditor-store/icons/heterosyn_no_bg.gif -text
+taxeditor-store/icons/heterosyn_original_no_bg.gif -text
+taxeditor-store/icons/homonym.gif -text
+taxeditor-store/icons/homonym_no_bg.gif -text
+taxeditor-store/icons/homosyn.gif -text
+taxeditor-store/icons/homosyn_no_bg.gif -text
+taxeditor-store/icons/homosyn_original_no_bg.gif -text
+taxeditor-store/icons/icon.ico -text
+taxeditor-store/icons/icon.png -text
+taxeditor-store/icons/large_image.gif -text
+taxeditor-store/icons/linkto_help.gif -text
+taxeditor-store/icons/misapplied.gif -text
+taxeditor-store/icons/misapplied_no_bg.gif -text
+taxeditor-store/icons/move.gif -text
+taxeditor-store/icons/move_no_bg.gif -text
+taxeditor-store/icons/new_child.gif -text
+taxeditor-store/icons/newprj_wiz.gif -text
+taxeditor-store/icons/open.gif -text
+taxeditor-store/icons/orthovariant.gif -text
+taxeditor-store/icons/orthovariant_no_bg.gif -text
+taxeditor-store/icons/prj_obj.gif -text
+taxeditor-store/icons/quick_add.gif -text
+taxeditor-store/icons/quickfix_error_obj.gif -text
+taxeditor-store/icons/quickfix_warning_obj.gif -text
+taxeditor-store/icons/rel_no_bg.gif -text
+taxeditor-store/icons/repsyn.gif -text
+taxeditor-store/icons/repsyn_no_bg.gif -text
+taxeditor-store/icons/sample.gif -text
+taxeditor-store/icons/save.gif -text
+taxeditor-store/icons/save_edit.gif -text
+taxeditor-store/icons/swap.gif -text
+taxeditor-store/icons/swap2.gif -text
+taxeditor-store/icons/tax_to_syn.gif -text
+taxeditor-store/icons/text.gif -text
+taxeditor-store/icons/th_horizontal.gif -text
+taxeditor-store/icons/th_vertical.gif -text
+taxeditor-store/icons/undo.gif -text
+taxeditor-store/icons/unknown.gif -text
+taxeditor-store/icons/unknown_no_bg.gif -text
+taxeditor-store/icons/warn_tsk.gif -text
+taxeditor-store/plugin.xml -text
+taxeditor-store/pom.xml -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowDataSourceViewHandler.java -text
+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/datasource/CdmDataSourceRepository.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/AbstractDataSourceHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/ChangeConnectionHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/CreateDataSourceHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/DeleteDataSourceHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/handler/EditDataSourceHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/view/CdmDataSourceContentProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/view/CdmDataSourceLabelProvider.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/view/CdmDataSourceView.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceCredentialsWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceH2WizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceMySQLWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceWizard.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/datasource/wizard/CdmDataSourceWizardPage.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/internal/TaxeditorStorePlugin.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/AbstractDataChangeBehaviour.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/AbstractUtility.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/DataChangeBridge.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/DescriptionUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/IDataChangeBehavior.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/ImageResources.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/ImagesUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/IterableSynonymyList.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/LanguageUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/NameRelationsUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/NameUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/ReferenceUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/Resources.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/SynonymUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/TaxonTransfer.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/TaxonUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/TimeUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/model/UriDialog.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/AbstractPersistentPostOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/AbstractPostOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptRelationshipTypeOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptToSynonymOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicGroupOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicalGroupBasionymOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToConceptOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToHomotypicalGroupBasionymOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToMisapplicationOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToTaxonOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/ChangeTaxonToSynonymOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateChildTaxonOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateConceptRelationOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateDescriptionElementOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateImageOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateMisapplicationOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInExisitingHomotypicalGroupOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInNewGroupOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteConceptRelationOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteDescriptionElementOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteImageOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteMisapplicationOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteSynonymOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/DeleteTaxonOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/IPostOperationEnabled.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/RemoveHomotypicalGroupBasionymOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/operations/SwapSynonymAndAcceptedOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/parser/CdmParserUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/CdmPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/DescriptionPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/FeaturePreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/InitNomenclaturalCodePrefDialog.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/InitializeDbPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/NomenclaturalCodePreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/PreferencesUtil.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/RankMenuPreferences.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/store/preference/TaxonomicPreferences.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
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/NameProtectTitleCacheTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/AbstractTaxeditorOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptRelationshipTypeOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeConceptToSynonymOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicGroupOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeHomotypicalGroupBasionymOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToConceptOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToHomotypicalGroupBasionymOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToMisapplicationOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeSynonymToTaxonOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/ChangeTaxonToSynonymOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateConceptRelationOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateDescriptionElementOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateMisapplicationOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInExisitingHomotypicalGroupOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/CreateSynonymInNewGroupOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteConceptRelationOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteDescriptionElementOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteMisapplicationOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteSynonymOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/DeleteTaxonOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java -text
+taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/SwapSynonymAndAcceptedOperationTest.java -text
+taxeditor-store/src/test/resources/dbscripts/001_cdm.ddl -text
+taxeditor-store/src/test/resources/eu/etaxonomy/cdm/applicationContext-test.xml -text
+taxeditor-store/src/test/resources/eu/etaxonomy/cdm/cdm.datasources.xml -text
+taxeditor-store/src/test/resources/eu/etaxonomy/cdm/cdmfs.xml -text
+taxeditor-store/src/test/resources/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml -text
+taxeditor-store/src/test/resources/eu/etaxonomy/cdm/database/TermsDataSet.xml -text
+taxeditor-store/src/test/resources/eu/etaxonomy/cdm/database/dataset.dtd -text
+taxeditor-store/src/test/resources/eu/etaxonomy/taxeditor/store/CdmStoreTest.xml -text
+taxeditor-store/src/test/resources/eu/etaxonomy/taxeditor/store/ConcurrentSessionTest.xml -text
+taxeditor-store/src/test/resources/log4j.properties -text
+taxeditor-store/src/test/resources/unitils.properties -text
+taxeditor-updateSite/.project -text
+taxeditor-updateSite/artifacts.xml -text
+taxeditor-updateSite/content.xml -text
+taxeditor-updateSite/index.html -text
+taxeditor-updateSite/site.xml -text
+taxeditor-updateSite/web/site.css -text
+taxeditor-updateSite/web/site.xsl -text
index 612cf961a173dfc9a2a37d79945c2d939a32593f..153b928315c8a384437f2e9c858eed14babaa652 100644 (file)
@@ -1 +1,16 @@
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/sandbox
+taxeditor-application/.classpath
+taxeditor-application/.project
+taxeditor-application/target
+taxeditor-editor/.classpath
+taxeditor-editor/.project
+taxeditor-editor/target
+taxeditor-feature/.project
+taxeditor-navigation/.classpath
+taxeditor-navigation/.project
+taxeditor-navigation/target
+taxeditor-store/.classpath
+taxeditor-store/.project
+taxeditor-store/target
+taxeditor-updateSite/features/*.jar
+taxeditor-updateSite/plugins/*.jar
diff --git a/taxeditor-application/META-INF/MANIFEST.MF b/taxeditor-application/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..5282202
--- /dev/null
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EDIT Taxonomic Editor
+Bundle-SymbolicName: eu.etaxonomy.taxeditor.application;singleton:=true
+Bundle-Version: 1.1.0
+Bundle-Activator: eu.etaxonomy.taxeditor.TaxonomicEditorPlugin
+Bundle-Vendor: EDIT
+Export-Package: eu.etaxonomy.taxeditor
+Require-Bundle: org.eclipse.ui;bundle-version="3.4.1",org.eclipse.ui.ide;bundle-version="3.4.1",org.eclipse.core.runtime;bundle-version="3.4.0",org.eclipse.core.resources;bundle-version="3.4.1",eu.etaxonomy.cdmLibrary;bundle-version="2.0.0",eu.etaxonomy.taxeditor.store;bundle-version="1.0.0",eu.etaxonomy.taxeditor.editor;bundle-version="1.0.0",eu.etaxonomy.taxeditor.navigation;bundle-version="1.0.0"
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
diff --git a/taxeditor-application/TaxEditor.product b/taxeditor-application/TaxEditor.product
new file mode 100644 (file)
index 0000000..c7addff
--- /dev/null
@@ -0,0 +1,89 @@
+<?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="1.1.0" useFeatures="true">
+
+   <aboutInfo>
+      <text>
+         %productBlurb
+      </text>
+   </aboutInfo>
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <windowImages i16="/taxeditor-application/icons/256color_16x16.gif" i32="/taxeditor-application/icons/256color_32x32.gif" i48="/taxeditor-application/icons/256color_48x48.gif"/>
+
+   <splash
+      startupProgressRect="5,447,366,15"
+      startupMessageRect="7,432,360,20"
+      startupForegroundColor="000000" />
+   <launcher name="TaxonomicEditor">
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+
+   <vm>
+   </vm>
+
+   <plugins>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="eu.etaxonomy.cdmLibrary"/>
+      <plugin id="eu.etaxonomy.taxeditor.application"/>
+      <plugin id="eu.etaxonomy.taxeditor.editor"/>
+      <plugin id="eu.etaxonomy.taxeditor.navigation"/>
+      <plugin id="eu.etaxonomy.taxeditor.store"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.databinding.beans"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filebuffers"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.pde.source"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.editors"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.navigator"/>
+      <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed"/>
+      <plugin id="org.eclipse.ui.win32" fragment="true"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.junit4"/>
+   </plugins>
+
+   <features>
+      <feature id="eu.etaxonomy.taxeditor" version="1.1.0"/>
+      <feature id="org.eclipse.equinox.p2.user.ui" version="1.0.2.r34x_v20090120-7d-7tEQcCaaYSBeNOClOn02267"/>
+   </features>
+
+</product>
diff --git a/taxeditor-application/build.properties b/taxeditor-application/build.properties
new file mode 100644 (file)
index 0000000..3ea0d42
--- /dev/null
@@ -0,0 +1,10 @@
+source.. = src/main/java/,\
+           src/test/java/,\
+           src/main/resources/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin_customization.ini,\
+               icons/,\
+               plugin.properties,\
+               splash.bmp
diff --git a/taxeditor-application/icons/256color_16x16.gif b/taxeditor-application/icons/256color_16x16.gif
new file mode 100644 (file)
index 0000000..4494020
Binary files /dev/null and b/taxeditor-application/icons/256color_16x16.gif differ
diff --git a/taxeditor-application/icons/256color_32x32.gif b/taxeditor-application/icons/256color_32x32.gif
new file mode 100644 (file)
index 0000000..200ebf2
Binary files /dev/null and b/taxeditor-application/icons/256color_32x32.gif differ
diff --git a/taxeditor-application/icons/256color_48x48.gif b/taxeditor-application/icons/256color_48x48.gif
new file mode 100644 (file)
index 0000000..ea2bc3a
Binary files /dev/null and b/taxeditor-application/icons/256color_48x48.gif differ
diff --git a/taxeditor-application/icons/edit_16x16.gif b/taxeditor-application/icons/edit_16x16.gif
new file mode 100644 (file)
index 0000000..d857c6c
Binary files /dev/null and b/taxeditor-application/icons/edit_16x16.gif differ
diff --git a/taxeditor-application/plugin.properties b/taxeditor-application/plugin.properties
new file mode 100644 (file)
index 0000000..f25ebcb
--- /dev/null
@@ -0,0 +1,2 @@
+productName=EDIT Taxonomic Editor\r
+productBlurb=
\ No newline at end of file
diff --git a/taxeditor-application/plugin.xml b/taxeditor-application/plugin.xml
new file mode 100644 (file)
index 0000000..84e51a5
--- /dev/null
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="application"
+         name="Taxonomic Editor"
+         point="org.eclipse.core.runtime.applications">
+      <application
+            cardinality="singleton-global"
+            thread="main"
+            visible="true">
+         <run
+               class="eu.etaxonomy.taxeditor.Application">
+         </run>
+      </application>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="eu.etaxonomy.taxeditor.Perspective"
+            id="eu.etaxonomy.taxeditor.application.perspective"
+            name="Taxonomic">
+      </perspective>
+   </extension>
+   <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            class="eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor"
+            default="false"
+            id="eu.etaxonomy.taxeditor.editor.multipagetaxoneditor"
+            name="Multitabbed Taxon Editor">
+      </editor>
+   </extension>
+   <!--extension
+         point="org.eclipse.ui.views">
+      <view
+            class="eu.etaxonomy.taxeditor.navigation.taxonomictree.TaxonomicTreeView"
+            id="eu.etaxonomy.taxeditor.navigation.taxonomictree.treeView"
+            name="Taxonomic Tree">
+      </view>
+      <view
+            allowMultiple="true"
+            class="eu.etaxonomy.taxeditor.navigation.search.SearchResultView"
+            id="eu.etaxonomy.taxeditor.navigation.search.searchResultView"
+            name="Search Result"
+            restorable="true">
+      </view>
+   </extension-->
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu">
+         <menu
+               id="org.eclipse.ui.main.menu.file"
+               label="File">
+         </menu>
+      </menuContribution>
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu.file">
+         <separator
+               name="eu.etaxonomy.taxeditor.application.filemenu.separator"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.file.exit"
+               id="eu.etaxonomy.taxeditor.application.menu.exit"
+               label="Exit"
+               style="push">
+         </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu">
+         <menu
+               id="org.eclipse.ui.main.menu.edit"
+               label="Edit">
+            <command
+                  commandId="org.eclipse.ui.edit.undo"
+                  label="Undo">
+            </command>
+            <command
+                  commandId="org.eclipse.ui.edit.redo"
+                  label="Redo"
+                  style="push">
+            </command>
+            <separator
+                  name="eu.etaxonomy.taxeditor.ui.edit.separator1"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="org.eclipse.ui.edit.cut"
+                  label="Cut"
+                  style="push">
+            </command>
+            <command
+                  commandId="org.eclipse.ui.edit.copy"
+                  label="Copy"
+                  style="push">
+            </command>
+            <command
+                  commandId="org.eclipse.ui.edit.paste"
+                  label="Paste"
+                  style="push">
+            </command>
+            <separator
+                  name="eu.etaxonomy.taxeditor.ui.edit.separator2"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="org.eclipse.ui.edit.delete"
+                  label="Delete"
+                  style="push">
+            </command>
+         </menu>
+      </menuContribution>
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu">
+         <menu
+               id="org.eclipse.ui.main.menu.window"
+               label="Window">
+            <command
+                  commandId="org.eclipse.ui.window.preferences"
+                  label="Preferences"
+                  style="push">
+            </command>
+         </menu>
+      </menuContribution>
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu">
+         <menu
+               id="org.eclipse.ui.main.menu.help"
+               label="Help">
+            <command
+                  commandId="org.eclipse.ui.help.helpContents"
+                  label="Help Contents"
+                  style="push">
+            </command>
+            <separator
+                  name="eu.etaxonomy.taxeditor.ui.help.separator1"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="org.eclipse.ui.update.findAndInstallUpdates"
+                  label="Software Updates..."
+                  style="push">
+            </command>
+            <separator
+                  name="eu.etaxonomy.taxeditor.ui.help.separator2"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="org.eclipse.ui.help.aboutAction"
+                  label="About Taxonomic Editor">
+            </command>
+         </menu>
+      </menuContribution>
+   </extension>
+   <extension
+         id="TaxonomicEditor"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="eu.etaxonomy.taxeditor.application.application"
+            name="%productName">
+         <property
+               name="windowImages"
+               value="icons/256color_16x16.gif,icons/256color_32x32.gif,icons/256color_48x48.gif">
+         </property>
+         <property
+               name="aboutText"
+               value="%productBlurb">
+         </property>
+         <!--property
+               name="startupForegroundColor"
+               value="#C8D5EA"-->
+         <property
+               name="startupForegroundColor"
+               value="000000">
+         </property>
+         <property
+               name="startupProgressRect"
+               value="5,447,366,15">
+         </property>
+         <property
+               name="startupMessageRect"
+               value="7,432,360,20">
+         </property>
+         <property
+               name="appName"
+               value="%productName">
+         </property>
+         <property
+               name="preferenceCustomization"
+               value="plugin_customization.ini">
+         </property>
+      </product>
+   </extension>
+      <!--extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="eu.etaxonomy.taxeditor.application.perspective">
+         <view
+               closeable="true"
+               id="eu.etaxonomy.taxeditor.navigation.taxonomictree.treeView"
+               minimized="false"
+               moveable="false"
+               ratio="0.4"
+               relationship="left"
+               relative="org.eclipse.ui.editorss"
+               visible="true">
+         </view>
+      </perspectiveExtension>
+   </extension-->
+</plugin>
diff --git a/taxeditor-application/plugin_customization.ini b/taxeditor-application/plugin_customization.ini
new file mode 100644 (file)
index 0000000..5c5a62a
--- /dev/null
@@ -0,0 +1,5 @@
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true
+org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
+org.eclipse.ui/DOCK_PERSPECTIVE_BAR=top-right
+org.eclipse.ui/SHOW_TEXT_ON_PERSPECTIVE_BAR=true
+
diff --git a/taxeditor-application/pom.xml b/taxeditor-application/pom.xml
new file mode 100644 (file)
index 0000000..66e6b0f
--- /dev/null
@@ -0,0 +1,32 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+       <groupId>eu.etaxonomy</groupId>
+       <artifactId>taxeditor-parent</artifactId>
+       <version>1.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>eu.etaxonomy</groupId>
+  <artifactId>taxeditor-application</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>Application</name>
+  <description>All plugins are combined into this application.</description>
+  <url>http://dev.e-taxonomy.eu/trac/wiki/TaxonomicEditor</url>
+  <dependencies>
+    <dependency>
+               <groupId>eu.etaxonomy</groupId>
+               <artifactId>taxeditor-store</artifactId>
+       </dependency>
+       <dependency>
+               <groupId>eu.etaxonomy</groupId>
+               <artifactId>taxeditor-navigation</artifactId>
+       </dependency>
+       <dependency>
+               <groupId>eu.etaxonomy</groupId>
+               <artifactId>taxeditor-editor</artifactId>
+       </dependency>
+  </dependencies>
+</project>
diff --git a/taxeditor-application/splash.bmp b/taxeditor-application/splash.bmp
new file mode 100644 (file)
index 0000000..f7fafc4
Binary files /dev/null and b/taxeditor-application/splash.bmp differ
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Application.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Application.java
new file mode 100644 (file)
index 0000000..96016ec
--- /dev/null
@@ -0,0 +1,45 @@
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * This class controls all aspects of the application's execution
+ */
+public class Application implements IApplication {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+        */
+       public Object start(IApplicationContext context) {
+               Display display = PlatformUI.createDisplay();
+               try {
+                       int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
+                       if (returnCode == PlatformUI.RETURN_RESTART) {
+                               return IApplication.EXIT_RESTART;
+                       }
+                       return IApplication.EXIT_OK;
+               } finally {
+                       display.dispose();
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.equinox.app.IApplication#stop()
+        */
+       public void stop() {
+               final IWorkbench workbench = PlatformUI.getWorkbench();
+               if (workbench == null)
+                       return;
+               final Display display = workbench.getDisplay();
+               display.syncExec(new Runnable() {
+                       public void run() {
+                               if (!display.isDisposed())
+                                       workbench.close();
+                       }
+               });
+       }
+}
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java
new file mode 100644 (file)
index 0000000..dc82904
--- /dev/null
@@ -0,0 +1,37 @@
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+
+/**
+ * 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
+ * new actions.
+ */
+public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
+
+       // Actions - important to allocate these only in makeActions, and then use
+       // them
+       // in the fill methods. This ensures that the actions aren't recreated
+       // when fillActionBars is called with FILL_PROXY.
+       private IWorkbenchAction exitAction;
+
+       public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
+               super(configurer);
+       }
+
+       protected void makeActions(final IWorkbenchWindow window) {
+               NavigationUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
+               EditorUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
+       }
+
+       protected void fillMenuBar(IMenuManager menuBar) {
+       }
+
+}
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java
new file mode 100644 (file)
index 0000000..e6b1102
--- /dev/null
@@ -0,0 +1,58 @@
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.ui.application.IWorkbenchConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
+
+       private static final String PERSPECTIVE_ID = Perspective.ID;
+
+       public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
+                       IWorkbenchWindowConfigurer configurer) {
+               return new ApplicationWorkbenchWindowAdvisor(configurer);
+       }
+
+       public String getInitialWindowPerspectiveId() {
+               return PERSPECTIVE_ID;
+       }
+       
+       public void initialize(IWorkbenchConfigurer configurer) {
+               super.initialize(configurer);
+                               
+               // Remembers the user's view layout, window size, window location etc.
+               //  for the next time application is started
+               configurer.setSaveAndRestore(true);             
+       }
+       
+
+//     public void initialize(IWorkbenchConfigurer configurer) {
+//
+//             WorkbenchAdapterBuilder.registerAdapters();
+//
+//             final String ICONS_PATH = "icons/full/";
+//             final String PATH_OBJECT = ICONS_PATH + "obj16/";
+//             Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
+//             declareWorkbenchImage(configurer, ideBundle,
+//                             IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT + "prj_obj.gif",
+//                             true);
+//             declareWorkbenchImage(configurer, ideBundle,
+//                             IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
+//                                             + "cprj_obj.gif", true);
+//
+//     }
+//
+//     private void declareWorkbenchImage(IWorkbenchConfigurer configurer_p,
+//                     Bundle ideBundle, String symbolicName, String path, boolean shared) {
+//             URL url = ideBundle.getEntry(path);
+//             ImageDescriptor desc = ImageDescriptor.createFromURL(url);
+//             configurer_p.declareImage(symbolicName, desc, shared);
+//     }
+//
+//     public IAdaptable getDefaultPageInput() {
+//             IWorkspace workspace = ResourcesPlugin.getWorkspace();
+//             return workspace.getRoot();
+//     }
+
+}
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java
new file mode 100644 (file)
index 0000000..5bcf6fc
--- /dev/null
@@ -0,0 +1,110 @@
+package eu.etaxonomy.taxeditor;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IWorkbenchPartReference;
+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 eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
+import eu.etaxonomy.taxeditor.store.preference.InitNomenclaturalCodePrefDialog;
+import eu.etaxonomy.taxeditor.store.preference.PreferencesUtil;
+
+public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
+       private static final Logger logger = Logger.getLogger(ApplicationWorkbenchWindowAdvisor.class);
+
+       private IPartListener2 propertySheetListener;
+
+       public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+               super(configurer);
+       }
+
+       public ActionBarAdvisor createActionBarAdvisor(
+                       IActionBarConfigurer configurer) {
+               return new ApplicationActionBarAdvisor(configurer);
+       }
+
+       public void preWindowOpen() {
+               IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+               configurer.setInitialSize(new Point(963, 637));
+               configurer.setShowCoolBar(true);
+               configurer.setShowStatusLine(true);
+               configurer.setShowPerspectiveBar(true);
+               configurer.setTitle("EDIT Taxonomic Editor");
+       }
+       
+       public void postWindowOpen() {
+               checkNomenclaturalCode();
+               
+//             setPropertySheetListener();
+       }
+       
+//     /**
+//      * 
+//      */
+//     private void setPropertySheetListener() {
+//             propertySheetListener = new IPartListener2() {
+//
+//                     public void partActivated(IWorkbenchPartReference partRef) {
+//                             if (partRef.getId().equals(MultiPageTaxonEditor.ID)) {
+//                                     EditorUtil.showPropertySheet();
+//                             }
+//                     }
+//
+//                     public void partOpened(IWorkbenchPartReference partRef) {
+////                           if (partRef.getId().equals(MultiPageTaxonEditor.ID)) {
+////                                   EditorUtil.showPropertySheet();
+////                           }
+//                     }
+//
+//                     public void partClosed(IWorkbenchPartReference partRef) {
+////                           if (partRef.getId().equals(MultiPageTaxonEditor.ID)) {
+////                                   EditorUtil.checkHidePropertySheet();
+////                           }
+//                     }
+//                     
+//                     public void partBroughtToTop(IWorkbenchPartReference partRef) {}
+//
+//                     public void partDeactivated(IWorkbenchPartReference partRef) {
+//                             EditorUtil.checkHidePropertySheet();
+//                     }
+//
+//                     public void partHidden(IWorkbenchPartReference partRef) {}
+//
+//                     public void partInputChanged(IWorkbenchPartReference partRef) {}
+//
+//                     public void partVisible(IWorkbenchPartReference partRef) {}
+//                     
+//             };
+////           getWindowConfigurer().getWindow().getActivePage().addPartListener(propertySheetListener);
+//     }
+
+       private void checkNomenclaturalCode() {
+               
+               // First time Editor is opened, no nomenclatural code has been set
+               if (PreferencesUtil.getPreferredNomenclaturalCode() == null) {
+
+                       Shell shell = TaxonomicEditorPlugin.getDefault().getWorkbench()
+                                       .getActiveWorkbenchWindow().getShell();
+                       
+                       // Query user re: preferred nom. code
+                       Dialog dialog = new InitNomenclaturalCodePrefDialog(shell);
+                       int returnCode = dialog.open();
+                       
+                       // Short message confirming user's choice
+                       String code = PreferencesUtil.getPreferredNomenclaturalCodeAsString();
+                       MessageDialog.openInformation(shell, "Nomenclatural code set", 
+                                       "The following has been set as your preferred nomenclatural code:\n\n\t" + 
+                                       code + "\n\nYou can change the nomenclatural code at any time in the \"Preferences\" menu.");
+               }               
+       }
+}
\ No newline at end of file
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Perspective.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/Perspective.java
new file mode 100644 (file)
index 0000000..df83183
--- /dev/null
@@ -0,0 +1,25 @@
+package eu.etaxonomy.taxeditor;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+import eu.etaxonomy.taxeditor.navigation.taxonomictree.TaxonomicTreeView;
+
+public class Perspective implements IPerspectiveFactory {
+
+       public static final String ID = "eu.etaxonomy.taxeditor.application.perspective";
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+        */
+       public void createInitialLayout(IPageLayout layout) {
+               IFolderLayout navigationFolder = layout.createFolder("searchResults", IPageLayout.LEFT, 0.25f,
+                           layout.getEditorArea());
+               
+               // Note: ":*" is what allows us to call multiple searchResultView's with unique secondaryIds;
+               //      this can only be done here, with a placeholder, not in plugin.xml
+               navigationFolder.addPlaceholder("eu.etaxonomy.taxeditor.navigation.search.searchResultView:*");
+               navigationFolder.addView(TaxonomicTreeView.ID);
+       }
+}
\ No newline at end of file
diff --git a/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java b/taxeditor-application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java
new file mode 100644 (file)
index 0000000..3764998
--- /dev/null
@@ -0,0 +1,52 @@
+package eu.etaxonomy.taxeditor;
+
+import org.apache.log4j.Logger;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class TaxonomicEditorPlugin extends AbstractUIPlugin {
+       private static final Logger logger = Logger
+                       .getLogger(TaxonomicEditorPlugin.class);
+
+       // The plug-in ID
+       public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.application";
+
+       // The shared instance
+       private static TaxonomicEditorPlugin plugin;
+       
+       /**
+        * The constructor
+        */
+       public TaxonomicEditorPlugin() {
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static TaxonomicEditorPlugin getDefault() {
+               return plugin;
+       }
+}
diff --git a/taxeditor-application/src/main/resources/log4j.properties b/taxeditor-application/src/main/resources/log4j.properties
new file mode 100644 (file)
index 0000000..c7c943e
--- /dev/null
@@ -0,0 +1,29 @@
+### ************ APPENDER ***********************************###\r
+\r
+### direct log messages to stdout ###\r
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
+log4j.appender.stdout.Target=System.out\r
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n\r
+\r
+### direct messages to file hibernate.log ###\r
+log4j.appender.file=org.apache.log4j.FileAppender\r
+log4j.appender.file.File=taxeditor.log\r
+log4j.appender.file.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n\r
+\r
+### ************* LOG LEVELS *********************************###\r
+\r
+### set log levels - for more verbose logging change 'info' to 'debug' ###\r
+### levels: error, warn, debug, info\r
+log4j.rootLogger=INFO, stdout\r
+\r
+### set directory-specific levels below\r
+\r
+### basic level for editor directory\r
+log4j.logger.eu.etaxonomy.taxeditor.editor = WARN, stdout \r
+\r
+log4j.logger.eu.etaxonomy.taxeditor.editor.handler = DEBUG, stdout\r
+\r
+### log level for conversation handler\r
+#log4j.logger.eu.etaxonomy.cdm.api.application = DEBUG, stdout\r
diff --git a/taxeditor-editor/.settings/org.eclipse.jdt.ui.prefs b/taxeditor-editor/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..ee6f90d
--- /dev/null
@@ -0,0 +1,3 @@
+#Mon Apr 20 16:51:59 CEST 2009\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>\r
diff --git a/taxeditor-editor/META-INF/MANIFEST.MF b/taxeditor-editor/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..c4ccc70
--- /dev/null
@@ -0,0 +1,40 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name.0
+Bundle-SymbolicName: eu.etaxonomy.taxeditor.editor;singleton:=true
+Bundle-Version: 1.1.0
+Bundle-Activator: eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin
+Bundle-Vendor: %Bundle-Vendor.0
+Export-Package: eu.etaxonomy.taxeditor.editor,
+ eu.etaxonomy.taxeditor.editor.description,
+ eu.etaxonomy.taxeditor.editor.handler,
+ eu.etaxonomy.taxeditor.editor.images,
+ eu.etaxonomy.taxeditor.editor.internal,
+ eu.etaxonomy.taxeditor.editor.name,
+ 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
+Require-Bundle: org.eclipse.ui;bundle-version="3.4.1",
+ org.eclipse.core.runtime;bundle-version="3.4.0",
+ org.eclipse.core.databinding;bundle-version="1.1.1",
+ org.eclipse.core.databinding.beans;bundle-version="1.1.1",
+ org.eclipse.ui.editors;bundle-version="3.4.0",
+ org.eclipse.jface;bundle-version="3.4.1",
+ org.eclipse.jface.databinding;bundle-version="1.2.1",
+ org.eclipse.ui.ide;bundle-version="3.4.1",
+ org.eclipse.core.resources;bundle-version="3.4.1",
+ org.eclipse.core.filesystem;bundle-version="1.2.0",
+ org.eclipse.core.expressions;bundle-version="3.4.0",
+ org.eclipse.ui.forms;bundle-version="3.3.101",
+ org.eclipse.jface.text;bundle-version="3.4.1",
+ eu.etaxonomy.cdmLibrary;bundle-version="2.0.0",
+ eu.etaxonomy.taxeditor.store;bundle-version="1.0.0"
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Bundle-ClassPath: .,
+ icons/
diff --git a/taxeditor-editor/build.properties b/taxeditor-editor/build.properties
new file mode 100644 (file)
index 0000000..87c865c
--- /dev/null
@@ -0,0 +1,9 @@
+source.. = src/main/java/,\
+           src/test/java/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               log4j.properties,\
+               plugin.properties,\
+               icons/
+src.includes = log4j.properties
diff --git a/taxeditor-editor/plugin.properties b/taxeditor-editor/plugin.properties
new file mode 100644 (file)
index 0000000..090394d
--- /dev/null
@@ -0,0 +1,5 @@
+#Properties file for taxeditor-editor\r
+Bundle-Vendor.0 = EDIT\r
+Bundle-Name.0 = EDIT Taxonomic Editor - Editor Bundle\r
+command.name.17 = Set Basionym\r
+command.name.18 = Remove Basionym
\ No newline at end of file
diff --git a/taxeditor-editor/plugin.xml b/taxeditor-editor/plugin.xml
new file mode 100644 (file)
index 0000000..9db8826
--- /dev/null
@@ -0,0 +1,743 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="application"
+         point="org.eclipse.core.runtime.applications">
+      <application>
+         <run
+               class="eu.etaxonomy.taxeditor.editor.Application">
+         </run>
+      </application>
+   </extension>
+   <!--extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="eu.etaxonomy.taxeditor.editor.Perspective"
+            id="eu.etaxonomy.taxeditor.editor.perspective"
+            name="Perspective">
+      </perspective>
+   </extension-->
+   <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            class="eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor"
+            icon="icons/edit_16x16.gif"
+            id="eu.etaxonomy.taxeditor.editor.multipagetaxonview"
+            name="Multitabbed Taxon Editor">
+      </editor>
+      <editor
+            class="eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor"
+            default="false"
+            id="eu.etaxonomy.taxeditor.taxonNameEditor"
+            name="Taxon Name Editor">
+      </editor>
+      <editor
+            class="eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditor"
+            default="false"
+            id="eu.etaxonomy.taxeditor.taxonDescriptionEditor"
+            name="Taxon Description Editor">
+      </editor>
+      <editor
+            class="eu.etaxonomy.taxeditor.editor.images.TaxonImageEditor"
+            default="false"
+            id="eu.etaxonomy.taxeditor.taxonImageEditor"
+            name="Taxon Image Editor">
+      </editor>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <!--menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu">
+         <menu
+               id="eu.etaxonomy.taxeditor.ui.taxonMenu"
+               label="Taxon">
+            <visibleWhen
+                  checkEnabled="true">
+               <reference
+                     definitionId="nameEditorActive">
+               </reference>
+            </visibleWhen>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.createHeterotypicSynoym"
+                  label="Create Heterotypic Synonym"
+                  style="push">
+            </command>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.createHomotypicSynoym"
+                  label="Create Homotypic Synonym"
+                  style="push">
+            </command>
+            <separator
+                  name="separator1"
+                  visible="true">
+            </separator>
+            <menu
+                  label="Create Concept Relation">
+               <visibleWhen>
+                  <and>
+                     <not>
+                        <reference
+                              definitionId="isSynonym">
+                        </reference>
+                     </not>
+                     <not>
+                        <reference
+                              definitionId="isMisapplication">
+                        </reference>
+                     </not>
+                  </and>
+               </visibleWhen>
+               <dynamic
+                     class="eu.etaxonomy.taxeditor.editor.handler.CreateConceptRelationMenu"
+                     id="eu.etaxonomy.taxeditor.editor.dynamicConceptRelationMenu">
+               </dynamic>
+            </menu>
+            <menu
+                  label="Create Concept Relation">
+               <dynamic
+                     class="eu.etaxonomy.taxeditor.editor.handler.AbstractDynamicConceptRelationMenu"
+                     id="eu.etaxonomy.taxeditor.editor.dynamicConceptRelationMenu">
+               </dynamic>
+            </menu>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.createMisapplication"
+                  label="Create Misapplication"
+                  style="push">
+            </command>
+            <separator
+                  name="taxeditor-editor.separator2"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.description.createDescriptionElement"
+                  label="Create Description Element"
+                  style="push">
+            </command>
+         </menu>
+      </menuContribution-->
+      <menuContribution
+            locationURI="popup:eu.etaxonomy.taxeditor.taxonNameEditor">
+            <menu
+                  label="New">
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.createChildTaxon"
+                     label="Child Taxon"
+                     style="push">
+                  <visibleWhen>
+                     <reference
+                           definitionId="isAcceptedTaxon">
+                     </reference>
+                  </visibleWhen>
+               </command>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.createHeterotypicSynoym"
+                     label="Heterotypic Synonym"
+                     style="push">
+                  <visibleWhen>
+                     <reference
+                           definitionId="isAcceptedTaxon">
+                     </reference>
+                  </visibleWhen>
+               </command>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.createHomotypicSynoym"
+                     label="Homotypic Synonym"
+                     style="push">
+                  <visibleWhen>
+                     <reference
+                           definitionId="isAcceptedTaxon">
+                     </reference>
+                  </visibleWhen>
+               </command>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.createSynonymInHomotypicalGroup"
+                     label="Synonym In Homotypical Group"
+                     style="push">
+                  <visibleWhen>
+                     <reference
+                           definitionId="isSynonym">
+                     </reference>
+                  </visibleWhen>
+               </command>
+               <separator
+                     name="separator1"
+                     visible="true">
+               </separator>
+               <menu
+                     label="Concept Relation">
+                  <visibleWhen>
+                     <and>
+                        <not>
+                           <reference
+                                 definitionId="isSynonym">
+                           </reference>
+                        </not>
+                        <not>
+                           <reference
+                                 definitionId="isMisapplication">
+                           </reference></not>
+                     </and>
+                  </visibleWhen>
+                  <dynamic
+                        class="eu.etaxonomy.taxeditor.editor.name.handler.CreateConceptRelationMenu"
+                        id="eu.etaxonomy.taxeditor.editor.dynamicConceptRelationMenu">
+                  </dynamic>
+               </menu>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.createMisapplication"
+                     label="Misapplication"
+                     style="push">
+                  <visibleWhen>
+                     <and>
+                        <not>
+                           <reference
+                                 definitionId="isSynonym">
+                           </reference>
+                        </not>
+                        <not>
+                           <reference
+                                 definitionId="isConceptRelation">
+                           </reference>
+                        </not>
+                     </and>                     
+                  </visibleWhen>
+               </command>
+            </menu>
+            <menu
+                  label="Change To">
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.changeToAcceptedTaxon"
+                     label="Accepted Taxon"
+                     style="push">
+                  <visibleWhen>
+                     <not>
+                        <or>
+                           <reference
+                                 definitionId="isAcceptedTaxon">
+                           </reference>
+                           <reference
+                                 definitionId="isConceptRelation">
+                           </reference>
+                           <reference
+                                 definitionId="isMisapplication">
+                           </reference>
+                        </or>
+                     </not>
+                  </visibleWhen>
+               </command>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.changeToSynonym"
+                     label="Synonym"
+                     style="push">
+                  <visibleWhen>
+                     <not>
+                       <or>
+                           <reference
+                                 definitionId="isAcceptedTaxon">
+                           </reference>
+                               <reference
+                                     definitionId="isSynonym">
+                               </reference>
+                            </or>
+                     </not>
+                  </visibleWhen>
+               </command>
+               <menu
+                     label="Concept Relation">
+                  <visibleWhen>
+                     <not>
+                       <or>
+                           <reference
+                                 definitionId="isAcceptedTaxon">
+                           </reference>
+                               <reference
+                                     definitionId="isConceptRelation">
+                               </reference>
+                            </or>
+                     </not>
+                  </visibleWhen>
+                  <dynamic
+                        class="eu.etaxonomy.taxeditor.editor.name.handler.ChangeToConceptRelationMenu"
+                        id="eu.etaxonomy.taxeditor.editor.dynamicConceptRelationMenu">
+                  </dynamic>
+               </menu>
+               <command
+                     commandId="eu.etaxonomy.taxeditor.editor.name.changeToMisapplication"
+                     label="Misapplication"
+                     style="push">
+                  <visibleWhen>
+                        <not>
+                        <or>
+                           <reference
+                                 definitionId="isAcceptedTaxon">
+                           </reference>
+                           <reference
+                                 definitionId="isMisapplication">
+                           </reference>
+                        </or>
+                     </not>
+                  </visibleWhen>
+               </command>
+            </menu>
+            <menu
+                  label="Change Relation Type">
+               <visibleWhen>
+                  <reference
+                        definitionId="isConceptRelation">
+                  </reference>
+               </visibleWhen>
+               <dynamic
+                     class="eu.etaxonomy.taxeditor.editor.name.handler.ChangeConceptRelationshipTypeMenu"
+                     id="eu.etaxonomy.taxeditor.editor.dynamicConceptRelationMenu">
+               </dynamic>
+            </menu>
+            <separator
+                  name="taxeditor-editor.separator1"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.deleteTaxonBase"
+                  label="Delete"
+                  style="push">
+               <visibleWhen>
+                  <not>
+                     <reference
+                           definitionId="isAcceptedTaxon">
+                     </reference>
+                  </not>
+               </visibleWhen>
+            </command>
+            <separator
+                  name="taxeditor-editor.separator2"
+                  visible="true">
+            </separator>
+            <!--command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.moveTaxon"
+                  label="Move Taxon"
+                  style="push">
+               <visibleWhen>
+                  <reference
+                        definitionId="isAcceptedTaxon">
+                  </reference>
+               </visibleWhen>
+            </command-->
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.setBasionym"
+                  id="Set Basionym"
+                  style="push">
+               <visibleWhen>
+                  <reference
+                        definitionId="isSynonym">
+                  </reference>
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.removeBasionym"
+                  id="Remove Basionym"
+                  style="push">
+               <visibleWhen>
+                  <reference
+                        definitionId="isSynonym">
+                  </reference>
+               </visibleWhen>
+            </command>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.name.swapSynonymAndAccepted"
+                  label="Swap Synonym And Accepted"
+                  style="push">
+               <visibleWhen>
+                  <reference
+                        definitionId="isSynonym">
+                  </reference>
+               </visibleWhen>
+            </command>
+            <separator
+                  name="taxeditor-editor.separator3"
+                  visible="true">
+            </separator>
+            <command
+                  commandId="org.eclipse.ui.file.save"
+                  label="Save"
+                  style="push">
+            </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="popup:eu.etaxonomy.taxeditor.taxonDescriptionEditor">
+         <menu
+               label="New">
+            <dynamic
+                  class="eu.etaxonomy.taxeditor.editor.description.DynamicFeatureMenu"
+                  id="eu.etaxonomy.taxeditor.dynamicFeatureMenu">
+            </dynamic>
+         </menu>
+         <separator
+               name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterNew"
+               visible="true">
+         </separator>
+         <command
+               commandId="eu.etaxonomy.taxeditor.editor.name.deleteDescriptionElement"
+               label="Delete"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterDelete"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.file.save"
+               label="Save"
+               style="push">
+         </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="popup:eu.etaxonomy.taxeditor.taxonImageEditor">
+         <command
+               commandId="eu.etaxonomy.taxeditor.editor.description.createImage"
+               label="New"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.taxonImageEditor.separator.afterNew"
+               visible="true">
+         </separator>
+         <command
+               commandId="eu.etaxonomy.taxeditor.editor.description.deleteImage"
+               label="Delete"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.taxonImageEditor.separator.afterDelete"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.file.save"
+               label="Save"
+               style="push">
+         </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu.file?before=eu.etaxonomy.taxeditor.application.filemenu.separator">
+         <command
+               commandId="eu.etaxonomy.taxeditor.editor.newTaxon"
+               label="New Root Taxon"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.ui.file.separator1"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.file.close"
+               label="Close"
+               style="push">
+         </command>
+         <command
+               commandId="org.eclipse.ui.file.closeAll"
+               label="Close All"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.ui.file.separator2"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.file.save"
+               label="Save"
+               style="push">
+         </command>
+         <command
+               commandId="org.eclipse.ui.file.saveAll"
+               label="Save All"
+               style="push">
+         </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="menu:eu.etaxonomy.taxeditor.menu.showView">
+         <command
+               commandId="eu.etaxonomy.taxeditor.editor.command.showPropertySheetView"
+               label="Property Sheet"
+               style="push">
+         </command>
+      </menuContribution>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.handler.SaveTaxonHandler"
+            commandId="org.eclipse.ui.file.save">
+      </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.handler.SaveAllHandler"
+            commandId="org.eclipse.ui.file.saveAll">
+      </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.name.handler.RemoveBasionymHandler"
+            commandId="eu.etaxonomy.taxeditor.editor.name.removeBasionym">
+         <enabledWhen>
+            <reference
+                  definitionId="isGroupBasionym">
+            </reference>
+         </enabledWhen>
+      </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.name.handler.SetBasionymHandler"
+            commandId="eu.etaxonomy.taxeditor.editor.name.setBasionym">
+         <enabledWhen>
+            <not>
+               <reference
+                     definitionId="isGroupBasionym">
+               </reference>
+            </not>
+         </enabledWhen>
+      </handler>
+   </extension>
+   <extension
+         name="File Menu Commands"
+         point="org.eclipse.ui.commands">
+      <command
+            categoryId="org.eclipse.ui.category.file"
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.EditNewTaxonHandler"
+            id="eu.etaxonomy.taxeditor.editor.newTaxon"
+            name="New Taxon">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.SaveTaxonHandler"
+            id="eu.etaxonomy.taxeditor.editor.saveTaxon"
+            name="Save">
+      </command>
+      <command
+            categoryId="org.eclipse.ui.category.file"
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.SaveAllHandler"
+            id="eu.etaxonomy.taxeditor.editor.saveAll"
+            name="Save All">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.core.expressions.definitions">
+      <definition
+            id="nameEditorActive">
+         <with
+               variable="activeEditorId">
+            <equals
+                  value="eu.etaxonomy.taxeditor.editor.multipagetaxonview">
+            </equals>
+         </with>
+      </definition>
+      <definition
+            id="isAcceptedTaxon">
+         <with
+               variable="activeMenuSelection">
+            <iterate>
+               <instanceof
+                     value="eu.etaxonomy.taxeditor.propertysheet.name.AcceptedTaxonPropertySource">
+               </instanceof>
+            </iterate>
+         </with>
+      </definition>
+      <definition
+            id="isSynonym">
+         <with
+               variable="activeMenuSelection">
+            <iterate>
+               <instanceof
+                     value="eu.etaxonomy.taxeditor.propertysheet.name.SynonymPropertySource">
+               </instanceof>
+            </iterate>
+         </with>
+      </definition>
+      <definition
+            id="isGroupBasionym">
+         <with
+               variable="activeMenuSelection">
+            <iterate>
+               <instanceof
+                     value="eu.etaxonomy.taxeditor.editor.name.BasionymSynonymPropertySource">
+               </instanceof>
+            </iterate>
+         </with>
+      </definition>
+      <definition
+            id="isMisapplication">
+         <with
+               variable="activeMenuSelection">
+            <iterate>
+               <instanceof
+                     value="eu.etaxonomy.taxeditor.propertysheet.name.MisapplicationPropertySource">
+               </instanceof>
+            </iterate>
+         </with>
+      </definition>
+      <definition
+            id="isConceptRelation">
+         <with
+               variable="activeMenuSelection">
+            <iterate>
+               <instanceof
+                     value="eu.etaxonomy.taxeditor.propertysheet.name.ConceptPropertySource">
+               </instanceof>
+            </iterate>
+         </with>
+      </definition>
+      <definition
+            id="isNotGroupBasionym">
+         <with
+               variable="activeMenuSelection">
+            <not>
+               <iterate>
+                  <instanceof
+                        value="eu.etaxonomy.taxeditor.editor.name.BasionymSynonymPropertySource">
+                  </instanceof>
+               </iterate>
+            </not>
+         </with>
+      </definition>
+   </extension>
+   <extension
+         name="Name Commands"
+         point="org.eclipse.ui.commands">
+      <category
+            id="eu.etaxonomy.taxeditor.editor.synonymCategory"
+            name="Synonym Category">
+      </category>
+      <command
+            categoryId="eu.etaxonomy.taxeditor.editor.synonymCategory"
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.CreateHomotypicSynonymHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.createHomotypicSynoym"
+            name="Create Homotypic Synonym">
+      </command>
+      <command
+            categoryId="eu.etaxonomy.taxeditor.editor.synonymCategory"
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.CreateHeterotypicSynonymHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.createHeterotypicSynoym"
+            name="Create Heterotypic Synonym">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.CreateSynonymInHomotypicalGroupHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.createSynonymInHomotypicalGroup"
+            name="Create Synonym In Homotypical Group">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.CreateConceptRelationHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.createConceptRelation"
+            name="Create Concept Relation">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.CreateMisapplicationHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.createMisapplication"
+            name="Create Misapplication">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.DeleteTaxonBaseHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.deleteTaxonBase"
+            name="Delete Taxon Base">
+      </command>
+      <!--command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.MoveTaxonHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.moveTaxon"
+            name="Move Taxon">
+      </command-->
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.CreateChildTaxonHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.createChildTaxon"
+            name="Create Child Taxon">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.ChangeToSynonymHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.changeToSynonym"
+            name="Change To Synonym">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.ChangeToAcceptedTaxon"
+            id="eu.etaxonomy.taxeditor.editor.name.changeToAcceptedTaxon"
+            name="Change To Accepted Taxon">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.ChangeToConceptRelationHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.changeToConceptRelation"
+            name="Change To Concept Relation">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.ChangeToMisapplicationHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.changeToMisapplication"
+            name="Change To Misapplication">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.ChangeConceptRelationshipTypeHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.changeConceptRelationshipType"
+            name="Change Concept Relationship Type">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.name.handler.SwapSynonymAndAcceptedHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.swapSynonymAndAccepted"
+            name="Swap Synonym And Accepted">
+      </command>
+      <command
+            id="eu.etaxonomy.taxeditor.editor.name.setBasionym"
+            name="%command.name.17">
+      </command>
+      <command
+            id="eu.etaxonomy.taxeditor.editor.name.removeBasionym"
+            name="%command.name.18">
+      </command>
+   </extension>
+   <extension
+         name="Description Commands"
+         point="org.eclipse.ui.commands">
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.description.handler.CreateDescriptionElementHandler"
+            id="eu.etaxonomy.taxeditor.editor.description.createDescriptionElement"
+            name="Create Description Element">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.description.handler.DeleteDescriptionElementHandler"
+            id="eu.etaxonomy.taxeditor.editor.name.deleteDescriptionElement"
+            name="Delete Description Element">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.images.handler.CreateImageHandler"
+            id="eu.etaxonomy.taxeditor.editor.description.createImage"
+            name="Create Image">
+      </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.images.handler.DeleteImageHandler"
+            id="eu.etaxonomy.taxeditor.editor.description.deleteImage"
+            name="Delete Image">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.handler.ShowPropertySheetHandler"
+            id="eu.etaxonomy.taxeditor.editor.command.showPropertySheetView"
+            name="Show Property Sheet">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.elementFactories">
+      <factory
+            class="eu.etaxonomy.taxeditor.editor.TaxonEditorInputFactory"
+            id="eu.etaxonomy.taxeditor.editor.TaxonEditorInputFactory">
+      </factory>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="eu.etaxonomy.taxeditor.application.perspective">
+         <view
+               closeable="true"
+               id="org.eclipse.ui.views.PropertySheet"
+               minimized="false"
+               moveable="true"
+               ratio="0.7"
+               relationship="right"
+               relative="org.eclipse.ui.editorss"
+               showTitle="false"
+               visible="true">
+         </view>
+      </perspectiveExtension>
+   </extension>
+</plugin>
diff --git a/taxeditor-editor/pom.xml b/taxeditor-editor/pom.xml
new file mode 100644 (file)
index 0000000..715674e
--- /dev/null
@@ -0,0 +1,24 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  
+  <parent>
+       <groupId>eu.etaxonomy</groupId>
+       <artifactId>taxeditor-parent</artifactId>
+       <version>1.0</version>
+  </parent>
+  
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>eu.etaxonomy</groupId>
+  <artifactId>taxeditor-editor</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>Editor Bundle</name>
+  <url>http://dev.e-taxonomy.eu/trac/wiki/TaxonomicEditorEditorBundle</url>
+  
+  <dependencies>
+    <dependency>
+               <groupId>eu.etaxonomy</groupId>
+               <artifactId>taxeditor-store</artifactId>
+       </dependency>
+  </dependencies>
+</project>
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java
new file mode 100644 (file)
index 0000000..5f1b091
--- /dev/null
@@ -0,0 +1,463 @@
+/**\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.editor;\r
+\r
+import java.util.HashSet;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.jface.action.IMenuManager;\r
+import org.eclipse.jface.action.IStatusLineManager;\r
+import org.eclipse.jface.action.IToolBarManager;\r
+import org.eclipse.jface.action.MenuManager;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.forms.ManagedForm;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+import org.eclipse.ui.part.EditorPart;\r
+import org.eclipse.ui.views.properties.IPropertySheetEntry;\r
+import org.eclipse.ui.views.properties.IPropertySheetPage;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
+import org.eclipse.ui.views.properties.PropertySheetSorter;\r
+\r
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
+import eu.etaxonomy.taxeditor.propertysheet.EditorPropertySheetEntry;\r
+import eu.etaxonomy.taxeditor.propertysheet.PropertySheetUtil;\r
+import eu.etaxonomy.taxeditor.store.model.Resources;\r
+import eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled;\r
+\r
+/**\r
+ * The abstract editor for displaying a category of <code>Taxon</code> data, corresponding\r
+ * to the tabs ("Name", "Descriptive", etc.) at the bottom of a <code>Taxon</code> view. Implements\r
+ * <code>IAdaptable</code> in order to display properties of the objects whose UI elements have focus. \r
+ * <p>\r
+ * Implementing classes can choose to show an object in the property sheet when the\r
+ * <code>AbstractTaxonEditor</code> gets focus, by passing the object to the method\r
+ * <code>setDefaultPropertySheetObject</code>, for instance, in the method<code>init</code>.\r
+ * </p>\r
+ * @author p.ciardelli\r
+ * @author n.hoffmann\r
+ * @created 10.09.2008\r
+ * @version 1.0\r
+ */\r
+public abstract class AbstractTaxonEditor extends EditorPart implements IAdaptable, IConversationEnabled, IPostOperationEnabled  {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AbstractTaxonEditor.class);\r
+\r
+       protected Taxon taxon;\r
+       \r
+       /**\r
+        * When this <code>EditorPart</code> gets focus, the data structure of \r
+        * <code>defaultPropertyObject</code> is displayed in the property sheet.\r
+        */\r
+       \r
+       protected ManagedForm managedForm;\r
+       protected ScrolledForm scrolledForm; \r
+       protected Composite parent;\r
+       protected ISelectionProvider provider;\r
+       \r
+       protected MultiPageTaxonEditor editor;\r
+       \r
+       protected IHasPropertySource selectedObject;\r
+\r
+       protected Composite partComposite;\r
+       protected GroupedComposite firstGroupedComposite;\r
+\r
+       protected Object selectedData;\r
+       \r
+       protected ConversationHolder conversation;\r
+\r
+       private MenuManager menuManager;\r
+\r
+       private Menu menu;\r
+\r
+       /**\r
+        * The object that was affected by last operation.\r
+        */\r
+       private CdmBase objectAffectedByLastOperation;\r
+\r
+       private boolean isRedrawing;\r
+       \r
+       protected AbstractTaxonEditor(MultiPageTaxonEditor editor){\r
+               this.editor = editor;\r
+               this.conversation = editor.getConversationHolder();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)\r
+        */\r
+       public void doSave(IProgressMonitor monitor) {\r
+               conversation.commit();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.EditorPart#doSaveAs()\r
+        */\r
+       public void doSaveAs() {}\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)\r
+        */\r
+       public void init(IEditorSite site, IEditorInput input)\r
+                       throws PartInitException {\r
+               // bind the session\r
+               \r
+               \r
+               if (!(input instanceof IEditorInput))\r
+                       throw new PartInitException(\r
+                               "Invalid Input: Must be IEditorInput");\r
+               \r
+               if (input.getAdapter(Taxon.class) != null) {\r
+                       taxon = (Taxon) input.getAdapter(Taxon.class);\r
+               } else {\r
+                       throw new PartInitException(\r
+                               "Invalid Input: Taxon cannot be null");\r
+               }\r
+\r
+               setSite(site);\r
+               setInput(input);\r
+               \r
+               this.provider = new SimpleSelectionProvider();\r
+               this.getSite().setSelectionProvider(provider);\r
+               \r
+       }\r
+       \r
+       public IUndoContext getUndoContext() {\r
+               return editor.getUndoContext();\r
+       }\r
+       \r
+       /**\r
+        * If there is a default property sheet object with a corresponding property source class, \r
+        * display it in the property sheet. Otherwise, empty the property sheet with an empty\r
+        * <code>StructuredSelection</code>.\r
+        * \r
+        * @param selectedObject\r
+        */\r
+       protected void setSelection(IHasPropertySource selectedObject) {\r
+                               \r
+               // Unpaint last selection - last selection will only be unpainted\r
+               //      when something else on this page is selected\r
+               if (this.selectedObject instanceof GroupedComposite) {\r
+                       GroupedComposite composite = ((GroupedComposite) this.selectedObject);\r
+                       composite.unpaintBorder();\r
+                       composite.setBackground(Resources.getColor(Resources.COLOR_COMPOSITE_BACKGROUND));\r
+               }\r
+               \r
+               // Set the selection to this editor's selected object\r
+               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).setSelected();\r
+               ((GroupedComposite) selectedObject).setBackground(Resources.getColor(Resources.COLOR_COMPOSITE_SELECTED));\r
+               \r
+               \r
+               if (selectedObject instanceof Composite) {\r
+                       this.selectedData = ((Composite) selectedObject).getData();\r
+               }\r
+               \r
+               // Get the selection's property source, pass it to the selection provider\r
+               IPropertySource propertySource = null;\r
+               if (selectedObject != null) {\r
+                       propertySource = selectedObject.getPropertySource();\r
+               }\r
+               if (propertySource == null) {\r
+                       provider.setSelection(new StructuredSelection());\r
+               } else {\r
+                       provider.setSelection(new StructuredSelection(propertySource));\r
+               }\r
+               \r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.EditorPart#isDirty()\r
+        */\r
+       public boolean isDirty() {\r
+               return false;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()\r
+        */\r
+       public boolean isSaveAsAllowed() {\r
+               return false;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       public void createPartControl(Composite composite) {\r
+\r
+               this.partComposite = composite;\r
+               \r
+               createManagedForm(composite);\r
+       }\r
+       \r
+       protected void createManagedForm(Composite composite) {\r
+               \r
+               managedForm = new ManagedForm(composite) {\r
+                       public void dirtyStateChanged() {\r
+                               firePropertyChange(PROP_DIRTY);\r
+                       }\r
+                       public boolean setInput(Object input) {\r
+                               if (input instanceof IHasPropertySource) {\r
+                                       setSelection((IHasPropertySource)input);\r
+                               }\r
+                               return super.setInput(input); \r
+                       } \r
+               };\r
+               scrolledForm = managedForm.getForm();\r
+               parent = scrolledForm.getBody();\r
+               \r
+               // register the context menu\r
+               menuManager = new MenuManager();\r
+               ISelectionProvider selectionProvider = getSite().getSelectionProvider();\r
+               getSite().registerContextMenu(getID(), menuManager, selectionProvider);\r
+               \r
+               menu = menuManager.createContextMenu(parent);\r
+               scrolledForm.setMenu(menu);\r
+                               \r
+               parent.setData(taxon);\r
+               \r
+               parent.setLayout(new TableWrapLayout());                \r
+               parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+       }\r
+       \r
+       @SuppressWarnings("unchecked")\r
+       public Object getAdapter(Class type) {\r
+           if (type == IPropertySheetPage.class) {\r
+               \r
+               PropertySheetPage page = new EditorPropertySheetPage();\r
+               \r
+               PropertySheetUtil.setPropertySheetPage(page);\r
+               \r
+               EditorPropertySheetEntry entry = new EditorPropertySheetEntry(taxon, this);\r
+               page.setRootEntry(entry);\r
+               page.refresh();\r
+               \r
+               return page;\r
+           }\r
+           return super.getAdapter(type);\r
+       }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+       \r
+       public void setDirty() {\r
+               managedForm.dirtyStateChanged();\r
+       }\r
+       \r
+       public void setFocus(){\r
+\r
+               Object selection;\r
+               \r
+               if(selectedData == null){\r
+                       selection = (objectAffectedByLastOperation == null) ? null : objectAffectedByLastOperation;\r
+               }else{\r
+                       selection = (objectAffectedByLastOperation == null) ? selectedData : objectAffectedByLastOperation;\r
+               }\r
+                               \r
+               // make selection\r
+               if (selection == null){\r
+                       GroupedComposite focusComposite = firstGroupedComposite;\r
+                       setSelection(focusComposite);\r
+                       focusComposite.drawBorder();\r
+               } else {\r
+                       selectedData = selection;\r
+                       \r
+                       for (Composite composite : getAllComposites()) {\r
+                               if (composite instanceof GroupedComposite && selectedData.equals(composite.getData())) {\r
+                                       setSelection((GroupedComposite) composite);\r
+                                       ((GroupedComposite) composite).drawBorder();\r
+                                       ((GroupedComposite) composite).setSelected();\r
+                                       break;\r
+                               }                                       \r
+                       }\r
+               }\r
+               \r
+               // reset\r
+               objectAffectedByLastOperation = null;\r
+       }\r
+       \r
+       protected HashSet<Composite> getAllComposites(){\r
+               HashSet<Composite> composites = new HashSet<Composite>();\r
+               composites.add(parent);\r
+               composites.addAll(getComposites(parent));\r
+               return composites;\r
+       }\r
+       \r
+       public void setInput(IEditorInput input){\r
+               this.setInputWithNotify(input);         \r
+       }\r
+       \r
+       private HashSet<Composite> getComposites(Composite composite){\r
+               HashSet<Composite> composites = new HashSet<Composite>();\r
+               for(Control child : composite.getChildren()){\r
+                       if(child instanceof Composite){\r
+                               composites.add((Composite)child);\r
+                               composites.addAll(getComposites((Composite)child));\r
+                       }\r
+               } \r
+               return composites;\r
+       }\r
+       \r
+       /*\r
+        * (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
+        */\r
+       public ConversationHolder getConversationHolder(){\r
+               return conversation;\r
+       }\r
+       \r
+       /*\r
+        * (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)\r
+        */\r
+       public void update(CdmDataChangeMap events) {\r
+               //redraw();\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       public boolean redraw() {\r
+               \r
+               isRedrawing = true;\r
+               \r
+               this.selectedObject = null;\r
+               managedForm.getForm().dispose();                \r
+               createManagedForm(partComposite);\r
+               \r
+               setFocus();\r
+               \r
+               isRedrawing = false;\r
+               \r
+               return true;\r
+               \r
+       }\r
+\r
+       public boolean getIsRedrawing() {\r
+               return isRedrawing;\r
+       }\r
+       \r
+       public MultiPageTaxonEditor getMultiPageTaxonEditor() {\r
+               return editor;\r
+       }\r
+\r
+\r
+       /*\r
+        * (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled#postOperation()\r
+        */\r
+       public boolean postOperation(CdmBase objectAffectedByOperation) {\r
+               \r
+               if (isRedrawing) {\r
+                       return false;\r
+               }\r
+               \r
+               if (objectAffectedByOperation == null && selectedData instanceof CdmBase) {\r
+                       this.objectAffectedByLastOperation = (CdmBase) selectedData;    \r
+               } else {\r
+                       this.objectAffectedByLastOperation = objectAffectedByOperation;\r
+               }\r
+               editor.setDirty();\r
+               return redraw();        \r
+       }\r
+       \r
+\r
+       /**\r
+        * @return the managedForm\r
+        */\r
+       public ManagedForm getManagedForm() {\r
+               return managedForm;\r
+       }\r
+       \r
+       public Composite getTopLevelComposite() {\r
+               return this.getManagedForm().getForm().getBody();\r
+       }\r
+       \r
+       /**\r
+        * \r
+        * @return the ID as defined in plugin.xml\r
+        */\r
+       public abstract String getID();\r
+\r
+       /**\r
+        * @return the menu\r
+        */\r
+       public Menu getMenu() {\r
+               return menu;\r
+       }\r
+\r
+       /**\r
+        * @return the firstGroupedComposite\r
+        */\r
+       public GroupedComposite getFirstGroupedComposite() {\r
+               return firstGroupedComposite;\r
+       }\r
+       \r
+       class EditorPropertySheetPage extends PropertySheetPage {\r
+               \r
+               EditorPropertySheetPage() {\r
+                       super();\r
+                       \r
+                       // Override sorter to simply display names as first-in-first-out\r
+                       setSorter(new PropertySheetSorter() {\r
+                               public int compare(IPropertySheetEntry entryA, IPropertySheetEntry entryB) {\r
+                                       return 0;\r
+                               }\r
+                               public int compareCategories(String categoryA, String categoryB) {\r
+                                       return 0;\r
+                               }\r
+                               public void sort(IPropertySheetEntry[] entries) {\r
+                                       // do nothing\r
+                               }\r
+                       });\r
+               }\r
+               \r
+        public void makeContributions(IMenuManager menuManager,\r
+                IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {\r
+               super.makeContributions(menuManager, toolBarManager, statusLineManager);\r
+        \r
+               // Remove "Show categories", "Show advanced properties", "Restore default value"\r
+               toolBarManager.removeAll();\r
+               menuManager.removeAll();\r
+        }\r
+        \r
+        public Control getControl() {\r
+               Control control = super.getControl();\r
+               \r
+               // Save the property sheet tree for easy access as needed\r
+               if (!control.isDisposed()) {\r
+                       if (control instanceof Tree) {\r
+                               PropertySheetUtil.setPropertySheetTree((Tree) control);\r
+                       }\r
+               }\r
+               return control;\r
+        }\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/CompositeBorderDecorator.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/CompositeBorderDecorator.java
new file mode 100644 (file)
index 0000000..623fc8a
--- /dev/null
@@ -0,0 +1,99 @@
+/**\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.editor;\r
+\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+\r
+/**\r
+ * Draws a border on a Composite on an IManagedForm when it gets focus, \r
+ *  undraws it when the Composite loses focus.\r
+ *  \r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class CompositeBorderDecorator implements FocusListener {       \r
+               \r
+       private FormToolkit toolkit;\r
+       private ScrolledForm scrolledForm;\r
+       private Composite borderedComposite;\r
+       \r
+       /**\r
+        * If true, the <code>borderedComposite</code>'s border is erased when\r
+        * it loses focus.\r
+        */\r
+       private boolean doLoseFocus = true;\r
+\r
+       public CompositeBorderDecorator(Composite composite, IManagedForm form) {\r
+                               \r
+               this.borderedComposite = composite;\r
+               this.toolkit = form.getToolkit();\r
+               this.scrolledForm = form.getForm();\r
+               \r
+               // Make sure composite retains its color scheme after being adapted to toolkit\r
+               Color backgroundColor = composite.getBackground();\r
+               \r
+               toolkit.adapt(composite);\r
+               \r
+               composite.setBackground(backgroundColor);\r
+               \r
+       }\r
+       \r
+       \r
+       public void focusGained(FocusEvent e) {\r
+               paintBorder();\r
+       }\r
+\r
+       \r
+       public void focusLost(FocusEvent e) {\r
+               if (doLoseFocus) {\r
+                       unpaintBorder();\r
+               }\r
+       }\r
+       \r
+       public void setBorderedComposite(Composite borderedComposite) {\r
+               this.borderedComposite = borderedComposite;\r
+       }\r
+       \r
+       /**\r
+        * If this is set to true, border will disappear when focus is lost.\r
+        * Otherwise, it will remain until explicitly erased. \r
+        * \r
+        * @param doLoseFocus\r
+        */\r
+       public void setLoseFocus(boolean doLoseFocus) {\r
+               this.doLoseFocus = doLoseFocus;\r
+       }\r
+       \r
+       /**\r
+        * Removes the border from <code>borderedComposite</code>.\r
+        */\r
+       public void unpaintBorder() {\r
+               paintBorder(null);              \r
+       }\r
+       \r
+       /**\r
+        * Adds a border to <code>borderedComposite</code>.\r
+        */\r
+       public void paintBorder() {\r
+               paintBorder(FormToolkit.TEXT_BORDER);\r
+       }\r
+       \r
+       private void paintBorder(String border) {               \r
+               borderedComposite.setData(FormToolkit.KEY_DRAW_BORDER, border);\r
+               toolkit.paintBordersFor(borderedComposite.getParent());\r
+               scrolledForm.reflow(false);\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ContextMenu.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ContextMenu.java
new file mode 100644 (file)
index 0000000..cd3c98c
--- /dev/null
@@ -0,0 +1,145 @@
+/**\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.editor;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.action.IMenuListener;\r
+import org.eclipse.jface.action.IMenuManager;\r
+import org.eclipse.jface.action.MenuManager;\r
+import org.eclipse.jface.action.Separator;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Menu;\r
+\r
+/**\r
+ * Creates a menu that is opened by right-clicking on a <code>Control</code>.\r
+ * <p>\r
+ * Note that menu items are added anew each time the menu is opened.\r
+ * </p>\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 26.05.2008\r
+ * @version 1.0\r
+ */\r
+public class ContextMenu {\r
+       private static final Logger logger = Logger.getLogger(ContextMenu.class);\r
+       \r
+       private Control control;\r
+       private Menu menu;\r
+       private MenuManager menuManager;\r
+       private List actions;\r
+       private String label;\r
+       \r
+       /**\r
+        * Constructor for top-level menu items.\r
+        * \r
+        * @param control\r
+        */\r
+       public ContextMenu(Control control) {\r
+               this.control = control;\r
+               \r
+               // TODO rewrite class to override Menu\r
+               \r
+               createContextMenu();\r
+       }\r
+\r
+       public ContextMenu(String label) {\r
+               this.label = label;\r
+               \r
+               createContextMenu();\r
+       }\r
+       \r
+       public MenuManager getMenuManager() {\r
+               return menuManager;\r
+       }\r
+       \r
+       private void createContextMenu() {\r
+               if (control != null) {\r
+                       menuManager = new MenuManager();\r
+                       menu = menuManager.createContextMenu(control);\r
+                       control.setMenu(menu);\r
+               } else {\r
+                       menuManager = new MenuManager(label);\r
+               }\r
+               \r
+               menuManager.setRemoveAllWhenShown(true);\r
+               menuManager.addMenuListener(new IMenuListener() {\r
+                       public void menuAboutToShow(IMenuManager manager) {\r
+                               for (Object action : getActions()) {\r
+                                       if (action instanceof Action) {\r
+                                               manager.add((Action) action);\r
+                                       }\r
+                                       if (action instanceof Separator) {\r
+                                               manager.add((Separator) action);\r
+                                       }\r
+                                       if (action instanceof MenuManager) {\r
+                                               manager.add((MenuManager) action);\r
+                                       }\r
+                               }\r
+                       }\r
+               });\r
+       }\r
+       \r
+       private List getActions() {\r
+               if (actions == null) {\r
+                       actions = new ArrayList();\r
+               }\r
+               return actions;\r
+       }\r
+       \r
+       public void addAction(Action action) {\r
+               getActions().add(action);\r
+       }\r
+\r
+       public void removeAction(Action action) {\r
+               getActions().remove(action);\r
+       }\r
+       \r
+       public void addSeparator() {\r
+               getActions().add(new Separator());\r
+       }\r
+\r
+       public void addSubmenu(MenuManager submenu) {\r
+               getActions().add(submenu);\r
+       }\r
+       \r
+       public void setMenuManager(MenuManager menuManager){\r
+               if(control == null){\r
+                       logger.warn("No control set for context menu");\r
+               }else{\r
+                       this.menuManager = menuManager;\r
+                       menu = menuManager.createContextMenu(control);\r
+                       control.setMenu(menu);\r
+                       \r
+                       menuManager.addMenuListener(new IMenuListener() {\r
+                               public void menuAboutToShow(IMenuManager manager) {\r
+                                       for (Object action : getActions()) {\r
+                                               if (action instanceof Action) {\r
+                                                       manager.add((Action) action);\r
+                                               }\r
+                                               if (action instanceof Separator) {\r
+                                                       manager.add((Separator) action);\r
+                                               }\r
+                                               if (action instanceof MenuManager) {\r
+                                                       manager.add((MenuManager) action);\r
+                                               }\r
+                                       }\r
+                               }\r
+                       });     \r
+               }\r
+       }\r
+\r
+       public Menu getMenu() {\r
+               return menu;\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
new file mode 100644 (file)
index 0000000..51d3513
--- /dev/null
@@ -0,0 +1,261 @@
+/**\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.editor;\r
+\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+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.cdm.api.conversation.ConversationHolder;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditor;\r
+import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.model.AbstractUtility;\r
+import eu.etaxonomy.taxeditor.store.preference.PreferencesUtil;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created 20.01.2009\r
+ * @version 1.0\r
+ */\r
+public class EditorUtil extends AbstractUtility{\r
+       private static final Logger logger = Logger.getLogger(EditorUtil.class);\r
+\r
+       // TODO I am not quite sure if this is the right approach\r
+       private static Map<Taxon, TaxonNameEditor> taxonNameEditors;\r
+       private static Map<Taxon, TaxonDescriptionEditor> taxonDescriptionEditors;\r
+\r
+       private static boolean isSaving = false;\r
+\r
+       private static IStatusLineManager statusLineManager;\r
+\r
+       private static IViewPart view;\r
+       \r
+       /**\r
+        * @param input\r
+        * @return\r
+        * @throws PartInitException\r
+        */\r
+       private static IEditorPart getEditorByInput(IEditorInput input)\r
+                       throws PartInitException {\r
+               for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
+                       if (reference.getEditorInput().equals(input)) {\r
+                               IEditorPart editor = reference.getEditor(false);\r
+                               return editor;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       public static boolean closeAll() {\r
+               for (IEditorPart editor : getOpenEditors()) {\r
+                       if (!getActivePage().closeEditor(editor, true)) {\r
+                               return false;\r
+                       }\r
+               }\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * Close the given editor.\r
+        * \r
+        * @param editor The <tt>MultipageTaxonEditor</tt> to close.\r
+        * @return <tt>true</tt> on success\r
+        */\r
+       public static boolean close(MultiPageTaxonEditor editor) {\r
+               return getActivePage().closeEditor(editor, true);\r
+       }\r
+\r
+       /**\r
+        * Opens a new editor window with the given input\r
+        * \r
+        * @param input\r
+        * @param editorId\r
+        * @return \r
+        * @throws PartInitException\r
+        */\r
+       private static IEditorPart open(IEditorInput input, String editorId)\r
+                       throws PartInitException {\r
+               return getActivePage().openEditor(input, editorId);\r
+       }\r
+       \r
+\r
+       /**\r
+        * Taxon Editors may be opened by supplying a taxon uuid only.\r
+        * Session gets initialised here and is passed to the editor\r
+        * \r
+        * @param uuid\r
+        * @return\r
+        * @throws PartInitException \r
+        */\r
+       public static IEditorPart open(UUID uuid) throws PartInitException {\r
+               IEditorInput input = TaxonEditorInput.NewInstance(uuid); \r
+               return open(input, MultiPageTaxonEditor.ID);\r
+       }\r
+\r
+       /**\r
+        * An unitialized taxon is one that hasn't been saved yet. As such, it should appear in neither\r
+        * the list of recent names nor in the taxonomic tree when opened.\r
+        * \r
+        * @param parentTaxon   The UUID of the parental taxon or <code>null</code> if this is\r
+        *                                              supposed to be a root taxon.\r
+        * @return                              The EditorPart.\r
+        * @throws PartInitException \r
+        */\r
+       public static IEditorPart openEmpty(UUID parentTaxonUuid) throws PartInitException{\r
+               TaxonEditorInput input = TaxonEditorInput.NewEmptyInstance(parentTaxonUuid);\r
+               return open(input, MultiPageTaxonEditor.ID);\r
+       }\r
+\r
+\r
+       private static boolean redraw(AbstractTaxonEditor editor) {     \r
+               if(editor == null || editor.redraw()){\r
+                       \r
+//                     if (getActiveEditor().setFocus())\r
+//                     getActivePage()\r
+                       \r
+                       // Mark editor as changed and unsaved\r
+                       editor.setDirty();      \r
+                       return true;    \r
+               }       \r
+               return false;           \r
+       }\r
+       \r
+\r
+       public static void setSaving(boolean isSaving) {\r
+               EditorUtil.isSaving = isSaving;\r
+       }\r
+\r
+       public static boolean isSaving() {\r
+               return isSaving;\r
+       }\r
+       \r
+       /**\r
+        * Returns a set of all currently open \r
+        * <code>MultiPageTaxonEditor</code>s.\r
+        * \r
+        * @return\r
+        */\r
+       public static Set<IEditorPart> getOpenEditors() {\r
+               Set<IEditorPart> taxonEditors = new HashSet<IEditorPart>();\r
+               \r
+               if(getActivePage() != null){\r
+                       for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
+                               IEditorPart editor = reference.getEditor(false);\r
+                               if (editor instanceof MultiPageTaxonEditor) {\r
+                                       taxonEditors.add(editor);\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               return taxonEditors;\r
+       }\r
+       \r
+       /**\r
+        * Returns the currently active taxon editor\r
+        * \r
+        * @return the taxon editor that has focus\r
+        */\r
+       public static MultiPageTaxonEditor getActiveEditor(){\r
+               IEditorPart editorPart = getActivePage().getActiveEditor();\r
+               if(editorPart instanceof MultiPageTaxonEditor){\r
+                       MultiPageTaxonEditor editor = (MultiPageTaxonEditor) editorPart;\r
+                       editor.getConversationHolder().bind();\r
+                       return editor;\r
+               }\r
+               return null;\r
+       }\r
+       \r
+       public static AbstractTaxonEditor getActiveEditorPage(Page page){\r
+               MultiPageTaxonEditor editor = getActiveEditor();\r
+               \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
+       }\r
+       \r
+       public static IUndoContext getUndoContext() {\r
+               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
+               }\r
+               try {\r
+                       view = getActivePage().showView(IPageLayout.ID_PROP_SHEET);\r
+               } catch (PartInitException e) {\r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+       \r
+       public static void checkHidePropertySheet() {\r
+               if (getOpenEditors().size() == 0) {\r
+                       if (view != null && getActivePage() != null) {\r
+                               getActivePage().hideView(view);\r
+                       }\r
+               }\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java
new file mode 100644 (file)
index 0000000..4bd009b
--- /dev/null
@@ -0,0 +1,56 @@
+package eu.etaxonomy.taxeditor.editor;\r
+\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.part.EditorPart;\r
+\r
+public class EmptyEditorView extends EditorPart {\r
+\r
+       public static final String ID = "eu.etaxonomy.taxeditor.editor.EmptyEditorView"; //$NON-NLS-1$\r
+\r
+       /**\r
+        * Create contents of the editor part\r
+        * @param parent\r
+        */\r
+       @Override\r
+       public void createPartControl(Composite parent) {\r
+               Composite container = new Composite(parent, SWT.NONE);\r
+               //\r
+       }\r
+\r
+       @Override\r
+       public void setFocus() {\r
+               // Set the focus\r
+       }\r
+\r
+       @Override\r
+       public void doSave(IProgressMonitor monitor) {\r
+               // Do the Save operation\r
+       }\r
+\r
+       @Override\r
+       public void doSaveAs() {\r
+               // Do the Save As operation\r
+       }\r
+\r
+       @Override\r
+       public void init(IEditorSite site, IEditorInput input)\r
+                       throws PartInitException {\r
+               // Initialize the editor part\r
+       }\r
+\r
+       @Override\r
+       public boolean isDirty() {\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public boolean isSaveAsAllowed() {\r
+               return false;\r
+       }\r
+\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java
new file mode 100644 (file)
index 0000000..80330b0
--- /dev/null
@@ -0,0 +1,135 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.DocumentEvent;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.IDocumentListener;\r
+import org.eclipse.jface.text.TextViewer;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.DisposeEvent;\r
+import org.eclipse.swt.events.DisposeListener;\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.graphics.Font;\r
+\r
+import eu.etaxonomy.taxeditor.store.model.Resources;\r
+\r
+/**\r
+ * Displays a message such as "Click here to start entering\r
+ * data" when <code>document</code> is empty.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 15.09.2008\r
+ * @version 1.0\r
+ */\r
+public class EmptyTextViewerPrompt implements IDocumentListener {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(EmptyTextViewerPrompt.class);\r
+       \r
+       private IDocument document;\r
+       private StyledText textControl;\r
+       private String prompt;\r
+       private FocusListener focusListener = null;\r
+\r
+       private Font textFont;\r
+       private Font promptFont = Resources.getFont(Resources.FONT_DEFAULT_PROMPT);\r
+       \r
+       public EmptyTextViewerPrompt(TextViewer textViewer, String prompt) {\r
+\r
+               this.document = textViewer.getDocument();\r
+               this.textControl = textViewer.getTextWidget();\r
+               this.prompt = prompt;\r
+\r
+               this.textFont = textControl.getFont();\r
+               \r
+               documentChanged(null);          \r
+       }\r
+\r
+       /**\r
+        * Override <code>prompt</code>'s default font. \r
+        * \r
+        * @param font\r
+        */\r
+       public void setPromptFont(Font font) {\r
+               this.promptFont = font;\r
+       }\r
+       \r
+       /**\r
+        * Adds a focus listener to the <code>textControl</code>, which hides \r
+        * the <code>prompt</code> if the cursor is in the <code>textControl</code>, \r
+        * and shows it if the cursor is elsewhere.  \r
+        */\r
+       private void createPrompt() {\r
+               \r
+               textControl.setFont(promptFont);\r
+               document.set(prompt);\r
+\r
+               focusListener = new FocusListener() {\r
+\r
+                       public void focusGained(FocusEvent e) {\r
+                               if (document.get().equals(prompt)) {\r
+                                       textControl.setFont(textFont);\r
+                                       document.set("");\r
+                               }\r
+                       }\r
+\r
+                       public void focusLost(FocusEvent e) {\r
+                               if (document.getLength() == 0) {\r
+                                       textControl.setFont(promptFont);\r
+                                       document.set(prompt);\r
+                               }\r
+                       }\r
+                       \r
+               };\r
+               textControl.addFocusListener(focusListener);\r
+               textControl.addDisposeListener(new DisposeListener() {\r
+\r
+                       \r
+                       public void widgetDisposed(DisposeEvent e) {\r
+                               focusListener = null;\r
+                       }\r
+                       \r
+               });\r
+       }\r
+       \r
+       /**\r
+        * Removes focus listener from <code>textControl</code>, turning off\r
+        * the showing of <code>prompt</code>.\r
+        */\r
+       private void removePrompt() {\r
+               if (focusListener != null) {\r
+                       textControl.removeFocusListener(focusListener);\r
+                       focusListener = null;\r
+               }\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)\r
+        */\r
+       public void documentAboutToBeChanged(DocumentEvent event) {}\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent)\r
+        */\r
+       public void documentChanged(DocumentEvent event) {\r
+               \r
+               if (document.get().equals(prompt)) {\r
+                       return;\r
+               }\r
+               \r
+               if (document.getLength() == 0) {\r
+                       createPrompt();\r
+               } else {\r
+                       removePrompt();\r
+               }\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ErrorAnnotation.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ErrorAnnotation.java
new file mode 100644 (file)
index 0000000..2f45113
--- /dev/null
@@ -0,0 +1,96 @@
+package eu.etaxonomy.taxeditor.editor;\r
+\r
+import org.eclipse.core.resources.IMarker;\r
+import org.eclipse.jface.text.Position;\r
+import org.eclipse.jface.text.source.Annotation;\r
+import org.eclipse.jface.text.source.IAnnotationPresentation;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.graphics.RGB;\r
+import org.eclipse.swt.graphics.Rectangle;\r
+import org.eclipse.swt.widgets.Canvas;\r
+\r
+import eu.etaxonomy.taxeditor.store.model.ImageResources;\r
+import eu.etaxonomy.taxeditor.store.model.Resources;\r
+\r
+public class ErrorAnnotation extends Annotation implements IAnnotationPresentation {\r
+    private IMarker marker;\r
+    private String text;\r
+    private int line;\r
+    private Position position;\r
+\r
+    // error identifiers, images and colors\r
+    public static String ERROR_TYPE = "error.type";\r
+    public static Image ERROR_IMAGE = ImageResources.getImage(ImageResources.ACTIVE_DELETE_ICON);\r
+    public static final RGB ERROR_RGB = new RGB(255, 0, 0);    \r
+    \r
+    public ErrorAnnotation(IMarker marker) {\r
+        this.marker = marker;\r
+    }\r
+\r
+    public ErrorAnnotation(int line, String text) {\r
+       super(ERROR_TYPE, false, text);\r
+        this.marker = null;\r
+        this.line = line;\r
+        this.text = text;\r
+    }\r
+\r
+    public IMarker getMarker() {\r
+        return marker;\r
+    }\r
+\r
+    public int getLine() {\r
+        return line;\r
+    }\r
+\r
+    public String getText() {\r
+        return "Error in the string " + text;\r
+    }\r
+\r
+    public int getLayer() {\r
+        return 3;\r
+    }\r
+\r
+    public String getType() {\r
+        return ERROR_TYPE;\r
+    }\r
+\r
+    public Position getPosition() {\r
+        return position;\r
+    }\r
+\r
+    public void setPosition(Position position) {\r
+        this.position = position;\r
+    }\r
+\r
+       \r
+       public void paint(GC gc, Canvas canvas, Rectangle bounds) {\r
+               Point canvasSize= canvas.getSize();\r
+\r
+               int x= 0;\r
+               int y= bounds.y;\r
+               int w= canvasSize.x;\r
+               int h= bounds.height;\r
+\r
+               if (y + h > canvasSize.y)\r
+                       h= canvasSize.y - y;\r
+\r
+               if (y < 0) {\r
+                       h= h + y;\r
+                       y= 0;\r
+               }\r
+\r
+               if (h <= 0)\r
+                       return;\r
+\r
+               Image image = ImageResources.getImage(ImageResources.ERROR_ANNOTATION_ICON);\r
+               \r
+               Rectangle r = image.getBounds();\r
+               \r
+               int destX = x + w - r.width;\r
+               int destY = y + h - r.height;\r
+               \r
+               gc.drawImage(image, 0, 0, r.width, r.height, destX, destY, r.width, r.height);\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java
new file mode 100644 (file)
index 0000000..f2dc495
--- /dev/null
@@ -0,0 +1,296 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+\r
+import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Distribution;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\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.TaxonRelationship;\r
+import eu.etaxonomy.taxeditor.editor.description.CommonNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionElementComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionFeatureGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionLabelComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DistributionComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DistributionFeatureGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditor;\r
+import eu.etaxonomy.taxeditor.editor.images.GalleryLabelComposite;\r
+import eu.etaxonomy.taxeditor.editor.images.ImageComposite;\r
+import eu.etaxonomy.taxeditor.editor.images.ImagesGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.images.TaxonHasNoImagesComposite;\r
+import eu.etaxonomy.taxeditor.editor.images.TaxonImageEditor;\r
+import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.ConceptComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.ConceptGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.HomotypicalGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.MisappliedGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.MisappliedNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.SynonymComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 08.01.2009\r
+ * @version 1.0\r
+ */\r
+public class FreeTextElementFactory implements IFreeTextElementFactory {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(FreeTextElementFactory.class);\r
+       \r
+       private static IFreeTextElementFactory factory;\r
+       \r
+       public static IFreeTextElementFactory getDefault() {\r
+               if (factory == null) {\r
+                       factory = new FreeTextElementFactory();\r
+               }\r
+               return factory;\r
+       }\r
+       \r
+       public Composite createAcceptedTaxon(AbstractTaxonEditor editor) {\r
+               // Create a homotypic group composite for the accepted taxon\r
+               HomotypicalGroup group = editor.getTaxon().getHomotypicGroup();\r
+               Assert.isNotNull(group, "Taxon does not have a homotypic group");\r
+               Composite groupComposite = createHomotypicalGroup(editor, group);\r
+                               \r
+               // Create a name composite for the accepted taxon\r
+               Composite acceptedNameComposite = new AcceptedNameComposite(editor, groupComposite);\r
+       \r
+               // Return the name composite\r
+               return acceptedNameComposite;\r
+       }\r
+       \r
+       public Composite createSynonym(TaxonNameEditor editor, 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
+               Composite groupComposite = editor.getHomotypicGroup(group);\r
+               if (groupComposite == null) {\r
+                       groupComposite = createHomotypicalGroup(editor, group);\r
+               }\r
+                               \r
+               // Create a synonym composite in the homotypical group\r
+               Composite synonymComposite = new SynonymComposite(editor, groupComposite, synonym);\r
+                               \r
+               return synonymComposite;\r
+       }\r
+       \r
+       \r
+       public Composite createMisappliedName(TaxonNameEditor editor, Taxon misappliedName) {\r
+               \r
+               // If there is no composite for misapplied names, \r
+               //      create one and add it to the repository\r
+               Composite groupComposite = editor.getMisappliedGroup();\r
+               if (groupComposite == null) {\r
+                       groupComposite = createMisappliedGroup(editor);\r
+               }\r
+               \r
+               // Create the name's composite\r
+               Composite composite = new MisappliedNameComposite(editor, groupComposite, misappliedName);\r
+               \r
+               return composite;\r
+       }\r
+       \r
+       \r
+       public Composite createMisappliedGroup(TaxonNameEditor editor) {\r
+               // Create the group composite\r
+               Composite groupComposite = new MisappliedGroupComposite(editor, editor.getTopLevelComposite());\r
+               groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, editor.getManagedForm()));\r
+               \r
+               // Put the group composite before concept group composite, if any\r
+               Composite conceptGroupComposite = editor.getConceptGroup();\r
+               if (conceptGroupComposite != null) {\r
+                       groupComposite.moveAbove(conceptGroupComposite);\r
+               }\r
+               \r
+               return groupComposite;\r
+       }\r
+       \r
+       public Composite createHomotypicalGroup(AbstractTaxonEditor editor, HomotypicalGroup group) {\r
+\r
+               // Create the group composite\r
+               Composite groupComposite = new HomotypicalGroupComposite(editor, editor.getTopLevelComposite(), group);\r
+//             groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, editor.getManagedForm()));         \r
+                               \r
+               groupComposite.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
+               editor.getManagedForm().getToolkit().paintBordersFor(groupComposite.getParent());\r
+               \r
+               return groupComposite;\r
+       }\r
+       \r
+       public Composite createConcept(TaxonNameEditor editor, TaxonRelationship relationship) {        \r
+               // If there is no composite for misapplied names, \r
+               //      create one and add it to the repository\r
+               Composite groupComposite = editor.getConceptGroup();\r
+               if (groupComposite == null) {\r
+                       groupComposite = createConceptGroup(editor);\r
+               }\r
+               \r
+               // Create the name's composite\r
+               Composite composite = ConceptComposite.getNewInstance(editor, groupComposite, relationship);\r
+                               \r
+               return composite;\r
+       }\r
+\r
+       \r
+       public Composite createConceptGroup(TaxonNameEditor editor) {\r
+               // Create the group composite\r
+               Composite groupComposite = new ConceptGroupComposite(editor, editor.getTopLevelComposite());\r
+               groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, editor.getManagedForm()));\r
+               \r
+               // Put the group composite after misapplied group composite, if any\r
+               Composite misappliedGroupComposite = editor.getMisappliedGroup();\r
+               if (misappliedGroupComposite != null) {\r
+                       groupComposite.moveBelow(misappliedGroupComposite);\r
+               }\r
+               \r
+               return groupComposite;\r
+\r
+       }\r
+\r
+       \r
+       /*********************** DESCRIPTION **********************************/ \r
+       \r
+       public Composite createDescriptionLabel(AbstractTaxonEditor editor, TaxonDescription description) {\r
+               \r
+               // Create a group composite for the description\r
+               Composite groupComposite = createDescriptionGroup(editor, description);\r
+                               \r
+               // Create label composite\r
+               Composite labelComposite =\r
+                               new DescriptionLabelComposite(editor, groupComposite, description);\r
+       \r
+               // Return the label composite\r
+               return labelComposite;\r
+       }\r
+\r
+       \r
+       public Composite createDescriptionElement(TaxonDescriptionEditor editor, TaxonDescription description,\r
+                       DescriptionElementBase element) {\r
+\r
+               // Get the element's feature\r
+               Feature feature = element.getFeature();\r
+               Assert.isNotNull(feature, "Element does not have a feature.");\r
+                                                       \r
+               // If the feature doesn't yet have a composite, create one\r
+               Composite groupComposite = editor.getDescriptionFeatureGroup(description, feature);\r
+               if (groupComposite == null) {\r
+                       groupComposite = createDescriptionFeatureGroup(editor, description, feature);\r
+               }\r
+                               \r
+               // Create an element composite in the feature group according to its type\r
+               Composite elementComposite = null;\r
+               if (element.isInstanceOf(CommonTaxonName.class)) {\r
+                       elementComposite =\r
+                                       new CommonNameComposite(editor, groupComposite, (CommonTaxonName) element);\r
+               }else if(element.isInstanceOf(Distribution.class)){\r
+                       elementComposite =\r
+                                       new DistributionComposite(editor, groupComposite, (Distribution) element);\r
+               } else {\r
+                       elementComposite = \r
+                                       new DescriptionElementComposite(editor, groupComposite, element);\r
+               }\r
+               \r
+               return elementComposite;\r
+       }\r
+\r
+       \r
+       public Composite createDescriptionGroup(AbstractTaxonEditor editor,\r
+                       TaxonDescription description) {\r
+               // Create the group composite\r
+               GroupComposite groupComposite = new DescriptionGroupComposite(editor.getTopLevelComposite(), editor, description);\r
+               groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, editor.getManagedForm()));\r
+//             groupComposite.setDroppable(false);\r
+                               \r
+               return groupComposite;\r
+       }\r
+               \r
+       \r
+       public Composite createDescriptionFeatureGroup(TaxonDescriptionEditor editor,\r
+                       TaxonDescription description, Feature feature) {\r
+\r
+               // Description label should be created before adding features\r
+               Composite descriptionGroupComposite = editor.getDescriptionGroup(description);\r
+               Assert.isNotNull(descriptionGroupComposite, \r
+                               "Description group must be created - usually by creating its label - before adding features.");\r
+               \r
+               // Create the group composite\r
+               Composite groupComposite;\r
+               if(feature.equals(Feature.DISTRIBUTION())){\r
+                       groupComposite = new DistributionFeatureGroupComposite\r
+                                                                               (editor, descriptionGroupComposite, description, feature);\r
+               }else{\r
+                       groupComposite= new DescriptionFeatureGroupComposite\r
+                                                                               (editor, descriptionGroupComposite, description, feature);\r
+               }\r
+               groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, editor.getManagedForm())); \r
+               \r
+               return groupComposite;          \r
+       }\r
+       \r
+       /********************* IMAGES *************************/\r
+       \r
+\r
+       public Composite createGalleryLabel(AbstractTaxonEditor editor, TaxonDescription imageGallery) {\r
+               \r
+               // Create a group composite for the description\r
+               Composite groupComposite = createDescriptionGroup(editor, imageGallery);\r
+                               \r
+               // Create label composite\r
+               Composite labelComposite =\r
+                               new GalleryLabelComposite(editor, groupComposite, imageGallery);\r
+       \r
+               // Return the label composite\r
+               return labelComposite;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.IFreeTextElementFactory#createImageElement(org.eclipse.ui.forms.ManagedForm, eu.etaxonomy.cdm.model.taxon.Taxon, java.net.URL)\r
+        */\r
+       public Composite createImageElement(TaxonImageEditor editor, ImageFile imageFile) {\r
+\r
+               // Get the group composite for all images\r
+               GroupComposite groupComposite = editor.getImageGroup();\r
+               if (groupComposite == null) {\r
+                       groupComposite = createImagesGroup(editor);\r
+               }\r
+               \r
+               // Create the image composite\r
+               GroupedComposite imageComposite = new ImageComposite(editor, groupComposite, imageFile);\r
+               imageComposite.addFocusListener(new CompositeBorderDecorator(imageComposite, editor.getManagedForm()));\r
+                               \r
+               return imageComposite;\r
+       }\r
+\r
+       /**\r
+        * @param taxon\r
+        * @param form2 \r
+        * @return\r
+        */\r
+       private GroupComposite createImagesGroup(AbstractTaxonEditor editor) {\r
+\r
+               // Create the group composite\r
+               GroupComposite groupComposite = new ImagesGroupComposite(editor.getTopLevelComposite(), editor);                \r
+                               \r
+               return groupComposite;\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupComposite.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupComposite.java
new file mode 100644 (file)
index 0000000..f11939a
--- /dev/null
@@ -0,0 +1,126 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.DropTarget;\r
+import org.eclipse.swt.dnd.DropTargetAdapter;\r
+import org.eclipse.swt.dnd.DropTargetEvent;\r
+import org.eclipse.swt.dnd.DropTargetListener;\r
+import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.store.model.Resources;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 25.06.2008\r
+ * @version 1.0\r
+ */\r
+public class GroupComposite extends Composite {\r
+       private static final Logger logger = Logger.getLogger(GroupComposite.class);\r
+       \r
+       protected AbstractTaxonEditor editor;\r
+       protected Taxon taxon;\r
+       \r
+       private DropTarget target;\r
+       private DropTargetListener dropListener;\r
+               \r
+       public GroupComposite(Composite parent) {\r
+               super(parent, SWT.NONE);\r
+\r
+               // Graphic layout of composite\r
+               this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+               this.setLayout(new TableWrapLayout());\r
+               Color groupBackgroundColor = Resources.\r
+                               getColor(Resources.COLOR_COMPOSITE_BACKGROUND);\r
+               this.setBackground(groupBackgroundColor);\r
+\r
+               // Drop functionality\r
+               this.setDroppable(true);\r
+       }\r
+       \r
+       public GroupComposite(AbstractTaxonEditor editor, Composite parent){\r
+               this(parent);\r
+               this.editor = editor;\r
+               this.taxon = editor.getTaxon();\r
+       }\r
+       \r
+       public void setDroppable(boolean droppable) {\r
+               if (droppable) {\r
+                       Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};       \r
+                       int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
+                       target = new DropTarget(this, operations);\r
+                       target.setTransfer(types);\r
+                       dropListener = new DropTargetAdapter() {\r
+                                                       \r
+                               public void dragEnter(DropTargetEvent event) {\r
+                                       GroupComposite.this.notifyListeners(SWT.FocusIn, null);\r
+                               }\r
+                               \r
+                               public void dragLeave(DropTargetEvent event) {\r
+                                       GroupComposite.this.notifyListeners(SWT.FocusOut, null);\r
+                               }\r
+                               \r
+                               public void drop(DropTargetEvent event) {\r
+                                                                       \r
+                                       if (event.data instanceof GroupedComposite) {\r
+                                               \r
+                                               final GroupedComposite composite = (GroupedComposite) event.data;\r
+                                               if (composite.getDragSource() != null) {\r
+                                                       \r
+                                                       // Make sure composite is not being dropped onto its current parent\r
+                                                       if ( ! composite.getParent().equals(GroupComposite.this)) {\r
+                                                               \r
+                                                               // Change parent at end of drag event\r
+                                                               composite.getDragSource().addListener(DND.DragEnd, new Listener() {\r
+                                                                       \r
+                                                                       public void handleEvent(Event event) {\r
+                                                                               composite.setParent(GroupComposite.this);\r
+                                                                       }\r
+                                                               });\r
+                                                       }                                                       \r
+                                               }\r
+                                       }\r
+                               }\r
+                       };\r
+                       target.addDropListener(dropListener);                   \r
+               } else {\r
+                       if (dropListener != null) {\r
+                               target.removeDropListener(dropListener);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void dispose() {\r
+               \r
+               if (target != null) {\r
+                       target.removeDropListener(dropListener);\r
+                       target.dispose();\r
+               }\r
+                               \r
+               super.dispose();\r
+       }\r
+\r
+       /**\r
+        * @return the taxon\r
+        */\r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java
new file mode 100644 (file)
index 0000000..027a301
--- /dev/null
@@ -0,0 +1,47 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 10.09.2008\r
+ * @version 1.0\r
+ */\r
+public class GroupCompositeLabel extends Composite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(GroupCompositeLabel.class);\r
+\r
+       public GroupCompositeLabel(Composite parent, String labelText) {\r
+               super(parent, SWT.NONE);\r
+               \r
+               // TODO move to group composite?\r
+               \r
+               TableWrapLayout tableWrapLayout = new TableWrapLayout();\r
+               tableWrapLayout.horizontalSpacing = 1;\r
+               tableWrapLayout.rightMargin = 10;\r
+               tableWrapLayout.leftMargin = 10;\r
+               tableWrapLayout.bottomMargin = 1;\r
+               tableWrapLayout.topMargin = 1;\r
+               tableWrapLayout.verticalSpacing = 1;\r
+               setLayout(tableWrapLayout);\r
+               setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));\r
+               \r
+               // Add the label\r
+               final Label label = new Label(this, SWT.NONE);\r
+               label.setText(labelText.toUpperCase());\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupedComposite.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupedComposite.java
new file mode 100644 (file)
index 0000000..afc8f79
--- /dev/null
@@ -0,0 +1,633 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.dialogs.Dialog;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.TextViewer;\r
+import org.eclipse.jface.window.DefaultToolTip;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.DragSource;\r
+import org.eclipse.swt.dnd.DragSourceAdapter;\r
+import org.eclipse.swt.dnd.DragSourceEvent;\r
+import org.eclipse.swt.dnd.DragSourceListener;\r
+import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.events.ControlAdapter;\r
+import org.eclipse.swt.events.ControlEvent;\r
+import org.eclipse.swt.events.ControlListener;\r
+import org.eclipse.swt.events.FocusAdapter;\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.Font;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.name.NameViewer;\r
+import eu.etaxonomy.taxeditor.store.model.Resources;\r
+\r
+/** \r
+ * Formats <code>GroupedComposite</code> with cosmetic and layout properties specific to the\r
+ * Editor. This should be used to maintain a consistent look and feel for all Editor \r
+ * freetext area components, such as DescriptionElementComposite.\r
+ * <p>\r
+ * Requires an <code>IManagedForm</code>, whose <code>input</code> is set to the contents\r
+ * of {@link #getData()} when the <code>GroupedComposite</code> gets focus, i.e. to\r
+ * populate the property sheet with the data.\r
+ * </p>\r
+ * <p>\r
+ * The <code>IManagedForm</code> is also required to have a <code>Taxon</code> in its \r
+ * own <code>getData()</code>.\r
+ * </p> \r
+ * <p>\r
+ * The <code>IManagedForm</code> can also used for drawing borders by calling the method \r
+ * <code>createBorderSupport()</code>.\r
+ * </p>\r
+ * @author p.ciardelli\r
+ * @created 02.06.2008\r
+ * @version 1.0\r
+ */\r
+abstract public class GroupedComposite extends Composite implements IHasPropertySource {       \r
+       private static final Logger logger = Logger.getLogger(GroupedComposite.class);\r
+       \r
+       protected AbstractTaxonEditor editor;\r
+       \r
+       protected NameViewer textViewer;\r
+       protected IManagedForm managedForm;\r
+       private Label nonEditableInfoLabel;\r
+       private DefaultToolTip nonEditableInfoHover;\r
+       \r
+       private Color defaultGroupBackgroundColor = Resources.getColor(Resources.COLOR_COMPOSITE_BACKGROUND);\r
+       \r
+       protected Taxon taxon;\r
+       \r
+       private CompositeBorderDecorator borderDecorator;       \r
+       private FocusListener focusListener;\r
+       private LineBreakListener lineBreakListener;\r
+       private ParseListener parseListener;\r
+\r
+       private String emptyViewerPrompt;\r
+       \r
+       public GroupedComposite(AbstractTaxonEditor editor, Composite parent){\r
+               super(parent, SWT.NONE);\r
+               \r
+               this.editor = editor;\r
+               this.managedForm = editor.getManagedForm();\r
+               \r
+               Object formData = managedForm.getForm().getBody().getData();\r
+               Assert.isTrue(formData instanceof Taxon, \r
+                               "Managed form must have a Taxon in its data field.");\r
+               taxon = (Taxon) formData;\r
+\r
+               createControl();\r
+       }\r
+       \r
+       protected void createControl() {\r
+               setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+               TableWrapLayout layout = new TableWrapLayout();\r
+               layout.leftMargin = 0;\r
+               layout.topMargin = 0;\r
+               layout.bottomMargin = 0;\r
+               layout.verticalSpacing = 0;\r
+               setLayout(layout);\r
+               \r
+               setBackground(defaultGroupBackgroundColor);\r
+       }\r
+       \r
+       protected void createLineWrapSupport() {\r
+               if (textViewer instanceof NameViewer) {\r
+                       new LineWrapSupport(textViewer, managedForm);\r
+               } else {\r
+                       logger.warn("Can't create line wrap support because textViewer has not been initialized.");\r
+               }\r
+       }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+       \r
+       protected void createTextViewer() {\r
+               textViewer = new NameViewer(this);\r
+               \r
+               focusListener = new FocusAdapter() {\r
+                       public void focusGained(FocusEvent e) {\r
+                               setFocus();\r
+                       }\r
+               };\r
+               \r
+               textViewer.getTextWidget().addFocusListener(focusListener);\r
+               \r
+               MouseAdapter mouseListener = new MouseAdapter() {\r
+                       public void mouseDown(MouseEvent e) {\r
+                               setFocus();                             \r
+                       }\r
+               };\r
+               this.addMouseListener(mouseListener);\r
+               textViewer.getRulerControl().addMouseListener(mouseListener);\r
+       }\r
+       \r
+       /**\r
+        * @param icon\r
+        */\r
+       public void setIcon(Image icon) {\r
+               if (textViewer instanceof NameViewer) {\r
+                       textViewer.setIcon(icon);\r
+               } else {\r
+                       logger.warn("Can't set icon because textViewer has not been initialized.");\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * @param indent\r
+        */\r
+       public void setIndent(int indent) {\r
+               if (getLayout() instanceof TableWrapLayout) {\r
+                       TableWrapLayout layout = ((TableWrapLayout) getLayout());\r
+                       layout.leftMargin = indent;\r
+                       this.setLayout(layout);\r
+               } else {\r
+                       logger.warn("Couldn't indent - composite's layout must be TableWrapLayout.");\r
+               }\r
+       }       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.swt.widgets.Composite#setFocus()\r
+        */\r
+       public boolean setFocus() {\r
+               setSelection();\r
+               return true;\r
+       }\r
+       \r
+       /**\r
+        * Set background on selection and the cursor to EOL\r
+        * I wanted to move this to setFocus() but that leads to an infinite loop\r
+        */\r
+       public void setSelected(){\r
+               setBackground(Resources.getColor(Resources.COLOR_COMPOSITE_SELECTED));\r
+               if(textViewer != null){\r
+                       textViewer.setCursorToEOL();\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       protected void setSelection() {\r
+               managedForm.setInput(this);\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       @Override\r
+       public void setBackground(Color color) {\r
+               super.setBackground(color);\r
+               if(textViewer != null){\r
+                       textViewer.setBackground(color);\r
+               }\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.swt.widgets.Control#setFont(org.eclipse.swt.graphics.Font)\r
+        */\r
+       public void setFont(Font font) {\r
+               if (textViewer != null) {\r
+                       textViewer.getTextWidget().setFont(font);\r
+               } else {\r
+                       logger.warn("Can't set font because textViewer has not been initalized.");\r
+               }\r
+       }\r
+       \r
+       public TextViewer getTextViewer() {\r
+               return textViewer;\r
+       }\r
+       \r
+       /**\r
+        * If <code>textViewer</code> has already been set, it will show a \r
+        * <code>prompt</code> along the lines of "Click here to start entering data" \r
+        * when empty.\r
+        * \r
+        * @param prompt\r
+        */\r
+       public void createEmptyViewerPrompt(final String prompt) {\r
+               \r
+               emptyViewerPrompt = prompt;\r
+               \r
+               Assert.isNotNull(textViewer);\r
+//             new EmptyTextViewerPrompt(getTextViewer(), prompt);\r
+                \r
+               final StyledText textControl = textViewer.getTextWidget();\r
+               final IDocument document = textViewer.getDocument();\r
+               final Font promptFont = Resources\r
+                               .getFont(Resources.FONT_DEFAULT_PROMPT);\r
+               setFocusListener(new FocusListener() {\r
+\r
+                       \r
+                       public void focusGained(FocusEvent e) {\r
+                               if (document.get().equals(prompt)) {\r
+                                       textControl.setFont(getViewerFont());\r
+                                       document.set("");\r
+                               }\r
+                       }\r
+\r
+                       \r
+                       public void focusLost(FocusEvent e) {\r
+                               if (document.getLength() == 0) {\r
+                                       initEmptyText();\r
+                               }\r
+                       }\r
+                       \r
+               });\r
+               textControl.addFocusListener(getFocusListener());\r
+               \r
+               if (document.getLength() == 0) {\r
+                       textControl.setFont(promptFont);\r
+                       document.set(prompt);\r
+               }\r
+       }\r
+       \r
+       abstract protected Font getViewerFont();\r
+\r
+       protected void initEmptyText() {\r
+               textViewer.getTextWidget().setFont(\r
+                               Resources\r
+                                       .getFont(Resources.FONT_DEFAULT_PROMPT));\r
+               \r
+               textViewer.getDocument().set(getEmptyTextPrompt());\r
+               textViewer.setCursorToEOL();\r
+       }\r
+\r
+       protected String getEmptyTextPrompt() {\r
+               if (emptyViewerPrompt == null) {\r
+                       emptyViewerPrompt = "Click to edit";\r
+               }\r
+               return emptyViewerPrompt;\r
+       }\r
+\r
+       private void setFocusListener(FocusListener focusListener) {\r
+               this.focusListener = focusListener;\r
+       }\r
+\r
+       private FocusListener getFocusListener() {\r
+               return focusListener;\r
+       }\r
+               \r
+       /**\r
+        * \r
+        */\r
+       public void createBorderSupport() {\r
+               \r
+               if (textViewer == null) {\r
+                       logger.warn("Could not create border support - getTextViewer() returned null.");\r
+               } else {\r
+                       borderDecorator = new CompositeBorderDecorator(\r
+                                       textViewer.getTextWidget(), managedForm);               \r
+                       borderDecorator.setLoseFocus(false);\r
+                       textViewer.getTextWidget().addFocusListener(borderDecorator);\r
+               }\r
+       }\r
+       \r
+       protected void setBorderDecorator(CompositeBorderDecorator borderDecorator) {\r
+               this.borderDecorator = borderDecorator;\r
+       }\r
+       \r
+       protected CompositeBorderDecorator getBorderDecorator() {\r
+               return borderDecorator;\r
+       }\r
+       \r
+       public void drawBorder() {\r
+               if (borderDecorator != null) {\r
+                       borderDecorator.paintBorder();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @param isDirty\r
+        */\r
+       protected void setDirty(boolean isDirty) {\r
+               managedForm.dirtyStateChanged();\r
+       }\r
+               \r
+       protected ContextMenu createContextMenu() {\r
+               if (textViewer != null) {\r
+                       ContextMenu contextMenu = new ContextMenu(textViewer.getRulerControl());\r
+                       textViewer.getTextWidget().setMenu(contextMenu.getMenu());\r
+                       return contextMenu;\r
+               } else {\r
+                       logger.warn("Can't create menu because textViewer has not been initalized.");\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       public void setMenu (Menu menu) {\r
+               super.setMenu(menu);\r
+               \r
+               if (textViewer != null) {\r
+                       textViewer.getRulerControl().setMenu(menu);\r
+                       textViewer.getTextWidget().setMenu(menu);\r
+               }\r
+       }\r
+       \r
+       public void unpaintBorder() {\r
+               if (borderDecorator != null) {\r
+                       borderDecorator.unpaintBorder();\r
+               }\r
+       }\r
+       \r
+       private Control draggableControl;\r
+       private DragSource dragSource;\r
+       \r
+       protected void setDraggableControl(Control control) {\r
+               draggableControl = control;\r
+       }\r
+\r
+       public DragSource getDragSource() {\r
+               return dragSource;\r
+       }\r
+       \r
+       public void setIsDraggable(boolean draggable) {\r
+\r
+               if (draggable) {\r
+\r
+                       if (dragSource != null) {\r
+                               // Already initialized\r
+                               return;\r
+                       }\r
+\r
+                       if (draggableControl == null) {\r
+                               throw new NullPointerException(\r
+                                               "Draggable control must be set to add draggability");\r
+                       }\r
+                       \r
+                       Transfer[] types = new Transfer[] { WidgetTransfer.getInstance() };                     \r
+                       int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
+\r
+                       dragSource = new DragSource(draggableControl, operations);\r
+                       dragSource.setTransfer(types);\r
+                       dragSource.addDragListener(dragSourceListener);\r
+\r
+               } else {\r
+                       dragSource = null;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Drag listener which passes the Composite as the data in a drag event.\r
+        */\r
+       DragSourceListener dragSourceListener = new DragSourceAdapter() {\r
+\r
+               public void dragStart(DragSourceEvent event) {\r
+                       if (textViewer != null) {\r
+                               textViewer.getTextWidget().setFocus();\r
+                       }\r
+                       event.doit = true;\r
+               }\r
+               \r
+               public void dragSetData(DragSourceEvent event) {\r
+                       WidgetTransfer.getInstance().setWidget(GroupedComposite.this);\r
+               }\r
+       };\r
+\r
+       private String nonEditableText;\r
+       ControlListener nonEditableResizeListener = new ControlAdapter() {\r
+               \r
+               int width = 0;\r
+               \r
+               public void controlResized(ControlEvent e) {\r
+                       if (nonEditableInfoLabel.getBounds().width == width) {\r
+                               return;\r
+                       }\r
+                       width = nonEditableInfoLabel.getBounds().width;\r
+                       if (nonEditableInfoLabel.getBounds().width > 0) {\r
+                               nonEditableInfoLabel.setText(\r
+                                               Dialog.shortenText(nonEditableText.toUpperCase(), \r
+                                               nonEditableInfoLabel));\r
+                       }\r
+               }\r
+       };\r
+\r
+       private String nonEditableHoverText;\r
+\r
+       private LabelEllipsisListener nonEditableLabelEllipsisListener;\r
+                       \r
+       /**\r
+        * nonEditableInfo is a label displayed underneath a GroupedComposite's \r
+        * input field. For instance, NameComposites display things like name relations,\r
+        * sec. references, etc. here.\r
+        * \r
+        * @param info\r
+        */\r
+       public void setNonEditableInfo(String info) {\r
+               // TODO non editable info should only be drawn once, when everything else is drawn\r
+               info = info.toUpperCase();\r
+               if (nonEditableInfoLabel == null) {\r
+                       nonEditableText = info;\r
+                       nonEditableHoverText = info;\r
+                       \r
+                       nonEditableInfoLabel = new Label(this, SWT.NONE);\r
+                       TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP);\r
+                       // Set indent to viewer ruler's width \r
+                       if (textViewer != null && textViewer.getRulerControl() != null) {\r
+                               // TODO right justify\r
+                               layoutData.indent = NameViewer.RULER_WIDTH;\r
+                       }\r
+                       nonEditableInfoLabel.setLayoutData(layoutData);\r
+                       \r
+\r
+                       \r
+                       nonEditableLabelEllipsisListener = new LabelEllipsisListener(nonEditableInfoLabel) {\r
+                               @Override\r
+                               public String getLabelText() {\r
+                                       return nonEditableText.toUpperCase();\r
+                               }\r
+                       }; \r
+                       nonEditableInfoLabel.addControlListener(nonEditableLabelEllipsisListener);\r
+                       \r
+                       nonEditableInfoHover = new DefaultToolTip(nonEditableInfoLabel);\r
+                       nonEditableInfoHover.setRespectDisplayBounds(true);\r
+                       \r
+               } else {\r
+                       nonEditableText += ", " + info;\r
+                       nonEditableHoverText += "\n" + info;\r
+                       \r
+               }\r
+               nonEditableInfoHover.setText(nonEditableHoverText);\r
+       }\r
+       \r
+       /**\r
+        * If the user entering text requires parsing, call this method and override\r
+        * the method parse().\r
+        */\r
+       protected void createParser() {\r
+               if (textViewer != null) {\r
+                       parseListener = new ParseListener() {\r
+                               @Override\r
+                               public void parse(String text) {\r
+                                       GroupedComposite.this.parse(text);\r
+                               }\r
+                       };\r
+                       textViewer.getTextWidget().addModifyListener(parseListener);\r
+               } else {\r
+                       logger.warn("Can't create parser because textViewer has not been initalized.");\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Supposed to be overridden in implementing classes\r
+        * \r
+        * @param text\r
+        */\r
+       protected void parse(String text) {\r
+               logger.warn("No parse method defined for this composite.");\r
+       }\r
+       \r
+       /**\r
+        * If the user hitting carriage return should cause something to happen -\r
+        * i.e. the creation of a new composite - call this method and override\r
+        * the method handleSplitText().\r
+        */\r
+       protected void createLineBreakListener() {\r
+               if (textViewer != null) {\r
+                       lineBreakListener = new LineBreakListener() {\r
+                               @Override\r
+                               public void handleSplitText(String text) {\r
+                                       GroupedComposite.this.handleSplitText(text);    \r
+                               }\r
+                       };\r
+                       \r
+                       textViewer.getTextWidget().addVerifyListener(lineBreakListener);\r
+                       textViewer.getTextWidget().addKeyListener(lineBreakListener);\r
+               } else {\r
+                       logger.warn("Can't create line break listener because textViewer has not been initalized.");\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * Supposed to be overridden in implementing classes\r
+        * \r
+        * @param text\r
+        */\r
+       protected void handleSplitText(String text) {\r
+               logger.warn("No handleSplitText method defined for this composite.");\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#dispose()\r
+        */\r
+       public void dispose () {\r
+               \r
+               if (dragSource != null) {\r
+                       dragSource.removeDragListener(dragSourceListener);\r
+               }               \r
+               \r
+               if (textViewer != null) {\r
+                       StyledText textWidget = textViewer.getTextWidget();\r
+               \r
+                       if (focusListener != null) {\r
+                               textWidget.removeFocusListener(focusListener);\r
+                       }\r
+                       \r
+                       if (parseListener != null) {\r
+                               textWidget.removeModifyListener(parseListener);\r
+                       }\r
+                       \r
+                       if (lineBreakListener != null) {\r
+                               textWidget.removeVerifyListener(lineBreakListener);\r
+                               textWidget.removeKeyListener(lineBreakListener);\r
+                       }\r
+                       \r
+                       if (borderDecorator != null) {\r
+                               textWidget.removeFocusListener(borderDecorator);\r
+                       }\r
+               }\r
+               \r
+               if (nonEditableInfoLabel != null && nonEditableLabelEllipsisListener != null) {\r
+                       nonEditableInfoLabel.removeControlListener(nonEditableLabelEllipsisListener);\r
+               }\r
+\r
+               super.dispose();\r
+       }\r
+       \r
+       public static final String ELLIPSIS = "...";\r
+       \r
+       /**\r
+        * @param textValue\r
+        * @param control\r
+        * @return\r
+        * @see org.eclipse.jface.dialogs.Dialog#shortenText(String, Control)\r
+        */\r
+       public static String shortenText(String textValue, Control control) {\r
+               if (textValue == null) {\r
+                       return null;\r
+               }\r
+               GC gc = new GC(control);\r
+               int maxWidth = control.getBounds().width;\r
+               int maxExtent = gc.textExtent(textValue).x;\r
+               if (maxExtent < maxWidth) {\r
+                       gc.dispose();\r
+                       return textValue;\r
+               }\r
+               int length = textValue.length();\r
+               int charsToClip = Math.round(0.95f*length * (1 - ((float)maxWidth/maxExtent)));\r
+               \r
+               int end = length - charsToClip;\r
+               while (end > 0) {\r
+                       String s1 = textValue.substring(0, end);\r
+                       String s = s1 + ELLIPSIS;\r
+                       int l = gc.textExtent(s).x;\r
+                       if (l < maxWidth) {\r
+                               gc.dispose();\r
+                               return s;\r
+                       }\r
+                       end--;\r
+               }\r
+               gc.dispose();\r
+               return textValue;\r
+               \r
+       }\r
+       \r
+       abstract class LabelEllipsisListener extends ControlAdapter {\r
+               \r
+               private Label label;\r
+               int width = 0;\r
+\r
+               LabelEllipsisListener(Label label) {\r
+                       this.label = label;\r
+               }\r
+               \r
+               abstract public String getLabelText();\r
+               \r
+               public void controlResized(ControlEvent e) {\r
+                       if (label.getBounds().width == width) {\r
+                               return;\r
+                       }\r
+                       width = label.getBounds().width;\r
+                       if (label.getBounds().width > 0) {\r
+                               label.setText(\r
+//                                             Dialog.shortenText(getLabelText(), label));\r
+                                               shortenText(getLabelText(), label));\r
+                       }\r
+               }\r
+       }\r
+} 
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java
new file mode 100644 (file)
index 0000000..f63684a
--- /dev/null
@@ -0,0 +1,65 @@
+/**\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.editor;\r
+\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\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.TaxonRelationship;\r
+import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditor;\r
+import eu.etaxonomy.taxeditor.editor.images.TaxonImageEditor;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+\r
+/** \r
+ * @author p.ciardelli\r
+ * @created 08.01.2009\r
+ * @version 1.0\r
+ */\r
+public interface IFreeTextElementFactory {\r
+\r
+       /* Taxon name editor elements */\r
+       public Composite createAcceptedTaxon(AbstractTaxonEditor editor);\r
+       \r
+       public Composite createSynonym(TaxonNameEditor editor, Synonym synonym);\r
+\r
+       public Composite createMisappliedName(TaxonNameEditor editor, Taxon misappliedName);\r
+       \r
+       public Composite createHomotypicalGroup(AbstractTaxonEditor editor, HomotypicalGroup group);\r
+       \r
+       public Composite createMisappliedGroup(TaxonNameEditor editor);\r
+       \r
+       public Composite createConceptGroup(TaxonNameEditor editor);\r
+\r
+       public Composite createConcept(TaxonNameEditor editor, TaxonRelationship relationship);\r
+       \r
+       \r
+       /* Taxon description editor elements */\r
+       public Composite createDescriptionLabel(AbstractTaxonEditor editor, TaxonDescription description);\r
+       \r
+       public Composite createDescriptionGroup(AbstractTaxonEditor editor, TaxonDescription description);\r
+       \r
+       public Composite createDescriptionElement(TaxonDescriptionEditor editor, TaxonDescription description, DescriptionElementBase element);\r
+               \r
+       public Composite createDescriptionFeatureGroup(TaxonDescriptionEditor editor, TaxonDescription description, Feature feature);\r
+\r
+       \r
+       /* Taxon images editor elements */\r
+       public Composite createGalleryLabel(AbstractTaxonEditor editor, TaxonDescription imageGallery);\r
+\r
+       public Composite createImageElement(TaxonImageEditor editor, ImageFile imageFile);\r
+\r
+\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java
new file mode 100644 (file)
index 0000000..1172880
--- /dev/null
@@ -0,0 +1,21 @@
+/**\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.editor;\r
+\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 21.11.2008\r
+ * @version 1.0\r
+ */\r
+public interface IHasPropertySource {\r
+       public IPropertySource getPropertySource();\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineBreakListener.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineBreakListener.java
new file mode 100644 (file)
index 0000000..0f63607
--- /dev/null
@@ -0,0 +1,122 @@
+/**\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.editor;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Scanner;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.KeyListener;\r
+import org.eclipse.swt.events.VerifyEvent;\r
+import org.eclipse.swt.events.VerifyListener;\r
+\r
+/**\r
+ * Checks text entered into a StyledText widget for line breaks, sends\r
+ * split text to abstract method handleSplitText().\r
+ *  <p>\r
+ * VerifyListener interface methods break up the text into lines. Each line is sent individually\r
+ * to the handleSplitText() method when the KeyListener interface method keyReleased() is called. \r
+ * This is because if the StyledText widget is disposed before the key is released, an SWT \r
+ * exception occurs.\r
+ * <p>\r
+ * The listener should be set on the StyledText widget as follows:\r
+ * <code><pre>\r
+ *             StyledText styledText = new SourceViewer().getTextWidget();                     \r
+ *             LineBreakListener lineBreakListener = new LineBreakListener() {\r
+ *                     public void handleSplitText(String text) {\r
+ *                             ... some operation ...\r
+ *                     }\r
+ *             };\r
+ *             \r
+ *             styledText.addVerifyListener(lineBreakListener);\r
+ *             styledText.addKeyListener(lineBreakListener);\r
+ * </pre></code>\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public abstract class LineBreakListener implements VerifyListener, KeyListener {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineBreakListener.class);\r
+       \r
+       Collection<String> splitTexts;\r
+       \r
+       /** \r
+        * Checks for 3 conditions of name viewer text:\r
+        *   1) no line breaks in text\r
+        *   2) line break at the end of the text\r
+        *   3) line break in the middle of the text\r
+        *   \r
+        * @see org.eclipse.swt.events.VerifyListener#verifyText(org.eclipse.swt.events.VerifyEvent)\r
+        */\r
+       public void verifyText(VerifyEvent e) {\r
+                                               \r
+               String verifyText = e.text;\r
+               \r
+               StyledText styledText = (StyledText) e.widget;\r
+               String widgetText = styledText.getText(); \r
+               int cursorPosition = styledText.getCaretOffset();\r
+               \r
+               // If no line break in verifyText, Parse text normally\r
+               if (!verifyText.contains(System.getProperty("line.separator"))) {\r
+                       return;\r
+               }\r
+                               \r
+               // Don't add verifyText without further processing\r
+               e.doit = false;\r
+               \r
+               // Initialize split text collection\r
+               splitTexts = new ArrayList<String>();\r
+               \r
+               // If user has entered return at the end of the line,\r
+               //  make a new, empty synonym\r
+               if (widgetText.length() == cursorPosition &&\r
+                               verifyText.equals(System.getProperty("line.separator"))) {\r
+                       splitTexts.add("");\r
+                       return;\r
+               }\r
+               \r
+               // Concatenate old and new texts\r
+               String textForSplitting = widgetText.substring(0, cursorPosition) \r
+                               + verifyText\r
+                               + widgetText.substring(cursorPosition);\r
+               \r
+               // Split on line breaks\r
+               Scanner scanner = new Scanner( textForSplitting );\r
+               scanner.useDelimiter (System.getProperty("line.separator"));\r
+               \r
+               // Put first string into name viewer\r
+               styledText.setText(scanner.next());     \r
+               \r
+               // Start new synonyms with the rest\r
+               while (scanner.hasNext()) {\r
+                       splitTexts.add(scanner.next());\r
+               }\r
+       }\r
+       \r
+       \r
+       public void keyPressed(KeyEvent e) {}\r
+\r
+       \r
+       public void keyReleased(KeyEvent e) {\r
+               if (splitTexts != null) {\r
+                       for (String text : splitTexts) {\r
+                               handleSplitText(text);\r
+                       }\r
+                       splitTexts = null;\r
+               }\r
+       }\r
+       \r
+       abstract public void handleSplitText(String text);\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java
new file mode 100644 (file)
index 0000000..4280a4c
--- /dev/null
@@ -0,0 +1,176 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.source.Annotation;\r
+import org.eclipse.jface.text.source.AnnotationPainter.SquigglesStrategy;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.GC;\r
+import org.eclipse.swt.graphics.Point;\r
+\r
+/**\r
+ * Adds ability to draw multiline squiggles when a <code>StyledText</code>\r
+ * contains line-wrapping.\r
+ *  \r
+ * @author p.ciardelli\r
+ * @created 21.11.2008\r
+ * @version 1.0\r
+ */\r
+public class LineWrapSquigglesStrategy extends SquigglesStrategy {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineWrapSquigglesStrategy.class);\r
+       \r
+       public static final String ID = "linewrap_squigglesstrategy";\r
+\r
+       private GC gc;\r
+\r
+       private Color color;\r
+\r
+       private int lineHeight;\r
+\r
+       private int baseline;\r
+\r
+       private StyledText textWidget;\r
+\r
+       private int offset;\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.source.AnnotationPainter$SquigglesStrategy#draw(org.eclipse.jface.text.source.Annotation, org.eclipse.swt.graphics.GC, org.eclipse.swt.custom.StyledText, int, int, org.eclipse.swt.graphics.Color)\r
+        */\r
+       public void draw(Annotation annotation, GC gc, StyledText textWidget, int offset, int length, Color color) {\r
+               \r
+               this.gc = gc;\r
+               this.color = color;\r
+               this.textWidget = textWidget;\r
+               this.offset = offset;\r
+               \r
+               if (gc != null) {\r
+\r
+                       if (length < 1)\r
+                               return;\r
+                       \r
+                       baseline = textWidget.getBaseline(offset);\r
+                       lineHeight = textWidget.getLineHeight(offset);\r
+                       \r
+                       Point right = null;\r
+                       int offsetNewline = offset;\r
+                       int end = offset + length;\r
+                                               \r
+                       // Go through the length one character at a time\r
+                       for (int i = offset; i <= end; i++) {\r
+                               \r
+                               // If the y of the current offset is different from that of the last offset,\r
+                               //      we are on a new line\r
+                               if (right != null && textWidget.getLocationAtOffset(i).y > right.y) {\r
+                                                                               \r
+                                       // Draw a line of squigglies\r
+                                       drawPolyline(offsetNewline, right);\r
+\r
+                                       // Save offset of line break\r
+                                       offsetNewline = i;\r
+                               }\r
+                                                               \r
+                               // Get x,y position in case the next char is on a new line\r
+                               right = textWidget.getLocationAtOffset(i);                                      \r
+                                       \r
+                       }\r
+                       \r
+                       // Draw the last line of squigglies \r
+                       drawPolyline(offsetNewline, right);\r
+\r
+               } else {\r
+                       textWidget.redrawRange(offset, length, true);\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * Draws a squiggly line from the offset <code>offsetNewline</code> to\r
+        * the x,y coordinates at <code>right</code>.\r
+        * \r
+        * @param offsetNewline\r
+        * @param right\r
+        */\r
+       private void drawPolyline(int offsetNewline, Point right) {\r
+\r
+               // Get offset at last line break\r
+               Point left = textWidget.getLocationAtOffset(offsetNewline);\r
+               \r
+               // Prevent solitary red dot from appearing at EOL\r
+               if (left.equals(right)) {\r
+                       return;\r
+               }\r
+               \r
+               // Only start drawing from 0 if not on the first line\r
+               if (offsetNewline != offset) {\r
+                       \r
+                       // Offset.x is at the end of the first letter of the new line, not at 0\r
+                       left.x = 0;\r
+               }\r
+               \r
+               int[] polyline= computePolyline(left, right, baseline, lineHeight);\r
+\r
+               gc.setLineWidth(0); // NOTE: 0 means width is 1 but with optimized performance\r
+               gc.setLineStyle(SWT.LINE_SOLID);\r
+               gc.setForeground(color);\r
+               gc.drawPolyline(polyline);\r
+       }\r
+\r
+       /**\r
+        * Copied verbatim from {@link org.eclipse.jface.text.source.AnnotationPainter$SquigglesStrategy} \r
+        * \r
+        * @see org.eclipse.jface.text.source.AnnotationPainter$SquigglesStrategy\r
+        *  \r
+        * @param left\r
+        * @param right\r
+        * @param baseline\r
+        * @param lineHeight\r
+        * @return\r
+        */\r
+       private int[] computePolyline(Point left, Point right, int baseline, int lineHeight) {\r
+\r
+               final int WIDTH= 4; // must be even\r
+               final int HEIGHT= 2; // can be any number\r
+\r
+               int peaks= (right.x - left.x) / WIDTH;\r
+               if (peaks == 0 && right.x - left.x > 2)\r
+                       peaks= 1;\r
+\r
+               int leftX= left.x;\r
+\r
+               // compute (number of point) * 2\r
+               int length= ((2 * peaks) + 1) * 2;\r
+               if (length < 0)\r
+                       return new int[0];\r
+\r
+               int[] coordinates= new int[length];\r
+\r
+               // cache peeks' y-coordinates\r
+               int top= left.y + Math.min(baseline + 1, lineHeight - HEIGHT - 1);\r
+               int bottom= top + HEIGHT;\r
+\r
+               // populate array with peek coordinates\r
+               for (int i= 0; i < peaks; i++) {\r
+                       int index= 4 * i;\r
+                       coordinates[index]= leftX + (WIDTH * i);\r
+                       coordinates[index+1]= bottom;\r
+                       coordinates[index+2]= coordinates[index] + WIDTH/2;\r
+                       coordinates[index+3]= top;\r
+               }\r
+\r
+               // the last down flank is missing\r
+               coordinates[length-2]= Math.min(Math.max(0, right.x - 1), left.x + (WIDTH * peaks));\r
+               coordinates[length-1]= bottom;\r
+\r
+               return coordinates;\r
+       }\r
+}\r
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSupport.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSupport.java
new file mode 100644 (file)
index 0000000..d7af8b5
--- /dev/null
@@ -0,0 +1,85 @@
+/**\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.editor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.TextViewer;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+\r
+/**\r
+ * Checks whether the ScrolledForm a TextViewer is on needs to be\r
+ *  redrawn because of a new line break or the removal of an existing\r
+ *  one ...\r
+ *  <p>\r
+ *  ... in theory, anyway. Until I figure out how to detect a word wrap,\r
+ *   the ScrolledForm is redrawn with every modify event. \r
+ * \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class LineWrapSupport {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineWrapSupport.class);\r
+       \r
+       ModifyListener listener = new LineWrapListener();\r
+       int lineCount;\r
+\r
+       private StyledText textWidget;\r
+       private ScrolledForm scrolledForm;\r
+\r
+       private TextViewer viewer;\r
+       \r
+       public LineWrapSupport(TextViewer viewer, IManagedForm form) {\r
+               \r
+               if (viewer == null) {\r
+                       throw new IllegalArgumentException(\r
+                                       "The provided TextViewer object is null.");\r
+               }\r
+               \r
+               this.viewer = viewer;\r
+               \r
+               textWidget = viewer.getTextWidget();\r
+               textWidget.addModifyListener(listener);\r
+                               \r
+               this.lineCount = textWidget.getLinePixel(textWidget.getLineCount());\r
+               this.scrolledForm = form.getForm();\r
+       }\r
+       \r
+       /**\r
+        * Redraws the scrolledForm if a line wrap is detected. \r
+        */\r
+       private void checkLineCount() {\r
+\r
+               boolean lineWrapDetected = true;\r
+               if (lineWrapDetected ) {\r
+                       scrolledForm.getBody().layout();\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * Calls <code>checkLineCount()</code> on a modify event.\r
+        * \r
+        * @author p.ciardelli\r
+        * @created 21.05.2008\r
+        * @version 1.0\r
+        */\r
+       class LineWrapListener implements ModifyListener {\r
+\r
+               public void modifyText(ModifyEvent e) {\r
+                       checkLineCount();\r
+               }\r
+       }\r
+}
\ No newline at end of file
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MenuConstants.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MenuConstants.java
new file mode 100644 (file)
index 0000000..768052b
--- /dev/null
@@ -0,0