blob: dd769ee1fa5add5bb55ff9ba459624299196ac53 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 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.equinox.p2.engine;
import org.eclipse.core.internal.preferences.PreferencesService;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.equinox.internal.p2.engine.SlashEncode;
import org.eclipse.equinox.p2.core.IAgentLocation;
/**
* A profile scope contains the preferences associated with a particular profile
* in a provisioned system.
* @see IProfile
* @since 2.0
*/
public final class ProfileScope implements IScopeContext {
/**
* String constant (value of <code>"profile"</code>) used for the
* scope name for this preference scope.
*/
public static final String SCOPE = "profile"; //$NON-NLS-1$
private String profileId;
private IAgentLocation location;
/**
* Creates and returns a profile scope for the given profile id and agent.
* @param agentLocation The location of the provisioning agent to obtain profile preferences for
* @param profileId The id of the profile to obtain preferences for
*/
public ProfileScope(IAgentLocation agentLocation, String profileId) {
super();
Assert.isNotNull(agentLocation);
Assert.isNotNull(profileId);
this.profileId = profileId;
this.location = agentLocation;
}
@Override
public IPath getLocation() {
// Null returned as the location should only be used when the profile is locked
return null;
}
@Override
public String getName() {
return SCOPE;
}
/*
* Default path hierarchy for profile nodes is /profile/<profileId>/<qualifier>.
*
* @see org.eclipse.core.runtime.preferences.IScopeContext#getNode(java.lang.String)
*/
@Override
public IEclipsePreferences getNode(String qualifier) {
if (qualifier == null)
throw new IllegalArgumentException();
String locationString = SlashEncode.encode(location.getRootLocation().toString());
//format is /profile/{agentLocationURI}/{profileId}/qualifier
return (IEclipsePreferences) PreferencesService.getDefault().getRootNode().node(getName()).node(locationString).node(profileId).node(qualifier);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (!(obj instanceof ProfileScope))
return false;
ProfileScope other = (ProfileScope) obj;
return profileId.equals(other.profileId);
}
@Override
public int hashCode() {
return super.hashCode() + profileId.hashCode();
}
}