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 org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* <p>
* WorkflowRunParam class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class WorkflowRunParam extends PermissionsAware implements Serializable, Comparable<WorkflowRunParam> {
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer WorkflowRunParamId;
private String type;
private String key;
private String value;
private Integer parentProcessingAccession;
private WorkflowRun workflowRun;
final Logger logger = LoggerFactory.getLogger(WorkflowRunParam.class);
/**
* <p>
* Constructor for WorkflowRunParam.
* </p>
*/
public WorkflowRunParam() {
super();
}
/**
* {@inheritDoc}
*
* @param that
*/
@Override
public int compareTo(WorkflowRunParam that) {
if (that == null) {
return -1;
}
if (WorkflowRunParamId == null || that.getWorkflowRunParamId() == null) {
return key.compareTo(that.getKey()) + value.compareTo(that.getValue());
}
if (Objects.equals(that.getWorkflowRunParamId(), this.getWorkflowRunParamId())) // when both names are null
{
return 0;
}
return (that.getWorkflowRunParamId().compareTo(this.getWorkflowRunParamId()));
}
/**
* <p>
* toString.
* </p>
*
* @return a {@link java.lang.String} object.
*/
@Override
public String toString() {
return new ToStringBuilder(this).append("swAccession", getWorkflowRunParamId()).toString();
}
/**
* {@inheritDoc}
*
* @param other
*/
@Override
public boolean equals(Object other) {
if ((this == other)) {
return true;
}
if (!(other instanceof WorkflowRunParam)) {
return false;
}
return (this.compareTo(((WorkflowRunParam) other)) == 0);
}
/**
* <p>
* hashCode.
* </p>
*
* @return a int.
*/
@Override
public int hashCode() {
return new HashCodeBuilder().append(getWorkflowRunParamId()).toHashCode();
}
/**
* <p>
* Getter for the field <code>parentProcessingAccession</code>.
* </p>
*
* @return a {@link java.lang.Integer} object.
*/
public Integer getParentProcessingAccession() {
return parentProcessingAccession;
}
/**
* <p>
* Setter for the field <code>parentProcessingAccession</code>.
* </p>
*
* @param parentProcessingAccession
* a {@link java.lang.Integer} object.
*/
public void setParentProcessingAccession(Integer parentProcessingAccession) {
this.parentProcessingAccession = parentProcessingAccession;
}
/**
* <p>
* getWorkflowRunParamId.
* </p>
*
* @return a {@link java.lang.Integer} object.
*/
public Integer getWorkflowRunParamId() {
return WorkflowRunParamId;
}
/**
* <p>
* setWorkflowRunParamId.
* </p>
*
* @param WorkflowRunParamId
* a {@link java.lang.Integer} object.
*/
public void setWorkflowRunParamId(Integer WorkflowRunParamId) {
this.WorkflowRunParamId = WorkflowRunParamId;
}
/**
* <p>
* Getter for the field <code>type</code>.
* </p>
*
* @return a {@link java.lang.String} object.
*/
public String getType() {
return 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>
* 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>
* 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>workflowRun</code>.
* </p>
*
* @return a {@link net.sourceforge.seqware.common.model.WorkflowRun} object.
*/
public WorkflowRun getWorkflowRun() {
return workflowRun;
}
/**
* <p>
* Setter for the field <code>workflowRun</code>.
* </p>
*
* @param workflowRun
* a {@link net.sourceforge.seqware.common.model.WorkflowRun} object.
*/
public void setWorkflowRun(WorkflowRun workflowRun) {
this.workflowRun = workflowRun;
}
/**
* {@inheritDoc}
*
* @return
*/
@Override
public boolean givesPermissionInternal(Registration registration, Set<Integer> considered) {
boolean hasPermission;
if (workflowRun != null) {
hasPermission = workflowRun.givesPermission(registration, considered);
} else {// Orphaned WorkflowRunParam
if (registration.isLIMSAdmin()) {
logger.warn("Modifying Orphan WorkflowRunParam: " + this.getKey());
hasPermission = true;
} else {
logger.warn("Not modifying Orphan WorkflowRunParam: " + this.getKey());
hasPermission = false;
}
}
if (!hasPermission) {
logger.info("WorkflowRunParam does not give permission");
throw new SecurityException("User " + registration.getEmailAddress() + " does not have permission to modify " + this.getKey());
}
return hasPermission;
}
}