/******************************************************************************* * Copyright (c) 2004, 2014 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.core.resources; import org.eclipse.core.internal.preferences.AbstractScope; import org.eclipse.core.internal.preferences.EclipsePreferences; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.osgi.service.prefs.Preferences; /** * Object representing the project scope in the Eclipse preferences * hierarchy. Can be used as a context for searching for preference * values (in the <code>org.eclipse.core.runtime.IPreferencesService</code> * APIs) or for determining the correct preference node to set values in the store. * <p> * Project preferences are stored on a per project basis in the * project's content area as specified by <code>IProject#getLocation</code>. * </p><p> * The path for preferences defined in the project scope hierarchy * is as follows: <code>/project/<projectName>/<qualifier></code> * </p> * <p> * This class is not intended to be subclassed. This class may be instantiated. * </p> * @see IProject#getLocation() * @since 3.0 */ public final class ProjectScope extends AbstractScope { /** * String constant (value of <code>"project"</code>) used for the scope name * for this preference scope. */ public static final String SCOPE = "project"; //$NON-NLS-1$ private final IProject project; /** * Create and return a new project scope for the given project. The given * project must not be <code>null</code>. * * @param context the project * @exception IllegalArgumentException if the project is <code>null</code> */ public ProjectScope(IProject context) { super(); if (context == null) throw new IllegalArgumentException(); this.project = context; } @Override public IEclipsePreferences getNode(String qualifier) { if (qualifier == null) throw new IllegalArgumentException(); IPreferencesService preferencesService = Platform.getPreferencesService(); Preferences scopeNode = preferencesService.getRootNode().node(SCOPE); Preferences projectNode = scopeNode.node(project.getName()); return (IEclipsePreferences) projectNode.node(qualifier); } @Override public IPath getLocation() { IPath location = project.getLocation(); return location == null ? null : location.append(EclipsePreferences.DEFAULT_PREFERENCES_DIRNAME); } @Override public String getName() { return SCOPE; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (!(obj instanceof ProjectScope)) return false; ProjectScope other = (ProjectScope) obj; return project.equals(other.project); } @Override public int hashCode() { return super.hashCode() * 31 + project.getFullPath().hashCode(); } }