/*****************************************************************************
* 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.cspec.builder;
import java.util.HashSet;
import java.util.List;
import org.eclipse.buckminster.core.common.model.ExpandingProperties;
import org.eclipse.buckminster.core.cspec.IAction;
import org.eclipse.buckminster.core.cspec.IAttribute;
import org.eclipse.buckminster.core.cspec.IPrerequisite;
import org.eclipse.buckminster.core.cspec.model.Action;
import org.eclipse.buckminster.core.cspec.model.AttributeAlreadyDefinedException;
import org.eclipse.buckminster.core.cspec.model.Group;
import org.eclipse.buckminster.core.cspec.model.PrerequisiteAlreadyDefinedException;
import org.eclipse.buckminster.core.cspec.model.UpToDatePolicy;
import org.eclipse.core.runtime.IPath;
/**
* @author Thomas Hallgren
*/
public class ActionBuilder extends TopLevelAttributeBuilder implements IAction {
private String actorName;
private final ExpandingProperties<String> actorProperties = new ExpandingProperties<String>();
private boolean always = Action.ALWAYS_DEFAULT;
private boolean assignConsoleSupport = Action.ASSIGN_CONSOLE_SUPPORT_DEFAULT;
private final PrerequisitesBuilder prerequisitesBuilder;
private String productAlias;
private IPath productBase;
private int productFileCount = -1;
private final HashSet<IPath> productPaths = new HashSet<IPath>();
private final ExpandingProperties<String> properties = new ExpandingProperties<String>();
private UpToDatePolicy upToDatePolicy = UpToDatePolicy.DEFAULT;
ActionBuilder(CSpecBuilder cspecBuilder) {
super(cspecBuilder);
prerequisitesBuilder = new PrerequisitesBuilder(cspecBuilder);
}
public void addActorProperty(String key, String propVal, boolean mutable) {
actorProperties.put(key, propVal, mutable);
}
@Override
public PrerequisiteBuilder addPrerequisite(PrerequisiteBuilder prerequisite) throws PrerequisiteAlreadyDefinedException {
prerequisitesBuilder.addPrerequisite(prerequisite);
return prerequisite;
}
public ActionArtifactBuilder addProductArtifact(String name, boolean publ, IPath output) throws AttributeAlreadyDefinedException {
CSpecBuilder cspecBuilder = getCSpecBuilder();
ActionArtifactBuilder bld = cspecBuilder.createActionArtifactBuilder();
bld.setActionName(getName());
bld.setName(name);
bld.setPublic(publ);
bld.setBase(output);
cspecBuilder.addAttribute(bld);
return bld;
}
public void addProductPath(IPath path) {
productPaths.add(path);
}
public void addProperty(String key, String propVal, boolean mutable) {
properties.put(key, propVal, mutable);
}
@Override
public void clear() {
super.clear();
actorName = null;
always = Action.ALWAYS_DEFAULT;
assignConsoleSupport = Action.ASSIGN_CONSOLE_SUPPORT_DEFAULT;
actorProperties.clear();
prerequisitesBuilder.clear();
productPaths.clear();
properties.clear();
productAlias = null;
productBase = null;
upToDatePolicy = UpToDatePolicy.DEFAULT;
productFileCount = -1;
}
@Override
public Action createAttribute() {
return new Action(this);
}
@Override
public String getActorName() {
return actorName;
}
@Override
public ExpandingProperties<String> getActorProperties() {
return actorProperties;
}
@Override
public AttributeBuilder getAttributeBuilder(CSpecBuilder specBuilder) {
return specBuilder == getCSpecBuilder() ? this : new ActionBuilder(specBuilder);
}
public PrerequisiteBuilder getPrerequisite(String prerequisteName) {
return prerequisitesBuilder.getPrerequisite(prerequisteName);
}
@Override
public Group getPrerequisiteGroup() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<? extends IPrerequisite> getPrerequisites() {
return getPrerequisitesBuilder().getPrerequisites();
}
public String getPrerequisitesAlias() {
return prerequisitesBuilder.getName();
}
public PrerequisitesBuilder getPrerequisitesBuilder() {
return prerequisitesBuilder;
}
@Override
public String getProductAlias() {
return productAlias;
}
public ArtifactBuilder getProductArtifact(String name) {
ArtifactBuilder bld = getCSpecBuilder().getArtifactBuilder(name);
return (bld instanceof ActionArtifactBuilder) ? bld : null;
}
@Override
public IPath getProductBase() {
return productBase;
}
@Override
public int getProductFileCount() {
return productFileCount;
}
@Override
public HashSet<IPath> getProductPaths() {
return productPaths;
}
@Override
public ExpandingProperties<String> getProperties() {
return properties;
}
@Override
public UpToDatePolicy getUpToDatePolicy() {
return upToDatePolicy;
}
@Override
public void initFrom(IAttribute attribute) {
IAction action = (IAction) attribute;
super.initFrom(action);
actorName = action.getActorName();
actorProperties.putAll(action.getActorProperties(), true);
always = action.isAlways();
assignConsoleSupport = action.isAssignConsoleSupport();
prerequisitesBuilder.initFrom(action.getPrerequisiteGroup());
productAlias = action.getProductAlias();
productBase = action.getProductBase();
upToDatePolicy = action.getUpToDatePolicy();
productFileCount = action.getProductFileCount();
productPaths.addAll(action.getProductPaths());
properties.putAll(action.getProperties(), true);
}
@Override
public boolean isAlways() {
return always;
}
@Override
public boolean isAssignConsoleSupport() {
return assignConsoleSupport;
}
@Override
public boolean isInternal() {
// An internal action is never "built".
//
return false;
}
@Override
public void removePrerequisite(String prerequisteName) {
prerequisitesBuilder.removePrerequisite(prerequisteName);
}
public void removeProductPath(IPath path) {
productPaths.remove(path);
}
public void setActorName(String actorName) {
this.actorName = actorName;
}
public void setAlways(boolean always) {
this.always = always;
}
public void setAssignConsoleSupport(boolean assignConsoleSupport) {
this.assignConsoleSupport = assignConsoleSupport;
}
public void setPrerequisites(Group prerequisites) {
prerequisitesBuilder.initFrom(prerequisites);
}
public void setPrerequisitesAlias(String alias) {
prerequisitesBuilder.setName(alias);
}
public void setPrerequisitesRebase(IPath rebase) {
prerequisitesBuilder.setPrerequisiteRebase(rebase);
}
public void setProductAlias(String productAlias) {
this.productAlias = productAlias;
}
public void setProductBase(IPath productBase) {
this.productBase = productBase == null ? null : productBase.addTrailingSeparator();
}
public void setProductFileCount(int productFileCount) {
this.productFileCount = productFileCount;
}
public void setUpToDatePolicy(UpToDatePolicy upToDatePolicy) {
this.upToDatePolicy = upToDatePolicy;
}
}