Project

General

Profile

« Previous | Next » 

Revision becf5142

Added by Patrick Plitzner almost 7 years ago

ref #6762 Use FeatureTreeEditorComposite for all tree viewers

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
179 179
    }
180 180

  
181 181
    @PostConstruct
182
    public void createPartControl(Composite parent, EMenuService menuService, MPart thisPart) {
182
    public void createPartControl(Composite parent, EMenuService menuService) {
183 183
        if (CdmStore.isActive()){
184 184
            if(conversation == null){
185 185
                conversation = CdmStore.createConversation();
186 186
            }
187
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
187
            if(cdmEntitySession!=null){
188
                cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
189
            }
188 190
        }
189 191
        else{
190 192
            return;
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java
14 14
import java.util.HashMap;
15 15
import java.util.List;
16 16
import java.util.Map;
17
import java.util.UUID;
18 17

  
19 18
import javax.annotation.PostConstruct;
20 19
import javax.annotation.PreDestroy;
21 20
import javax.inject.Inject;
22 21
import javax.inject.Named;
23 22

  
23
import org.eclipse.e4.core.di.annotations.Optional;
24 24
import org.eclipse.e4.ui.di.Focus;
25 25
import org.eclipse.e4.ui.di.Persist;
26 26
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
......
31 31
import org.eclipse.jface.viewers.IStructuredSelection;
32 32
import org.eclipse.jface.viewers.SelectionChangedEvent;
33 33
import org.eclipse.jface.viewers.TreeSelection;
34
import org.eclipse.jface.viewers.TreeViewer;
35 34
import org.eclipse.swt.SWT;
36 35
import org.eclipse.swt.custom.SashForm;
37
import org.eclipse.swt.dnd.DND;
38
import org.eclipse.swt.dnd.Transfer;
39 36
import org.eclipse.swt.events.ModifyEvent;
40 37
import org.eclipse.swt.events.ModifyListener;
41 38
import org.eclipse.swt.events.SelectionAdapter;
......
47 44
import org.eclipse.swt.widgets.Display;
48 45
import org.eclipse.swt.widgets.Label;
49 46
import org.eclipse.swt.widgets.Shell;
50
import org.eclipse.swt.widgets.Tree;
51 47
import org.eclipse.ui.forms.widgets.FormToolkit;
52 48

  
53 49
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
54 50
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
55 51
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
56
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
57 52
import eu.etaxonomy.cdm.model.description.Character;
58 53
import eu.etaxonomy.cdm.model.description.FeatureNode;
59 54
import eu.etaxonomy.cdm.model.description.FeatureTree;
60 55
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeDragListener;
61 56
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeDropAdapter;
62
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
63
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
64
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
65 57
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditorComposite;
66 58
import eu.etaxonomy.taxeditor.model.MessagingUtils;
67 59
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
......
77 69
public class CharacterEditor implements ICdmEntitySessionEnabled, ISelectionChangedListener, ModifyListener{
78 70

  
79 71

  
80
    private FeatureTreeEditorComposite featureTreeEditorComposite;
81
    private TreeViewer treeViewerProperties;
82
    private TreeViewer treeViewerStructures;
72
    private FeatureTreeEditorComposite characterTreeEditorComposite;
73
    private FeatureTreeEditorComposite treeViewerProperties;
74
    private FeatureTreeEditorComposite treeViewerStructures;
83 75
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
84 76
    private Button btnAddCharacter;
85 77

  
......
89 81
    @Inject
90 82
    private MDirtyable dirty;
91 83

  
84
    private Shell shell;
85

  
92 86
    private ConversationHolder conversation;
93 87

  
94 88
    private ICdmEntitySession cdmEntitySession;
95 89

  
96
    private FeatureTree featureTree;
97

  
98 90
    public CharacterEditor() {
99
        if(conversation==null){
100
            conversation = CdmStore.createConversation();
101
        }
102
        if (CdmStore.isActive()) {
103
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
104
        }
105 91
    }
106 92

  
107 93
    /**
108 94
     * Create contents of the view part.
109 95
     */
110 96
    @PostConstruct
111
    public void createControls(Composite parent, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell) {
97
    public void createControls(Composite parent) {
98
        if (CdmStore.isActive()){
99
            if(conversation == null){
100
                conversation = CdmStore.createConversation();
101
            }
102
            if(cdmEntitySession!=null){
103
                cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
104
            }
105
        }
106
        else{
107
            return;
108
        }
112 109
        parent.setLayout(new GridLayout(1, false));
113 110

  
114 111
        SashForm sashForm = new SashForm(parent, SWT.NONE);
......
126 123
        formToolkit.adapt(lblNewLabel, true, true);
127 124
        lblNewLabel.setText("Structures");
128 125

  
129
        treeViewerStructures = new TreeViewer(composite, SWT.BORDER);
130
        Tree tree = treeViewerStructures.getTree();
131
        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
126
        treeViewerStructures = addFeatureTreeEditor(composite);
127
        initFeatureTreeComposite(treeViewerStructures, null, null);
132 128

  
133 129
        Composite composite_1 = new Composite(sashForm, SWT.NONE);
134 130
        formToolkit.adapt(composite_1);
......
140 136
        formToolkit.adapt(lblNewLabel_1, true, true);
141 137
        lblNewLabel_1.setText("Properties");
142 138

  
143
        treeViewerProperties = new TreeViewer(composite_1, SWT.BORDER);
144
        Tree tree_1 = treeViewerProperties.getTree();
145
        tree_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
139
        treeViewerProperties = addFeatureTreeEditor(composite_1);
140
        initFeatureTreeComposite(treeViewerProperties, new CharacterDragListener(treeViewerStructures.getViewer(), treeViewerProperties.getViewer()), null);
146 141

  
147 142
        Composite composite_2 = new Composite(sashForm, SWT.NONE);
148 143
        formToolkit.adapt(composite_2);
......
159 154
        formToolkit.paintBordersFor(composite_3);
160 155
        composite_3.setLayout(new GridLayout(1, false));
161 156

  
162
        featureTreeEditorComposite = new FeatureTreeEditorComposite(composite_3, SWT.BORDER);
157
        characterTreeEditorComposite = addFeatureTreeEditor(composite_3);
158
        initFeatureTreeComposite(characterTreeEditorComposite, new FeatureNodeDragListener(characterTreeEditorComposite.getViewer()), new FeatureNodeDropAdapter(characterTreeEditorComposite.getViewer()));
159

  
160
        sashForm.setWeights(new int[] {3, 3, 1, 3});
161

  
162
        init();
163
    }
164

  
165
    private FeatureTreeEditorComposite addFeatureTreeEditor(Composite composite_3) {
166
        FeatureTreeEditorComposite featureTreeEditorComposite = new FeatureTreeEditorComposite(composite_3, SWT.BORDER);
163 167
        featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
164 168
        featureTreeEditorComposite.getButton_add().setVisible(false);
165 169
        featureTreeEditorComposite.getButton_remove().setVisible(false);
166
        featureTreeEditorComposite.init(new FeatureNodeDragListener(featureTreeEditorComposite.getViewer()), new FeatureNodeDropAdapter(featureTreeEditorComposite.getViewer()), this, new SelectionAdapter() {
167
            @Override
168
            public void widgetSelected(SelectionEvent e) {
169
                FeatureTree tree = FeatureTreeSelectionDialog.select(shell, conversation, null);
170
                if(tree!=null){
171
                    setSelectedTree(tree);
172
                }
173
            }
174
        }, new SelectionAdapter() {
175
        }, new SelectionAdapter() {
176
        });
177
        sashForm.setWeights(new int[] {3, 3, 1, 3});
170
        return featureTreeEditorComposite;
171
    }
178 172

  
179
        init();
173
    private void initFeatureTreeComposite(FeatureTreeEditorComposite featureTreeEditorComposite,
174
            FeatureNodeDragListener featureNodeDragListener, FeatureNodeDropAdapter featureNodeDropAdapter) {
175
        featureTreeEditorComposite.init(featureNodeDragListener, featureNodeDropAdapter, this,
176
                new FeatureTreeChooserListener(featureTreeEditorComposite), new SelectionAdapter() {
177
                }, new SelectionAdapter() {
178
                });
180 179
    }
181 180

  
182 181
    @Focus
183
    public void focus(){
184
        featureTreeEditorComposite.getViewer().getControl().setFocus();
182
    public void focus(@Optional@Named(IServiceConstants.ACTIVE_SHELL)Shell shell){
183
        this.shell = shell;
184
        if(characterTreeEditorComposite!=null){
185
            characterTreeEditorComposite.getViewer().getControl().setFocus();
186
        }
185 187
        if(conversation!=null && !conversation.isBound()){
186 188
            conversation.bind();
187 189
        }
......
190 192
        }
191 193
    }
192 194

  
193
    public void setSelectedTree(FeatureTree featureTree) {
194
        this.featureTree = HibernateProxyHelper.deproxy(featureTree, FeatureTree.class);
195
        this.featureTree.setRoot(HibernateProxyHelper.deproxy(featureTree.getRoot(), FeatureNode.class));
196
        featureTreeEditorComposite.getViewer().setInput(featureTree);
197

  
198
        featureTreeEditorComposite.getText_title().removeModifyListener(this);
199
        featureTreeEditorComposite.getText_title().setText(featureTree.getTitleCache());
200
        featureTreeEditorComposite.getText_title().addModifyListener(this);
201
    }
202

  
203 195
    private void init(){
204
        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
205
        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
206

  
207
        FeatureTree structureFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("3a953dd1-2b5f-482f-9a33-664ee7ef6c68"));
208
        treeViewerStructures.setContentProvider(new FeatureTreeContentProvider());
209
        treeViewerStructures.setLabelProvider(new FeatureTreeLabelProvider());
210
        treeViewerStructures.setInput(structureFeatureTree);
211

  
212
        FeatureTree propertiesFeatureTree = CdmStore.getService(IFeatureTreeService.class).load(UUID.fromString("e283bbf5-bda3-449d-98de-3601ac8a8bbd"));
213
        treeViewerProperties.setContentProvider(new FeatureTreeContentProvider());
214
        treeViewerProperties.setLabelProvider(new FeatureTreeLabelProvider());
215
        treeViewerProperties.addDragSupport(dndOperations, transfers, new CharacterDragListener(treeViewerStructures, treeViewerProperties));
216
        treeViewerProperties.setInput(propertiesFeatureTree);
217

  
218 196
        btnAddCharacter.addSelectionListener(new SelectionAdapter() {
219 197
            /**
220 198
             * {@inheritDoc}
221 199
             */
222 200
            @Override
223 201
            public void widgetSelected(SelectionEvent e) {
224
                ISelection structureTreeSelection = treeViewerStructures.getSelection();
225
                ISelection propertyTreeSelection = treeViewerProperties.getSelection();
226
                if(structureTreeSelection==null || propertyTreeSelection==null || featureTree==null){
202
                ISelection structureTreeSelection = treeViewerStructures.getViewer().getSelection();
203
                ISelection propertyTreeSelection = treeViewerProperties.getViewer().getSelection();
204
                if(structureTreeSelection==null || propertyTreeSelection==null || characterTreeEditorComposite.getFeatureTree()==null){
227 205
                    MessagingUtils.warningDialog("Cannot perform action", CharacterEditor.this,
228 206
                            "You have to select a structure, a property and a feature tree to perform this action.");
229 207
                    return;
......
234 212
                //create new Character
235 213
                String label = structureNode.getFeature().toString()+" "+propertyNode.getFeature().toString();
236 214
                Character character = Character.NewInstance(structureNode, propertyNode, null, label, label);
237
//                CdmStore.getService(ITermService.class).saveOrUpdate(character);
238 215

  
239 216
                //add new Character to feature tree
240
                FeatureNode parent = ((FeatureTree) featureTreeEditorComposite.getViewer().getInput()).getRoot();
217
                FeatureNode parent = ((FeatureTree) characterTreeEditorComposite.getViewer().getInput()).getRoot();
241 218
                CdmStore.getService(IFeatureNodeService.class).addChildFeaturNode(parent.getUuid(), character.getUuid());
242 219

  
243 220
                setDirty(true);
244
                featureTreeEditorComposite.getViewer().refresh();
221
                characterTreeEditorComposite.getViewer().refresh();
245 222
            }
246 223
        });
247 224
    }
......
255 232
        // commit the conversation and start a new transaction immediately
256 233
        conversation.commit(true);
257 234

  
258
        CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(featureTree);
235
        CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(characterTreeEditorComposite.getFeatureTree());
259 236

  
260 237
        this.setDirty(false);
261 238
    }
......
289 266
    @Override
290 267
    public List<FeatureTree> getRootEntities() {
291 268
        List<FeatureTree> root = new ArrayList<>();
292
        root.add(featureTree);
269
        root.add(characterTreeEditorComposite.getFeatureTree());
293 270
        return root;
294 271
    }
295 272

  
......
305 282
        }
306 283
    }
307 284

  
308
    public TreeViewer getTreeViewerProperties() {
309
        return treeViewerProperties;
310
    }
311
    public TreeViewer getTreeViewerStructures() {
312
        return treeViewerStructures;
313
    }
314

  
315 285
    /**
316 286
     * {@inheritDoc}
317 287
     */
......
322 292
        selService.setSelection((isel.size() == 1 ? isel.getFirstElement() : isel.toArray()));
323 293
    }
324 294

  
295

  
325 296
    /**
326 297
     * {@inheritDoc}
327 298
     */
328 299
    @Override
329 300
    public void modifyText(ModifyEvent e) {
330
        featureTree.setTitleCache(featureTreeEditorComposite.getText_title().getText(), true);
301
        characterTreeEditorComposite.getFeatureTree().setTitleCache(characterTreeEditorComposite.getText_title().getText(), true);
331 302
        setDirty(true);
332 303
    }
333 304

  
305

  
334 306
    public void setDirty(boolean isDirty) {
335 307
        dirty.setDirty(isDirty);
336 308
    }
337 309

  
310
    private class FeatureTreeChooserListener extends SelectionAdapter{
311
        FeatureTreeEditorComposite featureTreeEditorComposite;
312

  
313
        public FeatureTreeChooserListener(FeatureTreeEditorComposite featureTreeEditorComposite) {
314
            super();
315
            this.featureTreeEditorComposite = featureTreeEditorComposite;
316
        }
317

  
318
        @Override
319
        public void widgetSelected(SelectionEvent e) {
320
            FeatureTree tree = FeatureTreeSelectionDialog.select(shell, conversation, null);
321
            if(tree!=null){
322
                featureTreeEditorComposite.setSelectedTree(tree, CharacterEditor.this);
323
            }
324
        }
325
    }
326

  
338 327
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java
15 15
import org.eclipse.swt.dnd.DragSourceListener;
16 16
import org.eclipse.swt.dnd.DropTargetListener;
17 17
import org.eclipse.swt.dnd.Transfer;
18
import org.eclipse.swt.events.ModifyListener;
18 19
import org.eclipse.swt.events.SelectionListener;
19 20
import org.eclipse.swt.layout.GridData;
20 21
import org.eclipse.swt.layout.GridLayout;
......
24 25
import org.eclipse.swt.widgets.Text;
25 26
import org.eclipse.swt.widgets.Tree;
26 27

  
28
import eu.etaxonomy.cdm.model.description.FeatureTree;
27 29
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
28 30
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
29 31
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
......
37 39
 */
38 40
public class FeatureTreeEditorComposite extends Composite{
39 41

  
42
    private FeatureTree featureTree;
43

  
40 44
    private Label label_title;
41 45
    private Text text_title;
42 46
    private Button btnOpenFeatureTree;
......
91 95

  
92 96
    public void init(DragSourceListener dragSourceListener,
93 97
            DropTargetListener dropTargetListener, ISelectionChangedListener viewerSelectionChangedListener,
94
            SelectionListener selectionListener, SelectionListener addButtonSelectionListener, SelectionListener removeButtonSelectionListener) {
98
            SelectionListener openFeatureTreeSelectionListener, SelectionListener addButtonSelectionListener, SelectionListener removeButtonSelectionListener) {
95 99
        viewer.setContentProvider(new FeatureTreeContentProvider());
96 100
        viewer.setLabelProvider(new FeatureTreeLabelProvider());
97 101

  
98 102
        int ops = DND.DROP_COPY | DND.DROP_MOVE;
99 103
        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
100 104
                .getInstance() };
101
        viewer.addDragSupport(ops, transfers, dragSourceListener);
102
        viewer.addDropSupport(ops, transfers, dropTargetListener);
105
        if(dragSourceListener!=null){
106
            viewer.addDragSupport(ops, transfers, dragSourceListener);
107
        }
108
        if(dropTargetListener!=null){
109
            viewer.addDropSupport(ops, transfers, dropTargetListener);
110
        }
103 111

  
104 112
        viewer.addSelectionChangedListener(viewerSelectionChangedListener);
105 113

  
106 114
        button_add.addSelectionListener(addButtonSelectionListener);
107 115
        button_remove.addSelectionListener(removeButtonSelectionListener);
108 116

  
109
        btnOpenFeatureTree.addSelectionListener(selectionListener);
117
        btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
118
    }
119

  
120
    public void setSelectedTree(FeatureTree featureTree, ModifyListener modifyListener) {
121
        this.featureTree = featureTree;
122

  
123
        getViewer().setInput(featureTree);
124

  
125
        getText_title().removeModifyListener(modifyListener);
126
        getText_title().setText(featureTree.getTitleCache());
127
        getText_title().addModifyListener(modifyListener);
128
    }
129

  
130
    /**
131
     * @return the featureTree
132
     */
133
    public FeatureTree getFeatureTree() {
134
        return featureTree;
110 135
    }
111 136

  
112 137
    /**

Also available in: Unified diff