Project

General

Profile

Download (9.19 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2017 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.termtree.e4;
10

    
11
import java.util.HashMap;
12
import java.util.Map;
13
import java.util.UUID;
14

    
15
import org.eclipse.jface.viewers.ISelectionChangedListener;
16
import org.eclipse.jface.viewers.TreeViewer;
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.dnd.DND;
19
import org.eclipse.swt.dnd.DragSourceListener;
20
import org.eclipse.swt.dnd.DropTargetListener;
21
import org.eclipse.swt.dnd.Transfer;
22
import org.eclipse.swt.events.ModifyListener;
23
import org.eclipse.swt.events.SelectionAdapter;
24
import org.eclipse.swt.events.SelectionEvent;
25
import org.eclipse.swt.events.SelectionListener;
26
import org.eclipse.swt.layout.GridData;
27
import org.eclipse.swt.layout.GridLayout;
28
import org.eclipse.swt.widgets.Button;
29
import org.eclipse.swt.widgets.Composite;
30
import org.eclipse.swt.widgets.Label;
31
import org.eclipse.swt.widgets.Text;
32
import org.eclipse.swt.widgets.Tree;
33

    
34
import eu.etaxonomy.cdm.api.service.ITermTreeService;
35
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
36
import eu.etaxonomy.cdm.model.term.TermTree;
37
import eu.etaxonomy.cdm.model.term.TermType;
38
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
39
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
40
import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
41
import eu.etaxonomy.taxeditor.l10n.Messages;
42
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
43
import eu.etaxonomy.taxeditor.model.ImageResources;
44
import eu.etaxonomy.taxeditor.store.CdmStore;
45
import eu.etaxonomy.taxeditor.store.StoreUtil;
46
import eu.etaxonomy.taxeditor.termtree.CharacterNodeDtoTransfer;
47
import eu.etaxonomy.taxeditor.termtree.TermTreeContentProvider;
48
import eu.etaxonomy.taxeditor.termtree.TermTreeLabelProvider;
49
import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
50

    
51
/**
52
 * @author pplitzner
53
 * @since Jun 19, 2017
54
 */
55
public class TermTreeDtoEditorComposite <T extends DefinedTermBase> extends Composite{
56

    
57
    private TermTreeDto featureTree;
58

    
59
    private Label label_title;
60
    private Text text_title;
61
    private Button btnOpenFeatureTree;
62
    private TreeViewer viewer;
63

    
64
    private Map<UUID, TermNodeDto> nodeUuidMap = new HashMap<>();
65

    
66
    public TermTreeDtoEditorComposite(Composite parent, int style) {
67
        super(parent, style);
68
        setLayout(new GridLayout(1, false));
69

    
70
        Composite composite_treeTitle = new Composite(this, SWT.NULL);
71
        composite_treeTitle.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
72
                false));
73
        GridLayout gl_composite_treeTitle = new GridLayout(3, false);
74
        gl_composite_treeTitle.marginWidth = 0;
75
        composite_treeTitle.setLayout(gl_composite_treeTitle);
76

    
77
        label_title = new Label(composite_treeTitle, SWT.NULL);
78
        label_title.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
79
        label_title.setText(Messages.TermTreeEditorComposite_FEATURE_TREE);
80

    
81
        text_title = new Text(composite_treeTitle, SWT.BORDER);
82
        text_title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
83
        text_title.setEditable(false);
84

    
85
        btnOpenFeatureTree = new Button(composite_treeTitle, SWT.NONE);
86
        btnOpenFeatureTree.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
87
        btnOpenFeatureTree.setToolTipText(Messages.TermTreeEditorComposite_OPEN_TREE);
88
        btnOpenFeatureTree.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
89

    
90
        viewer = new TreeViewer(new Tree(this, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI));
91
        Tree tree = viewer.getTree();
92
        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
93
        viewer.getControl().setLayoutData(
94
                new GridData(SWT.FILL, SWT.FILL, true, true));
95
    }
96

    
97
    public void init(String label,
98
            DragSourceListener dragSourceListener,
99
            DropTargetListener dropTargetListener,
100
            ISelectionChangedListener viewerSelectionChangedListener,
101
            IDirtyMarkable dirtyMarkable,
102
            ModifyListener textModifyListener) {
103
        init(label,
104
                null,
105
                dragSourceListener,
106
                dropTargetListener,
107
                null,
108
                viewerSelectionChangedListener,
109
                null,
110
                dirtyMarkable,
111
                textModifyListener);
112
    }
113

    
114
    public void init(String label, TermType termType,
115
            DragSourceListener dragSourceListener,
116
            DropTargetListener dropTargetListener,
117
            ISelectionChangedListener viewerSelectionChangedListener,
118
            IDirtyMarkable dirtyMarkable,
119
            ModifyListener textModifyListener) {
120
        this.init(label,
121
                termType,
122
                dragSourceListener,
123
                dropTargetListener,
124
                null,
125
                viewerSelectionChangedListener,
126
                null,
127
                dirtyMarkable,
128
                textModifyListener);
129
    }
130
    public void init(DragSourceListener dragSourceListener,
131
            DropTargetListener dropTargetListener,
132
            Transfer[] transfers,
133
            ISelectionChangedListener viewerSelectionChangedListener,
134
            SelectionListener openFeatureTreeSelectionListener,
135
            ModifyListener textModifyListener) {
136
        init(null,
137
                null,
138
                dragSourceListener,
139
                dropTargetListener,
140
                transfers,
141
                viewerSelectionChangedListener,
142
                openFeatureTreeSelectionListener,
143
                null,
144
                textModifyListener);
145
    }
146
    private void init(String label,
147
            TermType termType,
148
            DragSourceListener dragSourceListener,
149
            DropTargetListener dropTargetListener,
150
            Transfer[] transfers,
151
            ISelectionChangedListener viewerSelectionChangedListener,
152
            SelectionListener openFeatureTreeSelectionListener,
153
            IDirtyMarkable dirtyMarkable,
154
            ModifyListener textModifyListener) {
155
        if(label!=null){
156
            label_title.setText(label);
157
        }
158

    
159
        viewer.setContentProvider(new TermTreeContentProvider());
160
        viewer.setLabelProvider(new TermTreeLabelProvider());
161

    
162
        int ops = DND.DROP_COPY | DND.DROP_MOVE;
163
        if(transfers==null){
164
        transfers = new Transfer[] {
165
                CharacterNodeDtoTransfer.getInstance(),
166
                TermTransfer.getInstance(),
167
                };
168
        }
169
        if(dragSourceListener!=null){
170
            viewer.addDragSupport(ops, transfers, dragSourceListener);
171
        }
172
        if(dropTargetListener!=null){
173
            viewer.addDropSupport(ops, transfers, dropTargetListener);
174
        }
175

    
176
        if(viewerSelectionChangedListener!=null){
177
            viewer.addSelectionChangedListener(viewerSelectionChangedListener);
178
        }
179

    
180
        if(textModifyListener!=null){
181
            text_title.addModifyListener(textModifyListener);
182
        }
183

    
184
        //add specific selection listener
185
        if(openFeatureTreeSelectionListener!=null){
186
            btnOpenFeatureTree.addSelectionListener(openFeatureTreeSelectionListener);
187
        }
188
        else{
189
            //add default selection listener
190
            btnOpenFeatureTree.addSelectionListener(new SelectionAdapter(){
191
                @Override
192
                public void widgetSelected(SelectionEvent e) {
193
                    TermTree<T> tree = FeatureTreeSelectionDialog.select(getDisplay().getActiveShell(),
194
                            null, termType);
195
                    if(tree!=null){
196
                        setSelectedTree(tree);
197
                        if(dirtyMarkable!=null){
198
                            dirtyMarkable.forceDirty();
199
                        }
200
                    }
201
                }
202
            });
203
        }
204
    }
205

    
206
    public void setSelectedTree(TermTree<T> featureTree) {
207
        this.featureTree = CdmStore.getService(ITermTreeService.class).getTermTreeDtoByUuid(featureTree.getUuid());
208
        addChildNodesToMap(this.featureTree.getRoot());
209
        viewer.setInput(this.featureTree);
210

    
211
        StoreUtil.setTextWithoutModifyListeners(text_title, featureTree!=null?featureTree.getTitleCache():"");
212
    }
213

    
214
    private void addChildNodesToMap(TermNodeDto root) {
215
        this.nodeUuidMap.put(root.getUuid(), root);
216
        if (root.getTerm() != null){
217
            this.featureTree.addTerm(root.getTerm());
218
        }
219
        for (TermNodeDto child: root.getChildren()){
220
            addChildNodesToMap(child);
221
        }
222

    
223
    }
224

    
225
 public TermTreeDto getFeatureTree() {
226
        return featureTree;
227
    }
228

    
229
    public Label getLabel_title() {
230
        return label_title;
231
    }
232

    
233
    public Button getBtnOpenFeatureTree() {
234
        return btnOpenFeatureTree;
235
    }
236

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

    
241
    public Map<UUID, TermNodeDto> getNodeUuidMap() {
242
        return nodeUuidMap;
243
    }
244

    
245
    public void setNodeUuidMap(Map<UUID, TermNodeDto> nodeUuidMap) {
246
        this.nodeUuidMap = nodeUuidMap;
247
    }
248

    
249
    /**
250
     *
251
     */
252
    public void refresh() {
253
        getViewer().setInput(getViewer().getInput());
254
        addChildNodesToMap(this.featureTree.getRoot());
255

    
256
    }
257

    
258

    
259

    
260
}
(7-7/10)