Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 394ecd0

Browse files
committed
#94 Now supporting rest-properties.xml
1 parent 3d56762 commit 394ecd0

File tree

5 files changed

+148
-24
lines changed

5 files changed

+148
-24
lines changed

src/main/java/com/marklogic/client/ext/modulesloader/impl/BaseModulesFinder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,13 @@ public abstract class BaseModulesFinder extends LoggingObject implements Modules
4747
* @param baseDir
4848
*/
4949
protected void addPropertiesFile(Modules modules, String baseDir) {
50-
List<Resource> properties = findResources("REST properties file", baseDir, "rest-properties.json");
51-
if (properties.size() == 1) {
52-
modules.setPropertiesFile(properties.get(0));
50+
List<Resource> resources = findResources("REST properties file", baseDir, "rest-properties.json", "rest-properties.xml");
51+
for (Resource r : resources) {
52+
if (r.exists()) {
53+
modules.setPropertiesFile(r);
54+
// Only one should exist, so use the first one that exists
55+
break;
56+
}
5357
}
5458
}
5559

src/main/java/com/marklogic/client/ext/modulesloader/impl/DefaultModulesLoader.java

Lines changed: 65 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import com.marklogic.client.ext.tokenreplacer.TokenReplacer;
1616
import com.marklogic.client.io.Format;
1717
import com.marklogic.client.io.StringHandle;
18+
import org.jdom2.Element;
19+
import org.jdom2.input.SAXBuilder;
1820
import org.springframework.beans.factory.DisposableBean;
1921
import org.springframework.core.io.Resource;
2022
import org.springframework.core.task.SyncTaskExecutor;
@@ -181,12 +183,43 @@ protected void loadProperties(Modules modules, Set<Resource> loadedModules) {
181183
}
182184

183185
ServerConfigurationManager mgr = client.newServerConfigManager();
186+
if (f.getName().endsWith("xml")) {
187+
applyXmlProperties(mgr, r, f);
188+
} else {
189+
applyJsonProperties(mgr, r, f);
190+
}
191+
192+
if (logger.isInfoEnabled()) {
193+
logger.info("Writing REST server configuration");
194+
logger.info("Default document read transform: " + mgr.getDefaultDocumentReadTransform());
195+
logger.info("Transform all documents on read: " + mgr.getDefaultDocumentReadTransformAll());
196+
logger.info("Validate query options: " + mgr.getQueryOptionValidation());
197+
logger.info("Validate queries: " + mgr.getQueryValidation());
198+
logger.info("Output debugging: " + mgr.getServerRequestLogging());
199+
if (mgr.getUpdatePolicy() != null) {
200+
logger.info("Update policy: " + mgr.getUpdatePolicy().name());
201+
}
202+
}
203+
mgr.writeConfiguration();
204+
205+
if (f != null && modulesManager != null) {
206+
modulesManager.saveLastLoadedTimestamp(f, new Date());
207+
}
208+
209+
loadedModules.add(r);
210+
}
211+
212+
protected void applyJsonProperties(ServerConfigurationManager mgr, Resource r, File file) {
184213
ObjectMapper m = new ObjectMapper();
185-
JsonNode node = null;
214+
JsonNode node;
186215
try {
187216
node = m.readTree(r.getInputStream());
188217
} catch (IOException ex) {
189-
throw new RuntimeException("Unable to read REST configuration from file: " + f.getAbsolutePath(), ex);
218+
throw new RuntimeException("Unable to read JSON REST properties file: " + file.getAbsolutePath(), ex);
219+
}
220+
221+
if (node.has("debug")) {
222+
mgr.setServerRequestLogging(node.get("debug").asBoolean());
190223
}
191224
if (node.has("document-transform-all")) {
192225
mgr.setDefaultDocumentReadTransformAll(node.get("document-transform-all").asBoolean());
@@ -203,27 +236,38 @@ protected void loadProperties(Modules modules, Set<Resource> loadedModules) {
203236
if (node.has("validate-queries")) {
204237
mgr.setQueryValidation(node.get("validate-queries").asBoolean());
205238
}
206-
if (node.has("debug")) {
207-
mgr.setServerRequestLogging(node.get("debug").asBoolean());
208-
}
209-
if (logger.isInfoEnabled()) {
210-
logger.info("Writing REST server configuration");
211-
logger.info("Default document read transform: " + mgr.getDefaultDocumentReadTransform());
212-
logger.info("Transform all documents on read: " + mgr.getDefaultDocumentReadTransformAll());
213-
logger.info("Validate query options: " + mgr.getQueryOptionValidation());
214-
logger.info("Validate queries: " + mgr.getQueryValidation());
215-
logger.info("Output debugging: " + mgr.getServerRequestLogging());
216-
if (mgr.getUpdatePolicy() != null) {
217-
logger.info("Update policy: " + mgr.getUpdatePolicy().name());
218-
}
219-
}
220-
mgr.writeConfiguration();
239+
}
221240

222-
if (f != null && modulesManager != null) {
223-
modulesManager.saveLastLoadedTimestamp(f, new Date());
241+
/**
242+
* @param mgr
243+
* @param r
244+
* @param file
245+
*/
246+
protected void applyXmlProperties(ServerConfigurationManager mgr, Resource r, File file) {
247+
Element root;
248+
try {
249+
root = new SAXBuilder().build(r.getInputStream()).getRootElement();
250+
} catch (Exception e) {
251+
throw new RuntimeException("Unable to read XML REST properties file: " + file.getAbsolutePath(), e);
252+
}
253+
254+
for (Element child : root.getChildren()) {
255+
final String value = child.getValue();
256+
final String name = child.getName();
257+
if ("debug".equals(name)) {
258+
mgr.setServerRequestLogging(Boolean.parseBoolean(value));
259+
} else if ("document-transform-all".equals(name)) {
260+
mgr.setDefaultDocumentReadTransformAll(Boolean.parseBoolean(value));
261+
} else if ("document-transform-out".equals(name)) {
262+
mgr.setDefaultDocumentReadTransform(value);
263+
} else if ("update-policy".equals(name)) {
264+
mgr.setUpdatePolicy(UpdatePolicy.valueOf(value));
265+
} else if ("validate-options".equals(name)) {
266+
mgr.setQueryOptionValidation(Boolean.parseBoolean(value));
267+
} else if ("validate-queries".equals(name)) {
268+
mgr.setQueryValidation(Boolean.parseBoolean(value));
269+
}
224270
}
225-
226-
loadedModules.add(r);
227271
}
228272

229273
protected File getFileFromResource(Resource r) {

src/test/java/com/marklogic/client/ext/modulesloader/impl/LoadModulesTest.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.marklogic.client.ext.modulesloader.impl;
22

33
import com.marklogic.client.DatabaseClient;
4+
import com.marklogic.client.admin.ServerConfigurationManager;
45
import com.marklogic.client.ext.AbstractIntegrationTest;
56
import com.marklogic.client.ext.modulesloader.Modules;
67
import com.marklogic.client.ext.modulesloader.ModulesFinder;
@@ -10,6 +11,7 @@
1011
import org.junit.Before;
1112
import org.junit.Test;
1213
import org.springframework.core.io.Resource;
14+
import org.springframework.util.StringUtils;
1315

1416
import java.nio.file.Paths;
1517
import java.util.List;
@@ -42,6 +44,65 @@ public void setup() {
4244
modulesLoader.setModulesManager(null);
4345
}
4446

47+
@Test
48+
public void jsonRestPropertiesFile() {
49+
ServerConfigurationManager mgr = client.newServerConfigManager();
50+
try {
51+
String dir = Paths.get("src", "test", "resources", "json-rest-properties").toString();
52+
ModulesFinder finder = new DefaultModulesFinder();
53+
Modules modules = finder.findModules(dir);
54+
assertTrue(modules.getPropertiesFile().exists());
55+
56+
// Now load the modules for real
57+
modulesLoader.loadModules(dir, finder, client);
58+
59+
mgr.readConfiguration();
60+
assertTrue(mgr.getQueryValidation());
61+
assertTrue(mgr.getQueryOptionValidation());
62+
assertEquals(ServerConfigurationManager.UpdatePolicy.OVERWRITE_METADATA, mgr.getUpdatePolicy());
63+
assertTrue(mgr.getServerRequestLogging());
64+
assertTrue(StringUtils.isEmpty(mgr.getDefaultDocumentReadTransform()));
65+
assertTrue(mgr.getDefaultDocumentReadTransformAll());
66+
} finally {
67+
set8000RestPropertiesToMarkLogicDefaults();
68+
}
69+
}
70+
71+
@Test
72+
public void xmlRestPropertiesFile() {
73+
ServerConfigurationManager mgr = client.newServerConfigManager();
74+
try {
75+
String dir = Paths.get("src", "test", "resources", "xml-rest-properties").toString();
76+
ModulesFinder finder = new DefaultModulesFinder();
77+
Modules modules = finder.findModules(dir);
78+
assertTrue(modules.getPropertiesFile().exists());
79+
80+
// Now load the modules for real
81+
modulesLoader.loadModules(dir, finder, client);
82+
83+
mgr.readConfiguration();
84+
assertTrue(mgr.getQueryValidation());
85+
assertTrue(mgr.getQueryOptionValidation());
86+
assertEquals(ServerConfigurationManager.UpdatePolicy.OVERWRITE_METADATA, mgr.getUpdatePolicy());
87+
assertTrue(mgr.getServerRequestLogging());
88+
assertTrue(StringUtils.isEmpty(mgr.getDefaultDocumentReadTransform()));
89+
assertTrue(mgr.getDefaultDocumentReadTransformAll());
90+
} finally {
91+
set8000RestPropertiesToMarkLogicDefaults();
92+
}
93+
}
94+
95+
private void set8000RestPropertiesToMarkLogicDefaults() {
96+
ServerConfigurationManager mgr = client.newServerConfigManager();
97+
mgr.setQueryValidation(false);
98+
mgr.setQueryOptionValidation(true);
99+
mgr.setUpdatePolicy(ServerConfigurationManager.UpdatePolicy.MERGE_METADATA);
100+
mgr.setDefaultDocumentReadTransform(null);
101+
mgr.setDefaultDocumentReadTransformAll(true);
102+
mgr.setServerRequestLogging(false);
103+
mgr.writeConfiguration();
104+
}
105+
45106
@Test
46107
public void pathWithSpaces() {
47108
String dir = Paths.get("src", "test", "resources", "path with spaces").toString();
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"debug" : true,
3+
"document-transform-all" : true,
4+
"update-policy": "OVERWRITE_METADATA",
5+
"validate-options" : true,
6+
"validate-queries" : true
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<properties xmlns="http://marklogic.com/rest-api">
2+
<debug>true</debug>
3+
<document-transform-all>true</document-transform-all>
4+
<document-transform-out/>
5+
<update-policy>OVERWRITE_METADATA</update-policy>
6+
<validate-options>true</validate-options>
7+
<validate-queries>true</validate-queries>
8+
</properties>

0 commit comments

Comments
 (0)