litesoft
@ 151
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.orsup.otherattributeaccessors; import org.litesoft.bo.attributes.*; import org.litesoft.orsup.base.*; import org.litesoft.orsup.lazyload.*; import org.litesoft.orsup.nonpublic.*; public abstract class AbstractAttributeAccessorSCDtoPO<Owner extends PersistentObjectImpl, Them extends PersistentObjectImpl> extends AttributeAccessorSCD<Owner> { private String mToThemName; private String mBackReference; private boolean mThemDependantOnUs; protected AbstractAttributeAccessorSCDtoPO( String pName, String pColumnName, String pToThemName, String pBackReference, boolean pThemDependantOnUs, boolean pRequired, AttributeMetaData pAMD ) { super( pName, pColumnName, pRequired, pAMD ); mToThemName = pToThemName; mBackReference = pBackReference; mThemDependantOnUs = pThemDependantOnUs; } protected final void setThemDependantOnUs( boolean pFlag ) { mThemDependantOnUs = pFlag; } public final boolean isThemDependantOnUs() { return mThemDependantOnUs; } public final String getToThemName() { return mToThemName; } public final String getBackReference() { return mBackReference; } abstract public AbstractLazyLoadTo<Owner, Them> getValueHolder( Owner pPO ); @Override public void onSuccessfulCommit( Owner pPO, boolean pWasCommitted ) { AbstractLazyLoadTo<Owner, Them> zValueHolder = getValueHolder( pPO ); if ( zValueHolder != null ) { zValueHolder.revertToNotLoaded(); } super.onSuccessfulCommit( pPO, pWasCommitted ); } /** * convert pObject to 'Them' where might be: 'null', a proper 'Them', UniqueKey, URL, ObjectHandle */ public Them to_PO( Owner pPO, Class<Them> pPersistentObjectClass, Object pObject ) { if ( pObject == null ) { return null; } if ( pObject instanceof PO_URLstringHelper ) { PO_URLstringHelper zHelper = (PO_URLstringHelper) pObject; String zRegistrationName = zHelper.getPersistedObjectRegistrationName(); PersistentObjectUniqueKey zPOUK = pPO.getFinder().createPersistentObjectUniqueKeyFrom( zRegistrationName, zHelper.getPersistentObjectUniqueKey() ); pObject = new PersistentObjectURL( zRegistrationName, zPOUK ); } if ( pObject instanceof ObjectHandle ) { pObject = noNull( pObject, pPO.getFinder().findOne( (ObjectHandle) pObject ) ); } else if ( pObject instanceof PersistentObjectURL ) { pObject = noNull( pObject, pPO.getFinder().findOne( (PersistentObjectURL) pObject ) ); } else if ( pObject instanceof PersistentObjectUniqueKey ) { pObject = noNull( pObject, pPO.getFinder().findOne( pPersistentObjectClass, (PersistentObjectUniqueKey) pObject ) ); } if ( pPersistentObjectClass.isInstance( pObject ) ) { //noinspection unchecked return (Them) pObject; } throw new IllegalArgumentException( "Unable to convert '" + pObject + "' of type '" + pObject.getClass() + "' to a type: " + pPersistentObjectClass ); } public Them to_PO( Owner pPO, String className, Object pObject ) { if ( pObject == null ) { return null; } if ( pObject instanceof PO_URLstringHelper ) { PO_URLstringHelper zHelper = (PO_URLstringHelper) pObject; String zRegistrationName = zHelper.getPersistedObjectRegistrationName(); PersistentObjectUniqueKey zPOUK = pPO.getFinder().createPersistentObjectUniqueKeyFrom( zRegistrationName, zHelper.getPersistentObjectUniqueKey() ); pObject = new PersistentObjectURL( zRegistrationName, zPOUK ); } if ( pObject instanceof ObjectHandle ) { pObject = noNull( pObject, pPO.getFinder().findOne( (ObjectHandle) pObject ) ); } else if ( pObject instanceof PersistentObjectURL ) { pObject = noNull( pObject, pPO.getFinder().findOne( (PersistentObjectURL) pObject ) ); } else if ( pObject instanceof PersistentObjectUniqueKey ) { pObject = noNull( pObject, pPO.getFinder().findOne( className, (PersistentObjectUniqueKey) pObject ) ); } String name; if ( pObject instanceof PersistentObject ) { PersistentObject po = (PersistentObject) pObject; name = po.getRegisteredName(); } else { name = pObject.getClass().getName(); } if ( className.equals( name ) ) { //noinspection unchecked,ConstantConditions return (Them) pObject; } throw new IllegalArgumentException( "Unable to convert '" + pObject + "' of type '" + pObject.getClass() + "' to a type: " + className ); } private Object noNull( Object pSearchWith, Object pFound ) { if ( pFound != null ) { return pFound; } throw new IllegalArgumentException( "Unable to locate PO with '" + pSearchWith + "' of type '" + pSearchWith.getClass() + "'" ); } } |