1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package pl.edu.agh.cast.ui.outline;
19
20 import java.beans.PropertyChangeEvent;
21 import java.beans.PropertyChangeListener;
22 import java.util.LinkedList;
23 import java.util.List;
24
25 import org.eclipse.jface.viewers.ITreeContentProvider;
26 import org.eclipse.jface.viewers.Viewer;
27
28 import pl.edu.agh.cast.model.visual.backward.ConnectionGroup;
29 import pl.edu.agh.cast.model.visual.backward.IDiagram;
30 import pl.edu.agh.cast.model.visual.backward.Node;
31 import pl.edu.agh.cast.ui.AbstractConfigurableView;
32 import pl.edu.agh.cast.ui.AbstractContentProvider;
33
34
35
36
37
38
39 public class OutlineContentProvider extends AbstractContentProvider implements ITreeContentProvider,
40 PropertyChangeListener {
41
42
43
44
45
46
47
48
49
50 public OutlineContentProvider(Viewer viewer, AbstractConfigurableView view) {
51 super(viewer, view);
52 }
53
54
55
56
57
58
59
60 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
61 if (oldInput != null && oldInput instanceof IDiagram) {
62 ((IDiagram)oldInput).removePropertyChangeListener(this);
63 }
64 if (newInput != null && newInput instanceof IDiagram) {
65 ((IDiagram)newInput).addPropertyChangeListener(this);
66 }
67 }
68
69
70
71
72
73
74 public Object[] getChildren(Object parentElement) {
75 if (parentElement instanceof IDiagram) {
76 IDiagram diagram = (IDiagram)parentElement;
77
78 return diagram.getNodes().toArray();
79 }
80 if (parentElement instanceof Node) {
81 List<ConnectionGroupWrapper> wrappers = new LinkedList<ConnectionGroupWrapper>();
82 Node node = (Node)parentElement;
83 for (ConnectionGroup connectionGroup : node.getConnectionGroups()) {
84 if (connectionGroup.getSourceConnectionCountFor(node) > 0) {
85 wrappers.add(new ConnectionGroupWrapper(connectionGroup, node));
86 }
87 }
88 return wrappers.toArray();
89 }
90 return new Object[0];
91 }
92
93
94
95
96
97
98 public Object getParent(Object element) {
99 return null;
100 }
101
102
103
104
105
106
107 public boolean hasChildren(Object element) {
108 return getChildren(element).length > 0;
109 }
110
111
112
113
114
115
116 public Object[] getElements(Object inputElement) {
117 return getChildren(inputElement);
118 }
119
120
121
122
123
124
125 public void propertyChange(PropertyChangeEvent arg0) {
126 viewer.refresh();
127 }
128
129 }