content: /**
   *  Copyright (c) 2013-2016 Angelo ZERR and Genuitec LLC.
   *  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:
   *  Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
   *  Piotr Tomiak <piotr@genuitec.com> - unified completion proposals calculation
   */
  package tern.eclipse.ide.ui.contentassist;
  
  import org.eclipse.core.resources.IProject;
  import org.eclipse.core.resources.ProjectScope;
  import org.eclipse.core.runtime.Platform;
  import org.eclipse.core.runtime.preferences.DefaultScope;
  import org.eclipse.core.runtime.preferences.IPreferencesService;
  import org.eclipse.core.runtime.preferences.IScopeContext;
  import org.eclipse.core.runtime.preferences.InstanceScope;
  
  import tern.eclipse.ide.internal.ui.preferences.TernUIPreferenceConstants;
  import tern.eclipse.ide.ui.TernUIPlugin;
  import tern.server.protocol.completions.TernCompletionsQuery;
  
  public class TernCompletionsQueryFactory {
  
  	private TernCompletionsQueryFactory() {
  	}
  
  	public static TernCompletionsQuery createQuery(IProject project, 
  			String file, int pos) {
  		TernCompletionsQuery query = new TernCompletionsQuery(file, pos);
  
  		query.setTypes(true);
  		query.setDocs(true);
  		query.setUrls(true);
  		query.setOrigins(true);
  		query.setCaseInsensitive(true);
  		query.setLineCharPositions(false);
  		query.setExpandWordForward(false);
  
  		IPreferencesService preferencesService = Platform
  				.getPreferencesService();
  		IScopeContext[] lookupOrder;
  
  		if (project != null) {
  			lookupOrder = new IScopeContext[] { new ProjectScope(project),
  					InstanceScope.INSTANCE, DefaultScope.INSTANCE };
  		} else {
  			lookupOrder = new IScopeContext[] { InstanceScope.INSTANCE,
  					DefaultScope.INSTANCE };
  		}
  
  		boolean omitObjectPrototype = getBoolean(
  				TernUIPreferenceConstants.OMIT_OBJECT_PROTOTYPE_CONTENT_ASSIST,
  				preferencesService, lookupOrder);
  		if (!omitObjectPrototype) {
  			query.setOmitObjectPrototype(omitObjectPrototype);
  		}
  		boolean guess = getBoolean(
  				TernUIPreferenceConstants.GUESS_CONTENT_ASSIST,
  				preferencesService, lookupOrder);
  		if (!guess) {
  			query.setGuess(guess);
  		}
  		return query;
  	}
  
  	protected static boolean getBoolean(String key,
  			IPreferencesService preferencesService, IScopeContext[] lookupOrder) {
  		return preferencesService.getBoolean(TernUIPlugin.getDefault()
  				.getBundle().getSymbolicName(), key, true, lookupOrder);
  	}
  }
  