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
package org.litesoft.orsup.base;

public abstract class POInstanceQueryFilter extends POQueryFilter
{
    abstract public boolean isPO_Acceptable( PersistentObject<?> pPO );

    protected POInstanceQueryFilter( MetaDataForPO pMetaDataForPO )
    {
        super( pMetaDataForPO );
    }

    public static POInstanceQueryFilter NONE_ACCEPTABLE = new POInstanceQueryFilter( null )
    {
        public TYPE getType()
        {
            return TYPE.NoneAcceptable;
        }

        public boolean isPO_Acceptable( PersistentObject<?> pPO )
        {
            return false;
        }
    };

    public static POInstanceQueryFilter ALL_ACCEPTABLE = new POInstanceQueryFilter( null )
    {
        public TYPE getType()
        {
            return TYPE.AllAcceptable;
        }

        public boolean isPO_Acceptable( PersistentObject<?> pPO )
        {
            return true;
        }
    };

    public static class Force
    {
        public static POInstanceQueryFilter type( POQueryFilter pQueryFilter )
        {
            if ( pQueryFilter instanceof POInstanceQueryFilter )
            {
                return (POInstanceQueryFilter) pQueryFilter;
            }
            if ( pQueryFilter != null )
            {
                switch ( pQueryFilter.getType() )
                {
                    case NoneAcceptable:
                        return POInstanceQueryFilter.NONE_ACCEPTABLE;
                    case AllAcceptable:
                        break;
                    case PotentialFilteringByKey:
                        MetaDataForPO zMetaDataForPO = pQueryFilter.getMetaDataForPO();
                        if ( zMetaDataForPO != null )
                        {
                            AttributeAccessorSCD<PersistentObject<?>>[] zSCDs =
                                    zMetaDataForPO.getKeySet().getKeyAttributeAccessorSCDs();
                            if ( (zSCDs != null) && (zSCDs.length == 1) )
                            {
                                return new InstanceToKeyAdaptor( zMetaDataForPO, zSCDs[0],
                                                                 (POKeyQueryFilter) pQueryFilter );
                            }
                        }
                        throw new IllegalStateException( "PO Query Filter is a Key Filter" );
                    case PotentialFilteringByInstance:
                    default:
                        throw new Error(
                                "Combo of '" + pQueryFilter.getType() + "' and " + pQueryFilter.getClass() );
                }
            }
            return POInstanceQueryFilter.ALL_ACCEPTABLE;
        }
    }

    private static class InstanceToKeyAdaptor extends POInstanceQueryFilter
    {
        private AttributeAccessorSCD<PersistentObject<?>> mKeySCD;
        private POKeyQueryFilter mProxiedKeyFilter;

        public InstanceToKeyAdaptor( MetaDataForPO pMetaDataForPO,
                                     AttributeAccessorSCD<PersistentObject<?>> pKeySCD,
                                     POKeyQueryFilter pProxiedKeyFilter )
        {
            super( pMetaDataForPO );
            mKeySCD = pKeySCD;
            mProxiedKeyFilter = pProxiedKeyFilter;
        }

        public boolean isPO_Acceptable( PersistentObject<?> pPO )
        {
            return mProxiedKeyFilter.isPO_KeyAcceptable( mKeySCD.getValueOnPO( pPO ) );
        }

        public TYPE getType()
        {
            return TYPE.PotentialFilteringByInstance;
        }
    }
}

Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/orsup/base/POInstanceQueryFilter.java

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