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

import java.util.*;

public class MetaDataOwnerManager<Owner extends MetaDataOwner,Owned extends AbstractNamedMetaData<Owner>>
{
    private Owner mOurOwner;
    private Map<String, Owned> mOwned = new HashMap<String, Owned>();
    private Owned mUnNamed = null;

    public MetaDataOwnerManager( Owner pOurOwner )
    {
        mOurOwner = pOurOwner;
    }

    public int getOwnedCount()
    {
        return mOwned.size();
    }

    public void add( Owned pToBeOwned )
    {
        // System.out.println( "" + this + ".add: " + pToBeOwned );
        String name = pToBeOwned.getName();
        if ( name == null )
        {
            mUnNamed = pToBeOwned;
        }
        else
        {
            Object prev = mOwned.put( name, pToBeOwned );
            if ( prev != null )
            {
                throw new IllegalStateException( "add w/ dup name: " + name );
            }
        }
        pToBeOwned.setOwner( mOurOwner );
    }

    public boolean remove( Owned pCurrentlyOwned )
    {
        // System.out.println( "" + this + ".remove: " + pCurrentlyOwned );
        String name = pCurrentlyOwned.getName();
        if ( name == null )
        {
            throw new IllegalStateException( "remove w/ No name" );
        }
        Object prev = mOwned.remove( name );
        if ( prev == null )
        {
            return false;
        }
        if ( prev != pCurrentlyOwned )
        {
            throw new IllegalStateException( "remove '" + pCurrentlyOwned + "', but removed dup: " + prev );
        }
        pCurrentlyOwned.setOwner( null );
        mOurOwner.changed();
        return true;
    }

    public boolean isUsedOwnedName( String pNewName )
    {
        return mOwned.containsKey( pNewName );
    }

    public void reKey( Owned pOwnedToBeReKeyed, String pNewName )
    {
        if ( mOurOwner != pOwnedToBeReKeyed.getOwner() )
        {
            throw new IllegalStateException( "reKey Failed not properly Owned" );
        }
        String pOldName = pOwnedToBeReKeyed.getName();

        if ( pOldName == null )
        {
            if ( pOwnedToBeReKeyed != mUnNamed )
            {
                throw new IllegalStateException( "reKey Failed from UnNamed" );
            }
        }
        else
        {
            Object curO = mOwned.remove( pOldName );
            if ( curO != pOwnedToBeReKeyed )
            {
                throw new IllegalStateException( "reKey Failed from: " + pOldName );
            }
        }
        Object newO = mOwned.put( pNewName, pOwnedToBeReKeyed );
        if ( newO != null )
        {
            throw new IllegalStateException( "reKey Failed to: " + pNewName );
        }
        mOurOwner.changed();
    }

    public Collection<Owned> getEntries()
    {
        return mOwned.values();
    }

    public Owned getEntry( String pName )
    {
        return (pName == null) ? mUnNamed : mOwned.get( pName );
    }

    public boolean available( String pName )
    {
        return !mOwned.containsKey( pName );
    }

    /**
     * @return null or Error
     */
    public String validatePersistable()
    {
        for ( Owned md : getEntries() )
        {
            String error = md.validatePersistable();
            if ( error != null )
            {
                return error;
            }
        }
        return null;
    }

    public void setRehydrated()
    {
        for ( Owned md : getEntries() )
        {
            md.setRehydrated();
        }
    }

    public void clearChangeIndicators()
    {
        for ( Owned md : getEntries() )
        {
            md.clearChangeIndicators();
        }
    }

    @Override
    public String toString()
    {
        return mOurOwner.toString();
    }
}

Commits for litesoft/trunk/Java/KeyHole/src/org/litesoft/aokeyhole/objects/support/MetaDataOwnerManager.java

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