Skip to content

Commit 42bb838

Browse files
author
mgeipel
committed
#110 fixed
1 parent 9f397c7 commit 42bb838

File tree

2 files changed

+54
-16
lines changed

2 files changed

+54
-16
lines changed

src/main/java/org/culturegraph/mf/morph/MorphBuilder.java

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Deque;
1919
import java.util.LinkedList;
2020
import java.util.Map;
21+
import java.util.regex.Pattern;
2122

2223
import org.culturegraph.mf.exceptions.MorphDefException;
2324
import org.culturegraph.mf.morph.collectors.Collect;
@@ -38,6 +39,9 @@ public final class MorphBuilder extends AbstractMetamorphDomWalker {
3839
private static final String JAVA = "java";
3940
private static final String JAVAMAP = "javamap";
4041
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+
4145
// private final String morphDef;
4246
private final Metamorph metamorph;
4347
private final Deque<Collect> collectStack;
@@ -80,18 +84,18 @@ protected void handleMapClass(final Node mapNode) {
8084
final Map<String, String> attributes = resolvedAttributeMap(mapNode);
8185
final String mapName = resolveVars(attributes.remove(ATTRITBUTE.NAME.getString()));
8286
final Map<String, String> map;
83-
87+
8488
if (mapNode.getLocalName().equals(JAVAMAP)) {
8589
final String className = resolvedAttribute(mapNode, ATTRITBUTE.CLASS);
8690
map = ObjectFactory.newInstance(ObjectFactory.loadClass(className, Map.class));
8791
attributes.remove(ATTRITBUTE.CLASS.getString());
8892
ObjectFactory.applySetters(map, attributes);
89-
}else if (getMapFactory().containsKey(mapNode.getLocalName())){
93+
} else if (getMapFactory().containsKey(mapNode.getLocalName())) {
9094
map = getMapFactory().newInstance(mapNode.getLocalName(), attributes);
91-
}else{
95+
} else {
9296
throw new IllegalArgumentException("Map " + mapNode.getLocalName() + NOT_FOUND);
9397
}
94-
98+
9599
metamorph.putMap(mapName, map);
96100
}
97101

@@ -135,7 +139,7 @@ protected void enterData(final Node dataNode) {
135139
data = new Data();
136140
data.setName(resolvedAttribute(dataNode, ATTRITBUTE.NAME));
137141
metamorph.registerNamedValueReceiver(source, data);
138-
142+
139143
if (setEntityName) {
140144
((Entity) collectStack.peek()).setNameSource(data);
141145
setEntityName = false;
@@ -149,16 +153,16 @@ protected void exitData(final Node node) {
149153
} else {
150154
final Collect parent = collectStack.peek();
151155
data.endPipe(parent);
152-
parent.addNamedValueSource(data);
156+
parent.addNamedValueSource(data);
153157
}
154-
data = null;
158+
data = null;
155159
}
156-
160+
157161
@Override
158162
protected void enterName(final Node nameNode) {
159163
setEntityName = true;
160164
}
161-
165+
162166
@Override
163167
protected void exitName(final Node nameNode) {
164168
setEntityName = false;
@@ -179,7 +183,7 @@ protected void enterCollect(final Node node) {
179183
((Entity) collectStack.peek()).setNameSource(collect);
180184
setEntityName = false;
181185
}
182-
186+
183187
collectStack.push(collect);
184188
}
185189

@@ -202,13 +206,14 @@ protected void exitCollect(final Node node) {
202206
}
203207

204208
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+
}
210216
}
211-
212217
}
213218

214219
@Override

src/test/java/org/culturegraph/mf/morph/collectors/ChooseTest.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,37 @@
9797
</cgxml:cgxml>
9898
</result>
9999
</test-case>
100+
101+
<test-case name="issue110">
102+
<input type="text/x-cg+xml">
103+
<cgxml:cgxml version="1.0">
104+
<cgxml:records>
105+
<cgxml:record id="1">
106+
<cgxml:literal name="L" value="V" />
107+
</cgxml:record>
108+
</cgxml:records>
109+
</cgxml:cgxml>
110+
</input>
111+
112+
<transformation type="text/x-metamorph+xml">
113+
<mm:metamorph version="1">
114+
<mm:rules>
115+
<mm:choose name="chosen" flushWith="record|entity">
116+
<mm:data source="entity.data1" />
117+
<mm:data source="L" />
118+
</mm:choose>
119+
</mm:rules>
120+
</mm:metamorph>
121+
</transformation>
122+
123+
<result type="text/x-cg+xml">
124+
<cgxml:cgxml version="1.0">
125+
<cgxml:records>
126+
<cgxml:record id="1">
127+
<cgxml:literal name="chosen" value="V" />
128+
</cgxml:record>
129+
</cgxml:records>
130+
</cgxml:cgxml>
131+
</result>
132+
</test-case>
100133
</metamorph-test>

0 commit comments

Comments
 (0)