1
2
3
4
5
6 package org.dbe.studio.tools.ontologyviewer.views;
7
8 import java.util.ArrayList;
9 import java.util.Collections;
10 import java.util.Comparator;
11 import java.util.Hashtable;
12 import java.util.List;
13 import java.util.Vector;
14
15 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmComplementClass;
16 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmEnumeratedClass;
17 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmIntersectionClass;
18 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmOntology;
19 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmOntologyClass;
20 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmProperty;
21 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmRestrictionClass;
22 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmThingClass;
23 import org.dbe.studio.tools.ontologyviewer.metamodels.odm.OdmUnionClass;
24 import org.dbe.studio.tools.ontologyviewer.utils.ClassInfo;
25 import org.eclipse.jface.viewers.ITreeContentProvider;
26 import org.eclipse.jface.viewers.TreeViewer;
27 import org.eclipse.jface.viewers.Viewer;
28
29 /***
30 *
31 */
32 public class OntologyTreeContentProvider implements ITreeContentProvider {
33 private static Object[] EMPTY_ARRAY = new Object[0];
34
35
36
37 TreeViewer theTreeViewer;
38
39 public static String SUB_CLASS = "Sub-classes",
40 OBJ_PROPS = "Object Properties",
41 DATA_TYPE_PROPS = "Datatype Properties",
42 CLASS_EXTENSION = "Class Extension",
43 EQUIVALENT = "Equivalent Classes",
44 DISJOINT = "Disjoint Classes",
45 ONE_OF = "oneOf",
46 UNION = "unionOf",
47 INTERSECTION = "intersectionOf",
48 COMPLEMENT = "complementOf",
49 RESTRICTION = "restrictionOn",
50 SUB_PROPERTY = "Sub-properties",
51 EQUIVALENT_PROPS= "Equivalent Properties";
52 /***
53 *
54 */
55 public OntologyTreeContentProvider(TreeViewer treeV) {
56 super();
57 theTreeViewer = treeV;
58 }
59
60
61
62
63 public Object[] getChildren(Object parentElement) {
64
65 ClassInfo ci;
66 Vector v;
67 Vector classInfoVector = new Vector();
68 if ( parentElement instanceof OntologyTree ) {
69 return new Object[] {((OntologyTree)parentElement).getRoot()};
70 }
71 else if (parentElement instanceof OdmOntology ) {
72
73 Hashtable c = ((OdmOntology)parentElement).getClasses();
74 if (c != null) {
75 List l = new ArrayList();
76 l.addAll(c.values());
77
78 Collections.sort(l, new Comparator() {
79 public int compare(Object o1, Object o2) {
80 return ((OdmOntologyClass)o1).getName().compareToIgnoreCase(
81 ((OdmOntologyClass)o2).getName());
82 }
83 });
84
85 return l.toArray();
86 }
87 }
88 else if ( parentElement instanceof OdmOntologyClass) {
89 OdmOntologyClass ontClass = ((OdmOntologyClass)parentElement);
90
91
92 if (ontClass.getSuperClassOf() != null) {
93 v = new Vector(ontClass.getSuperClassOf().values());
94 ci = new ClassInfo(SUB_CLASS, v);
95 classInfoVector.add(ci);
96 }
97
98 if (ontClass.getObjectProperties() != null) {
99 ci = new ClassInfo(OBJ_PROPS, ontClass.getObjectProperties());
100 classInfoVector.add(ci);
101 }
102
103 if (ontClass.getDatatypeProperties() != null) {
104 v = new Vector(ontClass.getDatatypeProperties().values());
105 ci = new ClassInfo(DATA_TYPE_PROPS, v);
106 classInfoVector.add(ci);
107 }
108
109 if (ontClass.getClassExtension() != null) {
110 ci = new ClassInfo(CLASS_EXTENSION,ontClass.getClassExtension() );
111 classInfoVector.add(ci);
112 }
113
114 if (ontClass.getEquivalentClasses() != null) {
115 ci = new ClassInfo(EQUIVALENT, ontClass.getEquivalentClasses() );
116 classInfoVector.add(ci);
117 }
118
119 if (ontClass.getDisjointWithClasses() != null) {
120 ci = new ClassInfo(DISJOINT, ontClass.getDisjointWithClasses() );
121 classInfoVector.add(ci);
122 }
123
124
125 if (parentElement instanceof OdmEnumeratedClass ) {
126 ci = new ClassInfo(ONE_OF, ((OdmEnumeratedClass)ontClass).getOneOf() );
127 classInfoVector.add(0,ci);
128 }
129 else if (parentElement instanceof OdmUnionClass ) {
130 ci = new ClassInfo(UNION, ((OdmUnionClass)ontClass).getClassDescription() );
131 classInfoVector.add(0,ci);
132 }
133 else if (parentElement instanceof OdmIntersectionClass ) {
134 ci = new ClassInfo( INTERSECTION, ((OdmIntersectionClass)ontClass)
135 .getClassDescription() );
136 classInfoVector.add(0,ci);
137 }
138 else if (parentElement instanceof OdmComplementClass ) {
139 v = new Vector();
140 v.add(((OdmComplementClass)ontClass).getComplementOf());
141 ci = new ClassInfo(COMPLEMENT, v) ;
142 classInfoVector.add(0,ci);
143 }
144 else if (parentElement instanceof OdmRestrictionClass ) {
145 v = new Vector();
146 v.add(((OdmRestrictionClass)parentElement).getOnProperty());
147 ci = new ClassInfo(RESTRICTION, v);
148 classInfoVector.add(0,ci);
149 }
150
151 return classInfoVector.toArray();
152 }
153 else if (parentElement instanceof OdmProperty) {
154 if (((OdmProperty)parentElement).getSuperPropertyOf() != null ) {
155 v = new Vector(((OdmProperty)parentElement).getSuperPropertyOf()
156 .values());
157 ci = new ClassInfo(SUB_PROPERTY, v) ;
158 classInfoVector.add(0,ci);
159
160 }
161 if (((OdmProperty)parentElement).getEquivalentProperties() != null ) {
162 v = new Vector();
163 v.add(((OdmProperty)parentElement).getEquivalentProperties());
164 ci = new ClassInfo(EQUIVALENT_PROPS, v) ;
165 classInfoVector.add(0,ci);
166 }
167 return classInfoVector.toArray();
168 }
169 else if (parentElement instanceof ClassInfo) {
170 return ((ClassInfo)parentElement).children.toArray();
171 }
172 return EMPTY_ARRAY;
173 }
174
175
176
177
178 public Object getParent(Object element) {
179 return null;
180 }
181
182
183
184
185 public boolean hasChildren(Object element) {
186 if ( element instanceof OntologyTree ) {
187 return true;
188 }
189 else if (element instanceof OdmOntology ) {
190 return true;
191 }
192 else if ( element instanceof OdmProperty ) {
193 if ( ((OdmProperty)element).getSuperPropertyOf() != null ||
194 ((OdmProperty)element).getEquivalentProperties() != null ){
195 return true;
196 }
197 return false;
198 }
199 else if ( element instanceof OdmThingClass ) {
200 return false;
201 }
202 else if ( element instanceof OdmUnionClass ) {
203 if ( ((OdmUnionClass)element).getClassDescription() != null ) {
204 return true;
205 }
206 }
207 else if ( element instanceof OdmIntersectionClass ) {
208 if ( ((OdmIntersectionClass)element).getClassDescription() != null ) {
209 return true;
210 }
211 }
212 else if (element instanceof OdmComplementClass) {
213 if ( ((OdmComplementClass)element).getComplementOf() != null) {
214 return true;
215 }
216 }
217 else if (element instanceof OdmRestrictionClass) {
218 return true;
219 }
220
221 else if (element instanceof OdmEnumeratedClass) {
222 return true;
223 }
224 else if ( element instanceof OdmOntologyClass) {
225 OdmOntologyClass ontClass = (OdmOntologyClass)element;
226 if ( ontClass.getDatatypeProperties() != null ||
227 ontClass.getObjectProperties() != null ||
228 ontClass.getSuperClassOf() != null ) {
229
230 return true;
231 }
232 else {
233 return false;
234 }
235 }
236 else if (element instanceof ClassInfo) {
237 return true;
238 }
239 return false;
240 }
241
242
243
244
245 public Object[] getElements(Object inputElement) {
246 if (inputElement instanceof OntologyTree ) {
247 return new Object[] {((OntologyTree)inputElement).getRoot()};
248 }
249 else {
250 return EMPTY_ARRAY;
251 }
252 }
253
254
255
256
257 public void dispose() {
258
259 }
260
261
262
263
264 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
265
266 }
267 }