|
@@ -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 |