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

Commit 7b64c0c

Browse files
committed
#79 Ignoring "." files when reading from a jar
Also registered a few more common binary types
1 parent c583fd5 commit 7b64c0c

File tree

9 files changed

+204
-138
lines changed

9 files changed

+204
-138
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
group=com.marklogic
22
javadocsDir=../gh-pages-marklogic-java/javadocs
3-
version=3.1.0
3+
version=3.2-79
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.marklogic.client.ext.file;
2+
3+
import com.marklogic.client.ext.helper.LoggingObject;
4+
import org.springframework.util.ClassUtils;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
/**
10+
* Defines some generic features for the DefaultDocumentFileReader and JarDocumentFileReader.
11+
*/
12+
public abstract class AbstractDocumentFileReader extends LoggingObject {
13+
14+
private List<DocumentFileProcessor> documentFileProcessors = new ArrayList<>();
15+
private FormatDocumentFileProcessor formatDocumentFileProcessor = new FormatDocumentFileProcessor();
16+
17+
protected AbstractDocumentFileReader() {
18+
documentFileProcessors.add(formatDocumentFileProcessor);
19+
}
20+
21+
/**
22+
* Retrieves a DocumentFileProcessor with the given short class name. Useful for when you want to customize a
23+
* particular processor.
24+
*
25+
* @param classShortName
26+
* @return
27+
*/
28+
public DocumentFileProcessor getDocumentFileProcessor(String classShortName) {
29+
for (DocumentFileProcessor processor : documentFileProcessors) {
30+
if (ClassUtils.getShortName(processor.getClass()).equals(classShortName)) {
31+
return processor;
32+
}
33+
}
34+
return null;
35+
}
36+
37+
public void addDocumentFileProcessor(DocumentFileProcessor processor) {
38+
if (documentFileProcessors == null) {
39+
documentFileProcessors = new ArrayList<>();
40+
}
41+
documentFileProcessors.add(processor);
42+
}
43+
44+
protected DocumentFile processDocumentFile(DocumentFile documentFile) {
45+
for (DocumentFileProcessor processor : documentFileProcessors) {
46+
try {
47+
if (logger.isTraceEnabled()) {
48+
logger.trace(String.format("Applying processor %s to DocumentFile with URI: %s", processor.getClass().getName(), documentFile.getUri()));
49+
}
50+
documentFile = processor.processDocumentFile(documentFile);
51+
} catch (Exception e) {
52+
logger.error("Error while processing document file; file: " + documentFile.getFile().getAbsolutePath()
53+
+ "; cause: " + e.getMessage(), e);
54+
}
55+
if (documentFile == null) {
56+
break;
57+
}
58+
}
59+
return documentFile;
60+
}
61+
62+
public List<DocumentFileProcessor> getDocumentFileProcessors() {
63+
return documentFileProcessors;
64+
}
65+
66+
public void setDocumentFileProcessors(List<DocumentFileProcessor> documentFileProcessors) {
67+
this.documentFileProcessors = documentFileProcessors;
68+
}
69+
70+
public FormatDocumentFileProcessor getFormatDocumentFileProcessor() {
71+
return formatDocumentFileProcessor;
72+
}
73+
74+
public void setFormatDocumentFileProcessor(FormatDocumentFileProcessor formatDocumentFileProcessor) {
75+
this.formatDocumentFileProcessor = formatDocumentFileProcessor;
76+
}
77+
}

src/main/java/com/marklogic/client/ext/file/DefaultDocumentFileReader.java

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.marklogic.client.ext.file;
22

3-
import com.marklogic.client.ext.helper.LoggingObject;
4-
import org.springframework.util.ClassUtils;
5-
63
import java.io.File;
74
import java.io.FileFilter;
85
import java.io.IOException;
@@ -16,23 +13,22 @@
1613
/**
1714
* Non-threadsafe implementation that implements FileVisitor as a way of descending one or more file paths.
1815
*/
19-
public class DefaultDocumentFileReader extends LoggingObject implements FileVisitor<Path>, DocumentFileReader {
16+
public class DefaultDocumentFileReader extends AbstractDocumentFileReader implements FileVisitor<Path>, DocumentFileReader {
2017

2118
private Path currentRootPath;
2219
private List<FileFilter> fileFilters;
2320
private List<DocumentFile> documentFiles;
24-
private List<DocumentFileProcessor> documentFileProcessors;
2521
private String uriPrefix = "/";
2622

2723
// Each of these are eagerly instantiated, and we retain a reference in case a client wants to modify them
2824
private CollectionsFileDocumentFileProcessor collectionsFileDocumentFileProcessor;
2925
private PermissionsFileDocumentFileProcessor permissionsFileDocumentFileProcessor;
30-
private FormatDocumentFileProcessor formatDocumentFileProcessor;
3126

3227
/**
3328
* Calls initialize to instantiate some default DocumentFileProcessor objects.
3429
*/
3530
public DefaultDocumentFileReader() {
31+
super();
3632
initialize();
3733
}
3834

@@ -78,12 +74,10 @@ protected Path constructPath(String path) {
7874
if (path.startsWith("classpath") || path.startsWith("file:")) {
7975
try {
8076
f = new File(new URI(path));
81-
}
82-
catch (URISyntaxException e) {
77+
} catch (URISyntaxException e) {
8378
throw new RuntimeException(e);
8479
}
85-
}
86-
else {
80+
} else {
8781
f = new File(path);
8882
}
8983
return f.exists() ? Paths.get(f.getAbsolutePath()) : null;
@@ -164,43 +158,16 @@ protected DocumentFile buildDocumentFile(Path path, Path currentRootPath) {
164158
return df;
165159
}
166160

167-
protected DocumentFile processDocumentFile(DocumentFile documentFile) {
168-
for (DocumentFileProcessor processor : documentFileProcessors) {
169-
documentFile = processor.processDocumentFile(documentFile);
170-
if (documentFile == null) {
171-
break;
172-
}
173-
}
174-
return documentFile;
175-
}
176-
177161
protected void initialize() {
178162
collectionsFileDocumentFileProcessor = new CollectionsFileDocumentFileProcessor();
179163
permissionsFileDocumentFileProcessor = new PermissionsFileDocumentFileProcessor();
180-
formatDocumentFileProcessor = new FormatDocumentFileProcessor();
181164

182165
addFileFilter(collectionsFileDocumentFileProcessor);
183166
addFileFilter(permissionsFileDocumentFileProcessor);
184167

185168
addDocumentFileProcessor(collectionsFileDocumentFileProcessor);
186169
addDocumentFileProcessor(permissionsFileDocumentFileProcessor);
187-
addDocumentFileProcessor(formatDocumentFileProcessor);
188-
}
189-
190-
public DocumentFileProcessor getDocumentFileProcessor(String classShortName) {
191-
for (DocumentFileProcessor processor : documentFileProcessors) {
192-
if (ClassUtils.getShortName(processor.getClass()).equals(classShortName)) {
193-
return processor;
194-
}
195-
}
196-
return null;
197-
}
198-
199-
public void addDocumentFileProcessor(DocumentFileProcessor processor) {
200-
if (documentFileProcessors == null) {
201-
documentFileProcessors = new ArrayList<>();
202-
}
203-
documentFileProcessors.add(processor);
170+
addDocumentFileProcessor(getFormatDocumentFileProcessor());
204171
}
205172

206173
public void addFileFilter(FileFilter fileFilter) {
@@ -210,14 +177,6 @@ public void addFileFilter(FileFilter fileFilter) {
210177
fileFilters.add(fileFilter);
211178
}
212179

213-
public List<DocumentFileProcessor> getDocumentFileProcessors() {
214-
return documentFileProcessors;
215-
}
216-
217-
public void setDocumentFileProcessors(List<DocumentFileProcessor> documentFileProcessors) {
218-
this.documentFileProcessors = documentFileProcessors;
219-
}
220-
221180
public List<FileFilter> getFileFilters() {
222181
return fileFilters;
223182
}
@@ -237,8 +196,4 @@ public CollectionsFileDocumentFileProcessor getCollectionsFileDocumentFileProces
237196
public PermissionsFileDocumentFileProcessor getPermissionsFileDocumentFileProcessor() {
238197
return permissionsFileDocumentFileProcessor;
239198
}
240-
241-
public FormatDocumentFileProcessor getFormatDocumentFileProcessor() {
242-
return formatDocumentFileProcessor;
243-
}
244199
}

src/main/java/com/marklogic/client/ext/file/DefaultDocumentFormatGetter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
public class DefaultDocumentFormatGetter implements FormatGetter {
1414

1515
public final static String[] DEFAULT_BINARY_EXTENSIONS = new String[]{".swf", ".jpeg", ".jpg", ".png", ".gif",
16-
".svg", ".ttf", ".eot", ".woff", ".woff2", ".otf", ".cur", ".ico"};
16+
".svg", ".ttf", ".eot", ".woff", ".woff2", ".otf", ".cur", ".ico", ".gzip", ".zip", ".gz", ".tar", ".jar"};
1717

1818
public final static String[] DEFAULT_XML_EXTENSIONS = new String[]{"xml", "xsl", "xslt", "xsd", "tdex"};
1919
public final static String[] DEFAULT_JSON_EXTENSIONS = new String[]{"json", "tdej"};

src/main/java/com/marklogic/client/ext/file/GenericFileLoader.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,28 @@ public List<DocumentFile> loadFiles(String... paths) {
9696
protected DocumentFileReader buildDocumentFileReader() {
9797
DefaultDocumentFileReader reader = new DefaultDocumentFileReader();
9898

99-
for (DocumentFileProcessor processor : buildDocumentFileProcessors()) {
100-
reader.addDocumentFileProcessor(processor);
101-
}
102-
10399
if (fileFilters != null) {
104100
for (FileFilter filter : fileFilters) {
105101
reader.addFileFilter(filter);
106102
}
107103
}
108104

105+
prepareAbstractDocumentFileReader(reader);
106+
return reader;
107+
}
108+
109+
/**
110+
* This was initially part of building a DefaultDocumentFileReader. But in the event that a client sets a custom
111+
* DocumentFileReader on this class that extends AbstractDocumentFileReader, it's useful to reuse this code on
112+
* that custom DocumentFileReader. Thus, it's public.
113+
*
114+
* @param reader
115+
*/
116+
public void prepareAbstractDocumentFileReader(AbstractDocumentFileReader reader) {
117+
for (DocumentFileProcessor processor : buildDocumentFileProcessors()) {
118+
reader.addDocumentFileProcessor(processor);
119+
}
120+
109121
if (additionalBinaryExtensions != null) {
110122
FormatDocumentFileProcessor processor = reader.getFormatDocumentFileProcessor();
111123
FormatGetter formatGetter = processor.getFormatGetter();
@@ -119,8 +131,6 @@ protected DocumentFileReader buildDocumentFileReader() {
119131
"so unable to add additionalBinaryExtensions: " + Arrays.asList(additionalBinaryExtensions));
120132
}
121133
}
122-
123-
return reader;
124134
}
125135

126136
/**

0 commit comments

Comments
 (0)