package org.activiti.spring.test.components.scope;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.Assert;
import java.io.Serializable;
import java.util.logging.Logger;
/**
* dumb object to demonstrate holding scoped state for the duration of a business process
*
* @author Josh Long
*/
public class StatefulObject implements Serializable,InitializingBean {
private transient Logger logger = Logger.getLogger(getClass().getName());
public static final long serialVersionUID = 1L;
private String name;
private int visitedCount = 0;
private long customerId;
public long getCustomerId() {
return customerId;
}
@Value("#{processInstance}") transient ProcessInstance processInstance ;
@Value("#{executionId}") String executionId;
@Value("#{processVariables['customerId']}")
public void setCustomerId(long customerId) {
this.customerId = customerId;
logger.info("setting this " + StatefulObject.class.getName() + " instances 'customerId' to "
+ this.customerId +". The current executionId is "+ this.executionId);
}
public StatefulObject() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StatefulObject that = (StatefulObject) o;
if (visitedCount != that.visitedCount) return false;
if (name != null ? !name.equals(that.name) : that.name != null) return false;
return true;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + visitedCount;
return result;
}
@Override
public String toString() {
return "StatefulObject{" +
"name='" + name + '\'' +
", visitedCount=" + visitedCount +
'}';
}
public void increment() {
this.visitedCount += 1;
}
public int getVisitedCount() {
return this.visitedCount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void afterPropertiesSet() throws Exception {
Assert.notNull(this.processInstance, "the processInstance should be equal to the currently active processInstance!");
logger.info("the 'processInstance' property is non-null: PI ID# "+ this.processInstance.getId());
}
}