/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.hibernate.eclipse.jdt.ui.internal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer; import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.IContextInformation; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.eclipse.console.HibernateConsolePlugin; import org.hibernate.eclipse.console.common.CompletionProposalsResult; import org.hibernate.eclipse.console.common.ConsoleExtension; import org.hibernate.eclipse.hqleditor.HQLCompletionProcessor; import org.hibernate.eclipse.nature.HibernateNature; public class HQLJavaCompletionProposalComputer implements IJavaCompletionProposalComputer { HQLCompletionProcessor hqlProcessor; private String errorMessage; public HQLJavaCompletionProposalComputer() { super(); hqlProcessor = new HQLCompletionProcessor(null); } ConsoleConfiguration getConfiguration(IJavaProject javaProject) { if(javaProject != null) { HibernateNature nature = HibernateNature.getHibernateNature( javaProject ); if(nature!=null) { return nature.getDefaultConsoleConfiguration(); } else { return null; } } else { return null; } } public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) { List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); errorMessage = null; if (!(context instanceof JavaContentAssistInvocationContext)) { return proposals; } JavaContentAssistInvocationContext ctx = (JavaContentAssistInvocationContext)context; try { ConsoleConfiguration consoleConfiguration = getConfiguration( ctx.getProject() ); if(consoleConfiguration!=null) { String query = ""; //$NON-NLS-1$ int stringStart = getStringStart( ctx.getDocument(), ctx.getInvocationOffset() ); int stringEnd = getStringEnd( ctx.getDocument(), ctx.getInvocationOffset() ); query = ctx.getDocument().get(stringStart, stringEnd-stringStart ); ConsoleExtension consoleExtension = consoleConfiguration.getHibernateExtension().getConsoleExtension(); if (consoleExtension != null){ CompletionProposalsResult codeCompletions = consoleExtension.hqlCodeComplete(query, stringStart, ctx.getInvocationOffset() - stringStart); errorMessage = codeCompletions.getErrorMessage(); proposals = codeCompletions.getCompletionProposals(); } else { errorMessage = "There is no completion proposal implementation for this hibernate version \'" //$NON-NLS-1$ + consoleConfiguration.getHibernateExtension().getHibernateVersion() + "\'"; //$NON-NLS-1$ } } } catch(RuntimeException re) { HibernateConsolePlugin.getDefault().logErrorMessage( JdtUiMessages.HQLJavaCompletionProposalComputer_errormessage, re ); } catch (BadLocationException e) { HibernateConsolePlugin.getDefault().logErrorMessage( JdtUiMessages.HQLJavaCompletionProposalComputer_errormessage, e ); } return proposals; } public int getStringStart(IDocument document, int location) throws BadLocationException { if (document == null) { return -1; } int end = location; int start = end; while (--start >= 0) { if ('"'==document.getChar(start)) { break; } } start++; return start; } public int getStringEnd(IDocument document, int location) throws BadLocationException { if (document == null) { return -1; } int end = document.getLength(); int start = location; while (start < end) { char c = document.getChar(start); if ('"'==c) { break; } start++; } return start; } public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) { return Collections.emptyList(); } public String getErrorMessage() { return errorMessage; } public void sessionEnded() { } public void sessionStarted() { } }