package net.sourceforge.seqware.common.model; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import net.sourceforge.seqware.common.security.PermissionsAware; import net.sourceforge.seqware.common.util.jsontools.JsonUtil; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * <p> * WorkflowParam class. * </p> * * @author boconnor * @version $Id: $Id */ public class WorkflowParam extends PermissionsAware implements Serializable, Comparable<WorkflowParam>, Cloneable { /** * */ private static final long serialVersionUID = 1L; private Integer workflowParamId; private Workflow workflow; private String type; private String key; private String defaultValue; private Boolean display; private String fileMetaType; private String displayName; private String value; private String displayValue; private SortedSet<WorkflowParamValue> values; // none persistents(for Summary Launch Workflow Page) private Sample sample; private List<File> files; private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowParam.class); /** * <p> * Constructor for WorkflowParam. * </p> */ public WorkflowParam() { super(); } /** * {@inheritDoc} * * @param that */ @Override public int compareTo(WorkflowParam that) { if (that == null) { return -1; } if (Objects.equals(that.getWorkflowParamId(), this.getWorkflowParamId())) // when both names are null { return 0; } if (that.getWorkflowParamId() == null) { return -1; // when only the other name is null } return (that.getWorkflowParamId().compareTo(this.getWorkflowParamId())); } /** {@inheritDoc} */ @Override public String toString() { return new ToStringBuilder(this).append("swAccession", getWorkflowParamId()).toString(); } /** * {@inheritDoc} * * @param other */ @Override public boolean equals(Object other) { if ((this == other)) { return true; } if (!(other instanceof WorkflowParam)) { return false; } WorkflowParam castOther = (WorkflowParam) other; return new EqualsBuilder().append(this.getWorkflowParamId(), castOther.getWorkflowParamId()).isEquals(); } /** {@inheritDoc} */ @Override public int hashCode() { return new HashCodeBuilder().append(getWorkflowParamId()).toHashCode(); } /** * <p> * Getter for the field <code>workflowParamId</code>. * </p> * * @return a {@link java.lang.Integer} object. */ public Integer getWorkflowParamId() { return workflowParamId; } /** * <p> * Setter for the field <code>workflowParamId</code>. * </p> * * @param workflowParamId * a {@link java.lang.Integer} object. */ public void setWorkflowParamId(Integer workflowParamId) { this.workflowParamId = workflowParamId; } /** * <p> * Getter for the field <code>workflow</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.model.Workflow} object. */ public Workflow getWorkflow() { return workflow; } /** * <p> * Setter for the field <code>workflow</code>. * </p> * * @param workflow * a {@link net.sourceforge.seqware.common.model.Workflow} object. */ public void setWorkflow(Workflow workflow) { this.workflow = workflow; } /** * <p> * Getter for the field <code>type</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getType() { return type; } /** * <p> * getJsonEscapeType. * </p> * * @return a {@link java.lang.String} object. */ public String getJsonEscapeType() { return JsonUtil.forJSON(type); } /** * <p> * Setter for the field <code>type</code>. * </p> * * @param type * a {@link java.lang.String} object. */ public void setType(String type) { this.type = type; } /** * <p> * Getter for the field <code>key</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getKey() { return key; } /** * <p> * getJsonEscapeKey. * </p> * * @return a {@link java.lang.String} object. */ public String getJsonEscapeKey() { return JsonUtil.forJSON(key); } /** * <p> * Setter for the field <code>key</code>. * </p> * * @param key * a {@link java.lang.String} object. */ public void setKey(String key) { this.key = key; } /** * <p> * getJsonEscapeDefaultValue. * </p> * * @return a {@link java.lang.String} object. */ public String getJsonEscapeDefaultValue() { return JsonUtil.forJSON(defaultValue); } /** * <p> * Getter for the field <code>defaultValue</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getDefaultValue() { return defaultValue; } /** * <p> * Setter for the field <code>defaultValue</code>. * </p> * * @param defaultValue * a {@link java.lang.String} object. */ public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } /** * <p> * isDisplay. * </p> * * @return a {@link java.lang.Boolean} object. */ public Boolean isDisplay() { return display; } /** * <p> * Getter for the field <code>display</code>. * </p> * * @return a {@link java.lang.Boolean} object. */ public Boolean getDisplay() { return display; } /** * <p> * Setter for the field <code>display</code>. * </p> * * @param display * a {@link java.lang.Boolean} object. */ public void setDisplay(Boolean display) { this.display = display; } /** * <p> * Getter for the field <code>fileMetaType</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getFileMetaType() { return fileMetaType; } /** * <p> * Setter for the field <code>fileMetaType</code>. * </p> * * @param fileMetaType * a {@link java.lang.String} object. */ public void setFileMetaType(String fileMetaType) { this.fileMetaType = fileMetaType; } /** * <p> * getJsonEscapeDisplayName. * </p> * * @return a {@link java.lang.String} object. */ public String getJsonEscapeDisplayName() { return JsonUtil.forJSON(displayName); } /** * <p> * Getter for the field <code>displayName</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getDisplayName() { return displayName; } /** * <p> * Setter for the field <code>displayName</code>. * </p> * * @param displayName * a {@link java.lang.String} object. */ public void setDisplayName(String displayName) { this.displayName = displayName; } /** * <p> * Getter for the field <code>values</code>. * </p> * * @return a {@link java.util.SortedSet} object. */ public SortedSet<WorkflowParamValue> getValues() { return values; } /** * <p> * Setter for the field <code>values</code>. * </p> * * @param values * a {@link java.util.SortedSet} object. */ public void setValues(SortedSet<WorkflowParamValue> values) { this.values = values; } /** * <p> * getJsonEscapeValue. * </p> * * @return a {@link java.lang.String} object. */ public String getJsonEscapeValue() { return JsonUtil.forJSON(value); } /** * <p> * Getter for the field <code>value</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getValue() { return value; } /** * <p> * Setter for the field <code>value</code>. * </p> * * @param value * a {@link java.lang.String} object. */ public void setValue(String value) { this.value = value; } /** * <p> * Getter for the field <code>displayValue</code>. * </p> * * @return a {@link java.lang.String} object. */ public String getDisplayValue() { return displayValue; } /** * <p> * Setter for the field <code>displayValue</code>. * </p> * * @param displayValue * a {@link java.lang.String} object. */ public void setDisplayValue(String displayValue) { this.displayValue = displayValue; } /** * <p> * Getter for the field <code>sample</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.model.Sample} object. */ public Sample getSample() { return sample; } /** * <p> * Setter for the field <code>sample</code>. * </p> * * @param sample * a {@link net.sourceforge.seqware.common.model.Sample} object. */ public void setSample(Sample sample) { this.sample = sample; } /** * <p> * Getter for the field <code>files</code>. * </p> * * @return a {@link java.util.List} object. */ public List<File> getFiles() { return files; } /** * <p> * Setter for the field <code>files</code>. * </p> * * @param files * a {@link java.util.List} object. */ public void setFiles(List<File> files) { this.files = files; } /** * {@inheritDoc} * * @return * @throws java.lang.CloneNotSupportedException */ @Override public WorkflowParam clone() throws CloneNotSupportedException { WorkflowParam wp = (WorkflowParam) super.clone(); List newFiles = (files == null ? null : new ArrayList(files)); wp.setFiles(newFiles); SortedSet newValues = (values == null ? null : new TreeSet<>(values)); wp.setValues(newValues); return wp; } /** * {@inheritDoc} * * @return */ @Override public boolean givesPermissionInternal(Registration registration, Set<Integer> considered) { boolean hasPermission; if (workflow != null) { hasPermission = workflow.givesPermission(registration, considered); } else {// orphaned WorkflowParam if (registration.isLIMSAdmin()) { LOGGER.warn("Modifying Orphan WorkflowParam: " + this.getDisplayName()); hasPermission = true; } else { LOGGER.warn("Not modifying Orphan WorkflowParam: " + this.getDisplayName()); hasPermission = false; } } if (!hasPermission) { LOGGER.info("WorkflowParam does not give permission"); throw new SecurityException("User " + registration.getEmailAddress() + " does not have permission to modify " + this.getDisplayName()); } return hasPermission; } }