Project

General

Profile

« Previous | Next » 

Revision 362b3a0c

Added by Patrick Plitzner over 4 years ago

fix #8235 Create separate menu for term tree editors for each type

View differences:

eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle.properties
184 184
wizard.name.23 = Excel Distribution Data Update
185 185
wizard.name.24 = RIS Reference
186 186
command.label.25 = Import Preferences
187
partdescriptor.label.featureTreeEditor = Term Tree Editor
187
partdescriptor.label.featureTreeEditor = Feature Tree Editor
188 188
command.name.OPEN_REFERENCING_OBJECTS_VIEW = Open Referencing Objects View
189 189
extension.name.1 = Store Workbench Model
190 190
page.name.21 = Distribution Editor
......
284 284
page.name.104 = Distribution Data
285 285
page.name.105 = Vocabularies and Status
286 286

  
287
page.name.sources = Sources
287
page.name.sources = Sources
288
partdescriptor.label.4 = Character Tree Editor
289
partdescriptor.label.5 = Structure Tree Editor
290
partdescriptor.label.6 = Property Tree Editor
291
handledmenuitem.label.24 = Feature
292
handledmenuitem.label.25 = Character
293
handledmenuitem.label.26 = Structure
294
handledmenuitem.label.27 = Property
eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle_de.properties
184 184
wizard.name.23 = Excel Verbreitungsdaten Update
185 185
wizard.name.24 = RIS Referenzen
186 186
command.label.25 = Import Pr?ferenzen
187
partdescriptor.label.featureTreeEditor = Termbaum-Editor
187
partdescriptor.label.featureTreeEditor = Merkmalsbaum-Editor
188 188
command.name.OPEN_REFERENCING_OBJECTS_VIEW = ?ffne Referenzierende Objekte
189 189
extension.name.1 = Store Workbench Model
190 190
page.name.21 = Verbreitungs-Editor
......
284 284
page.name.104 = Verbreitungsdaten
285 285
page.name.105 = Vokabulare und Status
286 286

  
287
page.name.sources = Quellen
287
page.name.sources = Quellen
288
partdescriptor.label.4 = Character-Baum-Editor
289
partdescriptor.label.5 = Struktur-Baum-Editor
290
partdescriptor.label.6 = Property-Baum-Editor
291
handledmenuitem.label.24 = Merkmal
292
handledmenuitem.label.25 = Character
293
handledmenuitem.label.26 = Struktur
294
handledmenuitem.label.27 = Property
eu.etaxonomy.taxeditor.store/fragment.e4xmi
7 7
      <tags>nonRestore</tags>
8 8
      <handlers xmi:id="_gbMXAL-rEeegz7IDD8MJaw" elementId="eu.etaxonomy.taxeditor.view.sessions.InspectSessionHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.sessions.InspectSessionHandler" command="_dQ0swL-rEeegz7IDD8MJaw"/>
9 9
    </elements>
10
    <elements xsi:type="basic:PartDescriptor" xmi:id="_J-3UEEqgEeeN-dEYnw7m3g" elementId="eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor" label="%partdescriptor.label.featureTreeEditor" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor">
11
      <tags>nonRestore</tags>
12
      <handlers xmi:id="_DYhGACHXEeiP8eNo0PEm1g" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
13
      <handlers xmi:id="_Bb0TwCFeEeiVXriJfxPIuA" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandlers" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandler" command="_3mqzkCFdEeiVXriJfxPIuA"/>
14
      <handlers xmi:id="_VSc2UGcqEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" command="_I_yx4GcqEee0qLTtA2ZpVQ"/>
15
      <handlers xmi:id="_3wq0cGceEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" command="_oftL0GceEee0qLTtA2ZpVQ"/>
16
      <handlers xmi:id="_DcmpgPhnEei8uPv-H2wqnw" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" command="_xyZ4oPhmEei8uPv-H2wqnw"/>
17
      <handlers xmi:id="_LL9nkI51Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" command="_BjUSUI51Eem9zru2SAuoRA"/>
18
      <handlers xmi:id="_u5RGoI53Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" command="_sKucwI53Eem9zru2SAuoRA"/>
19
      <menus xsi:type="menu:PopupMenu" xmi:id="__Jwh4GceEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.popupmenu.featureTreeEditor">
20
        <children xsi:type="menu:HandledMenuItem" xmi:id="_GuuM0CHXEeiP8eNo0PEm1g" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newfeaturetree" label="%handledmenuitem.label.1" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
21
        <children xsi:type="menu:Menu" xmi:id="_AJdcEI54Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.store.menu.new" label="%menu.label.5" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png">
22
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_DuXtQI54Eem9zru2SAuoRA" coreExpressionId="isShowExperimentalFeatures"/>
23
          <children xsi:type="menu:HandledMenuItem" xmi:id="_4jFA4I50Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newStructureTree" label="%handledmenuitem.label.20" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_BjUSUI51Eem9zru2SAuoRA">
24
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_FJyiYI54Eem9zru2SAuoRA" coreExpressionId="isShowExperimentalFeatures"/>
25
          </children>
26
          <children xsi:type="menu:HandledMenuItem" xmi:id="_7yI2gI53Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newPropertyTree" label="%handledmenuitem.label.21" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_sKucwI53Eem9zru2SAuoRA">
27
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_FdhWsI54Eem9zru2SAuoRA" coreExpressionId="isShowExperimentalFeatures"/>
28
          </children>
29
        </children>
30
        <children xsi:type="menu:MenuSeparator" xmi:id="_eIB1kCHXEeiP8eNo0PEm1g" elementId="eu.etaxonomy.taxeditor.store.menuseparator.5"/>
31
        <children xsi:type="menu:HandledMenuItem" xmi:id="_jr4E0Be0EeiXusClKZjycQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addchildfeature" label="%handledmenuitem.label.2" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_aPYxsBezEeiXusClKZjycQ"/>
32
        <children xsi:type="menu:HandledMenuItem" xmi:id="_eWBz0GcjEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addFeature" label="%handledmenuitem.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_oftL0GceEee0qLTtA2ZpVQ"/>
33
        <children xsi:type="menu:MenuSeparator" xmi:id="_XtPjcNjyEeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.menuseparator.8"/>
34
        <children xsi:type="menu:HandledMenuItem" xmi:id="_G_IOENj3EeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.paste" label="%handledmenuitem.label.12" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/paste_edit.png" command="_xDk5kNjyEeidDMMI9xTsbQ"/>
35
        <children xsi:type="menu:HandledMenuItem" xmi:id="_QXkWYNjyEeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.copy" label="%handledmenuitem.label.13" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/copy_edit.png" command="_cMyQ4NjyEeidDMMI9xTsbQ"/>
36
        <children xsi:type="menu:MenuSeparator" xmi:id="_So5f0NjyEeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.menuseparator.7"/>
37
        <children xsi:type="menu:Menu" xmi:id="_jPawUPhmEei8uPv-H2wqnw" elementId="eu.etaxonomy.taxeditor.store.menu.export" label="%menu.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif">
38
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_QGF5kCRZEemBIp_HwXtqoA" coreExpressionId="isFeatureTree"/>
39
          <children xsi:type="menu:HandledMenuItem" xmi:id="_7vaEcGcqEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTreeOwl" label="%handledmenuitem.label.14" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_xyZ4oPhmEei8uPv-H2wqnw">
40
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-91IQGcqEee0qLTtA2ZpVQ" coreExpressionId="isShowExperimentalFeatures"/>
41
          </children>
42
          <children xsi:type="menu:HandledMenuItem" xmi:id="_qcmvwPhmEei8uPv-H2wqnw" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTree" label="%handledmenuitem.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_I_yx4GcqEee0qLTtA2ZpVQ">
43
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_qcmvwfhmEei8uPv-H2wqnw" coreExpressionId="isShowExperimentalFeatures"/>
44
          </children>
45
        </children>
46
        <children xsi:type="menu:MenuSeparator" xmi:id="_TFRL0CFgEeiVXriJfxPIuA" elementId="eu.etaxonomy.taxeditor.store.menuseparator.0"/>
47
        <children xsi:type="menu:HandledMenuItem" xmi:id="_Beb6QGcfEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.removeFeature" label="%handledmenuitem.label.5" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_fNBtQGcjEee0qLTtA2ZpVQ"/>
48
        <children xsi:type="menu:HandledMenuItem" xmi:id="_pw1FICFdEeiVXriJfxPIuA" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.deletefeaturetree" label="%handledmenuitem.label.6" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_3mqzkCFdEeiVXriJfxPIuA"/>
49
      </menus>
50
    </elements>
51 10
    <elements xsi:type="basic:PartDescriptor" xmi:id="_zTXhUGvBEeeNmdqhxF1CnA" elementId="eu.etaxonomy.taxeditor.view.e4.details.DetailsPartE4" label="%view.name.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/accessories-text-editor.png" closeable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.e4.details.DetailsPartE4"/>
52 11
    <elements xsi:type="basic:PartDescriptor" xmi:id="_coTYkH3eEeeVL5aZ55YsWA" elementId="eu.etaxonomy.taxeditor.view.e4.supplementaldata.SupplementalDataPartE4" label="%view.name.3" closeable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.e4.supplementaldata.SupplementalDataPartE4"/>
53 12
    <elements xsi:type="basic:PartDescriptor" xmi:id="_eKzREIcpEee-HITNnU9cVw" elementId="eu.etaxonomy.taxeditor.view.datasource" label="%view.name" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/system-file-manager.png" closeable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4">
......
97 56
    <elements xsi:type="basic:PartDescriptor" xmi:id="_XV6gkEbOEeiER_VRS0L7wA" elementId="eu.etaxonomy.taxeditor.view.webimport.termimport.GfBioTerminologyImportPart" label="%partdescriptor.label.1" tooltip="%partdescriptor.tooltip.1" closeable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.webimport.termimport.GfBioTerminologyImportPart"/>
98 57
    <elements xsi:type="basic:PartDescriptor" xmi:id="_namYwB7xEemDKJyLc5CJfQ" elementId="eu.etaxonomy.taxeditor.store.partdescriptor.termsearch" label="%partdescriptor.label.2" closeable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.search.facet.term.TermSearch"/>
99 58
    <elements xsi:type="basic:PartDescriptor" xmi:id="_mbegMDNMEemOn_75IU-Tvg" elementId="eu.etaxonomy.taxeditor.store.partdescriptor.occurencesearch" label="%partdescriptor.label.3" closeable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.search.facet.occurrence.OccurrenceSearch"/>
59
    <elements xsi:type="basic:PartDescriptor" xmi:id="_-y1CcMKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor" label="%partdescriptor.label.featureTreeEditor" tooltip="%partdescriptor.label.featureTreeEditor" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor">
60
      <tags>nonRestore</tags>
61
      <handlers xmi:id="_-y1CccKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
62
      <handlers xmi:id="_-y1CcsKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandlers" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandler" command="_3mqzkCFdEeiVXriJfxPIuA"/>
63
      <handlers xmi:id="_-y1Cc8KPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" command="_I_yx4GcqEee0qLTtA2ZpVQ"/>
64
      <handlers xmi:id="_-y1CdMKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" command="_oftL0GceEee0qLTtA2ZpVQ"/>
65
      <handlers xmi:id="_-y1CdcKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" command="_xyZ4oPhmEei8uPv-H2wqnw"/>
66
      <handlers xmi:id="_-y1CdsKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" command="_BjUSUI51Eem9zru2SAuoRA"/>
67
      <handlers xmi:id="_-y1Cd8KPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" command="_sKucwI53Eem9zru2SAuoRA"/>
68
      <menus xsi:type="menu:PopupMenu" xmi:id="_-y1CeMKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.popupmenu.featureTreeEditor">
69
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CecKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newfeaturetree" label="%handledmenuitem.label.1" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
70
        <children xsi:type="menu:Menu" xmi:id="_-y1CesKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.new" label="%menu.label.5" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png">
71
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-y1Ce8KPEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
72
          <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CfMKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newStructureTree" label="%handledmenuitem.label.20" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_BjUSUI51Eem9zru2SAuoRA">
73
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-y1CfcKPEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
74
          </children>
75
          <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CfsKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newPropertyTree" label="%handledmenuitem.label.21" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_sKucwI53Eem9zru2SAuoRA">
76
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-y1Cf8KPEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
77
          </children>
78
        </children>
79
        <children xsi:type="menu:MenuSeparator" xmi:id="_-y1CgMKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.5"/>
80
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CgcKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addchildfeature" label="%handledmenuitem.label.2" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_aPYxsBezEeiXusClKZjycQ"/>
81
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CgsKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addFeature" label="%handledmenuitem.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_oftL0GceEee0qLTtA2ZpVQ"/>
82
        <children xsi:type="menu:MenuSeparator" xmi:id="_-y1Cg8KPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.8"/>
83
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1ChMKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.paste" label="%handledmenuitem.label.12" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/paste_edit.png" command="_xDk5kNjyEeidDMMI9xTsbQ"/>
84
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1ChcKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.copy" label="%handledmenuitem.label.13" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/copy_edit.png" command="_cMyQ4NjyEeidDMMI9xTsbQ"/>
85
        <children xsi:type="menu:MenuSeparator" xmi:id="_-y1ChsKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.7"/>
86
        <children xsi:type="menu:Menu" xmi:id="_-y1Ch8KPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.export" label="%menu.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif">
87
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-y1CiMKPEem1vZq1LletZg" coreExpressionId="isFeatureTree"/>
88
          <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CicKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTreeOwl" label="%handledmenuitem.label.14" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_xyZ4oPhmEei8uPv-H2wqnw">
89
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-y1CisKPEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
90
          </children>
91
          <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1Ci8KPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTree" label="%handledmenuitem.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_I_yx4GcqEee0qLTtA2ZpVQ">
92
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-y1CjMKPEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
93
          </children>
94
        </children>
95
        <children xsi:type="menu:MenuSeparator" xmi:id="_-y1CjcKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.0"/>
96
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1CjsKPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.removeFeature" label="%handledmenuitem.label.5" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_fNBtQGcjEee0qLTtA2ZpVQ"/>
97
        <children xsi:type="menu:HandledMenuItem" xmi:id="_-y1Cj8KPEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.deletefeaturetree" label="%handledmenuitem.label.6" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_3mqzkCFdEeiVXriJfxPIuA"/>
98
      </menus>
99
    </elements>
100
    <elements xsi:type="basic:PartDescriptor" xmi:id="_J-3UEEqgEeeN-dEYnw7m3g" elementId="eu.etaxonomy.taxeditor.featuretree.e4.CharacterTreeEditor" label="%partdescriptor.label.4" tooltip="%partdescriptor.label.4" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.CharacterTreeEditor">
101
      <tags>nonRestore</tags>
102
      <handlers xmi:id="_DYhGACHXEeiP8eNo0PEm1g" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
103
      <handlers xmi:id="_Bb0TwCFeEeiVXriJfxPIuA" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandlers" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandler" command="_3mqzkCFdEeiVXriJfxPIuA"/>
104
      <handlers xmi:id="_VSc2UGcqEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" command="_I_yx4GcqEee0qLTtA2ZpVQ"/>
105
      <handlers xmi:id="_3wq0cGceEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" command="_oftL0GceEee0qLTtA2ZpVQ"/>
106
      <handlers xmi:id="_DcmpgPhnEei8uPv-H2wqnw" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" command="_xyZ4oPhmEei8uPv-H2wqnw"/>
107
      <handlers xmi:id="_LL9nkI51Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" command="_BjUSUI51Eem9zru2SAuoRA"/>
108
      <handlers xmi:id="_u5RGoI53Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" command="_sKucwI53Eem9zru2SAuoRA"/>
109
      <menus xsi:type="menu:PopupMenu" xmi:id="__Jwh4GceEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.popupmenu.featureTreeEditor">
110
        <children xsi:type="menu:HandledMenuItem" xmi:id="_GuuM0CHXEeiP8eNo0PEm1g" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newfeaturetree" label="%handledmenuitem.label.1" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
111
        <children xsi:type="menu:Menu" xmi:id="_AJdcEI54Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.store.menu.new" label="%menu.label.5" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png">
112
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_DuXtQI54Eem9zru2SAuoRA" coreExpressionId="isShowExperimentalFeatures"/>
113
          <children xsi:type="menu:HandledMenuItem" xmi:id="_4jFA4I50Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newStructureTree" label="%handledmenuitem.label.20" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_BjUSUI51Eem9zru2SAuoRA">
114
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_FJyiYI54Eem9zru2SAuoRA" coreExpressionId="isShowExperimentalFeatures"/>
115
          </children>
116
          <children xsi:type="menu:HandledMenuItem" xmi:id="_7yI2gI53Eem9zru2SAuoRA" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newPropertyTree" label="%handledmenuitem.label.21" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_sKucwI53Eem9zru2SAuoRA">
117
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_FdhWsI54Eem9zru2SAuoRA" coreExpressionId="isShowExperimentalFeatures"/>
118
          </children>
119
        </children>
120
        <children xsi:type="menu:MenuSeparator" xmi:id="_eIB1kCHXEeiP8eNo0PEm1g" elementId="eu.etaxonomy.taxeditor.store.menuseparator.5"/>
121
        <children xsi:type="menu:HandledMenuItem" xmi:id="_jr4E0Be0EeiXusClKZjycQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addchildfeature" label="%handledmenuitem.label.2" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_aPYxsBezEeiXusClKZjycQ"/>
122
        <children xsi:type="menu:HandledMenuItem" xmi:id="_eWBz0GcjEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addFeature" label="%handledmenuitem.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_oftL0GceEee0qLTtA2ZpVQ"/>
123
        <children xsi:type="menu:MenuSeparator" xmi:id="_XtPjcNjyEeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.menuseparator.8"/>
124
        <children xsi:type="menu:HandledMenuItem" xmi:id="_G_IOENj3EeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.paste" label="%handledmenuitem.label.12" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/paste_edit.png" command="_xDk5kNjyEeidDMMI9xTsbQ"/>
125
        <children xsi:type="menu:HandledMenuItem" xmi:id="_QXkWYNjyEeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.copy" label="%handledmenuitem.label.13" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/copy_edit.png" command="_cMyQ4NjyEeidDMMI9xTsbQ"/>
126
        <children xsi:type="menu:MenuSeparator" xmi:id="_So5f0NjyEeidDMMI9xTsbQ" elementId="eu.etaxonomy.taxeditor.store.menuseparator.7"/>
127
        <children xsi:type="menu:Menu" xmi:id="_jPawUPhmEei8uPv-H2wqnw" elementId="eu.etaxonomy.taxeditor.store.menu.export" label="%menu.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif">
128
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_QGF5kCRZEemBIp_HwXtqoA" coreExpressionId="isFeatureTree"/>
129
          <children xsi:type="menu:HandledMenuItem" xmi:id="_7vaEcGcqEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTreeOwl" label="%handledmenuitem.label.14" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_xyZ4oPhmEei8uPv-H2wqnw">
130
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_-91IQGcqEee0qLTtA2ZpVQ" coreExpressionId="isShowExperimentalFeatures"/>
131
          </children>
132
          <children xsi:type="menu:HandledMenuItem" xmi:id="_qcmvwPhmEei8uPv-H2wqnw" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTree" label="%handledmenuitem.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_I_yx4GcqEee0qLTtA2ZpVQ">
133
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_qcmvwfhmEei8uPv-H2wqnw" coreExpressionId="isShowExperimentalFeatures"/>
134
          </children>
135
        </children>
136
        <children xsi:type="menu:MenuSeparator" xmi:id="_TFRL0CFgEeiVXriJfxPIuA" elementId="eu.etaxonomy.taxeditor.store.menuseparator.0"/>
137
        <children xsi:type="menu:HandledMenuItem" xmi:id="_Beb6QGcfEee0qLTtA2ZpVQ" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.removeFeature" label="%handledmenuitem.label.5" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_fNBtQGcjEee0qLTtA2ZpVQ"/>
138
        <children xsi:type="menu:HandledMenuItem" xmi:id="_pw1FICFdEeiVXriJfxPIuA" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.deletefeaturetree" label="%handledmenuitem.label.6" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_3mqzkCFdEeiVXriJfxPIuA"/>
139
      </menus>
140
    </elements>
141
    <elements xsi:type="basic:PartDescriptor" xmi:id="_D2OD0MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.StructureTreeEditor" label="%partdescriptor.label.5" tooltip="%partdescriptor.label.5" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.StructureTreeEditor">
142
      <tags>nonRestore</tags>
143
      <handlers xmi:id="_D2OD0cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
144
      <handlers xmi:id="_D2OD0sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandlers" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandler" command="_3mqzkCFdEeiVXriJfxPIuA"/>
145
      <handlers xmi:id="_D2OD08KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" command="_I_yx4GcqEee0qLTtA2ZpVQ"/>
146
      <handlers xmi:id="_D2OD1MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" command="_oftL0GceEee0qLTtA2ZpVQ"/>
147
      <handlers xmi:id="_D2OD1cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" command="_xyZ4oPhmEei8uPv-H2wqnw"/>
148
      <handlers xmi:id="_D2OD1sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" command="_BjUSUI51Eem9zru2SAuoRA"/>
149
      <handlers xmi:id="_D2OD18KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" command="_sKucwI53Eem9zru2SAuoRA"/>
150
      <menus xsi:type="menu:PopupMenu" xmi:id="_D2OD2MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.popupmenu.featureTreeEditor">
151
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD2cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newfeaturetree" label="%handledmenuitem.label.1" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
152
        <children xsi:type="menu:Menu" xmi:id="_D2OD2sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.new" label="%menu.label.5" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png">
153
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_D2OD28KQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
154
          <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD3MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newStructureTree" label="%handledmenuitem.label.20" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_BjUSUI51Eem9zru2SAuoRA">
155
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_D2OD3cKQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
156
          </children>
157
          <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD3sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newPropertyTree" label="%handledmenuitem.label.21" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_sKucwI53Eem9zru2SAuoRA">
158
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_D2OD38KQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
159
          </children>
160
        </children>
161
        <children xsi:type="menu:MenuSeparator" xmi:id="_D2OD4MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.5"/>
162
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD4cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addchildfeature" label="%handledmenuitem.label.2" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_aPYxsBezEeiXusClKZjycQ"/>
163
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD4sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addFeature" label="%handledmenuitem.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_oftL0GceEee0qLTtA2ZpVQ"/>
164
        <children xsi:type="menu:MenuSeparator" xmi:id="_D2OD48KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.8"/>
165
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD5MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.paste" label="%handledmenuitem.label.12" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/paste_edit.png" command="_xDk5kNjyEeidDMMI9xTsbQ"/>
166
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD5cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.copy" label="%handledmenuitem.label.13" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/copy_edit.png" command="_cMyQ4NjyEeidDMMI9xTsbQ"/>
167
        <children xsi:type="menu:MenuSeparator" xmi:id="_D2OD5sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.7"/>
168
        <children xsi:type="menu:Menu" xmi:id="_D2OD58KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.export" label="%menu.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif">
169
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_D2OD6MKQEem1vZq1LletZg" coreExpressionId="isFeatureTree"/>
170
          <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD6cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTreeOwl" label="%handledmenuitem.label.14" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_xyZ4oPhmEei8uPv-H2wqnw">
171
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_D2OD6sKQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
172
          </children>
173
          <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD68KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTree" label="%handledmenuitem.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_I_yx4GcqEee0qLTtA2ZpVQ">
174
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_D2OD7MKQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
175
          </children>
176
        </children>
177
        <children xsi:type="menu:MenuSeparator" xmi:id="_D2OD7cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.0"/>
178
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD7sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.removeFeature" label="%handledmenuitem.label.5" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_fNBtQGcjEee0qLTtA2ZpVQ"/>
179
        <children xsi:type="menu:HandledMenuItem" xmi:id="_D2OD78KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.deletefeaturetree" label="%handledmenuitem.label.6" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_3mqzkCFdEeiVXriJfxPIuA"/>
180
      </menus>
181
    </elements>
182
    <elements xsi:type="basic:PartDescriptor" xmi:id="_HJt04MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.PropertyTreeEditor" label="%partdescriptor.label.6" tooltip="%partdescriptor.label.6" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.PropertyTreeEditor">
183
      <tags>nonRestore</tags>
184
      <handlers xmi:id="_HJt04cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateFeatureTreeHandler" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
185
      <handlers xmi:id="_HJt04sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandlers" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.RemoveFeatureTreeHandler" command="_3mqzkCFdEeiVXriJfxPIuA"/>
186
      <handlers xmi:id="_HJt048KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportWordHandler" command="_I_yx4GcqEee0qLTtA2ZpVQ"/>
187
      <handlers xmi:id="_HJt05MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.AddFeatureHandler" command="_oftL0GceEee0qLTtA2ZpVQ"/>
188
      <handlers xmi:id="_HJt05cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.FeatureTreeExportOntologyHandler" command="_xyZ4oPhmEei8uPv-H2wqnw"/>
189
      <handlers xmi:id="_HJt05sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreateStructureTreeHandler" command="_BjUSUI51Eem9zru2SAuoRA"/>
190
      <handlers xmi:id="_HJt058KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.featuretree.e4.handler.CreatePropertyTreeHandler" command="_sKucwI53Eem9zru2SAuoRA"/>
191
      <menus xsi:type="menu:PopupMenu" xmi:id="_HJt06MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.popupmenu.featureTreeEditor">
192
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt06cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newfeaturetree" label="%handledmenuitem.label.1" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_AJtnsCHXEeiP8eNo0PEm1g"/>
193
        <children xsi:type="menu:Menu" xmi:id="_HJt06sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.new" label="%menu.label.5" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png">
194
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_HJt068KQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
195
          <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt07MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newStructureTree" label="%handledmenuitem.label.20" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_BjUSUI51Eem9zru2SAuoRA">
196
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_HJt07cKQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
197
          </children>
198
          <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt07sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.newPropertyTree" label="%handledmenuitem.label.21" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/new_wiz.png" command="_sKucwI53Eem9zru2SAuoRA">
199
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_HJt078KQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
200
          </children>
201
        </children>
202
        <children xsi:type="menu:MenuSeparator" xmi:id="_HJt08MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.5"/>
203
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt08cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addchildfeature" label="%handledmenuitem.label.2" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_aPYxsBezEeiXusClKZjycQ"/>
204
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt08sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.addFeature" label="%handledmenuitem.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/add.gif" command="_oftL0GceEee0qLTtA2ZpVQ"/>
205
        <children xsi:type="menu:MenuSeparator" xmi:id="_HJt088KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.8"/>
206
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt09MKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.paste" label="%handledmenuitem.label.12" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/paste_edit.png" command="_xDk5kNjyEeidDMMI9xTsbQ"/>
207
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt09cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.copy" label="%handledmenuitem.label.13" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/copy_edit.png" command="_cMyQ4NjyEeidDMMI9xTsbQ"/>
208
        <children xsi:type="menu:MenuSeparator" xmi:id="_HJt09sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.7"/>
209
        <children xsi:type="menu:Menu" xmi:id="_HJt098KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.export" label="%menu.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif">
210
          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_HJt0-MKQEem1vZq1LletZg" coreExpressionId="isFeatureTree"/>
211
          <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt0-cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTreeOwl" label="%handledmenuitem.label.14" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_xyZ4oPhmEei8uPv-H2wqnw">
212
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_HJt0-sKQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
213
          </children>
214
          <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt0-8KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.exportFeatureTree" label="%handledmenuitem.label.4" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/export.gif" command="_I_yx4GcqEee0qLTtA2ZpVQ">
215
            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_HJt0_MKQEem1vZq1LletZg" coreExpressionId="isShowExperimentalFeatures"/>
216
          </children>
217
        </children>
218
        <children xsi:type="menu:MenuSeparator" xmi:id="_HJt0_cKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menuseparator.0"/>
219
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt0_sKQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.removeFeature" label="%handledmenuitem.label.5" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_fNBtQGcjEee0qLTtA2ZpVQ"/>
220
        <children xsi:type="menu:HandledMenuItem" xmi:id="_HJt0_8KQEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.handledmenuitem.deletefeaturetree" label="%handledmenuitem.label.6" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/delete.gif" command="_3mqzkCFdEeiVXriJfxPIuA"/>
221
      </menus>
222
    </elements>
100 223
  </fragments>
101 224
  <fragments xsi:type="fragment:StringModelFragment" xmi:id="_3rW8wCXaEeex9MwMOgUeWw" featurename="children" parentElementId="eu.etaxonomy.taxeditor.menu.showView" positionInList="after:eu.etaxonomy.taxeditor.workbench.menuseparator.afterConcept">
102 225
    <elements xsi:type="menu:HandledMenuItem" xmi:id="_TlufMCaGEeeTEd_pKXBflg" elementId="eu.etaxonomy.taxeditor.store.showViewMenu.supplemental" label="%command.label.1" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.store/icons/applications-office.png" tooltip="%command.label.1" command="_bnVKsCZxEeeQLpuomSmVoQ">
......
220 343
    <elements xsi:type="menu:Menu" xmi:id="_LT3P8IfcEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.menu.termeditor" label="%menu.label.1">
221 344
      <children xsi:type="menu:DynamicMenuContribution" xmi:id="_HIptYIfUEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.dynamicmenucontribution.0" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.editor.definedterm.e4.DefinedTermMenuE4"/>
222 345
      <children xsi:type="menu:MenuSeparator" xmi:id="_yRINcIfqEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.menuseparator.3"/>
223
      <children xsi:type="menu:HandledMenuItem" xmi:id="_rwfDkIftEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.termEditorMenu.featureTreeEditor" label="%handledmenuitem.label.8" tooltip="%handledmenuitem.tooltip.1" command="_bnVKsCZxEeeQLpuomSmVoQ">
224
        <parameters xmi:id="_3acJQIftEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.showView.parameter.featureTreeEditor" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor"/>
346
      <children xsi:type="menu:Menu" xmi:id="_5wQLUMKNEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.menu.term_tree_editor" label="%handledmenuitem.label.8" tooltip="%handledmenuitem.tooltip.1">
347
        <children xsi:type="menu:HandledMenuItem" xmi:id="_rwfDkIftEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.termEditorMenu.featureTreeEditor" label="%handledmenuitem.label.24" tooltip="%handledmenuitem.label.24" command="_bnVKsCZxEeeQLpuomSmVoQ">
348
          <parameters xmi:id="_3acJQIftEeecZ4F2Y9Z0Og" elementId="eu.etaxonomy.taxeditor.store.showView.parameter.featureTreeEditor" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor"/>
349
        </children>
350
        <children xsi:type="menu:HandledMenuItem" xmi:id="_CLrfgMKOEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.termEditorMenu.characterTreeEditor" label="%handledmenuitem.label.25" tooltip="%handledmenuitem.label.25" command="_bnVKsCZxEeeQLpuomSmVoQ">
351
          <parameters xmi:id="_CLrfgcKOEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.showView.parameter.characterTreeEditor" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.featuretree.e4.CharacterTreeEditor"/>
352
        </children>
353
        <children xsi:type="menu:HandledMenuItem" xmi:id="_CUh5gMKOEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.termEditorMenu.structureTreeEditor" label="%handledmenuitem.label.26" tooltip="%handledmenuitem.label.26" command="_bnVKsCZxEeeQLpuomSmVoQ">
354
          <parameters xmi:id="_CUh5gcKOEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.showView.parameter.structureTreeEditor" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.featuretree.e4.StructureTreeEditor"/>
355
        </children>
356
        <children xsi:type="menu:HandledMenuItem" xmi:id="_DosQEMKOEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.termEditorMenu.propertyTreeEditor" label="%handledmenuitem.label.27" tooltip="%handledmenuitem.label.27" command="_bnVKsCZxEeeQLpuomSmVoQ">
357
          <parameters xmi:id="_DosQEcKOEem1vZq1LletZg" elementId="eu.etaxonomy.taxeditor.store.showView.parameter.propertyTreeEditor" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.featuretree.e4.PropertyTreeEditor"/>
358
        </children>
225 359
      </children>
226 360
      <children xsi:type="menu:MenuSeparator" xmi:id="_XKnM8E3IEeiplYSgvvNXRQ" elementId="eu.etaxonomy.taxeditor.store.menuseparator.6"/>
227 361
      <children xsi:type="menu:HandledMenuItem" xmi:id="_eU0zcEbOEeiER_VRS0L7wA" elementId="eu.etaxonomy.taxeditor.store.termEditorMenu.gfbioTermImport" label="%handledmenuitem.label.9" tooltip="%handledmenuitem.tooltip.2" command="_bnVKsCZxEeeQLpuomSmVoQ">
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermTreeMenu.java
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

  
10
package eu.etaxonomy.taxeditor.editor.definedterm.e4;
11

  
12
import java.util.ArrayList;
13
import java.util.Collections;
14
import java.util.Comparator;
15
import java.util.EnumSet;
16
import java.util.List;
17
import java.util.Set;
18

  
19
import org.eclipse.e4.ui.di.AboutToShow;
20
import org.eclipse.e4.ui.model.application.commands.MCommand;
21
import org.eclipse.e4.ui.model.application.commands.MCommandsFactory;
22
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
23
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
24
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
25
import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
26

  
27
import eu.etaxonomy.cdm.model.term.TermType;
28
import eu.etaxonomy.taxeditor.l10n.Messages;
29
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

  
32
/**
33
 *
34
 * Menu to dynamically generate menu (sub-menu) contribution items
35
 * for term types which when clicked open the defined term editor for the chosen term type
36
 *
37
 * @author pplitzner
38
 * @since Aug 23, 2017
39
 *
40
 */
41
public class DefinedTermTreeMenu {
42

  
43
    private static final String COMMAND_ID = "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";
44

  
45
    /** {@inheritDoc} */
46
    @AboutToShow
47
    public void aboutToShow(List<MMenuElement> items) {
48

  
49
        if(CdmStore.isActive()){
50

  
51
            //add Feature and NamedArea to top level
52
            addChildTermsToMenuManager(items, TermType.Feature, true);
53
            addChildTermsToMenuManager(items, TermType.NamedArea);
54

  
55
            MMenu otherMenu = MMenuFactory.INSTANCE.createMenu();
56
            otherMenu.setLabel(Messages.DefinedTermMenu_OTHERS);
57
            items.add(otherMenu);
58

  
59
            items.add(MMenuFactory.INSTANCE.createMenuSeparator());
60

  
61
            List<TermType> ttList = new ArrayList<TermType>(EnumSet.allOf(TermType.class));
62
            Collections.sort(ttList,new SortByTermTypeMessage());
63
            for (TermType tt : ttList)
64
            {
65
                //skip Feature and NamedArea as they have already been added to top level
66
                if(tt.equals(TermType.Feature) || tt.equals(TermType.NamedArea)){
67
                    continue;
68
                }
69
                // if term type has a parent, do not add it
70
                // it will be added in the recursive call
71
                if(tt.getKindOf() == null) {
72
                    addChildTermsToMenuManager(otherMenu.getChildren(), tt);
73
                }
74
            }
75
        }
76
	}
77

  
78
    private void addChildTermsToMenuManager(List<MMenuElement> items, TermType termType) {
79
        addChildTermsToMenuManager(items, termType, false);
80
    }
81

  
82
    private void addChildTermsToMenuManager(List<MMenuElement> items, TermType termType, boolean skipChildren) {
83

  
84
        //FIXME : need a better way to find out if a term type can be editable (ticket 3853)
85
        if(termType.getEmptyDefinedTermBase() != null) {
86
            Set<TermType> children = termType.getGeneralizationOf();
87
            // term type has no children, so create menu item
88
            if(skipChildren || children.isEmpty()) {
89
                items.add(createMenuItem(termType));
90
            }
91
            else{
92
                MMenu subMenu = MMenuFactory.INSTANCE.createMenu();
93
                subMenu.setLabel(termType.getMessage(PreferencesUtil.getGlobalLanguage()));
94
                items.add(subMenu);
95
                // term type has children, so create sub menu
96
                subMenu.getChildren().add(createDefaultMenuItem(termType));
97

  
98
                subMenu.getChildren().add(MMenuFactory.INSTANCE.createMenuSeparator());
99

  
100
                // add child items to the sub menu
101
                for(TermType tt : children) {
102
                    addChildTermsToMenuManager(subMenu.getChildren(), tt);
103
                }
104
            }
105
        }
106

  
107
    }
108

  
109
	private MHandledMenuItem createMenuItem(TermType termType) {
110

  
111
	    MHandledMenuItem menuItem = MMenuFactory.INSTANCE.createHandledMenuItem();
112
        menuItem.setLabel(termType.getMessage());
113
        MCommand mCommand = MCommandsFactory.INSTANCE.createCommand();
114
        mCommand.setElementId(COMMAND_ID);
115

  
116
        //set params
117
        menuItem.getTransientData().put(COMMAND_ID+".termTypeUuid", termType.getUuid());
118

  
119
        menuItem.setCommand(mCommand);
120
        return menuItem;
121
	}
122

  
123
	private MHandledMenuItem createDefaultMenuItem(TermType termType) {
124

  
125
        MHandledMenuItem menuItem = MMenuFactory.INSTANCE.createHandledMenuItem();
126
        menuItem.setLabel(String.format(Messages.DefinedTermMenu_OTHER_S, termType.getMessage()));
127
        MCommand mCommand = MCommandsFactory.INSTANCE.createCommand();
128
        mCommand.setElementId(COMMAND_ID);
129

  
130
        //set params
131
        menuItem.getTransientData().put(COMMAND_ID+".termTypeUuid", termType.getUuid());
132

  
133
        menuItem.setCommand(mCommand);
134

  
135
        return menuItem;
136
	}
137

  
138
	private class SortByTermTypeMessage implements Comparator<TermType> {
139
	    @Override
140
        public int compare(TermType t1, TermType t2) {
141
	        if (t1.equals(t2)){
142
	            return 0;
143
	        }
144
	        int result = t1.getMessage().compareTo(t2.getMessage());
145
	        if (result == 0){
146
	            return t1.compareTo(t2);
147
	        }
148
	        return result;
149
	    }
150
	}
151

  
152

  
153
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/AbstractTermTreeEditor.java
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

  
10
package eu.etaxonomy.taxeditor.featuretree.e4;
11

  
12
import java.util.Arrays;
13
import java.util.HashMap;
14
import java.util.List;
15
import java.util.Map;
16

  
17
import javax.annotation.PostConstruct;
18
import javax.annotation.PreDestroy;
19
import javax.inject.Inject;
20

  
21
import org.eclipse.core.runtime.IProgressMonitor;
22
import org.eclipse.e4.ui.di.Focus;
23
import org.eclipse.e4.ui.di.Persist;
24
import org.eclipse.e4.ui.di.UISynchronize;
25
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
26
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
27
import org.eclipse.e4.ui.services.EMenuService;
28
import org.eclipse.e4.ui.workbench.modeling.EPartService;
29
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
30
import org.eclipse.jface.util.LocalSelectionTransfer;
31
import org.eclipse.jface.viewers.ISelection;
32
import org.eclipse.jface.viewers.ISelectionChangedListener;
33
import org.eclipse.jface.viewers.IStructuredSelection;
34
import org.eclipse.jface.viewers.SelectionChangedEvent;
35
import org.eclipse.jface.viewers.StructuredSelection;
36
import org.eclipse.jface.viewers.TreeViewer;
37
import org.eclipse.swt.SWT;
38
import org.eclipse.swt.dnd.DND;
39
import org.eclipse.swt.dnd.Transfer;
40
import org.eclipse.swt.events.KeyAdapter;
41
import org.eclipse.swt.events.KeyEvent;
42
import org.eclipse.swt.layout.FillLayout;
43
import org.eclipse.swt.widgets.Composite;
44
import org.eclipse.ui.IMemento;
45

  
46
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
47
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
48
import eu.etaxonomy.cdm.api.service.ITermService;
49
import eu.etaxonomy.cdm.api.service.ITermTreeService;
50
import eu.etaxonomy.cdm.model.description.Character;
51
import eu.etaxonomy.cdm.model.term.TermNode;
52
import eu.etaxonomy.cdm.model.term.TermTree;
53
import eu.etaxonomy.cdm.model.term.TermType;
54
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
55
import eu.etaxonomy.taxeditor.editor.definedterm.FeatureTreeViewerComparator;
56
import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
57
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
58
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
59
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
60
import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
61
import eu.etaxonomy.taxeditor.model.AbstractUtility;
62
import eu.etaxonomy.taxeditor.model.IContextListener;
63
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
64
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
65
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
66
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
67
import eu.etaxonomy.taxeditor.store.AppModelId;
68
import eu.etaxonomy.taxeditor.store.CdmStore;
69
import eu.etaxonomy.taxeditor.store.StoreUtil;
70
import eu.etaxonomy.taxeditor.workbench.part.IE4ViewerPart;
71

  
72
/**
73
 *
74
 * @author pplitzner
75
 * @date 06.06.2017
76
 *
77
 */
78
public abstract class AbstractTermTreeEditor implements IFeatureTreeEditor, ISelectionChangedListener,
79
        IE4ViewerPart, IPartContentHasDetails, IPartContentHasSupplementalData,
80
        IContextListener, IConversationEnabled, IDirtyMarkable {
81

  
82
    protected static final List<String> TREE_PROPERTY_PATH = Arrays.asList(new String[] {
83
            "root", //$NON-NLS-1$
84
            "root.children", //$NON-NLS-1$
85
            "root.children.inapplicableIf", //$NON-NLS-1$
86
            "root.children.inapplicableIf.feature", //$NON-NLS-1$
87
            "root.children.inapplicableIf.state", //$NON-NLS-1$
88
            "root.children.onlyApplicableIf", //$NON-NLS-1$
89
            "root.children.onlyApplicableIf.feature", //$NON-NLS-1$
90
            "root.children.onlyApplicableIf.state", //$NON-NLS-1$
91
    });
92

  
93
    private ConversationHolder conversation;
94

  
95
    private ICdmEntitySession cdmEntitySession;
96

  
97
    @Inject
98
    private ESelectionService selService;
99

  
100
    @Inject
101
    private MDirtyable dirty;
102

  
103
    @Inject
104
    private UISynchronize sync;
105

  
106
    @Inject
107
    private MPart thisPart;
108

  
109
    private TreeViewer viewer;
110

  
111
    @Inject
112
    public AbstractTermTreeEditor() {
113
        CdmStore.getContextManager().addContextListener(this);
114
    }
115

  
116
    @PostConstruct
117
    public void createControl(Composite parent, EMenuService menuService){
118
        if (CdmStore.isActive()){
119
            initSession();
120
        }
121
        else{
122
            return;
123
        }
124
        parent.setLayout(new FillLayout());
125
        viewer = new TreeViewer(parent);
126
        viewer.setContentProvider(new FeatureTreeContentProvider());
127
        viewer.setLabelProvider(new FeatureTreeLabelProvider());
128

  
129
        int ops = DND.DROP_COPY | DND.DROP_MOVE;
130
        Transfer[] transfers = new Transfer[] {
131
                FeatureNodeTransfer.getInstance(),
132
                TermTransfer.getInstance(),
133
                LocalSelectionTransfer.getTransfer()};
134
        viewer.addDragSupport(ops, transfers, new FeatureNodeDragListener(viewer));
135
        viewer.addDropSupport(ops, transfers, new FeatureTreeDropAdapter(this, viewer, sync));
136
        viewer.addSelectionChangedListener(this);
137
        viewer.getTree().addKeyListener(new KeyAdapter() {
138
            @Override
139
            public void keyPressed(KeyEvent e) {
140
                if(e.stateMask == SWT.MOD1 && e.keyCode == 'c'){
141
                    copy(viewer.getStructuredSelection());
142
                }
143
                else if(e.stateMask == SWT.MOD1 && e.keyCode == 'v'){
144
                    paste(viewer.getStructuredSelection());
145
                }
146
            }
147
        });
148

  
149
        List<TermTree> trees = getTrees();
150
        viewer.setComparator(new FeatureTreeViewerComparator());
151
        viewer.setInput(trees);
152

  
153
        //create context menu
154
        menuService.registerContextMenu(viewer.getControl(), AppModelId.POPUPMENU_EU_ETAXONOMY_TAXEDITOR_STORE_POPUPMENU_FEATURETREEEDITOR);
155
    }
156

  
157
    protected abstract List<TermTree> getTrees();
158

  
159
    public void paste(IStructuredSelection selection) {
160
        if (StoreUtil.promptCheckIsDirty(this)) {
161
            return;
162
        }
163

  
164
        ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
165
        Object firstElement = selection.getFirstElement();
166
        TermNode parentNode = null;
167
        if(firstElement instanceof TermNode){
168
            parentNode = (TermNode) firstElement;
169
        }
170
        else if(firstElement instanceof TermTree){
171
            parentNode = ((TermTree)firstElement).getRoot();
172
        }
173
        if(parentNode!=null){
174
        	TermNode copiedNode = (TermNode) ((IStructuredSelection)clipBoardSelection).getFirstElement();
175

  
176
            AddFeatureOperation operation = new AddFeatureOperation(copiedNode.getTerm().getUuid(), parentNode, this, this);
177
            AbstractUtility.executeOperation(operation, sync);
178
        }
179

  
180
    }
181

  
182
    public void copy(IStructuredSelection selection) {
183
        LocalSelectionTransfer.getTransfer().setSelection(selection);
184
    }
185

  
186
    private void initSession(){
187
        if(conversation == null){
188
            conversation = CdmStore.createConversation();
189
        }
190
        if(cdmEntitySession==null){
191
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
192
        }
193
    }
194

  
195
    private void clearSession() {
196
        if(conversation!=null){
197
            conversation.close();
198
            conversation = null;
199
        }
200
        if(cdmEntitySession != null) {
201
            cdmEntitySession.dispose();
202
            cdmEntitySession = null;
203
        }
204
        dirty.setDirty(false);
205
    }
206

  
207
	public void setDirty(boolean isDirty){
208
	    this.dirty.setDirty(isDirty);
209
	}
210

  
211
	@Override
212
    public boolean isDirty(){
213
	    return dirty.isDirty();
214
	}
215

  
216
	@Override
217
	public void selectionChanged(SelectionChangedEvent event) {
218
		//propagate selection
219
		selService.setSelection(event.getSelection());
220
	}
221

  
222
	@Focus
223
	public void focus(){
224
	    if(viewer!=null){
225
	        viewer.getControl().setFocus();
226
	    }
227
        if(conversation!=null && !conversation.isBound()){
228
            conversation.bind();
229
        }
230
        if(cdmEntitySession != null) {
231
            cdmEntitySession.bind();
232
        }
233
	}
234

  
235
	@Override
236
    public void refresh(){
237
	    viewer.refresh();
238
	}
239

  
240
	public TreeViewer getViewer(){
241
	    return viewer;
242
	}
243

  
244
	@Override
245
	public IStructuredSelection getSelection() {
246
	    return (IStructuredSelection) viewer.getSelection();
247
	}
248

  
249
	@Override
250
	public ConversationHolder getConversationHolder() {
251
	    return conversation;
252
	}
253

  
254
	@Override
255
    @Persist
256
	public void save(IProgressMonitor monitor){
257
        if (!conversation.isBound()) {
258
            conversation.bind();
259
        }
260

  
261
        // commit the conversation and start a new transaction immediately
262
        conversation.commit(true);
263

  
264
        CdmStore.getService(ITermTreeService.class).saveOrUpdate(getRootEntities());
265

  
266
        List<TermTree> rootEntities = getRootEntities();
267
        for (TermTree featureTree : rootEntities) {
268
            if(featureTree.getTermType().equals(TermType.Character)){
269
                TermTree<Character> characterTree = featureTree;
270
                //save characters because they can be modified in this editor
271
                characterTree.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
272
            }
273
        }
274

  
275
        initializeTrees();
276

  
277
        this.setDirty(false);
278
	}
279

  
280
    private void initializeTrees() {
281
        Object[] expandedElements = viewer.getExpandedElements();
282
        viewer.getTree().removeAll();
283
        List<TermTree> trees = CdmStore.getService(ITermTreeService.class).list(TermTree.class, null, null, null, null);
284
        viewer.setInput(trees);
285
        viewer.setExpandedElements(expandedElements);
286
    }
287

  
288
	@PreDestroy
289
	public void dispose(){
290
	    selService.setSelection(null);
291
	    clearSession();
292
	}
293

  
294
    @Override
295
    public ICdmEntitySession getCdmEntitySession() {
296
        return cdmEntitySession;
297
    }
298

  
299
    @Override
300
    public Map<Object, List<String>> getPropertyPathsMap() {
301
        List<String> propertyPaths = Arrays.asList(new String[] {
302
                "children", //$NON-NLS-1$
303
                "feature", //$NON-NLS-1$
304
                "featureTree", //$NON-NLS-1$
305
        });
306
        Map<Object, List<String>> propertyPathMap =
307
                new HashMap<Object, List<String>>();
308
        propertyPathMap.put(TermNode.class,propertyPaths);
309
        return propertyPathMap;
310
    }
311

  
312
    @Override
313
    public List<TermTree> getRootEntities() {
314
        return (List<TermTree>) viewer.getInput();
315
    }
316

  
317
    @Override
318
    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
319
    }
320

  
321
    @Override
322
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
323
        //close view when workbench closes
324
        try{
325
            thisPart.getContext().get(EPartService.class).hidePart(thisPart);
326
        }
327
        catch(Exception e){
328
            //nothing
329
        }
330
    }
331

  
332
    @Override
333
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
334
    }
335

  
336
    @Override
337
    public void contextRefresh(IProgressMonitor monitor) {
338
    }
339

  
340
    @Override
341
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
342
    }
343

  
344
    @Override
345
    public void update(CdmDataChangeMap arg0) {
346
    }
347

  
348
    @Override
349
    public void changed(Object element) {
350
        dirty.setDirty(true);
351
        viewer.refresh();
352
    }
353

  
354
    @Override
355
    public void forceDirty() {
356
        dirty.setDirty(true);
357
    }
358

  
359
    @Override
360
    public boolean postOperation(Object objectAffectedByOperation) {
361
        initializeTrees();
362
        viewer.refresh();
363
        if(objectAffectedByOperation instanceof TermNode){
364
        	TermNode node = (TermNode)objectAffectedByOperation;
365
            viewer.expandToLevel(node.getGraph(), 1);
366
        }
367
        if(objectAffectedByOperation!=null){
368
            StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
369
            viewer.setSelection(selection);
370
        }
371
        return true;
372
    }
373

  
374
    @Override
375
    public boolean onComplete() {
376
        return false;
377
    }
378

  
379
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/CharacterTreeEditor.java
1
/**
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.featuretree.e4;
10

  
11
import java.util.List;
12

  
13
import eu.etaxonomy.cdm.api.service.ITermTreeService;
14
import eu.etaxonomy.cdm.model.term.TermTree;
15
import eu.etaxonomy.cdm.model.term.TermType;
16
import eu.etaxonomy.taxeditor.store.CdmStore;
17

  
18
/**
19
 * @author pplitzner
20
 * @since Aug 19, 2019
21
 *
22
 */
23
public class CharacterTreeEditor extends AbstractTermTreeEditor {
24

  
25
    @Override
26
    protected List<TermTree> getTrees(){
27
        return CdmStore.getService(ITermTreeService.class).list(TermType.Character, null, null, null, TREE_PROPERTY_PATH);
28
    }
29

  
30
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
1 1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

  
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
10 9
package eu.etaxonomy.taxeditor.featuretree.e4;
11 10

  
12
import java.util.Arrays;
13
import java.util.HashMap;
14 11
import java.util.List;
15
import java.util.Map;
12
import java.util.stream.Collectors;
16 13

  
17
import javax.annotation.PostConstruct;
18
import javax.annotation.PreDestroy;
19
import javax.inject.Inject;
20

  
21
import org.eclipse.core.runtime.IProgressMonitor;
22
import org.eclipse.e4.ui.di.Focus;
23
import org.eclipse.e4.ui.di.Persist;
24
import org.eclipse.e4.ui.di.UISynchronize;
25
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
26
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
27
import org.eclipse.e4.ui.services.EMenuService;
28
import org.eclipse.e4.ui.workbench.modeling.EPartService;
29
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
30
import org.eclipse.jface.util.LocalSelectionTransfer;
31
import org.eclipse.jface.viewers.ISelection;
32
import org.eclipse.jface.viewers.ISelectionChangedListener;
33
import org.eclipse.jface.viewers.IStructuredSelection;
34
import org.eclipse.jface.viewers.SelectionChangedEvent;
35
import org.eclipse.jface.viewers.StructuredSelection;
36
import org.eclipse.jface.viewers.TreeViewer;
37
import org.eclipse.swt.SWT;
38
import org.eclipse.swt.dnd.DND;
39
import org.eclipse.swt.dnd.Transfer;
40
import org.eclipse.swt.events.KeyAdapter;
41
import org.eclipse.swt.events.KeyEvent;
42
import org.eclipse.swt.layout.FillLayout;
43
import org.eclipse.swt.widgets.Composite;
44
import org.eclipse.ui.IMemento;
45

  
46
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
47
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
48
import eu.etaxonomy.cdm.api.service.ITermService;
49 14
import eu.etaxonomy.cdm.api.service.ITermTreeService;
50
import eu.etaxonomy.cdm.model.description.Character;
51
import eu.etaxonomy.cdm.model.term.TermNode;
52 15
import eu.etaxonomy.cdm.model.term.TermTree;
53 16
import eu.etaxonomy.cdm.model.term.TermType;
54
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
55
import eu.etaxonomy.taxeditor.editor.definedterm.FeatureTreeViewerComparator;
56
import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
57
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
58
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
59
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
60
import eu.etaxonomy.taxeditor.featuretree.e4.operation.AddFeatureOperation;
61
import eu.etaxonomy.taxeditor.model.AbstractUtility;
62
import eu.etaxonomy.taxeditor.model.IContextListener;
63
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
64
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
65
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
66
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
67
import eu.etaxonomy.taxeditor.store.AppModelId;
68 17
import eu.etaxonomy.taxeditor.store.CdmStore;
69
import eu.etaxonomy.taxeditor.store.StoreUtil;
70
import eu.etaxonomy.taxeditor.workbench.part.IE4ViewerPart;
71 18

  
72 19
/**
73
 *
74 20
 * @author pplitzner
75
 * @date 06.06.2017
21
 * @since Aug 19, 2019
76 22
 *
77 23
 */
78
public class FeatureTreeEditor implements IFeatureTreeEditor, ISelectionChangedListener,
79
        IE4ViewerPart, IPartContentHasDetails, IPartContentHasSupplementalData,
80
        IContextListener, IConversationEnabled, IDirtyMarkable {
81

  
82
    private static final List<String> TREE_PROPERTY_PATH = Arrays.asList(new String[] {
83
            "root", //$NON-NLS-1$
84
            "root.children", //$NON-NLS-1$
85
            "root.children.inapplicableIf", //$NON-NLS-1$
86
            "root.children.inapplicableIf.feature", //$NON-NLS-1$
87
            "root.children.inapplicableIf.state", //$NON-NLS-1$
88
            "root.children.onlyApplicableIf", //$NON-NLS-1$
89
            "root.children.onlyApplicableIf.feature", //$NON-NLS-1$
90
            "root.children.onlyApplicableIf.state", //$NON-NLS-1$
91
    });
92

  
93
    private ConversationHolder conversation;
94

  
95
    private ICdmEntitySession cdmEntitySession;
96

  
97
    @Inject
98
    private ESelectionService selService;
99

  
100
    @Inject
101
    private MDirtyable dirty;
102

  
103
    @Inject
104
    private UISynchronize sync;
105

  
106
    @Inject
107
    private MPart thisPart;
108

  
109
    private TreeViewer viewer;
110

  
111
    @Inject
112
    public FeatureTreeEditor() {
113
        CdmStore.getContextManager().addContextListener(this);
114
    }
115

  
116
    @PostConstruct
117
    public void createControl(Composite parent, EMenuService menuService){
118
        if (CdmStore.isActive()){
119
            initSession();
120
        }
121
        else{
122
            return;
123
        }
124
        parent.setLayout(new FillLayout());
125
        viewer = new TreeViewer(parent);
126
        viewer.setContentProvider(new FeatureTreeContentProvider());
127
        viewer.setLabelProvider(new FeatureTreeLabelProvider());
128

  
129
        int ops = DND.DROP_COPY | DND.DROP_MOVE;
130
        Transfer[] transfers = new Transfer[] {
131
                FeatureNodeTransfer.getInstance(),
132
                TermTransfer.getInstance(),
133
                LocalSelectionTransfer.getTransfer()};
134
        viewer.addDragSupport(ops, transfers, new FeatureNodeDragListener(viewer));
135
        viewer.addDropSupport(ops, transfers, new FeatureTreeDropAdapter(this, viewer, sync));
136
        viewer.addSelectionChangedListener(this);
137
        viewer.getTree().addKeyListener(new KeyAdapter() {
138
            @Override
139
            public void keyPressed(KeyEvent e) {
140
                if(e.stateMask == SWT.MOD1 && e.keyCode == 'c'){
141
                    copy(viewer.getStructuredSelection());
142
                }
143
                else if(e.stateMask == SWT.MOD1 && e.keyCode == 'v'){
144
                    paste(viewer.getStructuredSelection());
145
                }
146
            }
147
        });
148

  
149
        List<TermTree> trees = CdmStore.getService(ITermTreeService.class).list(TermTree.class, null, null, null, TREE_PROPERTY_PATH);
150
        viewer.setComparator(new FeatureTreeViewerComparator());
151
        viewer.setInput(trees);
152

  
153
        //create context menu
154
        menuService.registerContextMenu(viewer.getControl(), AppModelId.POPUPMENU_EU_ETAXONOMY_TAXEDITOR_STORE_POPUPMENU_FEATURETREEEDITOR);
155
    }
156

  
157
    public void paste(IStructuredSelection selection) {
158
        if (StoreUtil.promptCheckIsDirty(this)) {
159
            return;
160
        }
161

  
162
        ISelection clipBoardSelection = LocalSelectionTransfer.getTransfer().getSelection();
163
        Object firstElement = selection.getFirstElement();
164
        TermNode parentNode = null;
165
        if(firstElement instanceof TermNode){
166
            parentNode = (TermNode) firstElement;
167
        }
168
        else if(firstElement instanceof TermTree){
169
            parentNode = ((TermTree)firstElement).getRoot();
170
        }
171
        if(parentNode!=null){
172
        	TermNode copiedNode = (TermNode) ((IStructuredSelection)clipBoardSelection).getFirstElement();
173

  
174
            AddFeatureOperation operation = new AddFeatureOperation(copiedNode.getTerm().getUuid(), parentNode, this, this);
175
            AbstractUtility.executeOperation(operation, sync);
176
        }
177

  
178
    }
179

  
180
    public void copy(IStructuredSelection selection) {
181
        LocalSelectionTransfer.getTransfer().setSelection(selection);
182
    }
183

  
184
    private void initSession(){
185
        if(conversation == null){
186
            conversation = CdmStore.createConversation();
187
        }
188
        if(cdmEntitySession==null){
189
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
190
        }
191
    }
192

  
193
    private void clearSession() {
194
        if(conversation!=null){
195
            conversation.close();
196
            conversation = null;
197
        }
198
        if(cdmEntitySession != null) {
199
            cdmEntitySession.dispose();
200
            cdmEntitySession = null;
201
        }
202
        dirty.setDirty(false);
203
    }
204

  
205
	public void setDirty(boolean isDirty){
206
	    this.dirty.setDirty(isDirty);
207
	}
208

  
209
	@Override
210
    public boolean isDirty(){
211
	    return dirty.isDirty();
212
	}
213

  
214
	@Override
215
	public void selectionChanged(SelectionChangedEvent event) {
216
		//propagate selection
217
		selService.setSelection(event.getSelection());
218
	}
219

  
220
	@Focus
221
	public void focus(){
222
	    if(viewer!=null){
223
	        viewer.getControl().setFocus();
224
	    }
225
        if(conversation!=null && !conversation.isBound()){
226
            conversation.bind();
227
        }
228
        if(cdmEntitySession != null) {
229
            cdmEntitySession.bind();
230
        }
231
	}
232

  
233
	@Override
234
    public void refresh(){
235
	    viewer.refresh();
236
	}
237

  
238
	public TreeViewer getViewer(){
239
	    return viewer;
240
	}
241

  
242
	@Override
243
	public IStructuredSelection getSelection() {
244
	    return (IStructuredSelection) viewer.getSelection();
245
	}
246

  
247
	@Override
248
	public ConversationHolder getConversationHolder() {
249
	    return conversation;
250
	}
251

  
252
	@Override
253
    @Persist
254
	public void save(IProgressMonitor monitor){
255
        if (!conversation.isBound()) {
256
            conversation.bind();
257
        }
258

  
259
        // commit the conversation and start a new transaction immediately
260
        conversation.commit(true);
261

  
262
        CdmStore.getService(ITermTreeService.class).saveOrUpdate(getRootEntities());
263

  
264
        List<TermTree> rootEntities = getRootEntities();
265
        for (TermTree featureTree : rootEntities) {
266
            if(featureTree.getTermType().equals(TermType.Character)){
267
                TermTree<Character> characterTree = featureTree;
268
                //save characters because they can be modified in this editor
269
                characterTree.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
270
            }
271
        }
272

  
273
        initializeTrees();
274

  
275
        this.setDirty(false);
276
	}
277

  
278
    private void initializeTrees() {
279
        Object[] expandedElements = viewer.getExpandedElements();
280
        viewer.getTree().removeAll();
281
        List<TermTree> trees = CdmStore.getService(ITermTreeService.class).list(TermTree.class, null, null, null, null);
282
        viewer.setInput(trees);
283
        viewer.setExpandedElements(expandedElements);
284
    }
285

  
286
	@PreDestroy
287
	public void dispose(){
288
	    selService.setSelection(null);
289
	    clearSession();
290
	}
291

  
292
    @Override
293
    public ICdmEntitySession getCdmEntitySession() {
294
        return cdmEntitySession;
295
    }
296

  
297
    @Override
298
    public Map<Object, List<String>> getPropertyPathsMap() {
299
        List<String> propertyPaths = Arrays.asList(new String[] {
300
                "children", //$NON-NLS-1$
301
                "feature", //$NON-NLS-1$
302
                "featureTree", //$NON-NLS-1$
303
        });
304
        Map<Object, List<String>> propertyPathMap =
305
                new HashMap<Object, List<String>>();
306
        propertyPathMap.put(TermNode.class,propertyPaths);
307
        return propertyPathMap;
308
    }
309

  
310
    @Override
311
    public List<TermTree> getRootEntities() {
312
        return (List<TermTree>) viewer.getInput();
313
    }
314

  
315
    @Override
316
    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
317
    }
318

  
319
    @Override
320
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
321
        //close view when workbench closes
322
        try{
323
            thisPart.getContext().get(EPartService.class).hidePart(thisPart);
324
        }
325
        catch(Exception e){
326
            //nothing
327
        }
328
    }
329

  
330
    @Override
331
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
332
    }
333

  
334
    @Override
335
    public void contextRefresh(IProgressMonitor monitor) {
336
    }
337

  
338
    @Override
339
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
340
    }
341

  
342
    @Override
343
    public void update(CdmDataChangeMap arg0) {
344
    }
345

  
346
    @Override
347
    public void changed(Object element) {
348
        dirty.setDirty(true);
349
        viewer.refresh();
350
    }
351

  
352
    @Override
353
    public void forceDirty() {
354
        dirty.setDirty(true);
355
    }
356

  
357
    @Override
358
    public boolean postOperation(Object objectAffectedByOperation) {
359
        initializeTrees();
360
        viewer.refresh();
361
        if(objectAffectedByOperation instanceof TermNode){
362
        	TermNode node = (TermNode)objectAffectedByOperation;
363
            viewer.expandToLevel(node.getGraph(), 1);
364
        }
365
        if(objectAffectedByOperation!=null){
366
            StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
367
            viewer.setSelection(selection);
368
        }
369
        return true;
370
    }
24
public class FeatureTreeEditor extends AbstractTermTreeEditor {
371 25

  
372 26
    @Override
373
    public boolean onComplete() {
374
        return false;
27
    protected List<TermTree> getTrees(){
28
        List<TermTree> list = CdmStore.getService(ITermTreeService.class).list(TermType.Feature, null, null, null, TREE_PROPERTY_PATH);
29
        return list.stream().filter(tree->tree.getTermType().equals(TermType.Feature)).collect(Collectors.toList());
375 30
    }
376 31

  
377 32
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/PropertyTreeEditor.java
1
/**
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.featuretree.e4;
10

  
11
import java.util.List;
12

  
13
import eu.etaxonomy.cdm.api.service.ITermTreeService;
14
import eu.etaxonomy.cdm.model.term.TermTree;
15
import eu.etaxonomy.cdm.model.term.TermType;
16
import eu.etaxonomy.taxeditor.store.CdmStore;
17

  
18
/**
19
 * @author pplitzner
20
 * @since Aug 19, 2019
21
 *
22
 */
23
public class PropertyTreeEditor extends AbstractTermTreeEditor {
24

  
25
    @Override
26
    protected List<TermTree> getTrees(){
27
        return CdmStore.getService(ITermTreeService.class).list(TermType.Property, null, null, null, TREE_PROPERTY_PATH);
28
    }
29

  
30
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/StructureTreeEditor.java
1
/**
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.featuretree.e4;
10

  
11
import java.util.List;
12

  
13
import eu.etaxonomy.cdm.api.service.ITermTreeService;
14
import eu.etaxonomy.cdm.model.term.TermTree;
15
import eu.etaxonomy.cdm.model.term.TermType;
16
import eu.etaxonomy.taxeditor.store.CdmStore;
17

  
18
/**
19
 * @author pplitzner
20
 * @since Aug 19, 2019
21
 *
22
 */
23
public class StructureTreeEditor extends AbstractTermTreeEditor {
24

  
25
    @Override
26
    protected List<TermTree> getTrees(){
27
        return CdmStore.getService(ITermTreeService.class).list(TermType.Structure, null, null, null, TREE_PROPERTY_PATH);
28
    }
29

  
30
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/CopyFeatureHandler.java
12 12
import org.eclipse.jface.viewers.IStructuredSelection;
13 13

  
14 14
import eu.etaxonomy.cdm.model.term.TermNode;
15
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
15
import eu.etaxonomy.taxeditor.featuretree.e4.AbstractTermTreeEditor;
16 16

  
17 17
public class CopyFeatureHandler {
18 18

  
19 19
    @Execute
20 20
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part,
21 21
            @Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection){
22
        ((FeatureTreeEditor) part.getObject()).copy(selection);
22
        ((AbstractTermTreeEditor) part.getObject()).copy(selection);
23 23
    }
24 24

  
25 25
    @CanExecute
......
27 27
            @Named(IServiceConstants.ACTIVE_PART) MPart part,
28 28
            MHandledMenuItem menuItem){
29 29
        boolean canExecute = false;
30
        canExecute =part.getObject() instanceof FeatureTreeEditor
30
        canExecute =part.getObject() instanceof AbstractTermTreeEditor
31 31
                && selection!=null
32 32
                && selection.size()==1
33 33
                && selection.getFirstElement() instanceof TermNode;
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/handler/PasteFeatureHandler.java
14 14
import org.eclipse.jface.viewers.IStructuredSelection;
15 15

  
16 16
import eu.etaxonomy.cdm.model.term.TermNode;
17
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
17
import eu.etaxonomy.taxeditor.featuretree.e4.AbstractTermTreeEditor;
18 18

  
19 19
public class PasteFeatureHandler {
20 20

  
21 21
    @Execute
22 22
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part,
23 23
            @Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection){
24
        FeatureTreeEditor editor = (FeatureTreeEditor)part.getObject();
24
        AbstractTermTreeEditor editor = (AbstractTermTreeEditor)part.getObject();
25 25
        editor.paste(selection);
26 26
    }
27 27

  
......
31 31
            MHandledMenuItem menuItem){
32 32
        boolean canExecute = false;
33 33
        ISelection transferSelection = LocalSelectionTransfer.getTransfer().getSelection();
34
        canExecute = part.getObject() instanceof FeatureTreeEditor
34
        canExecute = part.getObject() instanceof AbstractTermTreeEditor
35 35
                && selection!=null
36 36
                && selection.size()==1
37 37
                && transferSelection instanceof IStructuredSelection

Also available in: Unified diff