Skip to content

Commit 624a72e

Browse files
committed
rename 'MlcpTransform.xqy' to 'SampleMlcpTransform.xqy'; test Javascript REST transforms via testsjs.sjs; test Javascript MLCP transforms via SampleMlcpTransform.sjs executed via MlcpTransformAdapter.xqy
(cherry picked from commit 71bde95)
1 parent 08404c8 commit 624a72e

File tree

7 files changed

+1258
-36
lines changed

7 files changed

+1258
-36
lines changed

src/test/java/com/marklogic/client/test/TransformTest.java

Lines changed: 73 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,16 @@
4545
import com.marklogic.client.query.ValuesDefinition;
4646

4747
public class TransformTest {
48+
final static public String JS_NAME = "testsjs";
49+
final static public String JS_FILE = "testsjs.sjs";
4850
final static public String MLCP_TRANSFORM_ADAPTER = "MlcpTransformAdapter.xqy";
4951
final static public String TEST_NS =
5052
"http://marklogic.com/rest-api/test/transform";
5153

52-
static private String xqueryTransform;
53-
static private String xslTransform;
5454
static private String optionsName;
5555
static private ServerConfigurationManager confMgr;
5656
static private TransformExtensionsManager extensionMgr;
57+
static private ExtensionLibrariesManager libMgr;
5758

5859

5960
@BeforeClass
@@ -64,31 +65,57 @@ public static void beforeClass()
6465
confMgr = Common.client.newServerConfigManager();
6566

6667
extensionMgr = confMgr.newTransformExtensionsManager();
67-
xqueryTransform = Common.testFileToString(TransformExtensionsTest.XQUERY_FILE);
68-
xslTransform = Common.testFileToString(TransformExtensionsTest.XSLT_FILE);
6968
optionsName = ValuesHandleTest.makeValuesOptions();
70-
extensionMgr.writeXQueryTransform(
71-
TransformExtensionsTest.XQUERY_NAME,
72-
new StringHandle().withFormat(Format.TEXT).with(xqueryTransform),
73-
TransformExtensionsTest.makeXQueryMetadata()
69+
libMgr = confMgr.newExtensionLibrariesManager();
70+
71+
libMgr.write("/ext/RestTransformAdapter.xqy",
72+
new StringHandle(Common.testFileToString("RestTransformAdapter.xqy")).withFormat(Format.TEXT));
73+
74+
libMgr.write("/ext/memory-operations.xqy",
75+
new StringHandle(Common.testFileToString("memory-operations.xqy")).withFormat(Format.TEXT));
76+
77+
libMgr.write("/ext/node-operations.xqy",
78+
new StringHandle(Common.testFileToString("node-operations.xqy")).withFormat(Format.TEXT));
79+
80+
extensionMgr.writeXQueryTransformAs(
81+
TransformExtensionsTest.XQUERY_NAME,
82+
TransformExtensionsTest.makeXQueryMetadata(),
83+
Common.testFileToString(TransformExtensionsTest.XQUERY_FILE)
84+
);
85+
86+
extensionMgr.writeJavascriptTransformAs(
87+
JS_NAME,
88+
TransformExtensionsTest.makeXQueryMetadata(),
89+
Common.testFileToString(JS_FILE)
7490
);
7591

7692
extensionMgr.writeXQueryTransformAs(
7793
MLCP_TRANSFORM_ADAPTER,
7894
TransformExtensionsTest.makeXQueryMetadata(),
7995
Common.testFileToString(MLCP_TRANSFORM_ADAPTER)
8096
);
97+
98+
extensionMgr.writeXSLTransform(
99+
TransformExtensionsTest.XSLT_NAME,
100+
new StringHandle(Common.testFileToString(TransformExtensionsTest.XSLT_FILE)),
101+
TransformExtensionsTest.makeXSLTMetadata()
102+
);
81103
}
82104

83105
@AfterClass
84106
public static void afterClass()
85107
throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException {
86108
confMgr.newQueryOptionsManager().deleteOptions(optionsName);
109+
87110
extensionMgr.deleteTransform(MLCP_TRANSFORM_ADAPTER);
88111
extensionMgr.deleteTransform(TransformExtensionsTest.XQUERY_NAME);
112+
extensionMgr.deleteTransform(TransformExtensionsTest.XSLT_NAME);
113+
114+
libMgr.delete("/ext/RestTransformAdapter.xqy");
115+
libMgr.delete("/ext/memory-operations.xqy");
116+
libMgr.delete("/ext/node-operations.xqy");
117+
89118
Common.release();
90-
xqueryTransform = null;
91-
xslTransform = null;
92119
}
93120

94121
@Test
@@ -97,51 +124,64 @@ public void testXQueryTransform()
97124
runTransform(new ServerTransform(TransformExtensionsTest.XQUERY_NAME));
98125
}
99126

127+
@Test
128+
public void testJavascriptTransform() throws Exception{
129+
runTransform(new ServerTransform(JS_NAME));
130+
}
131+
100132
@Test
101133
public void testXSLTransform()
102134
throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException {
103-
extensionMgr.writeXSLTransform(
104-
TransformExtensionsTest.XSLT_NAME,
105-
new StringHandle().with(xslTransform),
106-
TransformExtensionsTest.makeXSLTMetadata()
107-
);
108-
109135
runTransform(new ServerTransform(TransformExtensionsTest.XSLT_NAME));
110-
111-
extensionMgr.deleteTransform(TransformExtensionsTest.XSLT_NAME);
112136
}
113137

114138
@Test
115139
public void testXQueryMlcpTransformAdapter() throws Exception{
116-
ExtensionLibrariesManager libMgr = confMgr.newExtensionLibrariesManager();
117-
String transformContents = Common.testFileToString("MlcpTransform.xqy");
118-
libMgr.write("/ext/MlcpTransform.xqy",
140+
String transformContents = Common.testFileToString("SampleMlcpTransform.xqy");
141+
libMgr.write("/ext/SampleMlcpTransform.xqy",
119142
new StringHandle(transformContents).withFormat(Format.TEXT));
120143

121144
ServerTransform transform = new ServerTransform(MLCP_TRANSFORM_ADAPTER);
122-
transform.add("ml.module", "/ext/MlcpTransform.xqy");
145+
transform.add("ml.module", "/ext/SampleMlcpTransform.xqy");
123146
transform.add("ml.namespace", "http://marklogic.com/example");
124147
transform.add("attr-value", "true");
125148
runTransform(transform);
126149

127-
libMgr.delete("/ext/MlcpTransform.xqy");
150+
//libMgr.delete("/ext/SampleMlcpTransform.xqy");
128151
}
129152

130153
@Test
131154
public void testXQueryRestTransformAdapter() throws Exception{
132-
ExtensionLibrariesManager libMgr = confMgr.newExtensionLibrariesManager();
133-
String transformContents = Common.testFileToString("RestTransformAdapter.xqy");
134-
libMgr.write("/ext/RestTransformAdapter.xqy",
135-
new StringHandle(transformContents).withFormat(Format.TEXT));
136-
137155
ServerTransform transform = new ServerTransform(MLCP_TRANSFORM_ADAPTER);
138156
transform.add("ml.module", "/ext/RestTransformAdapter.xqy");
139157
transform.add("ml.namespace", "http://marklogic.com/mlcp/transform/RestTransformAdapter.xqy");
140158
transform.add("ml.transform", TransformExtensionsTest.XQUERY_NAME);
141159
transform.add("value", "true");
142160
runTransform(transform);
161+
}
143162

144-
libMgr.delete("/ext/RestTransformAdapter.xqy");
163+
@Test
164+
public void testJavascriptMlcpTransformAdapter() throws Exception{
165+
String transformContents = Common.testFileToString("SampleMlcpTransform.sjs");
166+
libMgr.write("/ext/SampleMlcpTransform.sjs",
167+
new StringHandle(transformContents).withFormat(Format.TEXT));
168+
169+
ServerTransform transform = new ServerTransform(MLCP_TRANSFORM_ADAPTER);
170+
transform.add("ml.module", "/ext/SampleMlcpTransform.sjs");
171+
transform.add("attr-value", "true");
172+
runTransform(transform);
173+
174+
//libMgr.delete("/ext/SampleMlcpTransform.sjs");
175+
}
176+
177+
@Test
178+
public void testJavascriptRestTransformAdapter() throws Exception{
179+
ServerTransform transform = new ServerTransform(MLCP_TRANSFORM_ADAPTER);
180+
transform.add("ml.module", "/ext/RestTransformAdapter.xqy");
181+
transform.add("ml.namespace", "http://marklogic.com/mlcp/transform/RestTransformAdapter.xqy");
182+
transform.add("ml.transform", JS_NAME);
183+
transform.add("value", "true");
184+
runTransform(transform);
145185
}
146186

147187
private void runTransform(ServerTransform transform)
@@ -156,15 +196,15 @@ private void runTransform(ServerTransform transform)
156196
String value = result.getDocumentElement().getAttributeNS(TEST_NS, "transformed");
157197
assertEquals("Document read transform failed","true",value);
158198

159-
docMgr.delete(docId);
199+
//docMgr.delete(docId);
160200

161201
docId = "/test/testTransformable2.xml";
162202
docMgr.write(docId, new StringHandle().with("<document/>"), transform);
163203
result = docMgr.read(docId, new DOMHandle()).get();
164204
value = result.getDocumentElement().getAttributeNS(TEST_NS, "transformed");
165205
assertEquals("Document write transform failed",value,"true");
166206

167-
docMgr.delete(docId);
207+
//docMgr.delete(docId);
168208

169209
QueryManager queryMgr = Common.client.newQueryManager();
170210

@@ -174,15 +214,15 @@ private void runTransform(ServerTransform transform)
174214

175215
result = queryMgr.search(stringQuery, new DOMHandle()).get();
176216
value = result.getDocumentElement().getAttributeNS(TEST_NS, "transformed");
177-
assertEquals("String query read transform failed",value,"true");
217+
assertEquals("String query read transform failed","true",value);
178218

179219
KeyValueQueryDefinition keyValueQuery = queryMgr.newKeyValueDefinition();
180220
keyValueQuery.put(queryMgr.newElementLocator(new QName("leaf")), "leaf3");
181221
keyValueQuery.setResponseTransform(transform);
182222

183223
result = queryMgr.search(keyValueQuery, new DOMHandle()).get();
184224
value = result.getDocumentElement().getAttributeNS(TEST_NS, "transformed");
185-
assertEquals("Key-value query read transform failed",value,"true");
225+
assertEquals("Key-value query read transform failed","true",value);
186226

187227
ValuesDefinition vdef =
188228
queryMgr.newValuesDefinition("double", optionsName);

src/test/resources/MlcpTransformAdapter.xqy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ declare function testxqy:transform(
2424
let $function := xdmp:function(QName($targetNamespace, $targetFunction), $targetModule)
2525
let $targetContent := map:entry("uri", map:get($context, "uri"))
2626
let $_ := map:put($targetContent, "value", $content)
27+
let $_ := xdmp:log("DEBUG: [MlcpTransformAdapter] xdmp:to-json-string($params)=[" || xdmp:to-json-string($params) || "]")
2728
let $targetContext := if ( empty($params) or map:count($params) = 0 ) then ()
2829
else map:entry("transform_param", xdmp:to-json-string($params))
29-
let $returnMap := xdmp:apply($function, $targetContent, $targetContext)
30+
let $returnMap := xdmp:apply($function, $targetContent, $targetContext)[1]
3031
(: TODO: finish handling multiple documents--for now this only handles one :)
31-
let $firstKey := map:keys($returnMap)[1]
32-
let $firstValue := map:get($returnMap, $firstKey)
32+
let $firstValue := map:get($returnMap, "value")
3333
return $firstValue
3434
};
3535

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var mem = require('/ext/memory-operations.xqy');
2+
3+
function transform(content, context) {
4+
var params = { value: "UNDEFINED" };
5+
if ( context.transform_param != null && context.transform_param.length > 0 ) {
6+
params = fn.head(xdmp.fromJsonString(context.transform_param));
7+
}
8+
var value = params.value;
9+
if ( content.value instanceof Document && content.value.root instanceof Element ) {
10+
var transformedAttribute =
11+
new NodeBuilder()
12+
.addAttribute("my:transformed",value,"http://marklogic.com/rest-api/test/transform")
13+
.toNode();
14+
content.value = mem.insertChild(content.value.root, transformedAttribute);
15+
}
16+
return content;
17+
};
18+
19+
exports.transform = transform;
File renamed without changes.

0 commit comments

Comments
 (0)