Skip to content

Commit 08404c8

Browse files
committed
add RestTransformAdapter as the next step of implementing #377
(cherry picked from commit b2b4887)
1 parent 1cf1389 commit 08404c8

File tree

3 files changed

+88
-42
lines changed

3 files changed

+88
-42
lines changed

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

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,47 @@
4545
import com.marklogic.client.query.ValuesDefinition;
4646

4747
public class TransformTest {
48+
final static public String MLCP_TRANSFORM_ADAPTER = "MlcpTransformAdapter.xqy";
4849
final static public String TEST_NS =
4950
"http://marklogic.com/rest-api/test/transform";
5051

5152
static private String xqueryTransform;
5253
static private String xslTransform;
5354
static private String optionsName;
55+
static private ServerConfigurationManager confMgr;
56+
static private TransformExtensionsManager extensionMgr;
57+
5458

5559
@BeforeClass
5660
public static void beforeClass()
5761
throws IOException, FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException {
5862
Common.connectAdmin();
5963
//System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.wire", "debug");
64+
confMgr = Common.client.newServerConfigManager();
65+
66+
extensionMgr = confMgr.newTransformExtensionsManager();
6067
xqueryTransform = Common.testFileToString(TransformExtensionsTest.XQUERY_FILE);
6168
xslTransform = Common.testFileToString(TransformExtensionsTest.XSLT_FILE);
62-
optionsName = ValuesHandleTest.makeValuesOptions();
69+
optionsName = ValuesHandleTest.makeValuesOptions();
70+
extensionMgr.writeXQueryTransform(
71+
TransformExtensionsTest.XQUERY_NAME,
72+
new StringHandle().withFormat(Format.TEXT).with(xqueryTransform),
73+
TransformExtensionsTest.makeXQueryMetadata()
74+
);
75+
76+
extensionMgr.writeXQueryTransformAs(
77+
MLCP_TRANSFORM_ADAPTER,
78+
TransformExtensionsTest.makeXQueryMetadata(),
79+
Common.testFileToString(MLCP_TRANSFORM_ADAPTER)
80+
);
6381
}
82+
6483
@AfterClass
6584
public static void afterClass()
6685
throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException {
67-
Common.client.newServerConfigManager().newQueryOptionsManager().deleteOptions(optionsName);
86+
confMgr.newQueryOptionsManager().deleteOptions(optionsName);
87+
extensionMgr.deleteTransform(MLCP_TRANSFORM_ADAPTER);
88+
extensionMgr.deleteTransform(TransformExtensionsTest.XQUERY_NAME);
6889
Common.release();
6990
xqueryTransform = null;
7091
xslTransform = null;
@@ -73,28 +94,12 @@ public static void afterClass()
7394
@Test
7495
public void testXQueryTransform()
7596
throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException {
76-
ServerConfigurationManager confMgr =
77-
Common.client.newServerConfigManager();
78-
79-
TransformExtensionsManager extensionMgr =
80-
confMgr.newTransformExtensionsManager();
81-
82-
extensionMgr.writeXQueryTransform(
83-
TransformExtensionsTest.XQUERY_NAME,
84-
new StringHandle().withFormat(Format.TEXT).with(xqueryTransform),
85-
TransformExtensionsTest.makeXQueryMetadata()
86-
);
87-
8897
runTransform(new ServerTransform(TransformExtensionsTest.XQUERY_NAME));
89-
90-
extensionMgr.deleteTransform(TransformExtensionsTest.XQUERY_NAME);
9198
}
99+
92100
@Test
93101
public void testXSLTransform()
94102
throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException {
95-
TransformExtensionsManager extensionMgr =
96-
Common.client.newServerConfigManager().newTransformExtensionsManager();
97-
98103
extensionMgr.writeXSLTransform(
99104
TransformExtensionsTest.XSLT_NAME,
100105
new StringHandle().with(xslTransform),
@@ -105,32 +110,40 @@ public void testXSLTransform()
105110

106111
extensionMgr.deleteTransform(TransformExtensionsTest.XSLT_NAME);
107112
}
113+
108114
@Test
109115
public void testXQueryMlcpTransformAdapter() throws Exception{
110-
ServerConfigurationManager confMgr =
111-
Common.client.newServerConfigManager();
112-
113-
TransformExtensionsManager extensionMgr =
114-
confMgr.newTransformExtensionsManager();
115-
116-
extensionMgr.writeXQueryTransformAs(
117-
"MlcpTransformAdapter.xqy",
118-
TransformExtensionsTest.makeXQueryMetadata(),
119-
Common.testFileToString("MlcpTransformAdapter.xqy")
120-
);
121-
122116
ExtensionLibrariesManager libMgr = confMgr.newExtensionLibrariesManager();
123117
String transformContents = Common.testFileToString("MlcpTransform.xqy");
124-
libMgr.write("/ext/MlcpTransform.xqy", new StringHandle(transformContents).withFormat(Format.TEXT));
118+
libMgr.write("/ext/MlcpTransform.xqy",
119+
new StringHandle(transformContents).withFormat(Format.TEXT));
125120

126-
ServerTransform transform = new ServerTransform("MlcpTransformAdapter.xqy");
121+
ServerTransform transform = new ServerTransform(MLCP_TRANSFORM_ADAPTER);
127122
transform.add("ml.module", "/ext/MlcpTransform.xqy");
128123
transform.add("ml.namespace", "http://marklogic.com/example");
129124
transform.add("attr-value", "true");
130125
runTransform(transform);
131126

132-
extensionMgr.deleteTransform("MlcpTransformAdapter.xqy");
127+
libMgr.delete("/ext/MlcpTransform.xqy");
128+
}
129+
130+
@Test
131+
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+
137+
ServerTransform transform = new ServerTransform(MLCP_TRANSFORM_ADAPTER);
138+
transform.add("ml.module", "/ext/RestTransformAdapter.xqy");
139+
transform.add("ml.namespace", "http://marklogic.com/mlcp/transform/RestTransformAdapter.xqy");
140+
transform.add("ml.transform", TransformExtensionsTest.XQUERY_NAME);
141+
transform.add("value", "true");
142+
runTransform(transform);
143+
144+
libMgr.delete("/ext/RestTransformAdapter.xqy");
133145
}
146+
134147
private void runTransform(ServerTransform transform)
135148
throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException {
136149
transform.put("value", "true");
@@ -219,9 +232,6 @@ public void test118() {
219232
" </search:metrics>\n" +
220233
"</search:response>}\n" +
221234
"};";
222-
TransformExtensionsManager extensionMgr =
223-
Common.client.newServerConfigManager().newTransformExtensionsManager();
224-
225235
extensionMgr.writeXQueryTransform( "test118", new StringHandle().with(naiveTransform));
226236
QueryManager q = Common.client.newQueryManager();
227237
StringQueryDefinition s = q.newStringDefinition("");

src/test/resources/MlcpTransformAdapter.xqy

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,20 @@ declare function testxqy:transform(
1616
let $targetModule := map:get($params,"ml.module")
1717
let $targetNamespace := map:get($params,"ml.namespace")
1818
let $targetFunction := (map:get($params,"ml.function"), "transform")[1]
19-
let $function := xdmp:function(QName($targetNamespace, $targetFunction), $targetModule)
19+
let $_ := (
20+
map:delete($params, "ml.module"),
21+
map:delete($params, "ml.namespace"),
22+
map:delete($params, "ml.function")
23+
)
24+
let $function := xdmp:function(QName($targetNamespace, $targetFunction), $targetModule)
2025
let $targetContent := map:entry("uri", map:get($context, "uri"))
21-
let $_ := map:put($targetContent, "value", $content)
26+
let $_ := map:put($targetContent, "value", $content)
2227
let $targetContext := if ( empty($params) or map:count($params) = 0 ) then ()
2328
else map:entry("transform_param", xdmp:to-json-string($params))
24-
let $returnMap := xdmp:apply($function, $targetContent, $targetContext)
29+
let $returnMap := xdmp:apply($function, $targetContent, $targetContext)
2530
(: TODO: finish handling multiple documents--for now this only handles one :)
26-
let $firstKey := map:keys($returnMap)[1]
27-
let $firstValue := map:get($returnMap, $firstKey)
31+
let $firstKey := map:keys($returnMap)[1]
32+
let $firstValue := map:get($returnMap, $firstKey)
2833
return $firstValue
2934
};
3035

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
xquery version "1.0-ml";
2+
module namespace adapter = "http://marklogic.com/mlcp/transform/RestTransformAdapter.xqy";
3+
4+
import module namespace tformod = "http://marklogic.com/rest-api/models/transform-model"
5+
at "/MarkLogic/rest-api/models/transform-model.xqy";
6+
7+
declare default function namespace "http://www.w3.org/2005/xpath-functions";
8+
declare option xdmp:mapping "false";
9+
10+
declare function adapter:transform(
11+
$content as map:map,
12+
$context as map:map
13+
) as map:map*
14+
{
15+
let $uri := map:get($content, "uri")
16+
let $docIn := map:get($content, "value")
17+
let $params := xdmp:from-json-string(
18+
(map:get($context, "transform_param"), '{"ml.transform":"transform"}')[1]
19+
)
20+
let $transform := map:get($params, "ml.transform")
21+
let $targetContext := map:entry("uri", $uri)
22+
let $_ := map:delete($params, "ml.transform")
23+
let $docOut := tformod:apply-transform(
24+
$transform, $targetContext, $params, $docIn
25+
)
26+
return (
27+
map:put($content, "value", $docOut),
28+
$content
29+
)
30+
};
31+

0 commit comments

Comments
 (0)