Skip to content

Commit bf183ca

Browse files
committed
fix #24 by adding DocumentWriteSet.disableDefault() which seems cleaner than addDefault(null) . . .
1 parent dd95df6 commit bf183ca

File tree

5 files changed

+37
-16
lines changed

5 files changed

+37
-16
lines changed

src/main/java/com/marklogic/client/document/DocumentWriteOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import com.marklogic.client.io.marker.DocumentMetadataWriteHandle;
2020

2121
public interface DocumentWriteOperation {
22-
public enum OperationType { METADATA_DEFAULT, DOCUMENT_WRITE };
22+
public enum OperationType { METADATA_DEFAULT, DISABLE_METADATA_DEFAULT, DOCUMENT_WRITE };
2323

2424
public OperationType getOperationType();
2525

src/main/java/com/marklogic/client/document/DocumentWriteSet.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
public interface DocumentWriteSet extends Set<DocumentWriteOperation> {
2424
public DocumentWriteSet addDefault(DocumentMetadataWriteHandle metadataHandle);
2525

26+
public DocumentWriteSet disableDefault();
27+
2628
public DocumentWriteSet add(String docId, AbstractWriteHandle contentHandle);
2729

2830
public DocumentWriteSet add(String docId, DocumentMetadataWriteHandle metadataHandle, AbstractWriteHandle contentHandle);

src/main/java/com/marklogic/client/impl/DocumentWriteSetImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.marklogic.client.document.DocumentWriteOperation;
2121
import com.marklogic.client.document.DocumentWriteOperation.OperationType;
2222
import com.marklogic.client.impl.DocumentWriteOperationImpl;
23+
import com.marklogic.client.io.Format;
24+
import com.marklogic.client.io.StringHandle;
2325
import com.marklogic.client.io.marker.AbstractWriteHandle;
2426
import com.marklogic.client.io.marker.DocumentMetadataWriteHandle;
2527

@@ -32,6 +34,12 @@ public DocumentWriteSet addDefault(DocumentMetadataWriteHandle metadataHandle) {
3234
return this;
3335
}
3436

37+
public DocumentWriteSet disableDefault() {
38+
add(new DocumentWriteOperationImpl(OperationType.DISABLE_METADATA_DEFAULT,
39+
null, new StringHandle("{ }").withFormat(Format.JSON), null));
40+
return this;
41+
}
42+
3543
public DocumentWriteSet add(String docId, AbstractWriteHandle contentHandle) {
3644
add(new DocumentWriteOperationImpl(OperationType.DOCUMENT_WRITE,
3745
docId, null, contentHandle));

src/main/java/com/marklogic/client/impl/JerseyServices.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3434,7 +3434,15 @@ public <R extends AbstractReadHandle> R postBulkDocuments(
34343434
HandleAccessor.checkHandle(write.getMetadata(), "write");
34353435
HandleImplementation content =
34363436
HandleAccessor.checkHandle(write.getContent(), "write");
3437-
if ( metadata != null ) {
3437+
if ( write.getOperationType() ==
3438+
DocumentWriteOperation.OperationType.DISABLE_METADATA_DEFAULT )
3439+
{
3440+
MultivaluedMap headers = new MultivaluedMapImpl();
3441+
headers.add(HttpHeaders.CONTENT_TYPE, metadata.getMimetype());
3442+
headers.add("Content-Disposition", "inline; category=metadata");
3443+
headerList.add(headers);
3444+
writeHandles.add(write.getMetadata());
3445+
} else if ( metadata != null ) {
34383446
MultivaluedMap headers = new MultivaluedMapImpl();
34393447
headers.add(HttpHeaders.CONTENT_TYPE, metadata.getMimetype());
34403448
if ( write.getOperationType() == DocumentWriteOperation.OperationType.METADATA_DEFAULT ) {

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

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ public void testF_DefaultMetadata() {
279279
"{\"number\": 5}").withFormat(Format.JSON);
280280
StringHandle doc6 = new StringHandle(
281281
"{\"number\": 6}").withFormat(Format.JSON);
282+
StringHandle doc7 = new StringHandle(
283+
"{\"number\": 7}").withFormat(Format.JSON);
284+
StringHandle doc8 = new StringHandle(
285+
"{\"number\": 8}").withFormat(Format.JSON);
282286

283287
// Synthesize input metadata
284288
DocumentMetadataHandle defaultMetadata1 =
@@ -287,7 +291,6 @@ public void testF_DefaultMetadata() {
287291
new DocumentMetadataHandle().withQuality(2);
288292
DocumentMetadataHandle docSpecificMetadata =
289293
new DocumentMetadataHandle().withCollections("myCollection");
290-
DocumentMetadataHandle blankDefaultMetadata = new DocumentMetadataHandle();
291294

292295
// Create and build up the batch
293296
JSONDocumentManager jdm = Common.client.newJSONDocumentManager();
@@ -307,8 +310,12 @@ public void testF_DefaultMetadata() {
307310
batch.add("doc5.json", doc5); // batch default
308311

309312
// replace default metadata with blank metadata (back to system defaults)
310-
batch.addDefault(blankDefaultMetadata);
313+
batch.disableDefault();
311314
batch.add("doc6.json", doc6); // system default metadata
315+
batch.addDefault(defaultMetadata1);
316+
batch.add("doc7.json", doc7); // batch default metadata
317+
batch.disableDefault();
318+
batch.add("doc8.json", doc8); // system default metadata
312319

313320
// Execute the write operation
314321
jdm.write(batch);
@@ -332,7 +339,7 @@ public void testF_DefaultMetadata() {
332339

333340
// let's check getting content with just quality in the metadata
334341
jdm.setMetadataCategories(Metadata.QUALITY);
335-
DocumentPage documents = jdm.read("doc4.json", "doc5.json", "doc6.json");
342+
DocumentPage documents = jdm.read("doc4.json", "doc5.json");
336343

337344
for ( DocumentRecord doc: documents ) {
338345
DocumentMetadataHandle metadata = doc.getMetadata(new DocumentMetadataHandle());
@@ -345,25 +352,21 @@ public void testF_DefaultMetadata() {
345352
assertEquals("Doc5 should use the 2nd batch default metadata, with quality 2", 2,
346353
metadata.getQuality());
347354
assertTrue("Doc 5 contents are wrong", content.get().matches("\\{\"number\": ?5\\}"));
348-
} else if ( "doc6.json".equals(doc.getUri()) ) {
349-
assertEquals("Doc 6 should have the system default quality of 0", 0,
350-
metadata.getQuality());
351-
assertTrue("Doc 6 contents are wrong", content.get().matches("\\{\"number\": ?6\\}"));
352355
}
353356
}
354357

355358
// now try with just metadata
356-
documents = jdm.readMetadata("doc4.json", "doc5.json", "doc6.json");
359+
documents = jdm.readMetadata("doc6.json", "doc7.json", "doc8.json");
357360
for ( DocumentRecord doc: documents ) {
358361
DocumentMetadataHandle metadata = doc.getMetadata(new DocumentMetadataHandle());
359-
if ( "doc4.json".equals(doc.getUri()) ) {
360-
assertEquals("Doc4 should also use the 1st batch default metadata, with quality 1", 1,
362+
if ( "doc6.json".equals(doc.getUri()) ) {
363+
assertEquals("Doc 6 should have the system default quality of 0", 0,
361364
metadata.getQuality());
362-
} else if ( "doc5.json".equals(doc.getUri()) ) {
363-
assertEquals("Doc5 should use the 2nd batch default metadata, with quality 2", 2,
365+
} else if ( "doc7.json".equals(doc.getUri()) ) {
366+
assertEquals("Doc7 should also use the 1st batch default metadata, with quality 1", 1,
364367
metadata.getQuality());
365-
} else if ( "doc6.json".equals(doc.getUri()) ) {
366-
assertEquals("Doc 6 should have the system default quality of 0", 0,
368+
} else if ( "doc8.json".equals(doc.getUri()) ) {
369+
assertEquals("Doc 8 should have the system default quality of 0", 0,
367370
metadata.getQuality());
368371
}
369372
}

0 commit comments

Comments
 (0)