package pl.net.bluesoft.rnd.processtool.model.config; import org.hibernate.annotations.*; import pl.net.bluesoft.rnd.processtool.model.AbstractPersistentEntity; import pl.net.bluesoft.rnd.processtool.model.PersistentEntity; import pl.net.bluesoft.rnd.processtool.model.UserData; import pl.net.bluesoft.rnd.pt.utils.lang.Lang2; import javax.persistence.*; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Parameter; import javax.persistence.Table; import java.io.Serializable; import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.Set; import static pl.net.bluesoft.util.lang.FormatUtil.nvl; /** * Configuration of a process definition. * * @author tlipski@bluesoft.net.pl */ @Entity @Table(name="pt_process_definition_config") public class ProcessDefinitionConfig extends AbstractPersistentEntity implements Serializable { @Id @GeneratedValue(generator = "idGenerator") @GenericGenerator( name = "idGenerator", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = { @org.hibernate.annotations.Parameter(name = "initial_value", value = "" + 1), @org.hibernate.annotations.Parameter(name = "value_column", value = "_DB_ID"), @org.hibernate.annotations.Parameter(name = "sequence_name", value = "DB_SEQ_ID_PROC_DEF_CONF") } ) @Column(name = "id") protected Long id; private String processName; private String description; private String bpmDefinitionKey; @Column(name="comment_") private String comment; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="creator_id") private UserData creator; private Date createDate; @OneToMany(cascade = {CascadeType.ALL}, fetch=FetchType.LAZY) @JoinColumn(name="definition_id") private Set<ProcessStateConfiguration> states = new HashSet<ProcessStateConfiguration>(); @OneToMany(cascade = {CascadeType.ALL}, fetch=FetchType.LAZY) @JoinColumn(name="definition_id") private Set<ProcessDefinitionPermission> permissions = new HashSet<ProcessDefinitionPermission>(); @Lob private byte[] processLogo; private Boolean enabled; private String taskItemClass; /** * latest definition of process with processName ensures uniqueness and versioning of definitions */ private Boolean latest; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public byte[] getProcessLogo() { return processLogo; } public void setProcessLogo(byte[] processLogo) { this.processLogo = Lang2.noCopy(processLogo); } public String getTaskItemClass() { return taskItemClass; } public void setTaskItemClass(String taskItemClass) { this.taskItemClass = taskItemClass; } public String getProcessName() { return processName; } public void setProcessName(String processName) { this.processName = processName; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getBpmDefinitionKey() { return bpmDefinitionKey; } public void setBpmDefinitionKey(String bpmDefinitionKey) { this.bpmDefinitionKey = bpmDefinitionKey; } public Boolean getLatest() { return latest; } public void setLatest(Boolean latest) { this.latest = latest; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public UserData getCreator() { return creator; } public void setCreator(UserData creator) { this.creator = creator; } public Set<ProcessStateConfiguration> getStates() { return states; } public void setStates(Set<ProcessStateConfiguration> states) { this.states = states; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } public Boolean getEnabled() { return nvl(enabled, true); } public void setEnabled(Boolean enabled) { this.enabled = enabled; } public static final Comparator<ProcessDefinitionConfig> DEFAULT_COMPARATOR = new Comparator<ProcessDefinitionConfig>() { @Override public int compare(ProcessDefinitionConfig o1, ProcessDefinitionConfig o2) { int res = nvl(o1.getDescription(), "").compareToIgnoreCase(nvl(o2.getDescription(), "")); if (res == 0) { res = nvl(o2.getId(), Long.MIN_VALUE).compareTo(nvl(o1.getId(), Long.MIN_VALUE)); } return res; } }; public Set<ProcessDefinitionPermission> getPermissions() { if (permissions == null) { permissions = new HashSet<ProcessDefinitionPermission>(); } return permissions; } public void setPermissions(Set<ProcessDefinitionPermission> permissions) { this.permissions = permissions; } }