Integrate FeatureTreeEditor into CharacterEditor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Sun, 18 Jun 2017 20:41:41 +0000 (22:41 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Sun, 18 Jun 2017 20:41:41 +0000 (22:41 +0200)
eu.etaxonomy.taxeditor.editor/fragment.e4xmi
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/FeatureTreeBuilderViewPart.java [deleted file]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java

index 4fdda3da52d74309572523073e3be33e6b4340be..22f76757afd8f940a0e0597fdbcb8e1d54e6463e 100644 (file)
@@ -54,7 +54,7 @@
         <children xsi:type="menu:HandledMenuItem" xmi:id="_wg0-oDulEeeOtqC_3qh40A" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.commandlabel54" label="%command.label.54" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.editor/icons/deep-delete-16x16-32.png" command="_fKT-wDulEeeOtqC_3qh40A"/>
       </menus>
     </elements>
-    <elements xsi:type="basic:PartDescriptor" xmi:id="_R7vxEECaEeeL5JDzMOYK6g" elementId="eu.etaxonomy.taxeditor.editor.workingSet.FeatureTreeBuilderViewPart" label="Character Editor" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.workingSet.FeatureTreeBuilderViewPart"/>
+    <elements xsi:type="basic:PartDescriptor" xmi:id="_R7vxEECaEeeL5JDzMOYK6g" elementId="eu.etaxonomy.taxeditor.editor.workingSet.CharacterEditor" label="Character Editor" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.workingSet.CharacterEditor"/>
   </fragments>
   <fragments xsi:type="fragment:StringModelFragment" xmi:id="__mwtMDVpEee_b7RlBzTDRw" featurename="commands" parentElementId="xpath:/">
     <elements xsi:type="commands:Command" xmi:id="_BjF3ADVqEee_b7RlBzTDRw" elementId="eu.etaxonomy.taxeditor.editor.command.specimeneditor.create_field_unit" commandName="%command.commandname.1"/>
@@ -74,7 +74,7 @@
   </fragments>
   <fragments xsi:type="fragment:StringModelFragment" xmi:id="_pZmusEalEeeXMc6kSYO7Xg" featurename="children" parentElementId="eu.etaxonomy.taxeditor.menu.showView">
     <elements xsi:type="menu:HandledMenuItem" xmi:id="_tvph4EalEeeXMc6kSYO7Xg" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.featuretreeeditor" label="Character Editor" command="_WPjpoDSnEeek0dKsFNy--Q">
-      <parameters xmi:id="_wJkmoEalEeeXMc6kSYO7Xg" elementId="eu.etaxonomy.taxeditor.editor.parameter.0" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.editor.workingSet.FeatureTreeBuilderViewPart"/>
+      <parameters xmi:id="_wJkmoEalEeeXMc6kSYO7Xg" elementId="eu.etaxonomy.taxeditor.editor.parameter.0" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.editor.workingSet.CharacterEditor"/>
     </elements>
   </fragments>
 </fragment:ModelFragments>
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java
new file mode 100644 (file)
index 0000000..fec8190
--- /dev/null
@@ -0,0 +1,194 @@
+// $Id$
+/**
+* Copyright (C) 2017 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.workingSet;
+
+import java.util.Collections;
+import java.util.UUID;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Named;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.model.description.Character;
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
+import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
+import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
+import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author pplitzner
+ * @date 24.05.2017
+ *
+ */
+public class CharacterEditor {
+
+
+    private TreeViewer treeViewerCharacters;
+    private TreeViewer treeViewerProperties;
+    private TreeViewer treeViewerStructures;
+    private FeatureTreeEditor editor;
+    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
+    private Button btnAddCharacter;
+
+    public CharacterEditor() {
+    }
+
+    /**
+     * Create contents of the view part.
+     */
+    @PostConstruct
+    public void createControls(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
+        parent.setLayout(new GridLayout(1, false));
+
+        SashForm sashForm = new SashForm(parent, SWT.NONE);
+        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+        formToolkit.adapt(sashForm);
+        formToolkit.paintBordersFor(sashForm);
+
+        Composite composite = new Composite(sashForm, SWT.NONE);
+        formToolkit.adapt(composite);
+        formToolkit.paintBordersFor(composite);
+        composite.setLayout(new GridLayout(1, false));
+
+        Label lblNewLabel = new Label(composite, SWT.NONE);
+        lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+        formToolkit.adapt(lblNewLabel, true, true);
+        lblNewLabel.setText("Structures");
+
+        treeViewerStructures = new TreeViewer(composite, SWT.BORDER);
+        Tree tree = treeViewerStructures.getTree();
+        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+
+        Composite composite_1 = new Composite(sashForm, SWT.NONE);
+        formToolkit.adapt(composite_1);
+        formToolkit.paintBordersFor(composite_1);
+        composite_1.setLayout(new GridLayout(1, false));
+
+        Label lblNewLabel_1 = new Label(composite_1, SWT.NONE);
+        lblNewLabel_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+        formToolkit.adapt(lblNewLabel_1, true, true);
+        lblNewLabel_1.setText("Properties");
+
+        treeViewerProperties = new TreeViewer(composite_1, SWT.BORDER);
+        Tree tree_1 = treeViewerProperties.getTree();
+        tree_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+
+        Composite composite_2 = new Composite(sashForm, SWT.NONE);
+        formToolkit.adapt(composite_2);
+        formToolkit.paintBordersFor(composite_2);
+        composite_2.setLayout(new GridLayout(1, false));
+
+        btnAddCharacter = new Button(composite_2, SWT.NONE);
+        btnAddCharacter.setText(">>");
+        btnAddCharacter.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
+        formToolkit.adapt(btnAddCharacter, true, true);
+
+
+        Composite composite_3 = new Composite(sashForm, SWT.NONE);
+        formToolkit.adapt(composite_3);
+        formToolkit.paintBordersFor(composite_3);
+        composite_3.setLayout(new GridLayout(1, false));
+
+        editor = new FeatureTreeEditor(shell);
+        editor.createControl(composite_3, shell);
+
+        //                treeViewerCharacters = new TreeViewer(sashForm, SWT.BORDER);
+        sashForm.setWeights(new int[] {3, 3, 1, 3});
+
+        init();
+    }
+
+    private void init(){
+        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
+        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
+
+        FeatureTree structureFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("3a953dd1-2b5f-482f-9a33-664ee7ef6c68"));
+        treeViewerStructures.setContentProvider(new FeatureTreeContentProvider());
+        treeViewerStructures.setLabelProvider(new FeatureTreeLabelProvider());
+        treeViewerStructures.setInput(structureFeatureTree);
+
+        FeatureTree propertiesFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("e283bbf5-bda3-449d-98de-3601ac8a8bbd"));
+        treeViewerProperties.setContentProvider(new FeatureTreeContentProvider());
+        treeViewerProperties.setLabelProvider(new FeatureTreeLabelProvider());
+        treeViewerProperties.addDragSupport(dndOperations, transfers, new CharacterDragListener(treeViewerStructures, treeViewerProperties));
+        treeViewerProperties.setInput(propertiesFeatureTree);
+
+        btnAddCharacter.addSelectionListener(new SelectionAdapter() {
+            /**
+             * {@inheritDoc}
+             */
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                ISelection structureTreeSelection = treeViewerStructures.getSelection();
+                ISelection propertyTreeSelection = treeViewerProperties.getSelection();
+                if(structureTreeSelection==null || propertyTreeSelection==null || editor.getSelectedFeatureTree()==null){
+                    MessagingUtils.warningDialog("Cannot perform action", CharacterEditor.this,
+                            "You have to select a structure, a property and a feature tree to perform this action.");
+                    return;
+                }
+                FeatureNode structureNode = (FeatureNode) ((TreeSelection)structureTreeSelection).getFirstElement();
+                FeatureNode propertyNode = (FeatureNode) ((TreeSelection)propertyTreeSelection).getFirstElement();
+                String label = structureNode.getFeature().toString()+" "+propertyNode.getFeature().toString();
+                Character character = Character.NewInstance(structureNode, propertyNode, null, label, label);
+                //TODO session handling
+//                CdmStore.getService(ITermService.class).save(character);
+                editor.addFeatures(Collections.singleton(character));
+            }
+        });
+
+//        treeViewerCharacters.setContentProvider(new FeatureTreeContentProvider());
+//        treeViewerCharacters.setLabelProvider(new FeatureTreeLabelProvider());
+//        treeViewerCharacters.addDropSupport(dndOperations, transfers, new CharacterDropAdapter(treeViewerCharacters));
+    }
+
+    @PreDestroy
+    public void dispose() {
+    }
+
+    @Focus
+    public void setFocus() {
+    }
+
+    public TreeViewer getTreeViewerCharacters() {
+        return treeViewerCharacters;
+    }
+    public TreeViewer getTreeViewerProperties() {
+        return treeViewerProperties;
+    }
+    public TreeViewer getTreeViewerStructures() {
+        return treeViewerStructures;
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/FeatureTreeBuilderViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/FeatureTreeBuilderViewPart.java
deleted file mode 100644 (file)
index e618c4c..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-// $Id$
-/**
-* Copyright (C) 2017 EDIT
-* European Distributed Institute of Taxonomy
-* http://www.e-taxonomy.eu
-*
-* The contents of this file are subject to the Mozilla Public License Version 1.1
-* See LICENSE.TXT at the top of this package for the full license terms.
-*/
-package eu.etaxonomy.taxeditor.editor.workingSet;
-
-import java.util.UUID;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.inject.Named;
-
-import org.eclipse.e4.ui.di.Focus;
-import org.eclipse.e4.ui.services.IServiceConstants;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
-import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
-import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
-import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
-import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-
-/**
- * @author pplitzner
- * @date 24.05.2017
- *
- */
-public class FeatureTreeBuilderViewPart {
-
-
-    private TreeViewer treeViewerCharacters;
-    private TreeViewer treeViewerProperties;
-    private TreeViewer treeViewerStructures;
-    private FeatureTreeEditor editor;
-    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
-
-    public FeatureTreeBuilderViewPart() {
-    }
-
-    /**
-     * Create contents of the view part.
-     */
-    @PostConstruct
-    public void createControls(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
-        parent.setLayout(new GridLayout(1, false));
-
-        SashForm sashForm = new SashForm(parent, SWT.NONE);
-        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-        formToolkit.adapt(sashForm);
-        formToolkit.paintBordersFor(sashForm);
-
-        treeViewerStructures = new TreeViewer(sashForm, SWT.BORDER);
-
-        treeViewerProperties = new TreeViewer(sashForm, SWT.BORDER);
-
-//                editor = new FeatureTreeEditor(shell);
-//                editor.createControl(sashForm, shell);
-                treeViewerCharacters = new TreeViewer(sashForm, SWT.BORDER);
-        sashForm.setWeights(new int[] {1, 1, 1});
-
-        init();
-    }
-
-    private void init(){
-        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
-        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
-
-        FeatureTree structureFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("546e9c1e-d186-4e3b-838d-7e44586d1b39"));
-        treeViewerStructures.setContentProvider(new FeatureTreeContentProvider());
-        treeViewerStructures.setLabelProvider(new FeatureTreeLabelProvider());
-        treeViewerStructures.setInput(structureFeatureTree);
-
-        FeatureTree propertiesFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("07543f00-1572-4ba8-b633-4fdb83fb32dd"));
-        treeViewerProperties.setContentProvider(new FeatureTreeContentProvider());
-        treeViewerProperties.setLabelProvider(new FeatureTreeLabelProvider());
-        treeViewerProperties.addDragSupport(dndOperations, transfers, new CharacterDragListener(treeViewerStructures, treeViewerProperties));
-        treeViewerProperties.setInput(propertiesFeatureTree);
-
-        treeViewerCharacters.setContentProvider(new FeatureTreeContentProvider());
-        treeViewerCharacters.setLabelProvider(new FeatureTreeLabelProvider());
-        treeViewerCharacters.addDropSupport(dndOperations, transfers, new CharacterDropAdapter(treeViewerCharacters));
-    }
-
-    @PreDestroy
-    public void dispose() {
-    }
-
-    @Focus
-    public void setFocus() {
-    }
-
-    public TreeViewer getTreeViewerCharacters() {
-        return treeViewerCharacters;
-    }
-    public TreeViewer getTreeViewerProperties() {
-        return treeViewerProperties;
-    }
-    public TreeViewer getTreeViewerStructures() {
-        return treeViewerStructures;
-    }
-
-}
index af9ef8dadfc7746ac77300179ea32c9e8b906fe1..3f015a57a56299fd3fea46d901df28b5790f41a8 100644 (file)
@@ -195,6 +195,10 @@ public class FeatureTreeEditor implements
                text_title.addModifyListener(this);
        }
 
+    public FeatureTree getSelectedFeatureTree(){
+        return this.featureTree;
+    }
+
        /** {@inheritDoc} */
        @Override
        public void modifyText(ModifyEvent e) {
@@ -229,6 +233,25 @@ public class FeatureTreeEditor implements
            setDirty(false);
        }
 
+       /**
+     * @param additionalFeatures
+     */
+    public void addFeatures(Collection<Feature> additionalFeatures) {
+        IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+        FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection.getFirstElement()
+                : ((FeatureTree) viewer.getInput()).getRoot());
+        for (Feature feature : additionalFeatures) {
+            FeatureNode child = FeatureNode.NewInstance(feature);
+            //TODO session handling
+//            CdmStore.getService(IFeatureNodeService.class).merge(child, true);
+
+            parent.addChild(child);
+        }
+        //TODO session handling
+//        setDirty(true);
+        viewer.refresh();
+    }
+
        private class AddButtonListener extends SelectionAdapter {
                @Override
                public void widgetSelected(SelectionEvent e) {
@@ -236,24 +259,11 @@ public class FeatureTreeEditor implements
                                        featureTree);
                        WizardDialog dialog = new WizardDialog(shell, wizard);
 
-                       if (dialog.open() == IStatus.OK) {
-                               IStructuredSelection selection = (IStructuredSelection) viewer
-                                               .getSelection();
-                               FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection
-                                               .getFirstElement() : ((FeatureTree) viewer.getInput())
-                                               .getRoot());
-                               Collection<Feature> additionalFeatures = wizard
-                                               .getAdditionalFeatures();
-                               for (Feature feature : additionalFeatures) {
-                                       FeatureNode child = FeatureNode.NewInstance(feature);
-                                       CdmStore.getService(IFeatureNodeService.class).merge(child, true);
-
-                                       parent.addChild(child);
-                               }
-                               setDirty(true);
-                               viewer.refresh();
-                       }
-               }
+            if (dialog.open() == IStatus.OK) {
+                Collection<Feature> additionalFeatures = wizard.getAdditionalFeatures();
+                addFeatures(additionalFeatures);
+            }
+        }
 
        }