View Javadoc

1   /*
2    * @author Giorgos Anestis, TUC/MUSIC
3    *  
4    * @version 2.0
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  	//test
37  	TreeViewer theTreeViewer;
38  	//end of test
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  	/* (non-Javadoc)
61  	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
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  			//present the classes of the ontology in alphabetical order
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  			// create the sub-class node
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  			// create the object Properties node
98  			if (ontClass.getObjectProperties() != null) {					
99  				ci = new ClassInfo(OBJ_PROPS, ontClass.getObjectProperties());
100 				classInfoVector.add(ci);
101 			}
102 			//	create the datatype properties node
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 			//	create the class extension node
109 			if (ontClass.getClassExtension() != null) {			
110 				ci = new ClassInfo(CLASS_EXTENSION,ontClass.getClassExtension() );
111 				classInfoVector.add(ci);
112 			}
113 			//	create the equivalent classes node
114 			if (ontClass.getEquivalentClasses() != null) {		
115 				ci = new ClassInfo(EQUIVALENT, ontClass.getEquivalentClasses() );
116 				classInfoVector.add(ci);
117 			}
118 			// create the disjoint with classes node
119 			if (ontClass.getDisjointWithClasses() != null) {	
120 				ci = new ClassInfo(DISJOINT, ontClass.getDisjointWithClasses() );
121 				classInfoVector.add(ci);
122 			}
123 			
124 			// find out what exactly is the parentElement
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 	/* (non-Javadoc)
176 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
177 	 */
178 	public Object getParent(Object element) {		
179 		return null;	
180 	}
181 
182 	/* (non-Javadoc)
183 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
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 		//addition 150905
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 	/* (non-Javadoc)
243 	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
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 	/* (non-Javadoc)
255 	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
256 	 */
257 	public void dispose() {
258 		
259 	}
260 
261 	/* (non-Javadoc)
262 	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
263 	 */
264 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {		
265 		
266 	}
267 }