Subversion Repository Public Repository

litesoft

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
146
147
148
149
150
151
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 );

    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() + "'" );
    }
}

Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/orsup/otherattributeaccessors/AbstractAttributeAccessorSCDtoPO.java

Diff revisions: vs.
Revision Author Commited Message
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000