/* * 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.criteriaeditor; import org.eclipse.jdt.core.CompletionContext; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.text.java.CompletionProposalCollector; import org.eclipse.jdt.ui.text.java.CompletionProposalComparator; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.contentassist.IContextInformationValidator; import org.eclipse.swt.widgets.Shell; import org.hibernate.eclipse.console.HibernateConsoleMessages; import org.hibernate.eclipse.console.HibernateConsolePlugin; import org.hibernate.eclipse.console.utils.ProjectUtils; import org.hibernate.eclipse.hqleditor.CompletionHelper; import org.hibernate.util.xpl.StringHelper; public class JavaCompletionProcessor implements IContentAssistProcessor { private CompletionProposalCollector collector; private CriteriaEditor editor; private CompletionProposalComparator comparator; private String lastErrorMessage; private char[] proposalAutoActivationSet; public JavaCompletionProcessor(CriteriaEditor editor) { this.editor = editor; comparator = new CompletionProposalComparator(); } public String getErrorMessage() { return lastErrorMessage; } protected void setErrorMessage(String message) { if ( StringHelper.isEmpty(message) ) { message = null; } lastErrorMessage = message; } public IContextInformationValidator getContextInformationValidator() { return null; } public char[] getContextInformationAutoActivationCharacters() { return null; } public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) { return null; } public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int position) { try { setErrorMessage( null ); if(editor.getConsoleConfiguration()==null) { setErrorMessage( HibernateConsoleMessages.JavaCompletionProcessor_no_console_configuration_found ); return new ICompletionProposal[0]; } String prefix = HibernateConsoleMessages.JavaCompletionProcessor_session_session; // has to do this because of https://bugs.eclipse.org/bugs/show_bug.cgi?id=141518 IJavaCompletionProposal[] results = new IJavaCompletionProposal[0]; IJavaProject[] projects = null; //try { projects = ProjectUtils.findJavaProjects(editor.getConsoleConfiguration()); /*} catch (RuntimeException e){ String mess = NLS.bind(HibernateConsoleMessages.JavaCompletionProcessor_error_find_project, editor.getConsoleConfiguration().getName()); HibernateConsolePlugin.getDefault().logErrorMessage(mess, e); }*/ for (int i = 0; projects != null && i < projects.length && results.length <= 0; i++) { IJavaProject javaProject = projects[i]; collector = new CompletionProposalCollector( javaProject ); collector.acceptContext( new CompletionContext() ); try { editor.codeComplete( prefix, collector, position, javaProject ); } catch (JavaModelException x) { Shell shell = viewer.getTextWidget().getShell(); ErrorDialog .openError( shell, HibernateConsoleMessages.JavaCompletionProcessor_error, HibernateConsoleMessages.JavaCompletionProcessor_error_while_performing_code_completion, x.getStatus() ); HibernateConsolePlugin.getDefault().log( x ); } results = collector.getJavaCompletionProposals(); } CompletionHelper.transpose( null, -prefix.length(), results ); /*if (editor.getConsoleConfiguration().getConfiguration() == null){ ICompletionProposal[] results2 = new ICompletionProposal[results.length + 1]; System.arraycopy(results, 0, results2, 1, results.length); results2[0] = new LoadConsoleCFGCompletionProposal(editor.getConsoleConfiguration()); return results2; }*/ return results; } finally { if(collector!=null) { setErrorMessage( collector.getErrorMessage() ); collector = null; } } } public char[] getCompletionProposalAutoActivationCharacters() { return proposalAutoActivationSet; } public void setCompletionProposalAutoActivationCharacters( char[] activationSet) { proposalAutoActivationSet = activationSet; } public void orderProposalsAlphabetically(boolean order) { comparator.setOrderAlphabetically( order ); } }