001/**
002 * Copyright 2005-2016 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.kew.engine.node;
017
018import org.hibernate.annotations.GenericGenerator;
019import org.hibernate.annotations.Parameter;
020import org.kuali.rice.core.framework.persistence.jpa.OrmUtils;
021import org.kuali.rice.kew.api.doctype.ProcessDefinitionContract;
022import org.kuali.rice.kew.doctype.bo.DocumentType;
023import org.kuali.rice.kew.service.KEWServiceLocator;
024
025import javax.persistence.CascadeType;
026import javax.persistence.Column;
027import javax.persistence.Entity;
028import javax.persistence.FetchType;
029import javax.persistence.GeneratedValue;
030import javax.persistence.Id;
031import javax.persistence.JoinColumn;
032import javax.persistence.ManyToOne;
033import javax.persistence.OneToOne;
034import javax.persistence.Table;
035import javax.persistence.Version;
036import java.io.Serializable;
037
038
039/**
040 * Represents a route path defined on a {@link DocumentType}.  A ProcessDefinition is a named entity which
041 * simply points to an initial {@link RouteNode} which represents the beginning of the ProcessDefinition.
042 * The path of the process can then be followed using the next nodes defined on the route nodes. 
043 *
044 * @author Kuali Rice Team (rice.collab@kuali.org)
045 */
046@Entity
047@Table(name="KREW_DOC_TYP_PROC_T")
048//@Sequence(name="KREW_RTE_NODE_S",property="processId")
049public class ProcessDefinitionBo implements Serializable, ProcessDefinitionContract {
050
051        private static final long serialVersionUID = -6338857095673479752L;
052    
053    @Id
054    @GeneratedValue(generator="KREW_RTE_NODE_S")
055        @GenericGenerator(name="KREW_RTE_NODE_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={
056                        @Parameter(name="sequence_name",value="KREW_RTE_NODE_S"),
057                        @Parameter(name="value_column",value="id")
058        })
059        @Column(name="DOC_TYP_PROC_ID")
060        private String processId;
061        @Column(name="NM")
062        private String name;
063        @ManyToOne(fetch=FetchType.EAGER)
064        @JoinColumn(name="DOC_TYP_ID")
065        private DocumentType documentType;
066        @OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE})
067        @JoinColumn(name="INIT_RTE_NODE_ID")
068        private RouteNode initialRouteNode;
069    @Column(name="INIT_IND")
070        private boolean initial = false;
071        @Version
072        @Column(name="VER_NBR")
073        private Integer lockVerNbr;
074        
075        public String getProcessId() {
076                return processId;
077        }
078        public void setProcessId(String processId) {
079                this.processId = processId;
080        }
081        public DocumentType getDocumentType() {
082                return documentType;
083        }
084        public void setDocumentType(DocumentType documentType) {
085                this.documentType = documentType;
086        }
087        public RouteNode getInitialRouteNode() {
088                return initialRouteNode;
089        }
090        public void setInitialRouteNode(RouteNode initialRouteNode) {
091                this.initialRouteNode = initialRouteNode;
092        }
093        public String getName() {
094                return name;
095        }
096        public void setName(String name) {
097                this.name = name;
098        }
099        public boolean isInitial() {
100                return initial;
101        }
102        public void setInitial(boolean initial) {
103                this.initial = initial;
104        }
105        public Integer getLockVerNbr() {
106                return lockVerNbr;
107        }
108        public void setLockVerNbr(Integer lockVerNbr) {
109                this.lockVerNbr = lockVerNbr;
110        }
111
112        //@PrePersist
113        public void beforeInsert(){
114                OrmUtils.populateAutoIncValue(this, KEWServiceLocator.getEntityManagerFactory().createEntityManager());
115        }
116
117        @Override
118    public String getId() {
119        if (processId == null) {
120            return null;
121        }
122        return processId.toString();
123    }
124
125    @Override
126    public Long getVersionNumber() {
127        if (lockVerNbr == null) {
128            return null;
129        }
130        return new Long(lockVerNbr.longValue());
131    }
132
133    @Override
134    public String getDocumentTypeId() {
135        if (documentType == null) {
136            return null;
137        }
138        return documentType.getId();
139    }
140
141}