/*****************************************************************************
* Copyright (c) 2006-2013, Cloudsmith Inc.
* The code, documentation and other materials contained herein have been
* licensed under the Eclipse Public License - v 1.0 by the copyright holder
* listed above, as the Initial Contributor under such license. The text of
* such license is available at www.eclipse.org.
*****************************************************************************/
package org.eclipse.buckminster.core.metadata.builder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.eclipse.buckminster.core.cspec.builder.CSpecBuilder;
import org.eclipse.buckminster.core.cspec.builder.ComponentRequestBuilder;
import org.eclipse.buckminster.core.cspec.model.CSpec;
import org.eclipse.buckminster.core.ctype.IComponentType;
import org.eclipse.buckminster.core.metadata.IResolution;
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;
import org.eclipse.core.runtime.CoreException;
/**
* @author Thomas Hallgren
*/
public class ResolutionBuilder implements IResolution {
private String artifactInfo;
private final List<String> attributes = new ArrayList<String>();
private VersionSelector branchOrTag;
private String componentTypeId;
private String contentType;
private final CSpecBuilder cspec;
private long lastModified;
private boolean materializable = true;
private String remoteName;
private Provider provider;
private String readerTypeId;
private String repository;
private final ComponentRequestBuilder request = new ComponentRequestBuilder();
private Filter resolutionFilter;
private String revision;
private long size = -1;
private Date timestamp;
private boolean unpack = false;
private String persistentId;
public ResolutionBuilder() {
this(new CSpecBuilder());
}
public ResolutionBuilder(CSpecBuilder cspecBuilder) {
cspec = cspecBuilder;
}
public void addAttribute(String attribute) {
attributes.add(attribute);
}
public void clear() {
artifactInfo = null;
attributes.clear();
branchOrTag = null;
componentTypeId = null;
contentType = null;
cspec.clear();
lastModified = 0L;
materializable = true;
remoteName = null;
provider = null;
readerTypeId = null;
repository = null;
request.clear();
resolutionFilter = null;
revision = null;
size = -1L;
timestamp = null;
unpack = false;
}
@Override
public String getArtifactInfo() {
return artifactInfo;
}
@Override
public List<String> getAttributes() {
return attributes;
}
@Override
public String getComponentTypeId() {
return componentTypeId;
}
@Override
public String getContentType() {
return contentType;
}
@Override
public CSpec getCSpec() {
return cspec.createCSpec();
}
public CSpecBuilder getCSpecBuilder() {
return cspec;
}
@Override
public long getLastModified() {
return lastModified;
}
@Override
public VersionSelector getMatchedBranchOrTag() {
return branchOrTag;
}
@Override
public String getPersistentId() {
return persistentId;
}
@Override
public Provider getProvider() {
if (provider == null) {
String componentType = cspec.getComponentTypeID();
if (componentType == null)
componentType = IComponentType.UNKNOWN;
return Provider.immutableProvider(readerTypeId, componentType, repository, resolutionFilter);
}
return provider;
}
@Override
public String getReaderTypeId() {
return readerTypeId;
}
@Override
public String getRemoteName() {
return remoteName;
}
@Override
public String getRepository() {
return repository;
}
@Override
public ComponentRequestBuilder getRequest() {
return request;
}
@Override
public Filter getResolutionFilter() {
return resolutionFilter;
}
@Override
public String getSelectedRevision() {
return revision;
}
@Override
public Date getSelectedTimestamp() {
return timestamp;
}
@Override
public long getSize() {
return size;
}
@Override
public VersionMatch getVersionMatch() {
return new VersionMatch(cspec.getVersion(), branchOrTag, revision, timestamp, artifactInfo);
}
public void initFrom(IResolution resolution) throws CoreException {
clear();
attributes.addAll(resolution.getAttributes());
componentTypeId = resolution.getComponentTypeId();
contentType = resolution.getContentType();
cspec.initFrom(resolution.getCSpec());
lastModified = resolution.getLastModified();
materializable = resolution.isMaterializable();
persistentId = resolution.getPersistentId();
provider = resolution.getProvider();
resolutionFilter = resolution.getResolutionFilter();
remoteName = resolution.getRemoteName();
repository = resolution.getRepository();
request.initFrom(resolution.getRequest());
size = resolution.getSize();
artifactInfo = resolution.getArtifactInfo();
branchOrTag = resolution.getMatchedBranchOrTag();
revision = resolution.getSelectedRevision();
timestamp = resolution.getSelectedTimestamp();
unpack = resolution.isUnpack();
}
@Override
public boolean isMaterializable() {
return materializable;
}
@Override
public boolean isUnpack() {
return unpack;
}
public void setArtifactInfo(String artifactInfo) {
this.artifactInfo = artifactInfo;
}
public void setAttributes(List<String> attrs) {
attributes.clear();
if (attrs != null)
attributes.addAll(attrs);
}
public void setBranchOrTag(VersionSelector branchOrTag) {
this.branchOrTag = branchOrTag;
}
public void setComponentTypeId(String componentTypeId) {
this.componentTypeId = componentTypeId;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public void setFileInfo(IFileInfo info) {
if (info == null) {
setContentType(null);
setRemoteName(null);
setLastModified(0);
setSize(-1);
} else {
setContentType(info.getContentType());
setRemoteName(info.getRemoteName());
setLastModified(info.getLastModified());
setSize(info.getSize());
}
}
public void setLastModified(long lastModified) {
this.lastModified = lastModified;
}
public void setMaterializable(boolean materializable) {
this.materializable = materializable;
}
public void setPersistentId(String persistentId) {
this.persistentId = persistentId;
}
public void setProvider(Provider provider) {
this.provider = provider;
}
public void setReaderTypeId(String readerTypeId) {
this.readerTypeId = readerTypeId;
}
public void setRemoteName(String remoteName) {
this.remoteName = remoteName;
}
public void setRepository(String repository) {
this.repository = repository;
}
public void setResolutionFilter(Filter resolutionFilter) {
this.resolutionFilter = resolutionFilter;
}
public void setRevision(String revision) {
this.revision = revision;
}
public void setSize(long size) {
this.size = size;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public void setUnpack(boolean unpack) {
this.unpack = unpack;
}
public void setVersionMatch(VersionMatch versionMatch) {
if (versionMatch == null) {
artifactInfo = null;
branchOrTag = null;
revision = null;
timestamp = null;
} else {
artifactInfo = versionMatch.getArtifactInfo();
branchOrTag = versionMatch.getBranchOrTag();
revision = versionMatch.getRevision();
timestamp = versionMatch.getTimestamp();
}
}
}