ref #6774 Add "Export" button to FeatureTreeEditorComposite
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 4 Jul 2017 16:14:14 +0000 (18:14 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 4 Jul 2017 16:14:14 +0000 (18:14 +0200)
eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeExportListener.java [new file with mode: 0644]

index dd17b972160d1cd6dd2ce4c0c78c84472690ef55..01a1f27e2e09c51e6ac9c8077662a3a30c0c64fe 100644 (file)
@@ -70,6 +70,7 @@ Export-Package: com.google.api,
  eu.etaxonomy.cdm.io.csv.caryophyllales.out,
  eu.etaxonomy.cdm.io.csv.redlist.demo,
  eu.etaxonomy.cdm.io.csv.redlist.out,
+ eu.etaxonomy.cdm.io.descriptive.owl.out,
  eu.etaxonomy.cdm.io.distribution.excelupdate,
  eu.etaxonomy.cdm.io.dwca,
  eu.etaxonomy.cdm.io.dwca.in,
index f634901c41228a679413be9c8d61cf8f295fd3aa..bd414fbb5002f9b358821d5fd3dc802d85c65005 100644 (file)
@@ -137,7 +137,9 @@ public class CharacterEditor implements ICdmEntitySessionEnabled, ISelectionChan
         lblNewLabel_1.setText("Properties");
 
         treeViewerProperties = addFeatureTreeEditor(composite_1);
-        initFeatureTreeComposite(treeViewerProperties, new CharacterDragListener(treeViewerStructures.getViewer(), treeViewerProperties.getViewer()), null);
+        initFeatureTreeComposite(treeViewerProperties, null, null);
+        //TODO: fix drag and drop
+//        initFeatureTreeComposite(treeViewerProperties, new CharacterDragListener(treeViewerStructures.getViewer(), treeViewerProperties.getViewer()), null);
 
         Composite composite_2 = new Composite(sashForm, SWT.NONE);
         formToolkit.adapt(composite_2);
@@ -167,6 +169,7 @@ public class CharacterEditor implements ICdmEntitySessionEnabled, ISelectionChan
         featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
         featureTreeEditorComposite.getButton_add().setVisible(false);
         featureTreeEditorComposite.getButton_remove().setVisible(false);
+        featureTreeEditorComposite.getBtnExportTree().setVisible(false);
         return featureTreeEditorComposite;
     }
 
@@ -175,6 +178,7 @@ public class CharacterEditor implements ICdmEntitySessionEnabled, ISelectionChan
         featureTreeEditorComposite.init(featureNodeDragListener, featureNodeDropAdapter, this,
                 new FeatureTreeChooserListener(featureTreeEditorComposite), new SelectionAdapter() {
                 }, new SelectionAdapter() {
+                }, new SelectionAdapter() {
                 });
     }
 
index d090ec6c7a4574c0144fe026e76b3655aaaec005..158f1c29a812feb702e131795a67358d56e7b239 100644 (file)
@@ -43,7 +43,6 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
 import eu.etaxonomy.cdm.api.service.config.FeatureNodeDeletionConfigurator;
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureNode;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
@@ -75,8 +74,6 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
 
     private Shell shell;
 
-    private FeatureTree featureTree;
-
     private FeatureTreeEditorComposite composite;
 
     @Inject
@@ -91,20 +88,21 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
     }
 
        /** {@inheritDoc} */
-       @PostConstruct
-       public void createControl(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
-           composite = new FeatureTreeEditorComposite(parent, SWT.NULL);
-               composite.init(new FeatureNodeDragListener(composite.getViewer()), new FeatureNodeDropAdapter(this, composite.getViewer()), this, new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                FeatureTree tree = FeatureTreeSelectionDialog.select(shell, conversation, null);
-                if(tree!=null){
-                    setSelectedTree(tree);
-                }
-            }
-        }, new AddButtonListener(), new RemoveSelectionListener());
+    @PostConstruct
+    public void createControl(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL) Shell shell) {
+        composite = new FeatureTreeEditorComposite(parent, SWT.NULL);
+        composite.init(new FeatureNodeDragListener(composite.getViewer()),
+                new FeatureNodeDropAdapter(this, composite.getViewer()), this, new SelectionAdapter() {
+                    @Override
+                    public void widgetSelected(SelectionEvent e) {
+                        FeatureTree tree = FeatureTreeSelectionDialog.select(shell, conversation, null);
+                        if (tree != null) {
+                            composite.setSelectedTree(tree, FeatureTreeEditor.this);
+                        }
+                    }
+                }, new AddButtonListener(), new RemoveSelectionListener(), new FeatureTreeExportListener(shell, composite));
         composite.getText_title().setEnabled(false);
-       }
+    }
 
        public void setDirty(boolean isDirty){
            this.dirty.setDirty(isDirty);
@@ -114,25 +112,14 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
            return dirty.isDirty();
        }
 
-    public void setSelectedTree(FeatureTree featureTree) {
-               this.featureTree = HibernateProxyHelper.deproxy(featureTree, FeatureTree.class);
-               this.featureTree.setRoot(HibernateProxyHelper.deproxy(featureTree.getRoot(), FeatureNode.class));
-               composite.getViewer().setInput(featureTree);
-
-               composite.getText_title().setEnabled(true);
-               composite.getText_title().removeModifyListener(this);
-               composite.getText_title().setText(featureTree.getTitleCache());
-               composite.getText_title().addModifyListener(this);
-       }
-
     public FeatureTree getSelectedFeatureTree(){
-        return this.featureTree;
+        return composite.getFeatureTree();
     }
 
        /** {@inheritDoc} */
        @Override
        public void modifyText(ModifyEvent e) {
-               featureTree.setTitleCache(composite.getText_title().getText(), true);
+           composite.getFeatureTree().setTitleCache(composite.getText_title().getText(), true);
                setDirty(true);
        }
 
@@ -168,7 +155,7 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
         // commit the conversation and start a new transaction immediately
         conversation.commit(true);
 
-        CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(featureTree);
+        CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(composite.getFeatureTree());
 
         this.setDirty(false);
        }
@@ -207,7 +194,7 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
     @Override
     public List<FeatureTree> getRootEntities() {
         List<FeatureTree> root = new ArrayList<>();
-        root.add(featureTree);
+        root.add(composite.getFeatureTree());
         return root;
     }
 
@@ -215,7 +202,7 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
                @Override
                public void widgetSelected(SelectionEvent e) {
                        AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(
-                                       featureTree);
+                               composite.getFeatureTree());
                        WizardDialog dialog = new WizardDialog(shell, wizard);
 
                        if (dialog.open() == IStatus.OK) {
@@ -247,4 +234,5 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
                        composite.getViewer().refresh();
                }
        }
+
 }
index d9842553f0fef8f419927e045632f456316107f5..fa7a67fbe5f77bd383b4fcf88616e0300c32866d 100644 (file)
@@ -47,6 +47,7 @@ public class FeatureTreeEditorComposite extends Composite{
     private TreeViewer viewer;
     private Button button_add;
     private Button button_remove;
+    private Button btnExportTree;
 
     public FeatureTreeEditorComposite(Composite parent, int style) {
         super(parent, style);
@@ -91,11 +92,15 @@ public class FeatureTreeEditorComposite extends Composite{
         button_remove.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
         button_remove.setToolTipText(Messages.FeatureTreeEditorComposite_REMOVE_FEATURE);
         button_remove.setImage(ImageResources.getImage(ImageResources.TRASH_ICON));
+
+        btnExportTree = new Button(composite_buttons, SWT.NONE);
+        btnExportTree.setToolTipText("Export feature tree");
+        btnExportTree.setImage(ImageResources.getImage(ImageResources.MOVE_ICON));
     }
 
     public void init(DragSourceListener dragSourceListener,
             DropTargetListener dropTargetListener, ISelectionChangedListener viewerSelectionChangedListener,
-            SelectionListener openFeatureTreeSelectionListener, SelectionListener addButtonSelectionListener, SelectionListener removeButtonSelectionListener) {
+            SelectionListener openFeatureTreeSelectionListener, SelectionListener addButtonSelectionListener, SelectionListener removeButtonSelectionListener, SelectionListener exportButtonSelectionListener) {
         viewer.setContentProvider(new FeatureTreeContentProvider());
         viewer.setLabelProvider(new FeatureTreeLabelProvider());
 
@@ -113,6 +118,7 @@ public class FeatureTreeEditorComposite extends Composite{
 
         button_add.addSelectionListener(addButtonSelectionListener);
         button_remove.addSelectionListener(removeButtonSelectionListener);
+        btnExportTree.addSelectionListener(exportButtonSelectionListener);
 
         btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
     }
@@ -176,4 +182,11 @@ public class FeatureTreeEditorComposite extends Composite{
         return button_remove;
     }
 
+    /**
+     * @return the btnExportTree
+     */
+    public Button getBtnExportTree() {
+        return btnExportTree;
+    }
+
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeExportListener.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeExportListener.java
new file mode 100644 (file)
index 0000000..5611f0d
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+* 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.featuretree.e4;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.progress.IProgressConstants;
+
+import eu.etaxonomy.cdm.io.descriptive.owl.out.OwlExportConfigurator;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author pplitzner
+ * @since Jul 4, 2017
+ *
+ */
+public class FeatureTreeExportListener extends SelectionAdapter{
+
+    private Shell shell;
+    private FeatureTreeEditorComposite composite;
+
+    public FeatureTreeExportListener(Shell shell, FeatureTreeEditorComposite composite) {
+        super();
+        this.shell = shell;
+        this.composite = composite;
+    }
+
+    @Override
+    public void widgetSelected(SelectionEvent e) {
+        if(composite.getFeatureTree()==null){
+            MessagingUtils.informationDialog("Export not possible", "There is no feature tree selected.");
+            return;
+        }
+        DirectoryDialog dialog = new DirectoryDialog(shell);
+        String directoryString = dialog.open();
+        if(directoryString!=null){
+            // create job
+            Job job = CdmStore.getExportManager().createIOServiceJob(OwlExportConfigurator.NewInstance(null, null, composite.getFeatureTree()), new File(directoryString+"/owl.owl"));
+            // configure the job
+            job.setProperty(IProgressConstants.KEEP_PROPERTY, true);
+            job.setUser(true);
+            // schedule job
+            job.schedule();
+        }
+    }
+}