Subversion Repository Public Repository

litesoft

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

Diff revisions: vs.
  @@ -1,10 +1,12 @@
1 1 // This Source Code is in the Public Domain per: http://litesoft.org/License.txt
2 2 package org.litesoft.aokeyhole.objects;
3 3
4 + import java.io.*;
4 5 import java.util.*;
5 6
6 7 import org.litesoft.aokeyhole.objects.factories.*;
7 8 import org.litesoft.aokeyhole.objects.support.*;
9 + import org.litesoft.aokeyhole.persist.*;
8 10 import org.litesoft.aokeyhole.toolkit.*;
9 11
10 12 /**
  @@ -15,15 +17,15 @@
15 17 private MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData> mOwnerManager = new MetaDataOwnerManager<SubSystemMetaData, ObjectMetaData>( this );
16 18
17 19 private int mSortIndex;
18 - private Object mSource;
20 + private SubSystemPersister mPersister;
19 21 private ObjectFactory mObjectFactory;
20 22
21 - public SubSystemMetaData( boolean pEditable, IdentifierValidator pNameValidator, int pSortIndex, String pName, Object pSource, ObjectFactory pObjectFactory )
23 + public SubSystemMetaData( boolean pEditable, IdentifierValidator pNameValidator, int pSortIndex, SubSystemPersister pPersister, ObjectFactory pObjectFactory )
22 24 {
23 - super( "SubSystem", Mode.Rehydrating, pEditable, pNameValidator, pName );
25 + super( "SubSystem", Mode.Rehydrating, pEditable, pNameValidator, pPersister.getName() );
24 26
25 27 mSortIndex = pSortIndex;
26 - mSource = pSource;
28 + mPersister = pPersister;
27 29 mObjectFactory = pObjectFactory;
28 30 }
29 31
  @@ -45,11 +47,6 @@
45 47 return getMetaDataType() + " does NOT support Name Change";
46 48 }
47 49
48 - public Object getSource()
49 - {
50 - return mSource;
51 - }
52 -
53 50 @Override
54 51 public boolean isUsedOwnedName( String pNewName )
55 52 {
  @@ -109,87 +106,41 @@
109 106 return rv;
110 107 }
111 108
112 - public SubSystemMetaData createObjectsFromLines( String[] pLines )
109 + public SubSystemMetaData loadObjects()
110 + throws IOException
113 111 {
114 - ToLinesObjectsParseStream ops = new ToLinesObjectsParseStream( pLines );
115 -
116 - if ( ops.readLine() )
112 + SubSystemReader zSubSystemReader = mPersister.getReader( getSystemMetaData().getVersion() );
113 + for ( ObjectReader zReader; null != (zReader = zSubSystemReader.nextObject()); )
117 114 {
118 - validateFileVersion( ops );
119 - while ( ops.readLine() )
120 - {
121 - createObjectFrom( ops );
122 - }
115 + createObjectFrom( zReader );
123 116 }
124 117 return this;
125 118 }
126 119
127 - private void validateFileVersion( ToLinesObjectsParseStream pOPS )
120 + private void createObjectFrom( ObjectReader pReader )
128 121 {
129 - pOPS.validateDepth( 0 );
130 -
131 - String zType = pOPS.getWhat();
132 -
133 - if ( !"vs".equals( zType ) )
134 - {
135 - throw pOPS.error( "First Line not a 'vs' (version) line" );
136 - }
137 - String[] zParts = pOPS.parseData( '|' );
138 - String zActual = zParts[0];
139 - String zExpected = getSystemMetaData().getVersion();
140 - if ( !zExpected.equals( zActual ) )
141 - {
142 - throw pOPS.error( "File version mismatch, got '" + zActual + "', but expected '" + zExpected + "'." );
143 - }
144 - }
145 -
146 - private String createVersionLine()
147 - {
148 - return "vs:" + getSystemMetaData().getVersion() + "|" + getSystemMetaData().getKeyHoleVersion();
149 - }
150 -
151 - private void createObjectFrom( ToLinesObjectsParseStream pOPS )
152 - {
153 - pOPS.validateDepth( 0 );
154 -
155 - String zType = pOPS.getWhat();
156 -
157 - ObjectSet[] zObjectSets = mObjectFactory.getObjectSets();
158 -
159 - for ( ObjectSet zSet : zObjectSets )
122 + String zType = pReader.getType();
123 + for ( ObjectSet zSet : mObjectFactory.getObjectSets() )
160 124 {
161 125 if ( zSet.getType().equals( zType ) )
162 126 {
163 - String[] nameNparent = pOPS.parseData( 2, '|' );
164 - ObjectMetaData md = unpersistObjectMetaData( zSet, nameNparent[0], nameNparent[1] );
165 - md.populateFrom( pOPS );
127 + unpersistObjectMetaData( zSet, pReader.getName(), pReader.getParent() ).populateFrom( pReader );
166 128 return;
167 129 }
168 130 }
169 - throw pOPS.error( "Unrecognized Object-type '" + zType + "', not" + mObjectFactory.getTypesForError() );
131 + throw pReader.unrecognizedType( "Unrecognized Object-type '" + zType + "', not" + mObjectFactory.getTypesForError() );
170 132 }
171 133
172 - public String[] toLinesObjects()
134 + public SubSystemWriter toSubSystemWriter()
173 135 {
174 - LinkedList<String> list = new LinkedList<String>();
175 - list.add( createVersionLine() );
176 - addOwnings( list, 0, getSortedObjects() );
177 - return list.toArray( new String[list.size()] );
178 - }
136 + SubSystemBuilder zBuilder = mPersister.getBuilder( getSystemMetaData().getVersion(), getSystemMetaData().getKeyHoleVersion() );
179 137
180 - @Override
181 - public void addLines( List<String> pCollector, int pIndent )
182 - {
183 - pCollector.add( "" );
184 - pCollector.add( "" );
185 - pCollector.add( "" );
186 - StringBuilder sb = startLine( pIndent++ ).append( '|' );
187 - if ( mSource != null )
138 + for ( ObjectMetaData zObject : getSortedObjects() )
188 139 {
189 - sb.append( mSource.toString() );
140 + zObject.addTo( zBuilder );
190 141 }
191 - pCollector.add( sb.toString() );
192 - addOwnings( pCollector, pIndent, getSortedObjects() );
142 +
143 + return zBuilder.done();
193 144 }
194 145
195 146 protected class DeleteObject implements ChangeFragment