| /******************************************************************************* |
| * Copyright (c) 2006 Oracle Corporation. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Cameron Bateman/Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.jst.jsf.ui.internal.contentassist.el; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IStatus; |
| 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.jst.jsf.context.structureddocument.IStructuredDocumentContext; |
| import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory; |
| import org.eclipse.jst.jsf.core.internal.contentassist.el.ContentAssistParser; |
| import org.eclipse.jst.jsf.core.internal.contentassist.el.ContentAssistStrategy; |
| import org.eclipse.jst.jsf.designtime.DTAppManagerUtil; |
| import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter; |
| import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException; |
| import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter.DTELExpression; |
| import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin; |
| import org.eclipse.wst.xml.ui.internal.contentassist.ProposalComparator; |
| |
| /** |
| * The content assist processor for JSF EL partitions on attribute values. |
| * |
| * @author cbateman |
| * |
| */ |
| public class JSFELContentAssistProcessor implements IContentAssistProcessor |
| { |
| /** |
| * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, |
| * int) |
| */ |
| public ICompletionProposal[] computeCompletionProposals( |
| final ITextViewer viewer, final int documentPosition) |
| { |
| final List<ICompletionProposal> proposals = |
| new ArrayList<ICompletionProposal>(); |
| final IStructuredDocumentContext context = |
| IStructuredDocumentContextFactory.INSTANCE.getContext(viewer, |
| documentPosition); |
| if (context != null) |
| { |
| final XMLViewDefnAdapter viewAdapter = |
| DTAppManagerUtil.getXMLViewDefnAdapter(context); |
| |
| if (viewAdapter != null) |
| { |
| try |
| { |
| final DTELExpression elExpression = |
| viewAdapter.getELExpression(context); |
| |
| if (elExpression != null) |
| { |
| final ContentAssistStrategy strategy = |
| ContentAssistParser.getPrefix(documentPosition |
| - elExpression.getDocumentContext() |
| .getDocumentPosition() + 1, |
| elExpression.getText().trim()); |
| |
| if (strategy != null) |
| { |
| proposals.addAll(strategy.getProposals(context)); |
| } |
| Collections.sort(proposals, new ProposalComparator()); |
| } |
| } |
| catch (ViewHandlerException e) |
| { |
| JSFUiPlugin.log(IStatus.ERROR, "During el resolution", e); //$NON-NLS-1$ |
| } |
| } |
| } |
| |
| return proposals.toArray(new ICompletionProposal[0]); |
| } |
| |
| public IContextInformation[] computeContextInformation( |
| final ITextViewer viewer, final int offset) |
| { |
| // no context info |
| return null; |
| } |
| |
| public char[] getCompletionProposalAutoActivationCharacters() |
| { |
| // auto activate when user hits a '.' |
| return new char[] |
| { '.' }; |
| } |
| |
| public char[] getContextInformationAutoActivationCharacters() |
| { |
| // no auto-activation for context info |
| return null; |
| } |
| |
| public String getErrorMessage() |
| { |
| // don't flag errors |
| return null; |
| } |
| |
| public IContextInformationValidator getContextInformationValidator() |
| { |
| // don't validate context information |
| return null; |
| } |
| } |