1 4 package org.hibernate.eclipse.mapper.extractor; 5 6 import java.util.ArrayList ; 7 import java.util.HashSet ; 8 import java.util.Iterator ; 9 import java.util.List ; 10 import java.util.Set ; 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 ; 21 import org.w3c.dom.Node ; 22 23 public class HibernateTypeHandler implements HBMInfoHandler { 24 25 private final HBMInfoExtractor extractor; 26 27 30 public HibernateTypeHandler(HBMInfoExtractor extractor) { 31 this.extractor = extractor; 32 } 33 34 public ICompletionProposal[] attributeCompletionProposals(IJavaProject project, Node node, String attributeName, String start, int offset) { 35 List types = this.extractor.findMatchingHibernateTypes(start); 36 37 List proposals = new ArrayList (types.size()); 38 for (Iterator iter = types.iterator(); iter.hasNext();) { 39 HibernateTypeDescriptor element = (HibernateTypeDescriptor) iter.next(); 40 String 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 alreadyFound = new HashSet (); 53 if (typeInterface != null) { 54 ITypeHierarchy hier = typeInterface.newTypeHierarchy(project, new NullProgressMonitor()); 55 IType[] classes = hier.getAllSubtypes(typeInterface); 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); this.extractor.generateTypeProposals(start, offset, proposals, alreadyFound, classes); 64 } 65 } catch (CoreException e) { 66 throw new RuntimeException (e); } 68 69 ICompletionProposal[] result = (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]); 70 return result; 71 } 72 73 public IJavaElement getJavaElement(IJavaProject project, Node currentNode, Attr currentAttrNode) { 74 return extractor.getNearestTypeJavaElement(project, currentNode); 75 }} | Popular Tags |