package open.dolphin.infomodel; import javax.persistence.*; /** * ModuleModel * * @author Kazushi Minagawa, Digital Globe, Inc. */ @Entity @Table(name = "d_module") public class ModuleModel extends KarteEntryBean implements Stamp, java.io.Serializable, java.lang.Cloneable { @Embedded private ModuleInfoBean moduleInfo; @Transient private IInfoModel model; @Lob @Column(nullable=false) private byte[] beanBytes; @ManyToOne @JoinColumn(name="doc_id", nullable=false) private DocumentModel document; /** * ModuleModelオブジェクトを生成する。 */ public ModuleModel() { moduleInfo = new ModuleInfoBean(); } public DocumentModel getDocumentModel() { return document; } public void setDocumentModel(DocumentModel document) { this.document = document; } /** * モジュール情報を設定する。 * @param moduleInfo モジュール情報 */ public void setModuleInfoBean(ModuleInfoBean moduleInfo) { this.moduleInfo = moduleInfo; } /** * モジュール情報を返す。 * @return モジュール情報 */ public ModuleInfoBean getModuleInfoBean() { return moduleInfo; } /** * モジュールの情報モデル(実体のPOJO)を設定する。 * @param model モデル */ public void setModel(IInfoModel model) { this.model = model; } /** * モジュールの情報モデル(実体のPOJO)を返す。 * @return モデル */ public IInfoModel getModel() { return model; } /** * モジュールの永続化バイト配列を返す。 * @return モジュールの永続化バイト配列 */ public byte[] getBeanBytes() { return beanBytes; } /** * モジュールの永続化バイト配列を設定する。 * @param beanBytes モジュールの永続化バイト配列 */ public void setBeanBytes(byte[] beanBytes) { this.beanBytes = beanBytes; } /** * ドキュメントに現れる順番で比較する。 * @return 比較値 */ @Override public int compareTo(Object other) { if (other != null && getClass() == other.getClass()) { ModuleInfoBean moduleInfo1 = getModuleInfoBean(); ModuleInfoBean moduleInfo2 = ((ModuleModel)other).getModuleInfoBean(); return moduleInfo1.compareTo(moduleInfo2); } return -1; } @Override protected Object clone() throws CloneNotSupportedException { ModuleModel ret = new ModuleModel(); ret.setConfirmed(this.getConfirmed()); ret.setEnded(this.getEnded()); ret.setFirstConfirmed(this.getConfirmed()); ret.setLinkId(this.getLinkId()); ret.setLinkRelation(this.getLinkRelation()); ret.setModuleInfoBean((ModuleInfoBean)this.getModuleInfoBean().clone()); ret.setRecorded(this.getRecorded()); ret.setStarted(this.getStarted()); ret.setStatus(this.getStatus()); byte[] bytes = this.getBeanBytes(); if (bytes!=null) { byte[] dest = new byte[bytes.length]; System.arraycopy(bytes, 0, dest, 0, bytes.length); ret.setBeanBytes(dest); } if (model!=null) { if (model instanceof BundleDolphin) { BundleDolphin m = (BundleDolphin)model; ret.setModel((BundleDolphin)m.clone()); } else if (model instanceof BundleMed) { BundleMed m = (BundleMed)model; ret.setModel((BundleMed)m.clone()); } else if (model instanceof ProgressCourse) { ProgressCourse m = (ProgressCourse)model; ret.setModel((ProgressCourse)m.clone()); } else { throw new CloneNotSupportedException(); } } // 下記は利用側で再設定する //ret.setKarteBean(this.getKarteBean()); //ret.setUserModel(this.getUserModel()); //ret.setDocumentModel(this.getDocumentModel()); return ret; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("confirmed=").append(this.getConfirmed()).append("\n"); sb.append("started=").append(this.getStarted()).append("\n"); sb.append("recorded=").append(this.getRecorded()).append("\n"); sb.append("status=").append(this.getStatus()).append("\n"); sb.append("userModel PK=").append(this.getUserModel().getId()).append("\n"); sb.append("karteBean PK=").append(this.getKarteBean().getId()).append("\n"); sb.append("stampName=").append(this.getModuleInfoBean().getStampName()).append("\n"); sb.append("stampRole=").append(this.getModuleInfoBean().getStampRole()).append("\n"); sb.append("entity=").append(this.getModuleInfoBean().getEntity()).append("\n"); sb.append("stampNumber=").append(this.getModuleInfoBean().getStampNumber()).append("\n"); if (this.getModel() instanceof BundleDolphin) { BundleDolphin cb = (BundleDolphin)this.getModel(); sb.append(cb.toString()); } return sb.toString(); } }