package net.sourceforge.seqware.common.model; import java.io.Serializable; import java.util.Objects; import java.util.Set; 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> * WorkflowParamValue class. * </p> * * @author boconnor * @version $Id: $Id */ public class WorkflowParamValue extends PermissionsAware implements Serializable, Comparable<WorkflowParamValue>, Cloneable { private static final long serialVersionUID = 1L; private Integer workflowParamValueId; private Integer workflowParamId; private String displayName; private String value; private WorkflowParam workflowParam; final Logger logger = LoggerFactory.getLogger(WorkflowParamValue.class); /** * <p> * Constructor for WorkflowParamValue. * </p> */ public WorkflowParamValue() { super(); } /** * {@inheritDoc} * * @param that */ @Override public int compareTo(WorkflowParamValue that) { if (that == null) { return -1; } if (Objects.equals(that.getWorkflowParamValueId(), this.getWorkflowParamValueId())) // when both names are null { return 0; } if (that.getWorkflowParamValueId() == null) { return -1; // when only the other name is null } return (that.getWorkflowParamValueId().compareTo(this.getWorkflowParamValueId())); } /** {@inheritDoc} */ @Override public String toString() { return new ToStringBuilder(this).append("value", getValue()).toString(); } /** * {@inheritDoc} * * @param other */ @Override public boolean equals(Object other) { if ((this == other)) { return true; } if (!(other instanceof WorkflowParamValue)) { return false; } WorkflowParamValue castOther = (WorkflowParamValue) other; return new EqualsBuilder().append(this.getWorkflowParamValueId(), castOther.getWorkflowParamValueId()).isEquals(); } /** {@inheritDoc} */ @Override public int hashCode() { return new HashCodeBuilder().append(getWorkflowParamValueId()).toHashCode(); } /** * <p> * Getter for the field <code>workflowParamValueId</code>. * </p> * * @return a {@link java.lang.Integer} object. */ public Integer getWorkflowParamValueId() { return workflowParamValueId; } /** * <p> * Setter for the field <code>workflowParamValueId</code>. * </p> * * @param workflowParamValueId * a {@link java.lang.Integer} object. */ public void setWorkflowParamValueId(Integer workflowParamValueId) { this.workflowParamValueId = workflowParamValueId; } /** * <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> * 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> * 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>workflowParam</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.model.WorkflowParam} object. */ public WorkflowParam getWorkflowParam() { return workflowParam; } /** * <p> * Setter for the field <code>workflowParam</code>. * </p> * * @param workflowParam * a {@link net.sourceforge.seqware.common.model.WorkflowParam} object. */ public void setWorkflowParam(WorkflowParam workflowParam) { this.workflowParam = workflowParam; } /** * {@inheritDoc} * * @return * @throws java.lang.CloneNotSupportedException */ @Override public WorkflowParamValue clone() throws CloneNotSupportedException { WorkflowParamValue wp = this; try { wp = (WorkflowParamValue) super.clone(); WorkflowParam newParam = (workflowParam == null ? null : workflowParam.clone()); wp.setWorkflowParam(newParam); } catch (CloneNotSupportedException e) { logger.error("CloneNotSupported", e); } return wp; } /** * {@inheritDoc} * * @return */ @Override public boolean givesPermissionInternal(Registration registration, Set<Integer> considered) { boolean hasPermission; if (workflowParam != null) { hasPermission = workflowParam.givesPermission(registration, considered); } else {// orphaned WorkflowParamValue if (registration.isLIMSAdmin()) { logger.warn("Modifying Orphan WorkflowParamValue: " + this.getDisplayName()); hasPermission = true; } else { logger.warn("Not modifying Orphan WorkflowParamValue: " + this.getDisplayName()); hasPermission = false; } } if (!hasPermission) { logger.info("WorkflowParamValue does not give permission"); throw new SecurityException("User " + registration.getEmailAddress() + " does not have permission to modify " + this.getDisplayName()); } return hasPermission; } }