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
package org.litesoft.aokeyhole.objects.factories;

import org.litesoft.aokeyhole.objects.*;
import org.litesoft.aokeyhole.objects.attributes.*;
import org.litesoft.aokeyhole.objects.support.*;
import org.litesoft.aokeyhole.toolkit.*;

import java.util.*;

public class AttributeFactoryImpl implements AttributeFactory
{
    private PropertyMetaDataDefinitionAccessor mPropertyMetaDataDefinitionAccessor;
    private IdentifierValidator mAttributeIdentifierValidator;
    private String mTypesForError;
    private Map<String, AttributeSet> mSetsByType = new HashMap<String, AttributeSet>();

    public AttributeFactoryImpl( PropertyMetaDataDefinitionAccessor pPropertyMetaDataDefinitionAccessor, IdentifierValidator pAttributeIdentifierValidator )
    {
        mPropertyMetaDataDefinitionAccessor = pPropertyMetaDataDefinitionAccessor;
        mAttributeIdentifierValidator = pAttributeIdentifierValidator;

        List<String> zTypes = new ArrayList<String>();
        for ( AttributeSet zSet : getAttributeSets() )
        {
            zSet.addTypeOptions( zTypes );
            mSetsByType.put( zSet.getType().toString(), zSet );
        }
        if ( zTypes.size() == 1 )
        {
            mTypesForError = ": " + zTypes.get( 0 );
        }
        else
        {
            mTypesForError = " one of: " + zTypes.get( 0 );
            for ( int i = 1; i < zTypes.size(); i++ )
            {
                mTypesForError += ", " + zTypes.get( i );
            }
        }
    }

    public String getTypesForError()
    {
        return mTypesForError;
    }

    public AttributeSet[] getAttributeSets()
    {
        return mPropertyMetaDataDefinitionAccessor.getAttributeSets();
    }

    public AttributeMetaData createAttributeMetaDataSimple( ObjectSet pObjectSet, Mode pMode, boolean pEditable, AttributeType pType, boolean pVirtual,
                                                            String pName )
    {
        AttributeSet zAttributeSet = mSetsByType.get( pType.toString() );
        ASet zASet = pVirtual ? zAttributeSet.getVirtual() : zAttributeSet.getPersisted();
        AttributeMetaDataSimple zAMD =
                new AttributeMetaDataSimple( zAttributeSet, pMode, pEditable, pVirtual, adjust( pObjectSet, pType, zASet ), mAttributeIdentifierValidator,
                                             pName );
        handleCallBack( zASet, zAMD );
        return zAMD;
    }

    public AttributeMetaData createAttributeMetaDataID( ObjectSet pObjectSet, Mode pMode, boolean pEditable, String pName )
    {
        AttributeType zType = A_ID.TYPE;
        AttributeSet zAttributeSet = mSetsByType.get( zType.toString() );
        ASet zASet = zAttributeSet.getPersisted();
        AttributeMetaData zAMD =
                new AttributeMetaDataSimpleID( zAttributeSet, pMode, pEditable, adjust( pObjectSet, zType, zASet ), mAttributeIdentifierValidator, pName );
        handleCallBack( zASet, zAMD );
        return zAMD;
    }

    public AttributeMetaData createAttributeMetaDataValidOptions( ObjectSet pObjectSet, Mode pMode, boolean pEditable, boolean pVirtual,
                                                                  String... pNameAndOptions )
    {
        AttributeType zType = A_ValidOptions.TYPE;
        AttributeSet zAttributeSet = mSetsByType.get( zType.toString() );
        ASet zASet = pVirtual ? zAttributeSet.getVirtual() : zAttributeSet.getPersisted();
        AttributeMetaData zAMD =
                new AttributeMetaDataValidOptions( zAttributeSet, pMode, pEditable, pVirtual, adjust( pObjectSet, zType, zASet ), mAttributeIdentifierValidator,
                                                   pNameAndOptions );
        handleCallBack( zASet, zAMD );
        return zAMD;
    }

    public AttributeMetaDataRelatedPersisted createAttributeMetaDataRelatedPersisted( ObjectSet pObjectSet, Mode pMode, boolean pEditable, AttributeType pType,
                                                                                      String pName )
    {
        AttributeSet zAttributeSet = mSetsByType.get( pType.toString() );
        ASet zASet = zAttributeSet.getPersisted();
        AttributeMetaDataRelatedPersisted zAMD =
                new AttributeMetaDataRelatedPersisted( zAttributeSet, pMode, pEditable, adjust( pObjectSet, pType, zASet ), mAttributeIdentifierValidator,
                                                       pName );
        handleCallBack( zASet, zAMD );
        return zAMD;
    }

    public AttributeMetaDataRelatedVirtual createAttributeMetaDataRelatedVirtual( ObjectSet pObjectSet, Mode pMode, boolean pEditable, AttributeType pType,
                                                                                  String pName )
    {
        AttributeSet zAttributeSet = mSetsByType.get( pType.toString() );
        ASet zASet = zAttributeSet.getVirtual();
        AttributeMetaDataRelatedVirtual zAMD =
                new AttributeMetaDataRelatedVirtual( zAttributeSet, pMode, pEditable, adjust( pObjectSet, pType, zASet ), mAttributeIdentifierValidator,
                                                     pName );
        handleCallBack( zASet, zAMD );
        return zAMD;
    }

    private void handleCallBack( ASet pASet, AttributeMetaData pAMD )
    {
        AttributeCreationCallBack zCallBack = pASet.getCreationCallBack();
        if ( zCallBack != null )
        {
            zCallBack.justCreated( pAMD );
        }
    }

    protected PropertyMetaData[] adjust( ObjectSet pObjectSet, AttributeType pType, ASet pASet )
    {
        List<PropertyMetaData> rv = new ArrayList<PropertyMetaData>();
        addAll( rv, pObjectSet, pASet.getPMDs() );
        addAll( rv, pObjectSet, pObjectSet.getAdditionalAttributePMDs( pType ) );
        return rv.toArray( new PropertyMetaData[rv.size()] );
    }

    private void addAll( List<PropertyMetaData> pCollector, ObjectSet pObjectSet, PropertyMetaData[] pPMDs )
    {
        if ( pPMDs != null )
        {
            for ( PropertyMetaData zPMD : pPMDs )
            {
                if ( pObjectSet.acceptableAttributePMD( zPMD ) )
                {
                    pCollector.add( zPMD );
                }
            }
        }
    }
}

Commits for litesoft/trunk/Java/KeyHole/src/org/litesoft/aokeyhole/objects/factories/AttributeFactoryImpl.java

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