001 /** 002 * Copyright 2010 The Kuali Foundation Licensed under the Educational Community 003 * License, Version 2.0 (the "License"); you may not use this file except in 004 * compliance with the License. You may obtain a copy of the License at 005 * http://www.osedu.org/licenses/ECL-2.0 Unless required by applicable law or 006 * agreed to in writing, software distributed under the License is distributed 007 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 008 * express or implied. See the License for the specific language governing 009 * permissions and limitations under the License. 010 */ 011 package org.kuali.student.r2.common.entity; 012 013 import java.util.Date; 014 015 import javax.persistence.Column; 016 import javax.persistence.Embeddable; 017 import javax.persistence.MappedSuperclass; 018 import javax.persistence.Temporal; 019 import javax.persistence.TemporalType; 020 021 import org.kuali.student.common.util.security.SecurityUtils; 022 import org.kuali.student.r2.common.dto.ContextInfo; 023 import org.kuali.student.r2.common.dto.MetaInfo; 024 import org.kuali.student.r2.common.infc.HasMeta; 025 import org.kuali.student.r2.common.infc.Meta; 026 027 @MappedSuperclass 028 @Embeddable 029 public abstract class MetaEntity extends BaseVersionEntity { 030 031 // Hibernate will not allow @Version in @Embeddable for some annoying reason 032 // @Version 033 // private long versionInd; 034 @Temporal(TemporalType.TIMESTAMP) 035 @Column(name="CREATETIME", updatable = false, nullable=false) 036 private Date createTime; 037 038 @Column(name="CREATEID", updatable = false, nullable=false) 039 private String createId; 040 041 @Temporal(TemporalType.TIMESTAMP) 042 @Column(name="UPDATETIME") 043 private Date updateTime; 044 045 @Column(name="UPDATEID") 046 private String updateId; 047 048 // public long getVersionInd() { 049 // return versionInd; 050 // } 051 // public void setVersionInd(long versionInd) { 052 // this.versionInd = versionInd; 053 // } 054 protected MetaEntity() { 055 } 056 057 // TODO - need a BaseEntity(HasMeta) to deal w/ version, id, and other 058 // fields 059 public MetaEntity(HasMeta hasMeta) { 060 if (null != hasMeta) { 061 Meta meta = hasMeta.getMeta(); 062 if (null != meta) { 063 this.setCreateTime(meta.getCreateTime()); 064 this.setCreateId(meta.getCreateId()); 065 this.setUpdateTime(meta.getUpdateTime()); 066 this.setUpdateId(meta.getUpdateId()); 067 this.setVersionNumber(null != meta.getVersionInd() ? Long.valueOf(meta.getVersionInd()) : null); 068 } 069 } 070 } 071 072 073 074 public void setEntityCreated(ContextInfo context) { 075 076 if (context != null) { 077 this.setCreateTime(context.getCurrentDate()); 078 this.setCreateId(context.getPrincipalId()); 079 080 setEntityUpdated(context); 081 } 082 } 083 084 public void setEntityUpdated (ContextInfo context) { 085 086 if (context != null) { 087 this.setUpdateTime(context.getCurrentDate()); 088 this.setUpdateId(context.getPrincipalId()); 089 } 090 } 091 public Date getCreateTime() { 092 return createTime; 093 } 094 095 public void setCreateTime(Date createTime) { 096 this.createTime = createTime; 097 } 098 099 public String getCreateId() { 100 return createId; 101 } 102 103 public void setCreateId(String createId) { 104 this.createId = createId; 105 } 106 107 public Date getUpdateTime() { 108 return updateTime; 109 } 110 111 public void setUpdateTime(Date updateTime) { 112 this.updateTime = updateTime; 113 } 114 115 public String getUpdateId() { 116 return updateId; 117 } 118 119 public void setUpdateId(String updateId) { 120 this.updateId = updateId; 121 } 122 123 @Override 124 protected void onPrePersist() { 125 super.onPrePersist(); 126 if (createTime == null) { 127 setCreateTime(new Date()); 128 } 129 if (updateTime == null) { 130 setUpdateTime(new Date()); 131 } 132 if (createId == null) { 133 setCreateId(SecurityUtils.getCurrentUserId()); 134 } 135 if (updateId == null) { 136 setUpdateId(SecurityUtils.getCurrentUserId()); 137 } 138 139 } 140 141 @Override 142 protected void onPreUpdate() { 143 super.onPreUpdate(); 144 // This code should not be here, but hibernate is calling update 145 // callback instead of prepersit if the id is not null. 146 if (createTime == null) { 147 setCreateTime(new Date()); 148 } 149 if (updateTime == null) { 150 setUpdateTime(new Date()); 151 } 152 if (createId == null) { 153 setCreateId(SecurityUtils.getCurrentUserId()); 154 } 155 if (updateId == null) { 156 setUpdateId(SecurityUtils.getCurrentUserId()); 157 } 158 } 159 160 public MetaInfo toDTO() { 161 MetaInfo miInfo = new MetaInfo(); 162 miInfo.setCreateId(getCreateId()); 163 miInfo.setCreateTime(getCreateTime()); 164 miInfo.setUpdateId(getUpdateId()); 165 miInfo.setUpdateTime(getUpdateTime()); 166 if (null != getVersionNumber()) { 167 miInfo.setVersionInd(new Long(getVersionNumber()).toString()); 168 } 169 return miInfo; 170 } 171 }