Project

General

Profile

« Previous | Next » 

Revision 2b559c4e

Added by Patrick Plitzner almost 7 years ago

Integrate FeatureTreeEditor into CharacterEditor

View differences:

eu.etaxonomy.taxeditor.editor/fragment.e4xmi
54 54
        <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"/>
55 55
      </menus>
56 56
    </elements>
57
    <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"/>
57
    <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"/>
58 58
  </fragments>
59 59
  <fragments xsi:type="fragment:StringModelFragment" xmi:id="__mwtMDVpEee_b7RlBzTDRw" featurename="commands" parentElementId="xpath:/">
60 60
    <elements xsi:type="commands:Command" xmi:id="_BjF3ADVqEee_b7RlBzTDRw" elementId="eu.etaxonomy.taxeditor.editor.command.specimeneditor.create_field_unit" commandName="%command.commandname.1"/>
......
74 74
  </fragments>
75 75
  <fragments xsi:type="fragment:StringModelFragment" xmi:id="_pZmusEalEeeXMc6kSYO7Xg" featurename="children" parentElementId="eu.etaxonomy.taxeditor.menu.showView">
76 76
    <elements xsi:type="menu:HandledMenuItem" xmi:id="_tvph4EalEeeXMc6kSYO7Xg" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.featuretreeeditor" label="Character Editor" command="_WPjpoDSnEeek0dKsFNy--Q">
77
      <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"/>
77
      <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"/>
78 78
    </elements>
79 79
  </fragments>
80 80
</fragment:ModelFragments>
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java
1
// $Id$
2
/**
3
* Copyright (C) 2017 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.editor.workingSet;
11

  
12
import java.util.Collections;
13
import java.util.UUID;
14

  
15
import javax.annotation.PostConstruct;
16
import javax.annotation.PreDestroy;
17
import javax.inject.Named;
18

  
19
import org.eclipse.e4.ui.di.Focus;
20
import org.eclipse.e4.ui.services.IServiceConstants;
21
import org.eclipse.jface.viewers.ISelection;
22
import org.eclipse.jface.viewers.TreeSelection;
23
import org.eclipse.jface.viewers.TreeViewer;
24
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.custom.SashForm;
26
import org.eclipse.swt.dnd.DND;
27
import org.eclipse.swt.dnd.Transfer;
28
import org.eclipse.swt.events.SelectionAdapter;
29
import org.eclipse.swt.events.SelectionEvent;
30
import org.eclipse.swt.layout.GridData;
31
import org.eclipse.swt.layout.GridLayout;
32
import org.eclipse.swt.widgets.Button;
33
import org.eclipse.swt.widgets.Composite;
34
import org.eclipse.swt.widgets.Display;
35
import org.eclipse.swt.widgets.Label;
36
import org.eclipse.swt.widgets.Shell;
37
import org.eclipse.swt.widgets.Tree;
38
import org.eclipse.ui.forms.widgets.FormToolkit;
39

  
40
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
41
import eu.etaxonomy.cdm.model.description.Character;
42
import eu.etaxonomy.cdm.model.description.FeatureNode;
43
import eu.etaxonomy.cdm.model.description.FeatureTree;
44
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
45
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
46
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
47
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
48
import eu.etaxonomy.taxeditor.model.MessagingUtils;
49
import eu.etaxonomy.taxeditor.store.CdmStore;
50

  
51
/**
52
 * @author pplitzner
53
 * @date 24.05.2017
54
 *
55
 */
56
public class CharacterEditor {
57

  
58

  
59
    private TreeViewer treeViewerCharacters;
60
    private TreeViewer treeViewerProperties;
61
    private TreeViewer treeViewerStructures;
62
    private FeatureTreeEditor editor;
63
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
64
    private Button btnAddCharacter;
65

  
66
    public CharacterEditor() {
67
    }
68

  
69
    /**
70
     * Create contents of the view part.
71
     */
72
    @PostConstruct
73
    public void createControls(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
74
        parent.setLayout(new GridLayout(1, false));
75

  
76
        SashForm sashForm = new SashForm(parent, SWT.NONE);
77
        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
78
        formToolkit.adapt(sashForm);
79
        formToolkit.paintBordersFor(sashForm);
80

  
81
        Composite composite = new Composite(sashForm, SWT.NONE);
82
        formToolkit.adapt(composite);
83
        formToolkit.paintBordersFor(composite);
84
        composite.setLayout(new GridLayout(1, false));
85

  
86
        Label lblNewLabel = new Label(composite, SWT.NONE);
87
        lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
88
        formToolkit.adapt(lblNewLabel, true, true);
89
        lblNewLabel.setText("Structures");
90

  
91
        treeViewerStructures = new TreeViewer(composite, SWT.BORDER);
92
        Tree tree = treeViewerStructures.getTree();
93
        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
94

  
95
        Composite composite_1 = new Composite(sashForm, SWT.NONE);
96
        formToolkit.adapt(composite_1);
97
        formToolkit.paintBordersFor(composite_1);
98
        composite_1.setLayout(new GridLayout(1, false));
99

  
100
        Label lblNewLabel_1 = new Label(composite_1, SWT.NONE);
101
        lblNewLabel_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
102
        formToolkit.adapt(lblNewLabel_1, true, true);
103
        lblNewLabel_1.setText("Properties");
104

  
105
        treeViewerProperties = new TreeViewer(composite_1, SWT.BORDER);
106
        Tree tree_1 = treeViewerProperties.getTree();
107
        tree_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
108

  
109
        Composite composite_2 = new Composite(sashForm, SWT.NONE);
110
        formToolkit.adapt(composite_2);
111
        formToolkit.paintBordersFor(composite_2);
112
        composite_2.setLayout(new GridLayout(1, false));
113

  
114
        btnAddCharacter = new Button(composite_2, SWT.NONE);
115
        btnAddCharacter.setText(">>");
116
        btnAddCharacter.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
117
        formToolkit.adapt(btnAddCharacter, true, true);
118

  
119

  
120
        Composite composite_3 = new Composite(sashForm, SWT.NONE);
121
        formToolkit.adapt(composite_3);
122
        formToolkit.paintBordersFor(composite_3);
123
        composite_3.setLayout(new GridLayout(1, false));
124

  
125
        editor = new FeatureTreeEditor(shell);
126
        editor.createControl(composite_3, shell);
127

  
128
        //                treeViewerCharacters = new TreeViewer(sashForm, SWT.BORDER);
129
        sashForm.setWeights(new int[] {3, 3, 1, 3});
130

  
131
        init();
132
    }
133

  
134
    private void init(){
135
        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
136
        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
137

  
138
        FeatureTree structureFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("3a953dd1-2b5f-482f-9a33-664ee7ef6c68"));
139
        treeViewerStructures.setContentProvider(new FeatureTreeContentProvider());
140
        treeViewerStructures.setLabelProvider(new FeatureTreeLabelProvider());
141
        treeViewerStructures.setInput(structureFeatureTree);
142

  
143
        FeatureTree propertiesFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("e283bbf5-bda3-449d-98de-3601ac8a8bbd"));
144
        treeViewerProperties.setContentProvider(new FeatureTreeContentProvider());
145
        treeViewerProperties.setLabelProvider(new FeatureTreeLabelProvider());
146
        treeViewerProperties.addDragSupport(dndOperations, transfers, new CharacterDragListener(treeViewerStructures, treeViewerProperties));
147
        treeViewerProperties.setInput(propertiesFeatureTree);
148

  
149
        btnAddCharacter.addSelectionListener(new SelectionAdapter() {
150
            /**
151
             * {@inheritDoc}
152
             */
153
            @Override
154
            public void widgetSelected(SelectionEvent e) {
155
                ISelection structureTreeSelection = treeViewerStructures.getSelection();
156
                ISelection propertyTreeSelection = treeViewerProperties.getSelection();
157
                if(structureTreeSelection==null || propertyTreeSelection==null || editor.getSelectedFeatureTree()==null){
158
                    MessagingUtils.warningDialog("Cannot perform action", CharacterEditor.this,
159
                            "You have to select a structure, a property and a feature tree to perform this action.");
160
                    return;
161
                }
162
                FeatureNode structureNode = (FeatureNode) ((TreeSelection)structureTreeSelection).getFirstElement();
163
                FeatureNode propertyNode = (FeatureNode) ((TreeSelection)propertyTreeSelection).getFirstElement();
164
                String label = structureNode.getFeature().toString()+" "+propertyNode.getFeature().toString();
165
                Character character = Character.NewInstance(structureNode, propertyNode, null, label, label);
166
                //TODO session handling
167
//                CdmStore.getService(ITermService.class).save(character);
168
                editor.addFeatures(Collections.singleton(character));
169
            }
170
        });
171

  
172
//        treeViewerCharacters.setContentProvider(new FeatureTreeContentProvider());
173
//        treeViewerCharacters.setLabelProvider(new FeatureTreeLabelProvider());
174
//        treeViewerCharacters.addDropSupport(dndOperations, transfers, new CharacterDropAdapter(treeViewerCharacters));
175
    }
176

  
177
    @PreDestroy
178
    public void dispose() {
179
    }
180

  
181
    @Focus
182
    public void setFocus() {
183
    }
184

  
185
    public TreeViewer getTreeViewerCharacters() {
186
        return treeViewerCharacters;
187
    }
188
    public TreeViewer getTreeViewerProperties() {
189
        return treeViewerProperties;
190
    }
191
    public TreeViewer getTreeViewerStructures() {
192
        return treeViewerStructures;
193
    }
194
}
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/FeatureTreeBuilderViewPart.java
1
// $Id$
2
/**
3
* Copyright (C) 2017 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.editor.workingSet;
11

  
12
import java.util.UUID;
13

  
14
import javax.annotation.PostConstruct;
15
import javax.annotation.PreDestroy;
16
import javax.inject.Named;
17

  
18
import org.eclipse.e4.ui.di.Focus;
19
import org.eclipse.e4.ui.services.IServiceConstants;
20
import org.eclipse.jface.viewers.TreeViewer;
21
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.custom.SashForm;
23
import org.eclipse.swt.dnd.DND;
24
import org.eclipse.swt.dnd.Transfer;
25
import org.eclipse.swt.layout.GridData;
26
import org.eclipse.swt.layout.GridLayout;
27
import org.eclipse.swt.widgets.Composite;
28
import org.eclipse.swt.widgets.Display;
29
import org.eclipse.swt.widgets.Shell;
30
import org.eclipse.ui.forms.widgets.FormToolkit;
31

  
32
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
33
import eu.etaxonomy.cdm.model.description.FeatureTree;
34
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
35
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
36
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
37
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
38
import eu.etaxonomy.taxeditor.store.CdmStore;
39

  
40
/**
41
 * @author pplitzner
42
 * @date 24.05.2017
43
 *
44
 */
45
public class FeatureTreeBuilderViewPart {
46

  
47

  
48
    private TreeViewer treeViewerCharacters;
49
    private TreeViewer treeViewerProperties;
50
    private TreeViewer treeViewerStructures;
51
    private FeatureTreeEditor editor;
52
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
53

  
54
    public FeatureTreeBuilderViewPart() {
55
    }
56

  
57
    /**
58
     * Create contents of the view part.
59
     */
60
    @PostConstruct
61
    public void createControls(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
62
        parent.setLayout(new GridLayout(1, false));
63

  
64
        SashForm sashForm = new SashForm(parent, SWT.NONE);
65
        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
66
        formToolkit.adapt(sashForm);
67
        formToolkit.paintBordersFor(sashForm);
68

  
69
        treeViewerStructures = new TreeViewer(sashForm, SWT.BORDER);
70

  
71
        treeViewerProperties = new TreeViewer(sashForm, SWT.BORDER);
72

  
73
//                editor = new FeatureTreeEditor(shell);
74
//                editor.createControl(sashForm, shell);
75
                treeViewerCharacters = new TreeViewer(sashForm, SWT.BORDER);
76
        sashForm.setWeights(new int[] {1, 1, 1});
77

  
78
        init();
79
    }
80

  
81
    private void init(){
82
        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
83
        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
84

  
85
        FeatureTree structureFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("546e9c1e-d186-4e3b-838d-7e44586d1b39"));
86
        treeViewerStructures.setContentProvider(new FeatureTreeContentProvider());
87
        treeViewerStructures.setLabelProvider(new FeatureTreeLabelProvider());
88
        treeViewerStructures.setInput(structureFeatureTree);
89

  
90
        FeatureTree propertiesFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("07543f00-1572-4ba8-b633-4fdb83fb32dd"));
91
        treeViewerProperties.setContentProvider(new FeatureTreeContentProvider());
92
        treeViewerProperties.setLabelProvider(new FeatureTreeLabelProvider());
93
        treeViewerProperties.addDragSupport(dndOperations, transfers, new CharacterDragListener(treeViewerStructures, treeViewerProperties));
94
        treeViewerProperties.setInput(propertiesFeatureTree);
95

  
96
        treeViewerCharacters.setContentProvider(new FeatureTreeContentProvider());
97
        treeViewerCharacters.setLabelProvider(new FeatureTreeLabelProvider());
98
        treeViewerCharacters.addDropSupport(dndOperations, transfers, new CharacterDropAdapter(treeViewerCharacters));
99
    }
100

  
101
    @PreDestroy
102
    public void dispose() {
103
    }
104

  
105
    @Focus
106
    public void setFocus() {
107
    }
108

  
109
    public TreeViewer getTreeViewerCharacters() {
110
        return treeViewerCharacters;
111
    }
112
    public TreeViewer getTreeViewerProperties() {
113
        return treeViewerProperties;
114
    }
115
    public TreeViewer getTreeViewerStructures() {
116
        return treeViewerStructures;
117
    }
118

  
119
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
195 195
		text_title.addModifyListener(this);
196 196
	}
197 197

  
198
    public FeatureTree getSelectedFeatureTree(){
199
        return this.featureTree;
200
    }
201

  
198 202
	/** {@inheritDoc} */
199 203
	@Override
200 204
	public void modifyText(ModifyEvent e) {
......
229 233
	    setDirty(false);
230 234
	}
231 235

  
236
	/**
237
     * @param additionalFeatures
238
     */
239
    public void addFeatures(Collection<Feature> additionalFeatures) {
240
        IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
241
        FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection.getFirstElement()
242
                : ((FeatureTree) viewer.getInput()).getRoot());
243
        for (Feature feature : additionalFeatures) {
244
            FeatureNode child = FeatureNode.NewInstance(feature);
245
            //TODO session handling
246
//            CdmStore.getService(IFeatureNodeService.class).merge(child, true);
247

  
248
            parent.addChild(child);
249
        }
250
        //TODO session handling
251
//        setDirty(true);
252
        viewer.refresh();
253
    }
254

  
232 255
	private class AddButtonListener extends SelectionAdapter {
233 256
		@Override
234 257
		public void widgetSelected(SelectionEvent e) {
......
236 259
					featureTree);
237 260
			WizardDialog dialog = new WizardDialog(shell, wizard);
238 261

  
239
			if (dialog.open() == IStatus.OK) {
240
				IStructuredSelection selection = (IStructuredSelection) viewer
241
						.getSelection();
242
				FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection
243
						.getFirstElement() : ((FeatureTree) viewer.getInput())
244
						.getRoot());
245
				Collection<Feature> additionalFeatures = wizard
246
						.getAdditionalFeatures();
247
				for (Feature feature : additionalFeatures) {
248
					FeatureNode child = FeatureNode.NewInstance(feature);
249
					CdmStore.getService(IFeatureNodeService.class).merge(child, true);
250

  
251
					parent.addChild(child);
252
				}
253
				setDirty(true);
254
				viewer.refresh();
255
			}
256
		}
262
            if (dialog.open() == IStatus.OK) {
263
                Collection<Feature> additionalFeatures = wizard.getAdditionalFeatures();
264
                addFeatures(additionalFeatures);
265
            }
266
        }
257 267

  
258 268
	}
259 269

  

Also available in: Unified diff