Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/Java/KeyHole/src/org/litesoft/aokeyhole/objects/SubSystemMetaData.java

Diff revisions: vs.
  @@ -1,138 +1,138 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.aokeyhole.objects;
3 -
4 - import org.litesoft.aokeyhole.objects.factories.*;
5 - import org.litesoft.aokeyhole.objects.support.*;
6 - import org.litesoft.aokeyhole.persist.*;
7 - import org.litesoft.aokeyhole.toolkit.*;
8 -
9 - import java.io.*;
10 - import java.util.*;
11 -
12 - /**
13 - * Note all SubSystems are created in unpersist mode
14 - */
15 - public class SubSystemMetaData extends AbstractNamedOwningMetaData<SystemMetaData, SubSystemMetaData, ObjectMetaData> implements Comparable<SubSystemMetaData> {
16 - private MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData> mOwnerManager = new MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData>( this );
17 -
18 - private int mSortIndex;
19 - private SubSystemPersister mPersister;
20 - private ObjectFactory mObjectFactory;
21 -
22 - public SubSystemMetaData( boolean pEditable, IdentifierValidator pNameValidator, int pSortIndex, SubSystemPersister pPersister,
23 - ObjectFactory pObjectFactory ) {
24 - super( "SubSystem", Mode.Rehydrating, pEditable, pNameValidator, pPersister.getName() );
25 -
26 - mSortIndex = pSortIndex;
27 - mPersister = pPersister;
28 - mObjectFactory = pObjectFactory;
29 - }
30 -
31 - @Override
32 - public MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData> getOwnerManager() {
33 - return mOwnerManager;
34 - }
35 -
36 - @Override
37 - public int compareTo( SubSystemMetaData them ) {
38 - return this.mSortIndex - them.mSortIndex;
39 - }
40 -
41 - @Override
42 - protected String updateName( String pName ) {
43 - return getMetaDataType() + " does NOT support Name Change";
44 - }
45 -
46 - @Override
47 - public boolean isUsedOwnedName( String pNewName ) {
48 - return getSystemMetaData().isUsedObjectName( pNewName );
49 - }
50 -
51 - // If we can succeed at the System level, then need to manage our list of Objects
52 - @Override
53 - public void reKeyOwnedName( ObjectMetaData pMetaDataOwned, String pNewName ) {
54 - getSystemMetaData().reKeyObject( pMetaDataOwned, pNewName );
55 - super.reKeyOwnedName( pMetaDataOwned, pNewName );
56 - }
57 -
58 - public String[] getSortedParentOptionNames( ObjectSet pObjectSet, String pExcludedName ) {
59 - return getSystemMetaData().getSortedParentOptionNames( this, pObjectSet, pExcludedName );
60 - }
61 -
62 - public ObjectMetaData unpersistObjectMetaData( ObjectSet pObjectSet, String pName, String pParentName ) {
63 - ObjectMetaData md = mObjectFactory.createObjectMetaData( Mode.Rehydrating, isEditable(), pObjectSet, pName );
64 - getOwnerManager().add( md );
65 - md.unpersistParentName( pParentName );
66 - return getSystemMetaData().unpersist( md );
67 - }
68 -
69 - public void remove( ObjectMetaData pObjectMetaData, ChangeHandler pChanges ) {
70 - pChanges.add( new DeleteObject( pObjectMetaData ) );
71 - getSystemMetaData().remove( pObjectMetaData, pChanges );
72 - }
73 -
74 - private void remove( ObjectMetaData pObjectMetaData ) {
75 - getOwnerManager().remove( pObjectMetaData );
76 - }
77 -
78 - public ObjectMetaData createObjectMetaData( ObjectSet pObjectSet ) {
79 - verifyEditability();
80 - ObjectMetaData md = mObjectFactory.createObjectMetaData( Mode.New, isEditable(), pObjectSet, null );
81 - getOwnerManager().add( md );
82 - pObjectSet.justCreated( md );
83 - return md;
84 - }
85 -
86 - public ObjectMetaData getObject( String pName ) {
87 - return getOwnerManager().getEntry( pName );
88 - }
89 -
90 - public List<ObjectMetaData> getSortedObjects() {
91 - List<ObjectMetaData> rv = new ArrayList<ObjectMetaData>( getOwnerManager().getEntries() );
92 - Collections.sort( rv );
93 - return rv;
94 - }
95 -
96 - public SubSystemMetaData loadObjects()
97 - throws IOException {
98 - SubSystemReader zSubSystemReader = mPersister.getReader( getSystemMetaData().getVersion() );
99 - for ( ObjectReader zReader; null != (zReader = zSubSystemReader.nextObject()); ) {
100 - createObjectFrom( zReader );
101 - }
102 - return this;
103 - }
104 -
105 - private void createObjectFrom( ObjectReader pReader ) {
106 - String zType = pReader.getType();
107 - for ( ObjectSet zSet : mObjectFactory.getObjectSets() ) {
108 - if ( zSet.getType().equals( zType ) ) {
109 - unpersistObjectMetaData( zSet, pReader.getName(), pReader.getParent() ).populateFrom( pReader );
110 - return;
111 - }
112 - }
113 - throw pReader.unrecognizedType( "Unrecognized Object-type '" + zType + "', not" + mObjectFactory.getTypesForError() );
114 - }
115 -
116 - public SubSystemWriter toSubSystemWriter() {
117 - SubSystemBuilder zBuilder = mPersister.getBuilder( getSystemMetaData().getVersion(), getSystemMetaData().getKeyHoleVersion() );
118 -
119 - for ( ObjectMetaData zObject : getSortedObjects() ) {
120 - zObject.addTo( zBuilder );
121 - }
122 -
123 - return zBuilder.done();
124 - }
125 -
126 - protected class DeleteObject implements ChangeFragment {
127 - private ObjectMetaData mToDelete;
128 -
129 - public DeleteObject( ObjectMetaData pToDelete ) {
130 - mToDelete = pToDelete;
131 - }
132 -
133 - @Override
134 - public void commitChange() {
135 - remove( mToDelete );
136 - }
137 - }
138 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.aokeyhole.objects;
3 +
4 + import org.litesoft.aokeyhole.objects.factories.*;
5 + import org.litesoft.aokeyhole.objects.support.*;
6 + import org.litesoft.aokeyhole.persist.*;
7 + import org.litesoft.aokeyhole.toolkit.*;
8 +
9 + import java.io.*;
10 + import java.util.*;
11 +
12 + /**
13 + * Note all SubSystems are created in unpersist mode
14 + */
15 + public class SubSystemMetaData extends AbstractNamedOwningMetaData<SystemMetaData, SubSystemMetaData, ObjectMetaData> implements Comparable<SubSystemMetaData> {
16 + private MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData> mOwnerManager = new MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData>( this );
17 +
18 + private int mSortIndex;
19 + private SubSystemPersister mPersister;
20 + private ObjectFactory mObjectFactory;
21 +
22 + public SubSystemMetaData( boolean pEditable, IdentifierValidator pNameValidator, int pSortIndex, SubSystemPersister pPersister,
23 + ObjectFactory pObjectFactory ) {
24 + super( "SubSystem", Mode.Rehydrating, pEditable, pNameValidator, pPersister.getName() );
25 +
26 + mSortIndex = pSortIndex;
27 + mPersister = pPersister;
28 + mObjectFactory = pObjectFactory;
29 + }
30 +
31 + @Override
32 + public MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData> getOwnerManager() {
33 + return mOwnerManager;
34 + }
35 +
36 + @Override
37 + public int compareTo( SubSystemMetaData them ) {
38 + return this.mSortIndex - them.mSortIndex;
39 + }
40 +
41 + @Override
42 + protected String updateName( String pName ) {
43 + return getMetaDataType() + " does NOT support Name Change";
44 + }
45 +
46 + @Override
47 + public boolean isUsedOwnedName( String pNewName ) {
48 + return getSystemMetaData().isUsedObjectName( pNewName );
49 + }
50 +
51 + // If we can succeed at the System level, then need to manage our list of Objects
52 + @Override
53 + public void reKeyOwnedName( ObjectMetaData pMetaDataOwned, String pNewName ) {
54 + getSystemMetaData().reKeyObject( pMetaDataOwned, pNewName );
55 + super.reKeyOwnedName( pMetaDataOwned, pNewName );
56 + }
57 +
58 + public String[] getSortedParentOptionNames( ObjectSet pObjectSet, String pExcludedName ) {
59 + return getSystemMetaData().getSortedParentOptionNames( this, pObjectSet, pExcludedName );
60 + }
61 +
62 + public ObjectMetaData unpersistObjectMetaData( ObjectSet pObjectSet, String pName, String pParentName ) {
63 + ObjectMetaData md = mObjectFactory.createObjectMetaData( Mode.Rehydrating, isEditable(), pObjectSet, pName );
64 + getOwnerManager().add( md );
65 + md.unpersistParentName( pParentName );
66 + return getSystemMetaData().unpersist( md );
67 + }
68 +
69 + public void remove( ObjectMetaData pObjectMetaData, ChangeHandler pChanges ) {
70 + pChanges.add( new DeleteObject( pObjectMetaData ) );
71 + getSystemMetaData().remove( pObjectMetaData, pChanges );
72 + }
73 +
74 + private void remove( ObjectMetaData pObjectMetaData ) {
75 + getOwnerManager().remove( pObjectMetaData );
76 + }
77 +
78 + public ObjectMetaData createObjectMetaData( ObjectSet pObjectSet ) {
79 + verifyEditability();
80 + ObjectMetaData md = mObjectFactory.createObjectMetaData( Mode.New, isEditable(), pObjectSet, null );
81 + getOwnerManager().add( md );
82 + pObjectSet.justCreated( md );
83 + return md;
84 + }
85 +
86 + public ObjectMetaData getObject( String pName ) {
87 + return getOwnerManager().getEntry( pName );
88 + }
89 +
90 + public List<ObjectMetaData> getSortedObjects() {
91 + List<ObjectMetaData> rv = new ArrayList<ObjectMetaData>( getOwnerManager().getEntries() );
92 + Collections.sort( rv );
93 + return rv;
94 + }
95 +
96 + public SubSystemMetaData loadObjects()
97 + throws IOException {
98 + SubSystemReader zSubSystemReader = mPersister.getReader( getSystemMetaData().getVersion() );
99 + for ( ObjectReader zReader; null != (zReader = zSubSystemReader.nextObject()); ) {
100 + createObjectFrom( zReader );
101 + }
102 + return this;
103 + }
104 +
105 + private void createObjectFrom( ObjectReader pReader ) {
106 + String zType = pReader.getType();
107 + for ( ObjectSet zSet : mObjectFactory.getObjectSets() ) {
108 + if ( zSet.getType().equals( zType ) ) {
109 + unpersistObjectMetaData( zSet, pReader.getName(), pReader.getParent() ).populateFrom( pReader );
110 + return;
111 + }
112 + }
113 + throw pReader.unrecognizedType( "Unrecognized Object-type '" + zType + "', not" + mObjectFactory.getTypesForError() );
114 + }
115 +
116 + public SubSystemWriter toSubSystemWriter() {
117 + SubSystemBuilder zBuilder = mPersister.getBuilder( getSystemMetaData().getVersion(), getSystemMetaData().getKeyHoleVersion() );
118 +
119 + for ( ObjectMetaData zObject : getSortedObjects() ) {
120 + zObject.addTo( zBuilder );
121 + }
122 +
123 + return zBuilder.done();
124 + }
125 +
126 + protected class DeleteObject implements ChangeFragment {
127 + private ObjectMetaData mToDelete;
128 +
129 + public DeleteObject( ObjectMetaData pToDelete ) {
130 + mToDelete = pToDelete;
131 + }
132 +
133 + @Override
134 + public void commitChange() {
135 + remove( mToDelete );
136 + }
137 + }
138 + }