2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.featuretree
.e4
;
11 import java
.util
.HashMap
;
13 import java
.util
.UUID
;
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
;
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
.featuretree
.CharacterNodeDtoTransfer
;
42 import eu
.etaxonomy
.taxeditor
.featuretree
.FeatureTreeContentProvider
;
43 import eu
.etaxonomy
.taxeditor
.featuretree
.FeatureTreeLabelProvider
;
44 import eu
.etaxonomy
.taxeditor
.l10n
.Messages
;
45 import eu
.etaxonomy
.taxeditor
.model
.IDirtyMarkable
;
46 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
47 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
48 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
49 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.selection
.FeatureTreeSelectionDialog
;
55 public class FeatureTreeDtoEditorComposite
<T
extends DefinedTermBase
> extends Composite
{
57 private TermTreeDto featureTree
;
59 private Label label_title
;
60 private Text text_title
;
61 private Button btnOpenFeatureTree
;
62 private TreeViewer viewer
;
64 private Map
<UUID
, TermNodeDto
> nodeUuidMap
= new HashMap
<>();
66 public FeatureTreeDtoEditorComposite(Composite parent
, int style
) {
68 setLayout(new GridLayout(1, false));
70 Composite composite_treeTitle
= new Composite(this, SWT
.NULL
);
71 composite_treeTitle
.setLayoutData(new GridData(SWT
.FILL
, SWT
.TOP
, true,
73 GridLayout gl_composite_treeTitle
= new GridLayout(3, false);
74 gl_composite_treeTitle
.marginWidth
= 0;
75 composite_treeTitle
.setLayout(gl_composite_treeTitle
);
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
.FeatureTreeEditorComposite_FEATURE_TREE
);
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);
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
.FeatureTreeEditorComposite_OPEN_TREE
);
88 btnOpenFeatureTree
.setImage(ImageResources
.getImage(ImageResources
.BROWSE_ICON
));
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));
97 public void init(String label
,
98 DragSourceListener dragSourceListener
,
99 DropTargetListener dropTargetListener
,
100 ISelectionChangedListener viewerSelectionChangedListener
,
101 IDirtyMarkable dirtyMarkable
,
102 ModifyListener textModifyListener
) {
108 viewerSelectionChangedListener
,
114 public void init(String label
, TermType termType
,
115 DragSourceListener dragSourceListener
,
116 DropTargetListener dropTargetListener
,
117 ISelectionChangedListener viewerSelectionChangedListener
,
118 IDirtyMarkable dirtyMarkable
,
119 ModifyListener textModifyListener
) {
125 viewerSelectionChangedListener
,
130 public void init(DragSourceListener dragSourceListener
,
131 DropTargetListener dropTargetListener
,
132 Transfer
[] transfers
,
133 ISelectionChangedListener viewerSelectionChangedListener
,
134 SelectionListener openFeatureTreeSelectionListener
,
135 ModifyListener textModifyListener
) {
141 viewerSelectionChangedListener
,
142 openFeatureTreeSelectionListener
,
146 private void init(String label
,
148 DragSourceListener dragSourceListener
,
149 DropTargetListener dropTargetListener
,
150 Transfer
[] transfers
,
151 ISelectionChangedListener viewerSelectionChangedListener
,
152 SelectionListener openFeatureTreeSelectionListener
,
153 IDirtyMarkable dirtyMarkable
,
154 ModifyListener textModifyListener
) {
156 label_title
.setText(label
);
159 viewer
.setContentProvider(new FeatureTreeContentProvider());
160 viewer
.setLabelProvider(new FeatureTreeLabelProvider());
162 int ops
= DND
.DROP_COPY
| DND
.DROP_MOVE
;
164 transfers
= new Transfer
[] {
165 CharacterNodeDtoTransfer
.getInstance(),
166 TermTransfer
.getInstance(),
169 if(dragSourceListener
!=null){
170 viewer
.addDragSupport(ops
, transfers
, dragSourceListener
);
172 if(dropTargetListener
!=null){
173 viewer
.addDropSupport(ops
, transfers
, dropTargetListener
);
176 if(viewerSelectionChangedListener
!=null){
177 viewer
.addSelectionChangedListener(viewerSelectionChangedListener
);
180 if(textModifyListener
!=null){
181 text_title
.addModifyListener(textModifyListener
);
184 //add specific selection listener
185 if(openFeatureTreeSelectionListener
!=null){
186 btnOpenFeatureTree
.addSelectionListener(openFeatureTreeSelectionListener
);
189 //add default selection listener
190 btnOpenFeatureTree
.addSelectionListener(new SelectionAdapter(){
192 public void widgetSelected(SelectionEvent e
) {
193 TermTree
<T
> tree
= FeatureTreeSelectionDialog
.select(getDisplay().getActiveShell(),
196 setSelectedTree(tree
);
197 if(dirtyMarkable
!=null){
198 dirtyMarkable
.forceDirty();
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
);
211 StoreUtil
.setTextWithoutModifyListeners(text_title
, featureTree
!=null?featureTree
.getTitleCache():"");
214 private void addChildNodesToMap(TermNodeDto root
) {
215 this.nodeUuidMap
.put(root
.getUuid(), root
);
216 for (TermNodeDto child
: root
.getChildren()){
217 addChildNodesToMap(child
);
222 public TermTreeDto
getFeatureTree() {
226 public Label
getLabel_title() {
230 public Button
getBtnOpenFeatureTree() {
231 return btnOpenFeatureTree
;
234 public TreeViewer
getViewer() {
238 public Map
<UUID
, TermNodeDto
> getNodeUuidMap() {
242 public void setNodeUuidMap(Map
<UUID
, TermNodeDto
> nodeUuidMap
) {
243 this.nodeUuidMap
= nodeUuidMap
;
249 public void refresh() {
250 getViewer().setInput(getViewer().getInput());
251 addChildNodesToMap(this.featureTree
.getRoot());