Project

General

Profile

1
package gr.uoa.di.driver.xml;
2

    
3
import java.lang.reflect.Method;
4
import java.util.Date;
5
import java.util.GregorianCalendar;
6

    
7
import javax.xml.datatype.DatatypeConfigurationException;
8
import javax.xml.datatype.DatatypeFactory;
9
import javax.xml.datatype.XMLGregorianCalendar;
10

    
11
import net.sf.cglib.proxy.Enhancer;
12
import net.sf.cglib.proxy.MethodInterceptor;
13
import net.sf.cglib.proxy.MethodProxy;
14

    
15
import org.apache.commons.lang3.StringEscapeUtils;
16

    
17
import eu.dnetlib.miscutils.datetime.DateUtils;
18

    
19
/**
20
 * A simple class to provide support for conversion
21
 * of dates from/to strings, according to the ISO muble muble standard.
22
 * 
23
 * @author <a href="antleb@di.uoa.gr">Antonis Lempesis</a>
24
 * 
25
 */
26
public abstract class ConversionUtils {
27

    
28
	public static String DateToString(Date date) {
29
		return new DateUtils(date).getDateAsISO8601String();
30
	}
31

    
32
	public static Date parseDate(String dateString) {
33
		return new DateUtils().parse(dateString);
34
	}
35

    
36
	public static XMLGregorianCalendar toXMLGregorianCalendar(Date date) {
37
		try {
38
			DatatypeFactory factory = DatatypeFactory.newInstance();
39
			GregorianCalendar calendar = new GregorianCalendar();
40

    
41
			calendar.setTime(date);
42

    
43
			return factory.newXMLGregorianCalendar(calendar);
44
		} catch (DatatypeConfigurationException e) {
45
			
46
			return null;
47
		}
48

    
49
	}
50

    
51
	public static Date toDate(XMLGregorianCalendar calendar) {
52
		return calendar.toGregorianCalendar().getTime();
53
	}
54
	
55
	@SuppressWarnings("unchecked")
56
	public static <T> T createProxy(T originalObject) {
57
		Enhancer enhancer = new Enhancer();
58
        
59
		enhancer.setSuperclass(originalObject.getClass());
60
        enhancer.setCallback(new XMLEscapingInterceptor(originalObject));
61

    
62
		return (T) enhancer.create();
63
	}
64
}
65

    
66
class XMLEscapingInterceptor implements MethodInterceptor {
67
	private Object originalObject = null;
68
	
69
	public XMLEscapingInterceptor(Object original) {
70
		this.originalObject = original;
71
	}
72
	
73
	@Override
74
	public Object intercept(Object obj, Method method, Object[] args,
75
			MethodProxy methodProxy) throws Throwable {
76
		if (method.getName().startsWith("get") && method.getReturnType().equals(String.class)) {
77
			String res = (String) method.invoke(originalObject, args);
78
			
79
			return StringEscapeUtils.escapeXml(res);
80
		} else {
81
			return  method.invoke(originalObject, args);
82
		}
83
	}
84
}
(4-4/14)