content: /*******************************************************************************
   * Copyright (c) 2000, 2008 IBM Corporation and others.
   * 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:
   *     IBM Corporation - initial API and implementation
   *******************************************************************************/
  package org.eclipse.wst.jsdt.internal.ui.text.java;
  
  import java.util.Hashtable;
  import java.util.List;
  
  import org.eclipse.core.runtime.IProgressMonitor;
  import org.eclipse.jface.text.ITextViewer;
  import org.eclipse.jface.text.contentassist.ContentAssistant;
  import org.eclipse.jface.text.contentassist.IContextInformationValidator;
  import org.eclipse.ui.IEditorPart;
  import org.eclipse.wst.jsdt.core.JavaScriptCore;
  import org.eclipse.wst.jsdt.ui.text.java.ContentAssistInvocationContext;
  import org.eclipse.wst.jsdt.ui.text.java.JavaContentAssistInvocationContext;
  
  /**
   * Java completion processor.
   */
  public class JavaCompletionProcessor extends ContentAssistProcessor {
  
  	private final static String VISIBILITY= JavaScriptCore.CODEASSIST_VISIBILITY_CHECK;
  	private final static String ENABLED= "enabled"; //$NON-NLS-1$
  	private final static String DISABLED= "disabled"; //$NON-NLS-1$
  	
  	private IContextInformationValidator fValidator;
  	protected final IEditorPart fEditor;
  
  	public JavaCompletionProcessor(IEditorPart editor, ContentAssistant assistant, String partition) {
  		super(assistant, partition);
  		fEditor= editor;
  	}
  
  	/**
  	 * Tells this processor to restrict its proposal to those element
  	 * visible in the actual invocation context.
  	 *
  	 * @param restrict <code>true</code> if proposals should be restricted
  	 */
  	public void restrictProposalsToVisibility(boolean restrict) {
  		Hashtable options= JavaScriptCore.getOptions();
  		Object value= options.get(VISIBILITY);
  		if (value instanceof String) {
  			String newValue= restrict ? ENABLED : DISABLED;
  			if ( !newValue.equals(value)) {
  				options.put(VISIBILITY, newValue);
  				JavaScriptCore.setOptions(options);
  			}
  		}
  	}
  
  	/**
  	 * Tells this processor to restrict is proposals to those
  	 * starting with matching cases.
  	 *
  	 * @param restrict <code>true</code> if proposals should be restricted
  	 */
  	public void restrictProposalsToMatchingCases(boolean restrict) {
  		// not yet supported
  	}
  
  	/*
  	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
  	 */
  	public IContextInformationValidator getContextInformationValidator() {
  		if (fValidator == null)
  			fValidator= new JavaParameterListValidator();
  		return fValidator;
  	}
  
  	/*
  	 * @see org.eclipse.wst.jsdt.internal.ui.text.java.ContentAssistProcessor#filterAndSort(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
  	 */
  	protected List filterAndSortProposals(List proposals, IProgressMonitor monitor, ContentAssistInvocationContext context) {
  		ProposalSorterRegistry.getDefault().getCurrentSorter().sortProposals(context, proposals);
  		return proposals;
  	}
  
  	/*
  	 * @see org.eclipse.wst.jsdt.internal.ui.text.java.ContentAssistProcessor#createContext(org.eclipse.jface.text.ITextViewer, int)
  	 */
  	protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset) {
  		return new JavaContentAssistInvocationContext(viewer, offset, fEditor);
  	}
  }
  