@@ -51,13 +51,14 @@ class ServerConfigurationManagerImpl
5151
5252 static final private String REST_API_NS = "http://marklogic.com/rest-api" ;
5353
54- private Boolean validatingQueries ;
55- private Boolean validatingQueryOptions ;
56- private String defaultDocumentReadTransform ;
57- private Boolean defaultDocumentReadTransformAll ;
58- private Boolean serverRequestLogging ;
59- private Policy contentVersions ;
60- private Format errorFormat ;
54+ private Boolean validatingQueries ;
55+ private Boolean validatingQueryOptions ;
56+ private String defaultDocumentReadTransform ;
57+ private Boolean defaultDocumentReadTransformAll ;
58+ private Boolean serverRequestLogging ;
59+ private Policy contentVersions ;
60+ private UpdatePolicy updatePolicy ;
61+ private Format errorFormat ;
6162
6263 private RESTServices services ;
6364 private HandleFactoryRegistry handleRegistry ;
@@ -97,6 +98,7 @@ public void readConfiguration()
9798 defaultDocumentReadTransformAll = null ;
9899 serverRequestLogging = null ;
99100 contentVersions = null ;
101+ updatePolicy = null ;
100102
101103 while (reader .hasNext ()) {
102104 if (reader .next () != XMLStreamReader .START_ELEMENT )
@@ -115,12 +117,21 @@ public void readConfiguration()
115117 serverRequestLogging = Boolean .valueOf (reader .getElementText ());
116118 } else if ("content-versions" .equals (localName )) {
117119 contentVersions = Enum .valueOf (Policy .class , reader .getElementText ().toUpperCase ());
120+ } else if ("update-policy" .equals (localName )) {
121+ updatePolicy = Enum .valueOf (UpdatePolicy .class ,
122+ reader .getElementText ().toUpperCase ().replace ("-" , "_" ));
118123 } else if ("error-format" .equals (localName )) {
119124 errorFormat = Format .valueOf (reader .getElementText ().toUpperCase ());
120125 }
121126 }
122127
123128 reader .close ();
129+
130+ if (contentVersions == null ) {
131+ updatePolicyToContentVersion ();
132+ } else if (updatePolicy == null ) {
133+ contentVersionToUpdatePolicy ();
134+ }
124135 } catch (XMLStreamException e ) {
125136 logger .error ("Failed to read server configuration stream" ,e );
126137 throw new MarkLogicInternalException (e );
@@ -178,6 +189,11 @@ public void write(OutputStream out) throws IOException {
178189 serializer .writeCharacters (contentVersions .name ().toLowerCase ());
179190 serializer .writeEndElement ();
180191 }
192+ if (updatePolicy != null ) {
193+ serializer .writeStartElement (REST_API_NS , "update-policy" );
194+ serializer .writeCharacters (updatePolicy .name ().toLowerCase ().replace ("_" , "-" ));
195+ serializer .writeEndElement ();
196+ }
181197 if (errorFormat != null ) {
182198 serializer .writeStartElement (REST_API_NS , "error-format" );
183199 serializer .writeCharacters (errorFormat .name ().toLowerCase ());
@@ -238,13 +254,44 @@ public void setServerRequestLogging(Boolean on) {
238254 serverRequestLogging = on ;
239255 }
240256
257+ @ Override
258+ public UpdatePolicy getUpdatePolicy () {
259+ return updatePolicy ;
260+ }
261+ @ Override
262+ public void setUpdatePolicy (UpdatePolicy updatePolicy ) {
263+ this .updatePolicy = updatePolicy ;
264+ updatePolicyToContentVersion ();
265+ }
266+ private void updatePolicyToContentVersion () {
267+ if (updatePolicy == null ) {
268+ return ;
269+ }
270+ switch (updatePolicy ) {
271+ case VERSION_REQUIRED : contentVersions = Policy .REQUIRED ; break ;
272+ case VERSION_OPTIONAL : contentVersions = Policy .OPTIONAL ; break ;
273+ case MERGE_METADATA : contentVersions = Policy .NONE ; break ;
274+ }
275+ }
276+
241277 @ Override
242278 public Policy getContentVersionRequests () {
243279 return contentVersions ;
244280 }
245281 @ Override
246282 public void setContentVersionRequests (Policy policy ) {
247283 contentVersions = policy ;
284+ contentVersionToUpdatePolicy ();
285+ }
286+ private void contentVersionToUpdatePolicy () {
287+ if (contentVersions == null ) {
288+ return ;
289+ }
290+ switch (contentVersions ) {
291+ case REQUIRED : updatePolicy = UpdatePolicy .VERSION_REQUIRED ; break ;
292+ case OPTIONAL : updatePolicy = UpdatePolicy .VERSION_OPTIONAL ; break ;
293+ case NONE : updatePolicy = UpdatePolicy .MERGE_METADATA ; break ;
294+ }
248295 }
249296
250297 @ Override
0 commit comments