1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.oodt.cas.crawl;
18
19
20 import org.apache.oodt.cas.crawl.typedetection.MetExtractorSpec;
21 import org.apache.oodt.cas.crawl.typedetection.MimeExtractorConfigReader;
22 import org.apache.oodt.cas.crawl.typedetection.MimeExtractorRepo;
23 import org.apache.oodt.cas.filemgr.metadata.CoreMetKeys;
24 import org.apache.oodt.cas.metadata.MetExtractor;
25 import org.apache.oodt.cas.metadata.Metadata;
26 import org.apache.oodt.cas.metadata.filenaming.NamingConvention;
27 import org.apache.oodt.cas.metadata.preconditions.PreCondEvalUtils;
28
29
30 import java.io.File;
31 import java.util.List;
32 import java.util.logging.Level;
33
34
35 import org.apache.tika.mime.MimeType;
36
37
38 import org.springframework.beans.factory.annotation.Required;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public class AutoDetectProductCrawler extends ProductCrawler implements
71 CoreMetKeys {
72
73 public static final String MIME_TYPES_HIERARCHY = "MimeTypesHierarchy";
74
75 private MimeExtractorRepo mimeExtractorRepo;
76
77 @Override
78 protected Metadata getMetadataForProduct(File product) throws Exception {
79 List<MetExtractorSpec> specs = this.mimeExtractorRepo
80 .getExtractorSpecsForFile(product);
81 Metadata metadata = new Metadata();
82 metadata.addMetadata(MIME_TYPES_HIERARCHY,
83 mimeExtractorRepo.getMimeTypes(product));
84 for (int i = 0; i < specs.size(); i++) {
85 Metadata m = ((MetExtractorSpec) specs.get(i)).getMetExtractor()
86 .extractMetadata(product);
87 if (m != null) {
88 metadata.addMetadata(m.getHashtable(), true);
89 }
90 }
91 return metadata;
92 }
93
94 @Override
95 protected boolean passesPreconditions(File product) {
96 try {
97 List<MetExtractorSpec> specs = this.mimeExtractorRepo
98 .getExtractorSpecsForFile(product);
99 if (specs.size() > 0) {
100 if (this.getApplicationContext() != null) {
101 PreCondEvalUtils evalUtils = new PreCondEvalUtils(
102 this.getApplicationContext());
103 for (int i = 0; i < specs.size(); i++) {
104 List<String> preCondComparatorIds = ((MetExtractorSpec) specs
105 .get(i)).getPreCondComparatorIds();
106 if (!evalUtils.eval(preCondComparatorIds, product))
107 return false;
108 }
109 }
110 return true;
111 } else {
112 LOG.log(Level.WARNING, "No extractor specs specified for "
113 + product);
114 return false;
115 }
116 } catch (Exception e) {
117 LOG.log(Level.WARNING,
118 "Failed to evaluate preconditions : " + e.getMessage());
119 return false;
120 }
121 }
122
123 @Override
124 protected File renameProduct(File product, Metadata productMetadata)
125 throws Exception {
126 String namingConventionId = mimeExtractorRepo
127 .getNamingConventionId(mimeExtractorRepo.getMimeType(product));
128 if (namingConventionId != null) {
129 NamingConvention namingConvention = (NamingConvention) getApplicationContext()
130 .getBean(namingConventionId);
131 return namingConvention.rename(product, productMetadata);
132 } else {
133 return product;
134 }
135 }
136
137 @Required
138 public void setMimeExtractorRepo(String mimeExtractorRepo) throws Exception {
139 this.mimeExtractorRepo = MimeExtractorConfigReader
140 .read(mimeExtractorRepo);
141 }
142 }