18
18
import java .util .Deque ;
19
19
import java .util .LinkedList ;
20
20
import java .util .Map ;
21
+ import java .util .regex .Pattern ;
21
22
22
23
import org .culturegraph .mf .exceptions .MorphDefException ;
23
24
import org .culturegraph .mf .morph .collectors .Collect ;
@@ -38,6 +39,9 @@ public final class MorphBuilder extends AbstractMetamorphDomWalker {
38
39
private static final String JAVA = "java" ;
39
40
private static final String JAVAMAP = "javamap" ;
40
41
private static final String RECORD = "record" ;
42
+ private static final String OR_STRING = "|" ;
43
+ private static final Pattern OR_PATTERN = Pattern .compile (OR_STRING , Pattern .LITERAL );
44
+
41
45
// private final String morphDef;
42
46
private final Metamorph metamorph ;
43
47
private final Deque <Collect > collectStack ;
@@ -80,18 +84,18 @@ protected void handleMapClass(final Node mapNode) {
80
84
final Map <String , String > attributes = resolvedAttributeMap (mapNode );
81
85
final String mapName = resolveVars (attributes .remove (ATTRITBUTE .NAME .getString ()));
82
86
final Map <String , String > map ;
83
-
87
+
84
88
if (mapNode .getLocalName ().equals (JAVAMAP )) {
85
89
final String className = resolvedAttribute (mapNode , ATTRITBUTE .CLASS );
86
90
map = ObjectFactory .newInstance (ObjectFactory .loadClass (className , Map .class ));
87
91
attributes .remove (ATTRITBUTE .CLASS .getString ());
88
92
ObjectFactory .applySetters (map , attributes );
89
- }else if (getMapFactory ().containsKey (mapNode .getLocalName ())){
93
+ } else if (getMapFactory ().containsKey (mapNode .getLocalName ())) {
90
94
map = getMapFactory ().newInstance (mapNode .getLocalName (), attributes );
91
- }else {
95
+ } else {
92
96
throw new IllegalArgumentException ("Map " + mapNode .getLocalName () + NOT_FOUND );
93
97
}
94
-
98
+
95
99
metamorph .putMap (mapName , map );
96
100
}
97
101
@@ -135,7 +139,7 @@ protected void enterData(final Node dataNode) {
135
139
data = new Data ();
136
140
data .setName (resolvedAttribute (dataNode , ATTRITBUTE .NAME ));
137
141
metamorph .registerNamedValueReceiver (source , data );
138
-
142
+
139
143
if (setEntityName ) {
140
144
((Entity ) collectStack .peek ()).setNameSource (data );
141
145
setEntityName = false ;
@@ -149,16 +153,16 @@ protected void exitData(final Node node) {
149
153
} else {
150
154
final Collect parent = collectStack .peek ();
151
155
data .endPipe (parent );
152
- parent .addNamedValueSource (data );
156
+ parent .addNamedValueSource (data );
153
157
}
154
- data = null ;
158
+ data = null ;
155
159
}
156
-
160
+
157
161
@ Override
158
162
protected void enterName (final Node nameNode ) {
159
163
setEntityName = true ;
160
164
}
161
-
165
+
162
166
@ Override
163
167
protected void exitName (final Node nameNode ) {
164
168
setEntityName = false ;
@@ -179,7 +183,7 @@ protected void enterCollect(final Node node) {
179
183
((Entity ) collectStack .peek ()).setNameSource (collect );
180
184
setEntityName = false ;
181
185
}
182
-
186
+
183
187
collectStack .push (collect );
184
188
}
185
189
@@ -202,13 +206,14 @@ protected void exitCollect(final Node node) {
202
206
}
203
207
204
208
private void registerFlush (final String flushWith , final FlushListener flushListener ) {
205
-
206
- if (flushWith .equals (RECORD )) {
207
- metamorph .registerRecordEndFlush (flushListener );
208
- } else {
209
- metamorph .registerNamedValueReceiver (flushWith , new Flush (flushListener ));
209
+ final String [] keysSplit = OR_PATTERN .split (flushWith );
210
+ for (String key : keysSplit ) {
211
+ if (key .equals (RECORD )) {
212
+ metamorph .registerRecordEndFlush (flushListener );
213
+ } else {
214
+ metamorph .registerNamedValueReceiver (key , new Flush (flushListener ));
215
+ }
210
216
}
211
-
212
217
}
213
218
214
219
@ Override
0 commit comments