Project

General

Profile

1
package eu.dnetlib.index.solr.feed;
2

    
3
import java.text.ParseException;
4
import java.text.SimpleDateFormat;
5
import java.util.Arrays;
6
import java.util.Date;
7
import java.util.List;
8
import javax.xml.stream.XMLStreamException;
9

    
10
import org.apache.solr.common.SolrInputDocument;
11
import org.dom4j.DocumentException;
12

    
13
/**
14
 *
15
 * @author claudio
16
 *
17
 */
18
public abstract class InputDocumentFactory {
19

    
20
	public static final String INDEX_FIELD_PREFIX = "__";
21

    
22
	public static final String DS_VERSION = INDEX_FIELD_PREFIX + "dsversion";
23

    
24
	public static final String DS_ID = INDEX_FIELD_PREFIX + "dsid";
25

    
26
	public static final String RESULT = "result";
27

    
28
	public static final String INDEX_RESULT = INDEX_FIELD_PREFIX + RESULT;
29

    
30
	public static final String INDEX_RECORD_ID = INDEX_FIELD_PREFIX + "indexrecordidentifier";
31

    
32
	private static final String outFormat = new String("yyyy-MM-dd'T'hh:mm:ss'Z'");
33

    
34
	private final static List<String> dateFormats = Arrays.asList("yyyy-MM-dd'T'hh:mm:ss", "yyyy-MM-dd", "dd-MM-yyyy", "dd/MM/yyyy", "yyyy");
35

    
36
	public abstract SolrInputDocument parseDocument(final String version,
37
			final String inputDocument,
38
			final String dsId,
39
			final String resultName) throws XMLStreamException;
40

    
41
	public abstract SolrInputDocument parseDocument(final String version,
42
			final String inputDocument,
43
			final String dsId,
44
			final String resultName,
45
			final ResultTransformer resultTransformer) throws XMLStreamException;
46

    
47
	/**
48
	 * method return a solr-compatible string representation of a date
49
	 *
50
	 * @param date
51
	 * @return the parsed date
52
	 * @throws DocumentException
53
	 * @throws ParseException
54
	 */
55
	public static String getParsedDateField(final String date) {
56
		return new SimpleDateFormat(outFormat).format(tryParse(date));
57
	}
58

    
59
	public static Date tryParse(final String date) {
60
		for (String formatString : dateFormats) {
61
			try {
62
				return new SimpleDateFormat(formatString).parse(date);
63
			} catch (ParseException e) {}
64
		}
65
		throw new IllegalStateException("unable to parse date: " + date);
66
	}
67

    
68
	public String parseDate(final String date) {
69
		return getParsedDateField(date);
70
	}
71

    
72
}
(1-1/4)