/******************************************************************************* * Copyright (c) 2005, 2011 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 java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.equinox.p2.core.IProvisioningAgent; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.query.*; /** * Represents the state of a profile in a profile registry at a given moment in time. * Note this object contains only a snapshot of a particular profile state, and will * never be updated if subsequent changes are made to this profile. A client should * never retain an {@link IProfile} instance, but rather retain the profile id and obtain * the current state of the profile from the profile registry only when required. * * @noimplement This interface is not intended to be implemented by clients. * @noextend This interface is not intended to be extended by clients. * @since 2.0 */ public interface IProfile extends IQueryable<IInstallableUnit> { /** * Constant used to indicate that an installable unit is not locked in anyway. * @see #PROP_PROFILE_LOCKED_IU */ public static int LOCK_NONE = 0; /** * Constant used to indicate that an installable unit is locked so that it may * not be uninstalled. * @see #PROP_PROFILE_LOCKED_IU */ public static int LOCK_UNINSTALL = 1 << 0; /** * Constant used to indicate that an installable unit is locked so that it may * not be updated. * @see #PROP_PROFILE_LOCKED_IU */ public static int LOCK_UPDATE = 1 << 1; /** * A property key (value <code>"org.eclipse.equinox.p2.type.lock"</code>) for an * integer property indicating how an installable unit is locked in its profile. * The integer is a bit-mask indicating the different locks defined on the installable * unit. The property should be obtained from a profile using * IProfile#getInstallableUnitProperty(IInstallableUnit, String). * * @see #LOCK_UNINSTALL * @see #LOCK_UPDATE * @see #LOCK_NONE */ public static final String PROP_PROFILE_LOCKED_IU = "org.eclipse.equinox.p2.type.lock"; //$NON-NLS-1$ /** * A property key (value <code>"org.eclipse.equinox.p2.type.root"</code>) for a * boolean property indicating whether an installable unit should be considered * a root of the install. Typically this means the unit will appear to the end user * as a top-level installed item. The property should be obtained from a profile using * IProfile#getInstallableUnitProperty(IInstallableUnit, String). * * @see #LOCK_UNINSTALL * @see #LOCK_UPDATE * @see #LOCK_NONE */ public static final String PROP_PROFILE_ROOT_IU = "org.eclipse.equinox.p2.type.root"; //$NON-NLS-1$ /** * Profile property constant indicating the install folder for the profile. */ public static final String PROP_INSTALL_FOLDER = "org.eclipse.equinox.p2.installFolder"; //$NON-NLS-1$ /** * Profile property constant indicating the configuration folder for the profile. */ public static final String PROP_CONFIGURATION_FOLDER = "org.eclipse.equinox.p2.configurationFolder"; //$NON-NLS-1$ /** * Profile property constant indicating the location of the launcher configuration file for the profile. */ public static final String PROP_LAUNCHER_CONFIGURATION = "org.eclipse.equinox.p2.launcherConfiguration"; //$NON-NLS-1$ /** * Profile property constant indicating the installed language(s) for the profile. */ public static final String PROP_NL = "org.eclipse.equinox.p2.nl"; //$NON-NLS-1$ /** * Profile property constant for a string property indicating a user visible short * textual description of this profile. May be empty or <code>null</code>, and * generally will be for non-top level install contexts. */ public static final String PROP_DESCRIPTION = "org.eclipse.equinox.p2.description"; //$NON-NLS-1$ /** * Profile property constant for a string property indicating a user visible name of this profile. * May be empty or <code>null</code>, and generally will be for non-top level * install contexts. */ public static final String PROP_NAME = "org.eclipse.equinox.p2.name"; //$NON-NLS-1$ /** * Profile property constant indicating the list of environments * (e.g., OS, WS, ...) in which a profile can operate. The value of the property * is a comma-delimited string of key/value pairs. */ public static final String PROP_ENVIRONMENTS = "org.eclipse.equinox.p2.environments"; //$NON-NLS-1$ /** * Profile property constant for a boolean property indicating if the profiling * is roaming. A roaming profile is one whose physical install location varies * and is updated whenever it runs. */ public static final String PROP_ROAMING = "org.eclipse.equinox.p2.roaming"; //$NON-NLS-1$ /** * Profile property constant indicating the bundle pool cache location. */ public static final String PROP_CACHE = "org.eclipse.equinox.p2.cache"; //$NON-NLS-1$ /** * Profile property constant indicating a shared read-only bundle pool cache location. */ public static final String PROP_SHARED_CACHE = "org.eclipse.equinox.p2.cache.shared"; //$NON-NLS-1$ /** * Profile property constant for a boolean property indicating if update features should * be installed in this profile */ public static final String PROP_INSTALL_FEATURES = "org.eclipse.update.install.features"; //$NON-NLS-1$ /** * Profile state meta property key. Can be used to mark a profile state that should be hidden. * The value of the property is not relevant as the property's existence is enough. Although <code>true</code> * would be a typical value. * * @since 2.1 */ public static final String STATE_PROP_HIDDEN = "org.eclipse.equinox.p2.state.hidden"; //$NON-NLS-1$ /** * Profile state metadata property key used to associate with a profile state a user readable name. * @since 2.1 */ public static final String STATE_PROP_TAG = "org.eclipse.equinox.p2.state.tag"; //$NON-NLS-1$ /** * Returns the provisioning agent that manages this profile * @return A provisioning agent. */ public IProvisioningAgent getProvisioningAgent(); /** * Returns the id of this profile, unique within a given profile registry * @return the profile id */ public String getProfileId(); /** * Returns the profile property associated with the given key, * or <code>null</code> if this property is not present * @param key The property kid * @return the property value, or <code>null</code> */ public String getProperty(String key); /** * Returns the profile property associated with the given installable unit. * @param iu the installable unit to return the property for * @param key the property key * @return the property value, or <code>null</code> if no such property is defined */ public String getInstallableUnitProperty(IInstallableUnit iu, String key); /** * Returns an unmodifiable map of all profile properties. * @return a map of all profile properties. */ public Map<String, String> getProperties(); /** * Returns an unmodifiable map of all profile properties associated with the given * installable unit in this profile. * @param iu the installable unit to return profile properties for * @return an unmodifiable map of installable unit profile properties */ public Map<String, String> getInstallableUnitProperties(IInstallableUnit iu); /** * Returns a timestamp describing when this profile snapshot was created. * @return A profile timestamp */ public long getTimestamp(); /** * Returns the installable units in this profile that match the given query. In a shared * install, this will include both the installable units in the shared base location, and in * the current user's private install area. * @param query * @param monitor a progress monitor, or <code>null</code> if progress * reporting is not desired * @return The installable units that match the given query */ public IQueryResult<IInstallableUnit> available(IQuery<IInstallableUnit> query, IProgressMonitor monitor); }