package org.eclipse.buckminster.core.metadata;
import java.util.Date;
import java.util.List;
import org.eclipse.buckminster.core.cspec.ICSpecData;
import org.eclipse.buckminster.core.cspec.IComponentRequest;
import org.eclipse.buckminster.core.rmap.model.Provider;
import org.eclipse.buckminster.core.version.VersionMatch;
import org.eclipse.buckminster.core.version.VersionSelector;
import org.eclipse.buckminster.osgi.filter.Filter;
import org.eclipse.buckminster.runtime.IFileInfo;
public interface IResolution extends IFileInfo {
String getArtifactInfo();
List<String> getAttributes();
String getComponentTypeId();
/**
* Returns the CSpec at the time when this resolution was created. The
* actual cspec in the workspace might have changed since then.
*
* @return The resolved cspec.
*/
ICSpecData getCSpec();
/**
* If a branch or tag was involved when this resolution was found, that
* branch or tag will be returned by this method.
*
* @return The matched selector or <code>null</code>.
*/
VersionSelector getMatchedBranchOrTag();
/**
* Returns the persistent identifier for the resolution. This is intended to
* be used when resolutions are stored in a database.
*
* @return
*/
String getPersistentId();
/**
* Returns the provider used when reading the repository.
*
* @return the repository provider.
*/
Provider getProvider();
/**
* The id of the reader type that can materialize this resolution.
*
* @return The id of the reader type.
*/
String getReaderTypeId();
/**
* The repository URI used in conjunction with the reader type when
* materializing this resolution.
*
* @return The repository URI.
*/
String getRepository();
/**
* @return Returns the properties.
*/
IComponentRequest getRequest();
/**
* An additional filter that a provider or other mechanism can assing to the
* resolution. This filter is involved when resolving dependencies against
* this resolution.
*
* @return A filter or <code>null</code>.
*/
Filter getResolutionFilter();
/**
* If the resolution was based on a revision query, the matched revision is
* returned
*
* @return The matched revision or <code>null</code> of the match did not
* involve revisions.
*/
String getSelectedRevision();
/**
* If the resolution was based on a timestapm query, then the matched
* timestamp is returned here.
*
* @return A timestamp or <code>null</code> if not applicable.
*/
Date getSelectedTimestamp();
/**
* A version match instance assembled from other values of this resolution.
*
* @return A version match instance.
*/
VersionMatch getVersionMatch();
/**
* Returns <code>true</code> if the reader associated with the component
* will be able to materialized the component. Readers that check for the
* existence of pre-installed components (such as Eclipse plugins that are
* already present in the running eclipse installation) will return
* <code>false</code>.
*
* @return <code>true</code> if the component can be materialized on disk.
*/
boolean isMaterializable();
/**
* Returns true if the component should be unpacked after it has been
* materialized. The semantics of this attribute is determined by the
* materializer but it will typcially mean unzipping or unjaring the file.
*
* @return <code>true</code> if the component should be unpacked after
* installation.
*/
boolean isUnpack();
}