KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > hibernate > eclipse > mapper > extractor > HibernateTypeHandler


1 /**
2  *
3  */

4 package org.hibernate.eclipse.mapper.extractor;
5
6 import java.util.ArrayList JavaDoc;
7 import java.util.HashSet JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.List JavaDoc;
10 import java.util.Set JavaDoc;
11
12 import org.eclipse.core.runtime.CoreException;
13 import org.eclipse.core.runtime.NullProgressMonitor;
14 import org.eclipse.jdt.core.IJavaElement;
15 import org.eclipse.jdt.core.IJavaProject;
16 import org.eclipse.jdt.core.IType;
17 import org.eclipse.jdt.core.ITypeHierarchy;
18 import org.eclipse.jface.text.contentassist.CompletionProposal;
19 import org.eclipse.jface.text.contentassist.ICompletionProposal;
20 import org.w3c.dom.Attr JavaDoc;
21 import org.w3c.dom.Node JavaDoc;
22
23 public class HibernateTypeHandler implements HBMInfoHandler {
24
25     private final HBMInfoExtractor extractor;
26
27     /**
28      * @param extractor
29      */

30     public HibernateTypeHandler(HBMInfoExtractor extractor) {
31         this.extractor = extractor;
32     }
33
34     public ICompletionProposal[] attributeCompletionProposals(IJavaProject project, Node JavaDoc node, String JavaDoc attributeName, String JavaDoc start, int offset) {
35         List JavaDoc types = this.extractor.findMatchingHibernateTypes(start);
36         
37         List JavaDoc proposals = new ArrayList JavaDoc(types.size());
38         for (Iterator JavaDoc iter = types.iterator(); iter.hasNext();) {
39             HibernateTypeDescriptor element = (HibernateTypeDescriptor) iter.next();
40             String JavaDoc extendedinfo = "<b>Hibernate type</b>: " + element.getName();
41             if(element.getReturnClass()!=null) {
42                 extendedinfo += "<br><b>Return class</b>: " + element.getReturnClass();
43             }
44             if(element.getPrimitiveClass()!=null) {
45                 extendedinfo += "<br><b>Return primitive</b>: " + element.getPrimitiveClass();
46             }
47             proposals.add(new CompletionProposal(element.getName(), offset, start.length(), element.getName().length(), null, null, null, extendedinfo));
48         }
49         
50         try {
51             IType typeInterface = project.findType("org.hibernate.usertype.CompositeUserType");
52             Set JavaDoc alreadyFound = new HashSet JavaDoc();
53             if (typeInterface != null) {
54                 ITypeHierarchy hier = typeInterface.newTypeHierarchy(project, new NullProgressMonitor());
55                 IType[] classes = hier.getAllSubtypes(typeInterface); // TODO: cache these results ?
56
this.extractor.generateTypeProposals(start, offset, proposals, alreadyFound, classes);
57             }
58             
59             typeInterface = project.findType("org.hibernate.usertype.UserType");
60             if (typeInterface != null) {
61                 ITypeHierarchy hier = typeInterface.newTypeHierarchy(project, new NullProgressMonitor());
62                 IType[] classes = hier.getAllSubtypes(typeInterface); // TODO: cache these results ?
63
this.extractor.generateTypeProposals(start, offset, proposals, alreadyFound, classes);
64             }
65         } catch (CoreException e) {
66             throw new RuntimeException JavaDoc(e); // TODO: log as error!
67
}
68         
69         ICompletionProposal[] result = (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
70         return result;
71     }
72
73     public IJavaElement getJavaElement(IJavaProject project, Node JavaDoc currentNode, Attr JavaDoc currentAttrNode) {
74         return extractor.getNearestTypeJavaElement(project, currentNode);
75     }}
Popular Tags