Project

General

Profile

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

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

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

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

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

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

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

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

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

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

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

    
33
	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");
34

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

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

    
46
	/**
47
	 * method return a solr-compatible string representation of a date
48
	 *
49
	 * @param date
50
	 * @return the formatted date string
51
	 * @throws DocumentException
52
	 * @throws ParseException
53
	 */
54
	public static String getParsedDateField(final String date) {
55
		for (String formatString : dateFormats) {
56
			try {
57
				return new SimpleDateFormat(outFormat).format(new SimpleDateFormat(formatString).parse(date));
58
			} catch (ParseException e) {}
59
		}
60
		throw new IllegalStateException("unable to parse date: " + date);
61
	}
62

    
63
	public String parseDate(final String date) {
64
		return getParsedDateField(date);
65
	}
66

    
67
}
(1-1/3)