//package focusedCrawler.memex.cdr; // //import java.util.Map; // //import org.apache.commons.codec.digest.DigestUtils; //import org.apache.tika.mime.MediaType; // //import com.fasterxml.jackson.core.JsonProcessingException; //import com.fasterxml.jackson.databind.ObjectMapper; // //import focusedCrawler.memex.cdr.TikaExtractor.ParsedData; // //public class CDRDocumentBuilder { // // private static final TikaExtractor extractor = new TikaExtractor(); // private static final ObjectMapper jsonMapper = new ObjectMapper(); // // private CDRDocument data = new CDRDocument(); // // public CDRDocumentBuilder withId(String id) { // data.setId(id); // return this; // } // // public CDRDocumentBuilder withUrl(String url) { // data.setUrl(url); // return this; // } // // public CDRDocumentBuilder withTimestamp(long timestamp) { // data.setTimestamp(timestamp); // return this; // } // // public CDRDocumentBuilder withTeam(String team) { // data.setTeam(team); // return this; // } // // public CDRDocumentBuilder withCrawler(String crawler) { // data.setCrawler(crawler); // return this; // } // // public CDRDocumentBuilder withRawContent(String rawContent) { // data.setRawContent(rawContent); // return this; // } // // public CDRDocumentBuilder withContentType(String contentType) { // data.setContentType(contentType); // return this; // } // // public CDRDocumentBuilder withCrawlData(Object crawlData) { // data.setCrawlData(crawlData); // return this; // } // // public CDRDocumentBuilder withMetadata(Map<String, String> metadata) { // data.setExtractedMetadata(metadata); // return this; // } // // public CDRDocumentBuilder withContent(String content) { // data.setExtractedText(content); // return this; // } // // public CDRDocumentBuilder withVersion(String version) { // data.setVersion(version); // return this; // } // // public CDRDocument build() { // // if (data.getUrl() == null) { // throw new IllegalArgumentException("Field 'url' is mandatory"); // } // if (data.getRawContent() == null) { // throw new IllegalArgumentException("Field 'raw_content' is mandatory"); // } // if (data.getCrawler() == null) { // throw new IllegalArgumentException("Field 'crawler' is mandatory"); // } // if (data.getTeam() == null) { // throw new IllegalArgumentException("Field 'team' is mandatory"); // } // if (data.getVersion() == null) { // throw new IllegalArgumentException("Field 'version' is mandatory"); // } // if (data.getTimestamp() == 0) { // throw new IllegalArgumentException("Field 'timestamp' is mandatory"); // } // // if(data.getContentType() == null) { // MediaType mediaType = extractor.detect(data.getRawContent(), data.getUrl(), data.getContentType()); // data.setContentType(mediaType.getBaseType().toString()); // } // // if (data.getExtractedMetadata() == null || data.getExtractedText() == null) { // MediaType mediaType = MediaType.parse(data.getContentType()); // if(mediaType.getBaseType().equals(MediaType.TEXT_HTML)) { // // auto-generate extracted_metadata field using Tika // ParsedData parsedData = extractor.parse(data.getRawContent(), data.getUrl(), data.getContentType()); // if (data.getExtractedMetadata() == null && parsedData != null) { // data.setExtractedMetadata(parsedData.getMetadata()); // } // // auto-generate extracted_text field using Tika // if (data.getExtractedText() == null && parsedData != null) { // data.setExtractedText(parsedData.getPlainText()); // } // } // } // // if (data.getId() == null) { // // auto-generate _id field // data.setId(computeId()); // } // // return data; // } // // public String buildAsJson() throws JsonProcessingException { // return jsonMapper.writeValueAsString(this.build()); // } // // private String computeId() { // StringBuilder textForId = new StringBuilder(); // textForId.append(data.getUrl()); // textForId.append("-"); // textForId.append(data.getTimestamp()); // return DigestUtils.sha256Hex(textForId.toString()).toUpperCase(); // } // //}