blob: 0e216e21cdf7f35995c42b4264b049f705f7b82e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2014 Wind River Systems, Inc. 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:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
public class LocalProjectScope implements IScopeContext {
private static final String QUALIFIER_EXT = ".prj-"; //$NON-NLS-1$
/**
* String constant (value of <code>"project-local"</code>) used for the
* scope name for this preference scope.
*/
public static final String SCOPE = "project-local"; //$NON-NLS-1$
private String fContext;
/**
* Create and return a new local 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 LocalProjectScope(IProject context) {
if (context == null)
throw new IllegalArgumentException();
fContext= context.getName();
}
/**
* Create and return a new local project scope for the given project. The given
* project must not be <code>null</code>.
*
* @param projectName the name of the project
* @exception IllegalArgumentException if the project is <code>null</code>
*/
public LocalProjectScope(String projectName) {
if (projectName == null)
throw new IllegalArgumentException();
fContext= projectName;
}
@Override
public IPath getLocation() {
return null;
}
@Override
public String getName() {
return SCOPE;
}
@Override
public IEclipsePreferences getNode(String qualifier) {
return InstanceScope.INSTANCE.getNode(qualifier + QUALIFIER_EXT + fContext);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (!(obj instanceof LocalProjectScope))
return false;
LocalProjectScope other = (LocalProjectScope) obj;
return fContext.equals(other.fContext);
}
@Override
public int hashCode() {
return fContext.hashCode();
}
private static Preferences getPPP(String name) {
return new LocalProjectScope(name).getNode(CCorePlugin.PLUGIN_ID);
}
public static void deletePreferences(IPath prjToDelete, IPath movedTo) {
try {
Preferences prefs= getPPP(prjToDelete.lastSegment());
if (movedTo != null) {
Preferences target= getPPP(movedTo.lastSegment());
copyPrefs(prefs, target);
}
deletePrefs(prefs);
} catch (BackingStoreException e) {
}
}
private static void deletePrefs(Preferences prefs) throws BackingStoreException {
prefs.clear();
String[] children= prefs.childrenNames();
for (String child : children) {
prefs.node(child).removeNode();
}
prefs.flush();
prefs.removeNode();
}
private static void copyPrefs(Preferences prefs, Preferences target) throws BackingStoreException {
String[] keys= prefs.keys();
for (String key : keys) {
String val= prefs.get(key, null);
if (val != null) {
target.put(key, val);
}
}
String[] children= prefs.childrenNames();
for (String child : children) {
copyPrefs(prefs.node(child), target.node(child));
}
target.flush();
}
}