/*****************************************************************************
* 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.query.builder;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.eclipse.buckminster.core.common.model.Documentation;
import org.eclipse.buckminster.core.query.IAdvisorNode;
import org.eclipse.buckminster.core.query.model.AdvisorNode;
import org.eclipse.buckminster.core.query.model.MutableLevel;
import org.eclipse.buckminster.core.query.model.SourceLevel;
import org.eclipse.buckminster.core.version.VersionSelector;
import org.eclipse.buckminster.osgi.filter.Filter;
import org.eclipse.core.runtime.IPath;
import org.eclipse.equinox.p2.metadata.VersionRange;
public class AdvisorNodeBuilder implements IAdvisorNode {
private boolean allowCircularDependency;
private final ArrayList<String> attributes = new ArrayList<String>();
private VersionSelector[] branchTagPath;
private String componentType;
private Documentation documentation;
private Filter filter;
private MutableLevel mutableLevel;
private Pattern namePattern;
private URL overlayFolder;
private Map<String, String> properties;
private boolean prune;
private int[] resolutionPrio;
private String revision;
private boolean skipComponent;
private SourceLevel sourceLevel;
private boolean systemDiscovery;
private Date timestamp;
private boolean useTargetPlatform;
private boolean useMaterialization;
private boolean useWorkspace;
private boolean useRemoteResolution;
private VersionRange versionOverride;
public AdvisorNodeBuilder() {
this.clear();
}
public void addAttribute(String attribute) {
attributes.add(attribute);
}
public void addAttributes(List<String> attrs) {
attributes.addAll(attrs);
}
@Override
public boolean allowCircularDependency() {
return allowCircularDependency;
}
public void clear() {
attributes.clear();
properties = null;
documentation = null;
componentType = null;
filter = null;
mutableLevel = MutableLevel.INDIFFERENT;
namePattern = null;
overlayFolder = null;
prune = false;
skipComponent = false;
allowCircularDependency = false;
sourceLevel = SourceLevel.INDIFFERENT;
useTargetPlatform = true;
useMaterialization = true;
useWorkspace = true;
versionOverride = null;
useRemoteResolution = true;
systemDiscovery = true;
branchTagPath = VersionSelector.EMPTY_PATH;
revision = null;
timestamp = null;
resolutionPrio = IAdvisorNode.DEFAULT_RESOLUTION_PRIO;
}
public AdvisorNode create() {
return new AdvisorNode(this);
}
@Override
public List<String> getAttributes() {
return attributes;
}
@Override
public VersionSelector[] getBranchTagPath() {
return branchTagPath;
}
@Override
public String getComponentTypeID() {
return componentType;
}
@Override
public Documentation getDocumentation() {
return documentation;
}
@Override
public Filter getFilter() {
return filter;
}
public IPath getMaterializationLocation(String projectName) {
// TODO: Implement this
return null;
}
@Override
public MutableLevel getMutableLevel() {
return mutableLevel;
}
@Override
public Pattern getNamePattern() {
return namePattern;
}
@Override
public URL getOverlayFolder() {
return overlayFolder;
}
@Override
public Map<String, String> getProperties() {
if (properties == null)
properties = new HashMap<String, String>();
return properties;
}
@Override
public int[] getResolutionPrio() {
return resolutionPrio;
}
@Override
public String getRevision() {
return revision;
}
@Override
public SourceLevel getSourceLevel() {
return sourceLevel;
}
@Override
public Date getTimestamp() {
return timestamp;
}
@Override
public VersionRange getVersionOverride() {
return versionOverride;
}
public void initFrom(IAdvisorNode node) {
this.clear();
allowCircularDependency = node.allowCircularDependency();
attributes.addAll(node.getAttributes());
componentType = node.getComponentTypeID();
documentation = node.getDocumentation();
filter = node.getFilter();
mutableLevel = node.getMutableLevel();
namePattern = node.getNamePattern();
overlayFolder = node.getOverlayFolder();
Map<String, String> props = node.getProperties();
if (props.size() > 0)
properties = new HashMap<String, String>(props);
prune = node.isPrune();
skipComponent = node.skipComponent();
sourceLevel = node.getSourceLevel();
useMaterialization = node.isUseMaterialization();
useRemoteResolution = node.isUseRemoteResolution();
useTargetPlatform = node.isUseTargetPlatform();
useWorkspace = node.isUseWorkspace();
versionOverride = node.getVersionOverride();
systemDiscovery = node.isSystemDiscovery();
branchTagPath = node.getBranchTagPath();
revision = node.getRevision();
timestamp = node.getTimestamp();
resolutionPrio = node.getResolutionPrio();
}
@Override
public boolean isPrune() {
return prune;
}
@Override
public boolean isSystemDiscovery() {
return systemDiscovery;
}
@Override
public boolean isUseMaterialization() {
return useMaterialization;
}
@Override
public boolean isUseRemoteResolution() {
return useRemoteResolution;
}
@Override
public boolean isUseTargetPlatform() {
return useTargetPlatform;
}
@Override
public boolean isUseWorkspace() {
return useWorkspace;
}
public void setAllowCircularDependency(boolean allowCircularDependency) {
this.allowCircularDependency = allowCircularDependency;
}
public void setBranchTagPath(VersionSelector[] branchTagPath) {
this.branchTagPath = branchTagPath == null ? VersionSelector.EMPTY_PATH : branchTagPath;
}
public void setComponentTypeID(String componentType) {
this.componentType = componentType;
}
public void setDocumentation(Documentation documentation) {
this.documentation = documentation;
}
public void setFilter(Filter filter) {
this.filter = filter;
}
public void setMutableLevel(MutableLevel mutableLevel) {
this.mutableLevel = mutableLevel == null ? MutableLevel.INDIFFERENT : mutableLevel;
}
public void setNamePattern(Pattern namePattern) {
this.namePattern = namePattern;
}
public void setOverlayFolder(URL addOnFolder) {
this.overlayFolder = addOnFolder;
}
public void setPrune(boolean prune) {
this.prune = prune;
}
public void setResolutionPrio(int[] resolutionPrio) {
this.resolutionPrio = resolutionPrio;
}
public void setRevision(String revision) {
this.revision = revision;
}
public void setSkipComponent(boolean flag) {
this.skipComponent = flag;
}
public void setSourceLevel(SourceLevel sourceLevel) {
this.sourceLevel = sourceLevel == null ? SourceLevel.INDIFFERENT : sourceLevel;
}
public void setSystemDiscovery(boolean flag) {
this.systemDiscovery = flag;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public void setUseMaterialization(boolean flag) {
this.useMaterialization = flag;
}
public void setUseRemoteResolution(boolean flag) {
this.useRemoteResolution = flag;
}
public void setUseTargetPlatform(boolean flag) {
this.useTargetPlatform = flag;
}
public void setUseWorkspace(boolean flag) {
this.useWorkspace = flag;
}
public void setVersionOverride(VersionRange versionOverride) {
this.versionOverride = versionOverride;
}
@Override
public boolean skipComponent() {
return skipComponent;
}
}