Project

General

Profile

1
package eu.dnetlib.enabling.datasources;
2

    
3
import java.io.StringReader;
4
import java.util.function.Function;
5

    
6
import org.apache.commons.lang3.BooleanUtils;
7
import org.apache.commons.lang3.math.NumberUtils;
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10
import org.dom4j.Document;
11
import org.dom4j.Element;
12
import org.dom4j.Node;
13
import org.dom4j.io.SAXReader;
14

    
15
import eu.dnetlib.clients.dsManager.DatasourceDesc;
16
import eu.dnetlib.clients.dsManager.IfaceDesc;
17
import eu.dnetlib.miscutils.datetime.DateUtils;
18

    
19
public class ProfileToDatasourceDesc implements Function<String, DatasourceDesc> {
20

    
21
	private static final Log log = LogFactory.getLog(ProfileToDatasourceDesc.class);
22

    
23
	public static DatasourceDesc convert(final String profile) throws Exception {
24
		final SAXReader reader = new SAXReader();
25
		final Document doc = reader.read(new StringReader(profile));
26

    
27
		final DatasourceDesc ds = new DatasourceDesc();
28
		ds.setId(doc.valueOf("//RESOURCE_IDENTIFIER/@value"));
29
		ds.setDatasourceClass(doc.valueOf("//DATASOURCE_TYPE"));
30
		ds.setTypology(doc.valueOf("//TYPOLOGY"));
31
		ds.setOfficialName(doc.valueOf("//OFFICIAL_NAME"));
32
		ds.setEnglishName(doc.valueOf("//ENGLISH_NAME"));
33
		ds.setCountryCode(doc.valueOf("//COUNTRY"));
34
		ds.setLongitude(NumberUtils.toDouble(doc.valueOf("//LOCATION/LONGITUDE"), 0.0));
35
		ds.setLatitude(NumberUtils.toDouble(doc.valueOf("//LOCATION/LATITUDE"), 0.0));
36
		ds.setTimezone(NumberUtils.toDouble(doc.valueOf("//LOCATION/TIMEZONE"), 0.0));
37
		ds.setWebsiteUrl(doc.valueOf("//REPOSITORY_WEBPAGE"));
38
		ds.setOrganization(doc.valueOf("//REPOSITORY_INSTITUTION"));
39
		ds.setContactEmail(doc.valueOf("//ADMIN_INFO"));
40

    
41
		for (final Object o : doc.selectNodes("//INTERFACES/INTERFACE")) {
42
			final Element n = (Element) o;
43

    
44
			final IfaceDesc ifc = new IfaceDesc();
45

    
46
			ifc.setId(n.valueOf("@id"));
47
			ifc.setCompliance(n.valueOf("@compliance"));
48
			ifc.setTypology(n.valueOf("@typology"));
49
			ifc.setContentDescription(n.valueOf("@contentDescription"));
50
			ifc.setActive(BooleanUtils.toBoolean(n.valueOf("@active")));
51
			ifc.setRemovable(BooleanUtils.toBoolean(n.valueOf("@removable")));
52
			ifc.setBaseUrl(n.valueOf("./BASE_URL"));
53
			ifc.setAccessProtocol(n.valueOf("./ACCESS_PROTOCOL"));
54

    
55
			for (final Object o1 : n.selectNodes("./ACCESS_PROTOCOL/@*")) {
56
				final Node attr = (Node) o1;
57
				ifc.getAccessParams().put(attr.getName(), attr.getText());
58
			}
59
			for (final Object o1 : n.selectNodes("./INTERFACE_EXTRA_FIELD")) {
60
				final Node f = (Node) o1;
61
				ifc.getExtraFields().put(f.valueOf("@name"), f.getText());
62
			}
63

    
64
			ds.getInterfaces().add(ifc);
65
		}
66

    
67
		final DateUtils dateUtils = new DateUtils();
68
		for (final Object o : doc.selectNodes("//EXTRA_FIELDS/EXTRA_FIELD")) {
69
			final String k = ((Element) o).valueOf("./key").trim();
70
			final String v = ((Element) o).valueOf("./value").trim();
71

    
72
			if (k.equalsIgnoreCase("ACTIVATION_ID")) {
73
				ds.setActivationId(v);
74
			} else if (k.equalsIgnoreCase("NamespacePrefix")) {
75
				ds.setNamespacePrefix(v);
76
			} else if (k.equalsIgnoreCase("aggregatorName")) {
77
				ds.setAggregator(v);
78
			} else if (k.equalsIgnoreCase("dateOfCollection")) {
79
				ds.setDateOfCollection(dateUtils.parse(v));
80
			} else if (k.equalsIgnoreCase("dateOfValidation")) {
81
				ds.setDateOfValidation(dateUtils.parse(v));
82
			}
83
		}
84

    
85
		return ds;
86
	}
87

    
88
	@Override
89
	public DatasourceDesc apply(final String profile) {
90
		try {
91
			return ProfileToDatasourceDesc.convert(profile);
92
		} catch (final Exception e) {
93
			log.error("Error convering profile", e);
94
			return null;
95
		}
96
	}
97
}
(5-5/7)