Skip to content
This repository was archived by the owner on Feb 27, 2023. It is now read-only.

Commit 5e7d0ba

Browse files
author
Scott Stafford
committed
Merge branch 'dev'
2 parents 7c4498a + 5fafbea commit 5e7d0ba

File tree

15 files changed

+282
-135
lines changed

15 files changed

+282
-135
lines changed

core/src/main/java/com/marklogic/uri/UriGenerator.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

core/src/main/java/com/marklogic/uri/XmlStringUriGenerator.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
group=com.marklogic
2-
version=0.8.0
2+
version=0.10.0
33

44
# Subprojects must override this so that publishing works properly
55
# This is used instead of project.name, which cannot be overridden
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.marklogic.spring.batch.columnmap;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
6+
import java.util.Map;
7+
8+
/**
9+
* Simple implementation that uses Jackson's writeValueAsString method. The outputted JSON string can be customized by
10+
* passing in your own ObjectMapper implementation.
11+
*/
12+
public class JacksonColumnMapSerializer implements ColumnMapSerializer {
13+
14+
private ObjectMapper objectMapper;
15+
16+
public JacksonColumnMapSerializer() {
17+
this(new ObjectMapper());
18+
}
19+
20+
public JacksonColumnMapSerializer(ObjectMapper objectMapper) {
21+
this.objectMapper = objectMapper;
22+
}
23+
24+
@Override
25+
public String serializeColumnMap(Map<String, Object> columnMap, String rootLocalName) {
26+
try {
27+
return objectMapper.writeValueAsString(columnMap);
28+
} catch (JsonProcessingException e) {
29+
throw new RuntimeException("Unable to write map as JSON: " + e.getMessage(), e);
30+
}
31+
}
32+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package com.marklogic.spring.batch.item.processor;
2+
3+
import com.marklogic.client.document.DocumentWriteOperation;
4+
import com.marklogic.client.impl.DocumentWriteOperationImpl;
5+
import com.marklogic.client.io.DocumentMetadataHandle;
6+
import com.marklogic.client.io.Format;
7+
import com.marklogic.client.io.marker.AbstractWriteHandle;
8+
import com.marklogic.spring.batch.item.processor.support.UriGenerator;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
11+
12+
import java.text.ParsePosition;
13+
import java.text.SimpleDateFormat;
14+
import java.util.Date;
15+
import java.util.UUID;
16+
17+
public abstract class AbstractMarkLogicItemProcessor<T> implements MarkLogicItemProcessor<T> {
18+
19+
// Expected to be role,capability,role,capability,etc.
20+
private String[] permissions;
21+
private String[] collections;
22+
private String type = "document";
23+
private Format format;
24+
final private String ISO_DATE_PATTERN = "yyyy-MM-dd";
25+
final private String ISO_DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm'Z'";
26+
protected UriGenerator uriGenerator;
27+
28+
protected final Logger logger = LoggerFactory.getLogger(getClass());
29+
30+
protected String format(String s, Object... args) {
31+
return String.format(s, args);
32+
}
33+
34+
public AbstractMarkLogicItemProcessor() {
35+
uriGenerator = new UriGenerator() {
36+
@Override
37+
public String generateUri(Object o) {
38+
return UUID.randomUUID().toString();
39+
}
40+
};
41+
}
42+
43+
public AbstractMarkLogicItemProcessor(UriGenerator uriGenerator) {
44+
this.uriGenerator = uriGenerator;
45+
}
46+
47+
public DocumentWriteOperation process(T item) throws Exception {
48+
return new DocumentWriteOperationImpl(
49+
DocumentWriteOperation.OperationType.DOCUMENT_WRITE,
50+
uriGenerator.generateUri(item),
51+
getDocumentMetadata(item),
52+
getContentHandle(item));
53+
}
54+
55+
public abstract AbstractWriteHandle getContentHandle(T item) throws Exception;
56+
57+
protected DocumentMetadataHandle getDocumentMetadata(T item) {
58+
DocumentMetadataHandle metadata = new DocumentMetadataHandle();
59+
if (collections != null) {
60+
metadata.withCollections(collections);
61+
}
62+
if (permissions != null) {
63+
for (int i = 0; i < permissions.length; i += 2) {
64+
String role = permissions[i];
65+
DocumentMetadataHandle.Capability c = DocumentMetadataHandle.Capability.valueOf(permissions[i + 1].toUpperCase());
66+
metadata.withPermission(role, c);
67+
}
68+
}
69+
return metadata;
70+
}
71+
72+
public String transformDateTime(String dateTime, String dateTimeMask) {
73+
SimpleDateFormat iso8601Formatter = new SimpleDateFormat(ISO_DATE_TIME_PATTERN);
74+
SimpleDateFormat simpleDateTimeFormatter = new SimpleDateFormat(dateTimeMask);
75+
Date date = simpleDateTimeFormatter.parse(dateTime, new ParsePosition(0));
76+
return iso8601Formatter.format(date);
77+
}
78+
79+
public String transformDate(String dateTime, String dateMask) {
80+
SimpleDateFormat iso8601Formatter = new SimpleDateFormat(ISO_DATE_PATTERN);
81+
SimpleDateFormat simpleDateFormatter = new SimpleDateFormat(dateMask);
82+
Date date = simpleDateFormatter.parse(dateTime, new ParsePosition(0));
83+
return iso8601Formatter.format(date);
84+
}
85+
86+
public String[] getPermissions() {
87+
return permissions;
88+
}
89+
90+
public void setPermissions(String[] permissions) {
91+
this.permissions = permissions;
92+
}
93+
94+
public String[] getCollections() {
95+
return collections;
96+
}
97+
98+
public void setCollections(String[] collections) {
99+
this.collections = collections;
100+
}
101+
102+
public String getType() {
103+
return type;
104+
}
105+
106+
public void setType(String type) {
107+
this.type = type;
108+
}
109+
110+
public Format getFormat() {
111+
return format;
112+
}
113+
114+
public void setFormat(Format format) {
115+
this.format = format;
116+
}
117+
118+
public UriGenerator getUriGenerator() {
119+
return uriGenerator;
120+
}
121+
122+
public void setUriGenerator(UriGenerator uriGenerator) {
123+
this.uriGenerator = uriGenerator;
124+
}
125+
}
Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,45 @@
11
package com.marklogic.spring.batch.item.processor;
22

3-
import com.marklogic.client.document.DocumentWriteOperation;
4-
import com.marklogic.client.helper.LoggingObject;
5-
import com.marklogic.client.io.DocumentMetadataHandle;
6-
import com.marklogic.client.io.MarkLogicWriteHandle;
73
import com.marklogic.client.io.StringHandle;
4+
import com.marklogic.client.io.marker.AbstractWriteHandle;
85
import com.marklogic.spring.batch.columnmap.ColumnMapSerializer;
9-
import org.springframework.batch.item.ItemProcessor;
6+
import com.marklogic.spring.batch.item.processor.support.UriGenerator;
107

118
import java.util.Map;
129
import java.util.UUID;
1310

14-
public class ColumnMapProcessor extends LoggingObject implements ItemProcessor<Map<String, Object>, DocumentWriteOperation> {
11+
public class ColumnMapProcessor extends AbstractMarkLogicItemProcessor<Map<String, Object>> {
1512

1613
private ColumnMapSerializer columnMapSerializer;
1714
private String rootLocalName = "CHANGEME";
1815

19-
// Expected to be role,capability,role,capability,etc.
20-
private String[] permissions;
21-
22-
private String[] collections;
23-
2416
public ColumnMapProcessor(ColumnMapSerializer columnMapSerializer) {
17+
super();
2518
this.columnMapSerializer = columnMapSerializer;
19+
setType(rootLocalName);
20+
setUriGenerator(
21+
new UriGenerator() {
22+
@Override
23+
public String generateUri(Object o) {
24+
String uuid = UUID.randomUUID().toString();
25+
String uri = "/" + rootLocalName + "/" + uuid + ".xml";
26+
return uri;
27+
}
28+
});
2629
}
2730

28-
@Override
29-
public MarkLogicWriteHandle process(Map<String, Object> item) throws Exception {
30-
String content = columnMapSerializer.serializeColumnMap(item, rootLocalName);
31-
32-
// TODO Use UriGenerator
33-
String uuid = UUID.randomUUID().toString();
34-
String uri = "/" + rootLocalName + "/" + uuid + ".xml";
35-
36-
DocumentMetadataHandle metadata = new DocumentMetadataHandle();
37-
if (collections != null) {
38-
metadata.withCollections(collections);
39-
}
40-
41-
if (permissions != null) {
42-
for (int i = 0; i < permissions.length; i += 2) {
43-
String role = permissions[i];
44-
DocumentMetadataHandle.Capability c = DocumentMetadataHandle.Capability.valueOf(permissions[i + 1].toUpperCase());
45-
metadata.withPermission(role, c);
46-
}
47-
}
48-
49-
return new MarkLogicWriteHandle(uri, metadata, new StringHandle(content));
31+
public ColumnMapProcessor(ColumnMapSerializer columnMapSerializer, UriGenerator uriGenerator) {
32+
super(uriGenerator);
33+
this.columnMapSerializer = columnMapSerializer;
5034
}
5135

52-
public void setRootLocalName(String rootLocalName) {
53-
this.rootLocalName = rootLocalName;
36+
@Override
37+
public AbstractWriteHandle getContentHandle(Map<String, Object> item) throws Exception {
38+
return new StringHandle(columnMapSerializer.serializeColumnMap(item, getType()));
5439
}
5540

56-
public void setCollections(String[] collections) {
57-
this.collections = collections;
41+
public void setRootLocalName(String rootName) {
42+
setType(rootName);
5843
}
5944

60-
public void setPermissions(String[] permissions) {
61-
this.permissions = permissions;
62-
}
6345
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.marklogic.spring.batch.item.processor;
2+
3+
import com.marklogic.client.document.DocumentWriteOperation;
4+
import org.springframework.batch.item.ItemProcessor;
5+
6+
public interface MarkLogicItemProcessor<T> extends ItemProcessor<T, DocumentWriteOperation> {
7+
8+
}
Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
11
package com.marklogic.spring.batch.item.processor;
22

3-
import com.marklogic.client.document.DocumentWriteOperation;
4-
import com.marklogic.client.io.DocumentMetadataHandle;
53
import com.marklogic.client.io.FileHandle;
64
import com.marklogic.client.io.Format;
7-
import com.marklogic.client.io.MarkLogicWriteHandle;
8-
import org.springframework.batch.item.ItemProcessor;
5+
import com.marklogic.client.io.marker.AbstractWriteHandle;
6+
import com.marklogic.spring.batch.item.processor.support.UriGenerator;
97
import org.springframework.core.io.Resource;
108

119
import java.io.File;
10+
import java.util.UUID;
1211

13-
public class ResourceToDocumentWriteOperationItemProcessor implements ItemProcessor<Resource, DocumentWriteOperation> {
12+
public class ResourceToDocumentWriteOperationItemProcessor extends AbstractMarkLogicItemProcessor<Resource> {
1413

15-
private Format format;
16-
private DocumentMetadataHandle metadataHandle;
17-
18-
public void setMetadataHandle(DocumentMetadataHandle metadataHandle) {
19-
this.metadataHandle = metadataHandle;
14+
public ResourceToDocumentWriteOperationItemProcessor() {
15+
super(new UriGenerator<Resource>(){
16+
@Override
17+
public String generateUri(Resource resource) {
18+
try {
19+
return resource.getURL().getPath();
20+
} catch (Exception ex) {
21+
return UUID.randomUUID().toString();
22+
}
23+
}
24+
});
2025
}
21-
22-
public void setFormat(Format format) {
23-
this.format = format;
24-
}
25-
26+
2627
@Override
27-
public DocumentWriteOperation process(Resource item) throws Exception {
28+
public AbstractWriteHandle getContentHandle(Resource item) throws Exception {
2829
File file = item.getFile();
29-
FileHandle handle = new FileHandle(file);
30-
String fileName = item.getURL().getPath();
30+
String fileName = uriGenerator.generateUri(item);
31+
FileHandle handle = new FileHandle(item.getFile());
3132
int i = fileName.lastIndexOf('.');
3233
String extension = (i >= 0) ? fileName.substring(i+1) : ".xyz";
33-
if (Format.XML.equals(format) || extension.equals("xml")) {
34+
if (Format.XML.equals(getFormat()) || extension.equals("xml")) {
3435
handle.setFormat(Format.XML);
35-
} else if (Format.JSON.equals(format) || extension.equals("json")) {
36+
} else if (Format.JSON.equals(getFormat()) || extension.equals("json")) {
3637
handle.setFormat(Format.JSON);
37-
} else if (Format.TEXT.equals(format) || extension.equals("txt")) {
38+
} else if (Format.TEXT.equals(getFormat()) || extension.equals("txt")) {
3839
handle.setFormat(Format.TEXT);
39-
} else if (Format.BINARY.equals(format)) {
40+
} else if (Format.BINARY.equals(getFormat())) {
4041
handle.setFormat(Format.BINARY);
4142
} else {
4243
handle.setFormat(Format.UNKNOWN);
4344
}
44-
45-
return new MarkLogicWriteHandle(fileName, metadataHandle, handle);
45+
return handle;
4646
}
47-
48-
47+
48+
4949
}

0 commit comments

Comments
 (0)