001 /** 002 * Copyright 2005-2013 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 */ 016 package org.kuali.rice.kew.engine.node; 017 018 import java.io.Serializable; 019 import java.util.ArrayList; 020 import java.util.Iterator; 021 import java.util.List; 022 023 import javax.persistence.CascadeType; 024 import javax.persistence.Column; 025 import javax.persistence.Entity; 026 import javax.persistence.FetchType; 027 import javax.persistence.GeneratedValue; 028 import javax.persistence.Id; 029 import javax.persistence.JoinColumn; 030 import javax.persistence.ManyToOne; 031 import javax.persistence.OneToMany; 032 import javax.persistence.OneToOne; 033 import javax.persistence.Table; 034 import javax.persistence.Version; 035 036 import org.hibernate.annotations.Fetch; 037 import org.hibernate.annotations.FetchMode; 038 import org.hibernate.annotations.GenericGenerator; 039 import org.hibernate.annotations.Parameter; 040 import org.kuali.rice.core.framework.persistence.jpa.OrmUtils; 041 import org.kuali.rice.kew.service.KEWServiceLocator; 042 043 /** 044 * Represents a branch in the routing path of the document. 045 * 046 * @author Kuali Rice Team (rice.collab@kuali.org) 047 */ 048 @Entity 049 //@Sequence(name="KREW_RTE_NODE_S",property="branchId") 050 @Table(name="KREW_RTE_BRCH_T") 051 public class Branch implements Serializable { 052 053 private static final long serialVersionUID = 7164561979112939112L; 054 055 @Id 056 @GeneratedValue(generator="KREW_RTE_NODE_S") 057 @GenericGenerator(name="KREW_RTE_NODE_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={ 058 @Parameter(name="sequence_name",value="KREW_RTE_NODE_S"), 059 @Parameter(name="value_column",value="id") 060 }) 061 @Column(name="RTE_BRCH_ID") 062 private String branchId; 063 @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.PERSIST) 064 @JoinColumn(name="PARNT_ID") 065 private Branch parentBranch; 066 @Column(name="NM") 067 private String name; 068 @OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST,CascadeType.MERGE}, mappedBy="branch", orphanRemoval=true) 069 @Fetch(value=FetchMode.SELECT) 070 private List<BranchState> branchState = new ArrayList<BranchState>(); 071 // apache lazy list commented out due to not being serializable 072 // private List branchState = ListUtils.lazyList(new ArrayList(), 073 // new Factory() { 074 // public Object create() { 075 // return new BranchState(); 076 // } 077 // }); 078 @OneToOne(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST}) 079 @JoinColumn(name="INIT_RTE_NODE_INSTN_ID") 080 private RouteNodeInstance initialNode; 081 @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.PERSIST) 082 @JoinColumn(name="SPLT_RTE_NODE_INSTN_ID") 083 private RouteNodeInstance splitNode; 084 @ManyToOne(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST,CascadeType.MERGE}) 085 @JoinColumn(name="JOIN_RTE_NODE_INSTN_ID") 086 private RouteNodeInstance joinNode; 087 088 @Version 089 @Column(name="VER_NBR") 090 private Integer lockVerNbr; 091 092 public String getName() { 093 return name; 094 } 095 096 public void setName(String name) { 097 this.name = name; 098 } 099 100 public RouteNodeInstance getSplitNode() { 101 return splitNode; 102 } 103 public void setSplitNode(RouteNodeInstance splitNode) { 104 this.splitNode = splitNode; 105 } 106 public RouteNodeInstance getInitialNode() { 107 return initialNode; 108 } 109 public void setInitialNode(RouteNodeInstance activeNode) { 110 this.initialNode = activeNode; 111 } 112 public String getBranchId() { 113 return branchId; 114 } 115 public void setBranchId(String branchId) { 116 this.branchId = branchId; 117 } 118 public RouteNodeInstance getJoinNode() { 119 return joinNode; 120 } 121 public void setJoinNode(RouteNodeInstance joinNode) { 122 this.joinNode = joinNode; 123 } 124 public Branch getParentBranch() { 125 return parentBranch; 126 } 127 public void setParentBranch(Branch parentBranch) { 128 this.parentBranch = parentBranch; 129 } 130 public BranchState getBranchState(String key) { 131 for (Iterator iter = branchState.iterator(); iter.hasNext();) { 132 BranchState branchState = (BranchState) iter.next(); 133 if (branchState.getKey().equals(key)) { 134 return branchState; 135 } 136 } 137 return null; 138 } 139 public void addBranchState(BranchState state) { 140 branchState.add(state); 141 state.setBranch(this); 142 } 143 public List<BranchState> getBranchState() { 144 return branchState; 145 } 146 public void setBranchState(List<BranchState> branchState) { 147 this.branchState.clear(); 148 this.branchState.addAll(branchState); 149 //this.branchState = branchState; 150 } 151 152 public BranchState getDocBranchState(int index){ 153 while (branchState.size() <= index) { 154 branchState.add(new BranchState()); 155 } 156 return (BranchState) branchState.get(index); 157 158 } 159 160 public Integer getLockVerNbr() { 161 return lockVerNbr; 162 } 163 public void setLockVerNbr(Integer lockVerNbr) { 164 this.lockVerNbr = lockVerNbr; 165 } 166 167 public String toString() { 168 return "[Branch: branchId=" + branchId + 169 ", parentBranch=" + (parentBranch == null ? "null" : parentBranch.getBranchId()) + 170 "]"; 171 } 172 173 //@PrePersist 174 public void beforeInsert(){ 175 OrmUtils.populateAutoIncValue(this, KEWServiceLocator.getEntityManagerFactory().createEntityManager()); 176 } 177 } 178