/*******************************************************************************
 * Copyright (c) 2004, 2015 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.core.runtime.preferences;

import org.eclipse.core.internal.preferences.AbstractScope;
import org.eclipse.core.runtime.IPath;
import org.eclipse.osgi.service.datalocation.Location;

/**
 * Object representing the instance scope in the Eclipse preferences
 * hierarchy. Can be used as a context for searching for preference
 * values (in the IPreferencesService APIs) or for determining the
 * correct preference node to set values in the store.
 * <p>
 * Instance preferences are stored on a per instance basis in the
 * platform's instance area as specified by the {@link Location} class
 * and the {@link Location#INSTANCE_FILTER} filter.
 * </p><p>
 * The path for preferences defined in the instance scope hierarchy
 * is as follows: <code>/instance/&lt;qualifier&gt;</code>
 * </p>
 * <p>
 * This class is not intended to be subclassed. This class may be instantiated.
 * </p>
 * @see Location#INSTANCE_FILTER
 * @since 3.0
 */
public final class InstanceScope extends AbstractScope {

	/**
	 * String constant (value of <code>"instance"</code>) used for the
	 * scope name for the instance preference scope.
	 */
	public static final String SCOPE = "instance"; //$NON-NLS-1$

	/**
	 * Singleton instance of an Instance Scope object. Typical usage is:
	 * <code>InstanceScope.INSTANCE.getNode(...);</code>
	 *
	 * @since 3.4
	 */
	public static final IScopeContext INSTANCE = new InstanceScope();

	/**
	 * Create and return a new instance scope instance.
	 * @deprecated call <code>InstanceScope.INSTANCE</code> instead.
	 */
	public InstanceScope() {
		super();
	}


	@Override
	public IPath getLocation() {
		// Return null. The instance location usually corresponds to the state
		// location of the bundle and we don't know what bundle we are dealing with.
		return null;
	}


	@Override
	public String getName() {
		return SCOPE;
	}


	@Override
	public IEclipsePreferences getNode(String qualifier) {
		return super.getNode(qualifier);
	}
}
