Project

General

Profile

« Previous | Next » 

Revision 49755

View differences:

modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/utils/Converter.java
1
package eu.manager.repo.manager.service.utils;
2

  
3
import eu.dnetlib.domain.data.Repository;
4
import eu.dnetlib.domain.data.RepositoryInterface;
5
import eu.manager.repo.manager.shared.AggregationDetails;
6
import eu.manager.repo.manager.shared.Timezone;
7
import com.google.gwt.core.client.impl.AsyncFragmentLoader.Logger;
8
import org.json.JSONArray;
9
import org.json.JSONException;
10
import org.json.JSONObject;
11

  
12
import java.io.BufferedReader;
13
import java.io.File;
14
import java.io.FileReader;
15
import java.io.IOException;
16
import java.text.ParseException;
17
import java.text.SimpleDateFormat;
18
import java.util.*;
19

  
20
public class Converter {
21

  
22
    private static final Logger LOGGER = Logger.getLogger(Converter.class);
23

  
24
    public static Repository jsonToRepositoryObject(JSONObject repositoryObject) throws JSONException {
25

  
26
        Repository repository = new Repository();
27

  
28
        if( repositoryObject.get("datasource").equals(null))
29
            return null;
30

  
31
        JSONObject datasource = (JSONObject) repositoryObject.get("datasource");
32

  
33
        repository.setActivationId(datasource.get("activationId").toString());
34
        repository.setAggregator(datasource.get("aggregator").toString());
35
        repository.setCertificates(datasource.get("certificates").toString());
36
        repository.setCitationGuidelineUrl(datasource.get("citationguidelineurl").toString());
37
        repository.setCollectedFrom( datasource.get("collectedfrom").toString());
38
        repository.setContactEmail(datasource.get("contactemail").toString());
39
        repository.setDatabaseAccessRestriction(datasource.get("databaseaccessrestriction").toString());
40
        repository.setDatabaseAccessType(datasource.get("databaseaccesstype").toString());
41
        repository.setDataUploadRestriction(datasource.get("datauploadrestriction").toString());
42
        repository.setDataUploadType(datasource.get("datauploadtype").toString());
43
        repository.setDateOfCollection(convertStringToDate( datasource.get("dateofcollection").toString()));
44
        repository.setDateOfValidation(convertStringToDate( datasource.get("dateofvalidation").toString()));
45
        repository.setDescription(datasource.get("description").toString());
46
        repository.setEissn(datasource.get("eissn").toString());
47
        repository.setEnglishName( datasource.get("englishname").toString());
48
        repository.setId(datasource.get("id").toString());
49
        repository.setIssn(datasource.get("issn").toString());
50
        repository.setOdLanguages(datasource.get("languages").toString());
51
        repository.setLatitude( toDouble(datasource.get("latitude").toString()));
52
        repository.setLissn(datasource.get("lissn").toString());
53
        repository.setLogoUrl(datasource.get("logourl").toString());
54
        repository.setLongitude(toDouble(datasource.get("longitude").toString()));
55
        //datasource.get("managed");
56
        repository.setMissionStatementUrl(datasource.get("missionstatementurl").toString());
57
        repository.setNamespacePrefix(datasource.get("namespaceprefix").toString());
58
        repository.setOdContentTypes(datasource.get("od_contenttypes").toString());
59
        repository.setOfficialName(datasource.get("officialname").toString());
60
        repository.setPidSystems(datasource.get("pidsystems").toString());
61
        //datasource.get("platform");
62
        repository.setProvenanceActionClass( datasource.get("provenanceaction").toString());
63
        repository.setQualityManagementKind(datasource.get("qualitymanagementkind").toString());
64
        repository.setRegisteredBy(datasource.get("registeredby").toString());
65
        repository.setReleaseEndDate(convertStringToDate(datasource.get("releaseenddate").toString()));
66
        repository.setReleaseStartDate(convertStringToDate(datasource.get("releasestartdate").toString()));
67
        repository.setServiceProvider(Boolean.valueOf(datasource.get("serviceprovider").toString()));
68
        //datasource.get("subjects");
69
        Double timezone = toDouble(datasource.get("timezone").toString());
70
        repository.setTimezone(timezone!=null?timezone:0.0);
71
        repository.setTypology(datasource.get("typology").toString());
72
        repository.setVersioning(Boolean.valueOf(datasource.get("versioning").toString()));
73
        repository.setWebsiteUrl(datasource.get("websiteurl").toString());
74
        return repository;
75
    }
76

  
77
    public static Date convertStringToDate(String date){
78

  
79
        if(Objects.equals(date, "null"))
80
            return null;
81

  
82
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
83
        try {
84
            return formatter.parse(date);
85
        } catch (ParseException e) {
86
            e.printStackTrace();
87
        }
88
        return null;
89
    }
90

  
91
    public static String convertDateToString(Date date){
92

  
93
        if(Objects.equals(date, "null"))
94
            return null;
95

  
96
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
97
        return formatter.format(date);
98
    }
99

  
100
    public static Double toDouble(String number){
101
        if(Objects.equals(number, "null"))
102
            return null;
103
        else
104
            return Double.valueOf(number);
105
    }
106

  
107
    public static List<Repository> jsonToRepositoryList(JSONArray rs) throws JSONException {
108

  
109
        List<Repository> resultSet = new ArrayList<>();
110
        for(int i=0;i<rs.length();i++)
111
            resultSet.add(jsonToRepositoryObject( rs.getJSONObject(i)) );
112
        return resultSet;
113
    }
114

  
115
    public static RepositoryInterface jsonToRepositoryInterfaceObject(JSONObject repositoryInterfaceObject) throws JSONException {
116

  
117
        RepositoryInterface repositoryInterface = new RepositoryInterface();
118

  
119
        repositoryInterface.setBaseUrl(repositoryInterfaceObject.get("baseurl").toString());
120
        repositoryInterface.setContentDescription(repositoryInterfaceObject.get("contentdescription").toString());
121
        repositoryInterface.setId(repositoryInterfaceObject.get("id").toString());
122
        repositoryInterface.setMetadataIdentifierPath(repositoryInterfaceObject.get("metadataIdentifierPath").toString());
123
        repositoryInterface.setAccessProtocol(repositoryInterfaceObject.get("protocol").toString());
124
        repositoryInterface.setTypology(repositoryInterfaceObject.get("typology").toString());
125
        repositoryInterface.setDesiredCompatibilityLevel(repositoryInterfaceObject.get("compatibility").toString());
126
        repositoryInterface.setActive(Boolean.parseBoolean(repositoryInterfaceObject.get("active").toString()));
127
        repositoryInterface.setRemovable(Boolean.parseBoolean(repositoryInterfaceObject.get("removable").toString()));
128

  
129
        return repositoryInterface;
130
    }
131

  
132
    public static String repositoryObjectToJson(Repository repository) throws JSONException {
133

  
134
        JSONObject jsonObject = new JSONObject();
135
        jsonObject.put("activationId",repository.getActivationId());
136
        jsonObject.put("aggregator",repository.getAggregator());
137
        jsonObject.put("certificates",repository.getCertificates());
138
        jsonObject.put("citationguidelineurl",repository.getCitationGuidelineUrl());
139
        jsonObject.put("collectedfrom",repository.getCollectedFrom());
140
        jsonObject.put("contactemail",repository.getContactEmail());
141
        jsonObject.put("databaseaccessrestriction",repository.getDatabaseAccessRestriction());
142
        jsonObject.put("databaseaccesstype",repository.getDatabaseAccessType());
143
        jsonObject.put("datauploadrestriction",repository.getDataUploadRestriction());
144
        jsonObject.put("datauploadtype",repository.getDataUploadType());
145
        jsonObject.put("dateofcollection",convertDateToString(repository.getDateOfCollection()));
146
        jsonObject.put("dateofvalidation",convertDateToString(repository.getDateOfValidation()));
147
        jsonObject.put("description",repository.getDescription());
148
        jsonObject.put("eissn",repository.getEissn());
149
        jsonObject.put("englishname",repository.getEnglishName());
150
        jsonObject.put("id",repository.getId());
151
        jsonObject.put("issn",repository.getIssn());
152
        jsonObject.put("languages",repository.getOdLanguages());
153
        jsonObject.put("latitude",repository.getLatitude().toString());
154
        jsonObject.put("lissn",repository.getLissn());
155
        jsonObject.put("logourl",repository.getLogoUrl());
156
        jsonObject.put("longitude",repository.getLongitude().toString());
157
        jsonObject.put("missionstatementurl",repository.getMissionStatementUrl());
158
        jsonObject.put("namespaceprefix",repository.getNamespacePrefix());
159
        jsonObject.put("od_contenttypes",repository.getOdContentTypes());
160
        jsonObject.put("officialname",repository.getOfficialName());
161
        jsonObject.put("pidsystems",repository.getPidSystems());
162
        jsonObject.put("provenanceaction",repository.getProvenanceActionClass());
163
        jsonObject.put("qualitymanagementkind",repository.getQualityManagementKind());
164
        jsonObject.put("registeredby",repository.getRegisteredBy());
165
        jsonObject.put("releaseenddate",convertDateToString(repository.getReleaseEndDate()));
166
        jsonObject.put("releasestartdate",convertDateToString(repository.getReleaseStartDate()));
167
        jsonObject.put("serviceprovider",repository.getServiceProvider());
168
        jsonObject.put("timezone",repository.getTimezone());
169
        jsonObject.put("typology",repository.getTypology());
170
        jsonObject.put("versioning",repository.getVersioning());
171
        jsonObject.put("websiteurl",repository.getWebsiteUrl());
172

  
173
        //datasource.get("managed");
174
        //datasource.get("platform");
175
        //datasource.get("subjects");
176
        return jsonObject.toString();
177
    }
178

  
179
    public static String repositoryInterfaceObjectToJson(RepositoryInterface repositoryInterface) throws JSONException {
180

  
181
        JSONObject jsonObject = new JSONObject();
182

  
183
        jsonObject.put("baseurl",repositoryInterface.getBaseUrl());
184
        jsonObject.put("contentdescription",repositoryInterface.getContentDescription());
185
        jsonObject.put("id",repositoryInterface.getId());
186
        jsonObject.put("metadataIdentifierPath",repositoryInterface.getMetadataIdentifierPath());
187
        jsonObject.put("protocol",repositoryInterface.getAccessProtocol());
188
        jsonObject.put("typology",repositoryInterface.getTypology());
189
        jsonObject.put("compatibility",repositoryInterface.getDesiredCompatibilityLevel());
190
        //jsonObject.put("removable",repositoryInterface.getRemovable());
191
        //jsonObject.put("active",repositoryInterface.getActive());
192
        return jsonObject.toString();
193
    }
194

  
195
    public static ArrayList<String> readFile(String filename) {
196
        String line;
197
        ArrayList<String> list = new ArrayList<String>();
198
        try {
199
            File file = new File(Converter.class.getResource("/eu/dnetlib/repo/manager/service/utils/"+filename).getFile());
200
            BufferedReader br = new BufferedReader(new FileReader(file));
201
            while((line = br.readLine()) != null) {
202
                list.add(line.trim());
203
            }
204
            br.close();
205
        } catch (IOException e) {
206
            e.printStackTrace();
207
        }
208
        return list;
209
    }
210

  
211
    public static List<AggregationDetails> getAggregationHistoryFromJson(JSONObject repositoryObject) throws JSONException {
212

  
213
        if( repositoryObject.get("aggregationHistory").toString().equals("[]"))
214
            return null;
215

  
216
        JSONArray rs = new JSONArray(repositoryObject.get("aggregationHistory").toString());
217
        List<AggregationDetails> aggregationDetailsList = new ArrayList<>();
218
        for(int i=0;i<rs.length();i++)
219
            aggregationDetailsList.add(jsonToAggregationDetails(rs.getJSONObject(i)));
220
        return aggregationDetailsList;
221
    }
222

  
223
    private static AggregationDetails jsonToAggregationDetails(JSONObject aggregationObject) throws JSONException {
224

  
225
        AggregationDetails aggregationDetails = new AggregationDetails();
226
        aggregationDetails.setAggregationStage(aggregationObject.get("aggregationStage").toString());
227
        aggregationDetails.setCollectionMode(aggregationObject.get("collectionMode").toString());
228
        aggregationDetails.setDate(convertStringToDate(aggregationObject.get("date").toString()));
229
        aggregationDetails.setNumberOfRecords(Integer.parseInt(aggregationObject.get("numberOfRecords").toString()));
230
        return aggregationDetails;
231
    }
232

  
233
    public static AggregationDetails getLastCollectionFromJson(JSONObject repositoryObject) throws JSONException {
234

  
235
        if( repositoryObject.get("lastCollection").equals(null))
236
            return null;
237

  
238
        return jsonToAggregationDetails(repositoryObject.getJSONObject("lastCollection"));
239
    }
240

  
241
    public static AggregationDetails getLastTransformationFromJson(JSONObject repositoryObject) throws JSONException {
242

  
243
        if( repositoryObject.get("lastTransformation").equals(null))
244
            return null;
245

  
246
        return jsonToAggregationDetails(repositoryObject.getJSONObject("lastTransformation"));
247
    }
248

  
249
    public static List<Timezone> toTimezones(List<String> timezones) {
250

  
251
        List<Timezone> tmz = new ArrayList<>();
252
        for(String t : timezones){
253
            String[] s = t.split("\t");
254
            tmz.add(new Timezone(s[1],Double.parseDouble(s[0])));
255
        }
256
        return tmz;
257
    }
258
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/utils/OaiTools.java
1
package eu.manager.repo.manager.service.utils;
2

  
3
import org.apache.log4j.Logger;
4
import org.dom4j.io.DOMWriter;
5
import org.w3c.dom.Document;
6
import se.kb.oai.pmh.*;
7
import se.kb.oai.pmh.Set;
8

  
9
import javax.net.ssl.*;
10
import javax.xml.namespace.NamespaceContext;
11
import javax.xml.xpath.XPath;
12
import javax.xml.xpath.XPathExpressionException;
13
import javax.xml.xpath.XPathFactory;
14
import java.security.KeyManagementException;
15
import java.security.NoSuchAlgorithmException;
16
import java.security.cert.X509Certificate;
17
import java.util.*;
18

  
19
public class OaiTools {
20

  
21
	{
22
		disableSslVerification();
23
	}
24

  
25
	private static Logger LOGGER = Logger.getLogger(OaiTools.class);
26

  
27
	public static List<String> getSetsOfRepo(String baseUrl) throws Exception {
28
		try {
29
			LOGGER.debug("Getting sets of repository " + baseUrl);
30
			OaiPmhServer harvester = new OaiPmhServer(baseUrl);
31
			SetsList setList = harvester.listSets();
32
			ResumptionToken token = setList.getResumptionToken();
33
			List<Set> sets = new ArrayList<Set>();
34
			sets.addAll(setList.asList());
35
			while (token != null) {
36
				setList = harvester.listSets(token);
37
				token = setList.getResumptionToken();
38
				sets.addAll(setList.asList());
39
			}
40

  
41
			List<String> ret = new ArrayList<String>();
42
			for (Set set : sets) {
43
				ret.add(set.getSpec().trim());
44
			}
45
			if (ret.size() > 0 )
46
				Collections.sort(ret);
47
			return ret;
48

  
49
		} catch (Exception e) {
50
			LOGGER.error("Error getting sets of repository " + baseUrl, e);
51
			return new ArrayList<String>();
52
			//throw e;
53
		}
54
	}
55

  
56
	public static boolean identifyRepository(String baseUrl) throws Exception {
57
		LOGGER.debug("sending identify request to repo " + baseUrl);
58

  
59
		OaiPmhServer harvester = new OaiPmhServer(baseUrl);
60

  
61
		if (baseUrl.trim().isEmpty()) {
62
			return false;
63
		}
64

  
65
		try {
66
			Identification identification = harvester.identify();
67
			DOMWriter d4Writer = new DOMWriter();
68
			Document d = d4Writer.write(identification.getResponse());
69

  
70
			return verifyIdentify(d);
71
		} catch (Exception e) {
72
			LOGGER.debug("Error verifying identify response", e);
73
			throw e;
74
		}
75
	}
76

  
77
	private static boolean verifyIdentify(Document doc) throws XPathExpressionException {
78
		NamespaceContext ctx = new NamespaceContext() {
79
			public String getNamespaceURI(String prefix) {
80
				String uri;
81
				if (prefix.equals("oai"))
82
					uri = "http://www.openarchives.org/OAI/2.0/";
83
				else
84
					uri = null;
85
				return uri;
86
			}
87

  
88
			// Dummy implementation - not used!
89
			public Iterator<String> getPrefixes(String val) {
90
				return null;
91
			}
92

  
93
			// Dummy implemenation - not used!
94
			public String getPrefix(String uri) {
95
				return null;
96
			}
97
		};
98

  
99
		// Now the XPath expression
100

  
101
		String xpathStr = "//oai:OAI-PMH/oai:Identify";
102
		XPathFactory xpathFact = XPathFactory.newInstance();
103
		XPath xpath = xpathFact.newXPath();
104
		xpath.setNamespaceContext(ctx);
105
		String result = xpath.evaluate(xpathStr, doc);
106

  
107
		return (result != null && !result.equals(""));
108
	}
109

  
110
	private static void disableSslVerification() {
111
		try
112
		{
113
			LOGGER.debug("disabling ssl verification");
114
			// Create a trust manager that does not validate certificate chains
115
			TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
116
				public X509Certificate[] getAcceptedIssuers() {
117
					return null;
118
				}
119
				public void checkClientTrusted(X509Certificate[] certs, String authType) {
120
				}
121
				public void checkServerTrusted(X509Certificate[] certs, String authType) {
122
				}
123
			}
124
			};
125

  
126
			// Install the all-trusting trust manager
127
			SSLContext sc = SSLContext.getInstance("SSL");
128
			sc.init(null, trustAllCerts, new java.security.SecureRandom());
129
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
130

  
131
			// Create all-trusting host name verifier
132
			HostnameVerifier allHostsValid = new HostnameVerifier() {
133
				public boolean verify(String hostname, SSLSession session) {
134
					return true;
135
				}
136
			};
137

  
138
			// Install the all-trusting host verifier
139
			HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
140
		} catch (NoSuchAlgorithmException e) {
141
			LOGGER.error("disabling ssl verification", e);
142
		} catch (KeyManagementException e) {
143
			LOGGER.error("error while disabling ssl verification", e);
144
		}
145
	}
146
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/config/RepoManagerContextLoaderListener.java
1
package eu.manager.repo.manager.service.config;
2

  
3
import org.apache.commons.lang.ArrayUtils;
4
import org.apache.log4j.Logger;
5
import org.springframework.beans.BeansException;
6
import org.springframework.context.support.ClassPathXmlApplicationContext;
7
import org.springframework.web.context.ContextLoaderListener;
8
import org.springframework.web.context.WebApplicationContext;
9
import org.springframework.web.context.support.XmlWebApplicationContext;
10

  
11
import javax.servlet.ServletContext;
12
import java.util.Properties;
13

  
14
public class RepoManagerContextLoaderListener extends ContextLoaderListener {
15
	private static Logger logger = Logger.getLogger(RepoManagerContextLoaderListener.class);
16

  
17

  
18
	public RepoManagerContextLoaderListener() {
19
		super();
20
	}
21

  
22
	public RepoManagerContextLoaderListener(WebApplicationContext context) {
23
		super(context);
24
	}
25

  
26
	@Override
27
	protected WebApplicationContext createWebApplicationContext(
28
			ServletContext servletContext)
29
			throws BeansException {
30
		logger.debug("Creating web application context");
31
		Properties props = this.loadProperties();
32
		String repoMode = props.getProperty("services.validator.mode.repo");
33
		String userMode = props.getProperty("services.validator.mode.user");
34
		Boolean standaloneMode = Boolean.parseBoolean(props.getProperty("services.validator.mode.standalone"));
35
		
36
		logger.info("User mode: " + userMode);
37
		logger.info("Repo mode: " + repoMode);
38
		logger.info("Standalone mode: " + standaloneMode);
39
//		logger.info("Dnet workflow enabled: " + repoMode);
40
		XmlWebApplicationContext ctx = new XmlWebApplicationContext();
41

  
42
		ctx.setServletContext(servletContext);
43

  
44
		String userApiContext = null;
45
		if (userMode.equalsIgnoreCase("local"))
46
			userApiContext = "eu/dnetlib/validator/web/api/impls/users/springContext-validator-user-local.xml";
47
		else if (userMode.equalsIgnoreCase("ldap"))
48
			userApiContext = "eu/dnetlib/users/springContext-users-ldap.xml";
49

  
50
		String[] springContextCore = new  String[] {
51
				"classpath:META-INF/cxf/cxf.xml",
52
				"classpath:META-INF/cxf/cxf-extension-soap.xml",
53
				"classpath:META-INF/cxf/cxf-extension-jaxws.xml",
54
				"classpath:META-INF/cxf/cxf-servlet.xml",
55
				"classpath*:/cxf.xml",
56
				"classpath*:/eu/dnetlib/repos/ehcacher/springContext-repos-ehcacher.xml",
57
				"classpath*:/eu/dnetlib/clients/ws/springContext-locatorFactory.xml",
58
				"classpath*:/eu/dnetlib/soap/cxf/applicationContext-eprbuilders.xml",
59
//				"classpath*:/eu/dnetlib/validator/web/actions/springContext-validator-struts.xml",
60
//				"classpath*:/eu/dnetlib/validator/web/actions/springContext-validator-emailer.xml",
61
//				"classpath*:/eu/dnetlib/validator/web/config/springContext-validator.xml",
62
				"classpath*:/eu/dnetlib/repo/manager/server/config/springContext-repo-manager-config.xml",
63
//				"classpath*:/eu/dnetlib/validator/commons/dao/springContext-*.xml",
64
				"classpath*:/eu/dnetlib/repos/springContext-repos-" + repoMode + ".xml",
65
				"classpath*:/" + userApiContext
66
		};
67

  
68

  
69
		String[] springContextForStandalone = new String[] {
70
		};
71

  
72
		String[] springContextForIS = new String[] {
73
				"classpath*:/gr/uoa/di/driver/util/springContext-locators.xml",
74
				"classpath*:/gr/uoa/di/driver/app/springContext-lookupFactory.xml",
75
				"classpath*:/gr/uoa/di/driver/app/springContext-lookupClients.xml",
76
				"classpath*:/eu/dnetlib/enabling/hcm/springContext-hcmService.xml",
77
				"classpath*:/gr/uoa/di/driver/app/springContext-commons.xml",
78
				"classpath*:/gr/uoa/di/driver/app/springContext-registrator.xml"
79
		};
80
		
81
		if (standaloneMode) {
82
			logger.debug("Loading contexts for standalone mode");
83
			ctx.setConfigLocations((String[])ArrayUtils.addAll(springContextCore,springContextForStandalone));
84
		} else {
85
			logger.debug("Loading contexts for dnet");
86
			ctx.setConfigLocations((String[])ArrayUtils.addAll(springContextCore,springContextForIS));
87
		}
88
		
89
		ctx.refresh();
90
		
91
		logger.debug("done");
92
		
93
		return ctx;
94
	}	
95
	
96
	private Properties loadProperties() {
97
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {
98
				"classpath*:/eu/dnetlib/repo/manager/server/config/springContext-repo-manager-config.xml"
99
		});
100
		
101
		CascadingPropertyLoader pLoader = (CascadingPropertyLoader) ctx.getBean("propertyLoader");
102
		Properties props = pLoader.getProperties();
103
		
104
		ctx.destroy();
105
		ctx.close();
106
		return props;
107
	}
108

  
109
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/config/CascadingPropertyLoader.java
1
package eu.manager.repo.manager.service.config;
2

  
3
import org.springframework.beans.BeansException;
4
import org.springframework.beans.factory.InitializingBean;
5
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
6
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
7

  
8
import java.util.Properties;
9

  
10
/**
11
 * CascadingPropertyLoader loads a number of property files and mergers them together, so that the last properties
12
 * override the previous. It also supports property expansion like:
13
 * 
14
 * <code>
15
 *   something = 1
16
 *   somethingelse = 2
17
 *   test = ${something}/${somethingelse}
18
 *  </code>
19
 * 
20
 * <p>
21
 * And if you override something to XX, then test will become XX/2
22
 * </p>
23
 * 
24
 * 
25
 * @author marko
26
 * 
27
 */
28
public class CascadingPropertyLoader extends PropertyPlaceholderConfigurer implements InitializingBean {
29

  
30
	private Properties properties;
31

  
32
	public void afterPropertiesSet() throws Exception {
33
		this.properties = mergeProperties();
34

  
35
		// Convert the merged properties, if necessary.
36
		convertProperties(this.properties);
37
		
38
		logger.debug("Properties: " + properties);
39
	}
40

  
41
	@Override
42
	protected void processProperties(final ConfigurableListableBeanFactory beanFactoryToProcess, final Properties props) throws BeansException {
43
		super.processProperties(beanFactoryToProcess, props);
44
	}
45

  
46
	public Properties getProperties() {
47
		return properties;
48
	}
49

  
50
	public void setProperties(final Properties properties) {
51
		super.setProperties(properties);
52
		
53
		this.properties = properties;
54
	}
55
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApi.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3
import eu.dnetlib.domain.functionality.validator.JobForValidation;
4
import eu.dnetlib.domain.functionality.validator.RuleSet;
5
import org.json.JSONException;
6
import org.springframework.http.MediaType;
7
import org.springframework.web.bind.annotation.*;
8

  
9
import java.util.List;
10

  
11

  
12
@RestController
13
@RequestMapping(value = "/validator")
14
public interface ValidatorApi {
15

  
16
    @RequestMapping(value = "/submitJobForValidation",method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE )
17
    @ResponseBody
18
    void submitJobForValidation(@RequestBody JobForValidation jobForValidation);
19

  
20
    @RequestMapping(value = "/reSubmitJobForValidation/",method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE )
21
    @ResponseBody
22
    void reSubmitJobForValidation(@RequestBody String jobId) throws JSONException;
23

  
24
    @RequestMapping(value = "/getRuleSets/{mode}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
25
    @ResponseBody
26
    List<RuleSet> getRuleSets(String mode);
27

  
28
    @RequestMapping(value = "/getSetsOfRepository" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
29
    @ResponseBody
30
    List<String> getSetsOfRepository(@RequestBody String url);
31

  
32

  
33

  
34

  
35
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/BrokerApiImpl.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3

  
4
import com.fasterxml.jackson.databind.ObjectMapper;
5
import com.google.gson.Gson;
6
import eu.dnetlib.domain.data.Repository;
7
import eu.manager.repo.manager.shared.broker.BrowseEntry;
8
import eu.manager.repo.manager.shared.broker.EventsPage;
9
import eu.manager.repo.manager.shared.BrokerException;
10
import eu.manager.repo.manager.shared.Tuple;
11
import eu.manager.repo.manager.shared.broker.AdvQueryObject;
12
import eu.manager.repo.manager.shared.broker.DatasourcesBroker;
13
import org.json.JSONException;
14
import org.json.JSONObject;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.beans.factory.annotation.Value;
17
import org.springframework.core.ParameterizedTypeReference;
18
import org.springframework.http.HttpEntity;
19
import org.springframework.http.HttpMethod;
20
import org.springframework.http.ResponseEntity;
21
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
22
import org.springframework.stereotype.Component;
23
import org.springframework.util.LinkedMultiValueMap;
24
import org.springframework.util.MultiValueMap;
25
import org.springframework.web.bind.annotation.PathVariable;
26
import org.springframework.web.client.RestClientException;
27
import org.springframework.web.client.RestTemplate;
28
import org.springframework.web.util.UriComponentsBuilder;
29

  
30
import java.util.*;
31

  
32
@Component
33
public class BrokerApiImpl implements BrokerApi {
34

  
35

  
36
    @Autowired
37
    private RepositoryApiImpl repoAPI;
38
    @Value("${services.broker.url}:${services.broker.port}/${services.broker.api}${services.broker.openaire}")
39
    private String openairePath;
40

  
41
    @Override
42
    public DatasourcesBroker getDatasourcesOfUser(String params) throws JSONException {
43
        JSONObject json_params = new JSONObject(params);
44
        DatasourcesBroker ret = new DatasourcesBroker();
45

  
46
        String userEmail = json_params.getString("userEmail");
47
        boolean includeShared = json_params.getBoolean("includeShared");
48
        boolean includeByOthers = json_params.getBoolean("includeByOthers");
49

  
50
        try {
51
            ret.setDatasourcesOfUser(getDatasourcesOfUserType(getRepositoriesOfUser(userEmail)));
52
            if (includeShared) {
53
                //TODO whatever nikonas was saying
54
                List<String> sharedDatasourceIds = new ArrayList<String>();
55
                ret.setSharedDatasources(getDatasourcesOfUserType(getRepositoriesByIds(sharedDatasourceIds)));
56
            }
57

  
58
            if (includeByOthers) {
59
                ret.setDatasourcesOfOthers(getDatasourcesOfUserType(getRepositoriesOfUser(userEmail)));
60
            }
61
        } catch (BrokerException e) {
62
            e.printStackTrace();
63
        }
64

  
65
        return ret;
66
    }
67

  
68
    @Override
69
    public List<BrowseEntry> getTopicsForDatasource(@PathVariable("datasourceName")  String datasourceName) throws BrokerException {
70
        final String service = "/topicsForDatasource";
71

  
72
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(openairePath + service)
73
                .queryParam("ds", datasourceName);
74

  
75
        RestTemplate template = new RestTemplate();
76
        template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
77
        ResponseEntity<List<BrowseEntry>> resp;
78
        try {
79
            resp = template.exchange(
80
                    builder.build().encode().toUri(),
81
                    HttpMethod.GET,
82
                    null,
83
                    new ParameterizedTypeReference<List<BrowseEntry>>() {
84
                    });
85
        } catch (RestClientException e) {
86
            throw new BrokerException(e);
87
        }
88

  
89
        return resp.getBody();
90
    }
91

  
92
    @Override
93
    public EventsPage advancedShowEvents(String params) throws BrokerException, JSONException {
94
        JSONObject json_params = new JSONObject(params);
95

  
96
        long page = json_params.getLong("page");
97
        long pagesize = json_params.getLong("pagesize");
98

  
99
        JSONObject json_advQueryObject = json_params.getJSONObject("advQueryObject");
100
        ObjectMapper obj = new ObjectMapper();
101
        AdvQueryObject advQueryObject = new Gson().fromJson(json_advQueryObject.toString(),AdvQueryObject.class);
102

  
103

  
104
        final String service = "/events/{page}/{pageSize}";
105

  
106
        Map<String, Long> uriParams = new HashMap<>();
107
        uriParams.put("page", page);
108
        uriParams.put("pageSize", pagesize);
109

  
110
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(openairePath + service);
111

  
112
        MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
113
        headers.add("Content-Type", "application/json");
114

  
115
        advQueryObject.setPage(page);
116

  
117
        HttpEntity<AdvQueryObject> entity = new HttpEntity<>(advQueryObject, headers);
118

  
119
        RestTemplate template = new RestTemplate();
120
        template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
121
        ResponseEntity<EventsPage> resp;
122
        try {
123
            resp = template.exchange(
124
                    builder.buildAndExpand(uriParams).encode().toUri(),
125
                    HttpMethod.POST,
126
                    entity,
127
                    new ParameterizedTypeReference<EventsPage>() {
128
                    }
129
            );
130
        } catch (RestClientException e) {
131
            throw new BrokerException(e);
132
        }
133
        return resp.getBody();
134

  
135

  
136
    }
137

  
138

  
139
    private List<Tuple<BrowseEntry, String>> getDatasourcesOfUserType(List<Repository> repositories) throws BrokerException {
140

  
141
        List<Tuple<BrowseEntry, String>> entries = new ArrayList<>();
142
        for (Repository repo : repositories) {
143
            BrowseEntry temp = new BrowseEntry();
144
            temp.setValue(repo.getOfficialName());
145
            temp.setSize(new Long(0));
146
            for (BrowseEntry e : getTopicsForDatasource(repo.getOfficialName())) {
147
                temp.setSize(temp.getSize() + e.getSize());
148
            }
149
            Tuple<BrowseEntry, String> tup = new Tuple<>(temp, repo.getLogoUrl());
150
            entries.add(tup);
151
        }
152

  
153
        // sort the collection by the second field of the tuple which is size
154
        Collections.sort(entries, new Comparator<Tuple<BrowseEntry, String>>() {
155
            @Override
156
            public int compare(Tuple<BrowseEntry, String> e1, Tuple<BrowseEntry, String> e2) {
157
                return (int) (e2.getFirst().getSize().longValue() - e1.getFirst().getSize().longValue());
158
            }
159
        });
160

  
161
        return entries;
162
    }
163

  
164

  
165

  
166
    private List<Repository> getRepositoriesOfUser(String userEmail) throws JSONException {
167

  
168
        int page = 1;
169
        int size = 10;
170
        List<Repository> rs = null;
171
        List<Repository> resultSet = new ArrayList<>();
172

  
173
        while (true){
174
            rs = repoAPI.getRepositoriesOfUser(userEmail, String.valueOf(page), String.valueOf(size));
175
            if(rs.size() == 0) break;
176
            resultSet.addAll(rs);
177
        }
178
        return resultSet;
179
    }
180

  
181
    private List<Repository> getRepositoriesByIds(List<String> sharedDatasourceIds) {
182
        return null;
183
    }
184

  
185
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApi.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3
import eu.dnetlib.api.functionality.ValidatorServiceException;
4
import eu.dnetlib.domain.functionality.validator.StoredJob;
5
import eu.manager.repo.manager.shared.JobsOfUser;
6
import org.json.JSONException;
7
import org.json.JSONObject;
8
import org.springframework.http.MediaType;
9
import org.springframework.web.bind.annotation.*;
10

  
11
@RestController
12
@RequestMapping(value = "/monitor")
13
public interface MonitorApi {
14

  
15
    @RequestMapping(value = "/getJobsOfUser" , method = RequestMethod.GET,consumes = MediaType.APPLICATION_JSON_VALUE,
16
            produces = MediaType.APPLICATION_JSON_VALUE)
17
    @ResponseBody
18
    JobsOfUser getJobsOfUser(@RequestBody String user,
19
                             @RequestBody String jobType,
20
                             @RequestBody String offset,
21
                             @RequestBody String limit,
22
                             @RequestBody String dateFrom,
23
                             @RequestBody String dateTo,
24
                             @RequestBody String validationStatus,
25
                             @RequestBody String includeJobsTotal) throws JSONException, ValidatorServiceException;
26

  
27
    @RequestMapping(value = "/getJobsOfUserPerValidationStatus" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
28
    @ResponseBody
29
    int getJobsOfUserPerValidationStatus(@RequestBody String user,
30
                                         @RequestBody String jobType,
31
                                         @RequestBody String validationStatus) throws JSONException;
32

  
33
    @RequestMapping(value = "/getJobSummary" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
34
    @ResponseBody
35
    StoredJob getJobSummary(@RequestBody String jobId,
36
                            @RequestBody String groupBy) throws JSONException;
37

  
38
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/ValidatorApiImpl.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3
import eu.dnetlib.api.functionality.ValidatorServiceException;
4
import eu.dnetlib.domain.functionality.validator.StoredJob;
5
import eu.manager.repo.manager.service.utils.OaiTools;
6
import gr.uoa.di.driver.util.ServiceLocator;
7
import eu.dnetlib.domain.functionality.validator.JobForValidation;
8
import eu.dnetlib.domain.functionality.validator.RuleSet;
9
import eu.manager.repo.manager.shared.Constants;
10

  
11
import java.util.*;
12
import java.util.concurrent.ConcurrentHashMap;
13
import eu.dnetlib.api.functionality.ValidatorService;
14
import org.apache.log4j.Logger;
15
import org.json.JSONException;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.stereotype.Component;
18
import org.springframework.web.bind.annotation.PathVariable;
19

  
20
import javax.annotation.PostConstruct;
21
import javax.annotation.Resource;
22

  
23

  
24
@Component
25
public class ValidatorApiImpl implements ValidatorApi {
26

  
27
    @Autowired
28
    private MonitorApiImpl monitorApi;
29

  
30
    @Resource(name = "validatorServiceLocator")
31
    private ServiceLocator<ValidatorService> validatorServiceLocator;
32

  
33
    private ValidatorService getValidationService() {
34
        return this.validatorServiceLocator.getService();
35
    }
36

  
37
    public ServiceLocator<ValidatorService> getValidatorServiceLocator() {
38
        return validatorServiceLocator;
39
    }
40

  
41
    public void setValidatorServiceLocator(ServiceLocator<ValidatorService> validatorServiceLocator) {
42
        this.validatorServiceLocator = validatorServiceLocator;
43
    }
44

  
45
    private Map<String, List<RuleSet>> rulesetMap = new ConcurrentHashMap<String, List<RuleSet>>();
46

  
47
    private static final Logger LOGGER = Logger
48
            .getLogger(ValidatorApiImpl.class);
49

  
50
    @PostConstruct
51
    private void loadRules(){
52

  
53
        try {
54
            for (RuleSet ruleSet : getValidationService().getRuleSets()) {
55
                if (ruleSet.getVisibility() != null && ruleSet.getVisibility().contains("development")) {
56
                    String key = "";
57
                    if (ruleSet.getGuidelinesAcronym().matches("^openaire[1-9].0_data$"))
58
                        key = Constants.VALIDATION_MODE_DATA;
59
                    else if (ruleSet.getGuidelinesAcronym().matches("^openaire[1-9].0$") || ruleSet.getGuidelinesAcronym().equals("driver"))
60
                        key = Constants.VALIDATION_MODE_LITERATURE;
61
                    else if (ruleSet.getGuidelinesAcronym().matches("^openaire[1-9].0_cris$"))
62
                        key = Constants.VALIDATION_MODE_CRIS;
63

  
64
                    if (rulesetMap.containsKey(key))
65
                        rulesetMap.get(key).add(ruleSet);
66
                    else {
67
                        List<RuleSet> ruleSets = new ArrayList<RuleSet>();
68
                        ruleSets.add(ruleSet);
69
                        rulesetMap.put(key, ruleSets);
70
                    }
71
                }
72
            }
73
        } catch (ValidatorServiceException e) {
74
            e.printStackTrace();
75
        }
76

  
77
    }
78

  
79
    @Override
80
    public void submitJobForValidation(JobForValidation jobForValidation) {
81
        try {
82
            this.getValidationService().submitValidationJob(jobForValidation);
83
        } catch (ValidatorServiceException e) {
84
            e.printStackTrace();
85
        }
86
    }
87

  
88
    @Override
89
    public void reSubmitJobForValidation(String jobId) throws JSONException {
90

  
91
        StoredJob job = monitorApi.getJobSummary(jobId,"all");
92
        Set<Integer> contentRules = new HashSet<Integer>();
93
        Set<Integer> usageRules = new HashSet<Integer>();
94

  
95
        RuleSet ruleSet = null;
96
        for (List<RuleSet> ruleSets : this.rulesetMap.values()) {
97
            for (RuleSet rSet : ruleSets)
98
                if (rSet.getGuidelinesAcronym().equals(job.getDesiredCompatibilityLevel())) {
99
                    ruleSet = rSet;
100
                    break;
101
                }
102
        }
103

  
104
        for (int ruleId : job.getRules()) {
105
            if (ruleSet.getContentRulesIds().contains(ruleId))
106
                contentRules.add(ruleId);
107
            else if (ruleSet.getUsageRulesIds().contains(ruleId))
108
                usageRules.add(ruleId);
109
        }
110
        if (!contentRules.isEmpty())
111
            job.setSelectedContentRules(contentRules);
112
        if (!usageRules.isEmpty())
113
            job.setSelectedUsageRules(usageRules);
114
        this.submitJobForValidation(job);
115
    }
116

  
117
    @Override
118
    public List<RuleSet> getRuleSets(@PathVariable("mode") String mode) {
119
        return rulesetMap.get(mode);
120
    }
121

  
122
    @Override
123
    public List<String> getSetsOfRepository(String url) {
124
        try {
125
            return OaiTools.getSetsOfRepo(url);
126
        } catch (Exception e) {
127
            e.printStackTrace();
128
        }
129
        return null;
130
    }
131

  
132
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/MonitorApiImpl.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3
import eu.dnetlib.api.functionality.ValidatorService;
4
import eu.dnetlib.api.functionality.ValidatorServiceException;
5
import eu.dnetlib.domain.functionality.validator.StoredJob;
6
import eu.manager.repo.manager.shared.JobsOfUser;
7
import eu.manager.repo.manager.shared.Constants;
8
import gr.uoa.di.driver.util.ServiceLocator;
9
import org.apache.log4j.Logger;
10
import org.json.JSONException;
11
import org.springframework.stereotype.Component;
12

  
13
import javax.annotation.Resource;
14

  
15
@Component
16
public class MonitorApiImpl implements MonitorApi {
17

  
18
    @Resource(name = "validatorServiceLocator")
19
    private ServiceLocator<ValidatorService> validatorServiceLocator;
20

  
21
    private ValidatorService getValidationService() {
22
        return this.validatorServiceLocator.getService();
23
    }
24

  
25
    public ServiceLocator<ValidatorService> getValidatorServiceLocator() {
26
        return validatorServiceLocator;
27
    }
28

  
29
    public void setValidatorServiceLocator(ServiceLocator<ValidatorService> validatorServiceLocator) {
30
        this.validatorServiceLocator = validatorServiceLocator;
31
    }
32

  
33

  
34
    private static final Logger LOGGER = Logger
35
            .getLogger(MonitorApiImpl.class);
36

  
37
    @Override
38
    public JobsOfUser getJobsOfUser(String user,
39
                                    String jobType,
40
                                    String offset,
41
                                    String limit,
42
                                    String dateFrom,
43
                                    String dateTo,
44
                                    String validationStatus,
45
                                    String includeJobsTotal) throws JSONException, ValidatorServiceException {
46

  
47
        if (jobType.equals(""))
48
            jobType = null;
49
        if(dateFrom.equals(""))
50
            dateFrom = null;
51
        if(dateTo.equals(""))
52
            dateTo = null;
53
        if(validationStatus.equals(""))
54
            validationStatus = null;
55

  
56

  
57
        JobsOfUser retJobs = new JobsOfUser();
58
        retJobs.setJobs(getValidationService().getStoredJobsNew(user, jobType, Integer.parseInt(offset),
59
                Integer.parseInt(limit), dateFrom, dateTo, validationStatus));
60
        if (Boolean.parseBoolean(includeJobsTotal)) {
61
            retJobs.setTotalJobs(this.getJobsTotalNumberOfUser(user, jobType, null));
62
            retJobs.setTotalJobsSuccessful(this.getJobsTotalNumberOfUser(user, jobType, Constants.VALIDATION_JOB_STATUS_SUCCESSFUL));
63
            retJobs.setTotalJobsFailed(this.getJobsTotalNumberOfUser(user, jobType, Constants.VALIDATION_JOB_STATUS_FAILED));
64
            retJobs.setTotalJobsOngoing(this.getJobsTotalNumberOfUser(user, jobType,Constants.VALIDATION_JOB_STATUS_ONGOING));
65
        }
66
        return retJobs;
67

  
68
    }
69

  
70
    private int getJobsTotalNumberOfUser(String user, String jobType, String validationStatus) throws ValidatorServiceException {
71
        return  getValidationService().getStoredJobsTotalNumberNew(user, jobType, validationStatus);
72
    }
73

  
74
    @Override
75
    public int getJobsOfUserPerValidationStatus(String user,
76
                                                String jobType,
77
                                                String validationStatus) throws JSONException {
78

  
79
        try {
80
            return getValidationService().getStoredJobsTotalNumberNew(user, jobType, validationStatus);
81
        } catch (ValidatorServiceException e) {
82
            e.printStackTrace();
83
        }
84
        return 0;
85
    }
86

  
87
    @Override
88
    public StoredJob getJobSummary(String jobId,
89
                                   String groupBy) throws JSONException {
90

  
91
        try {
92
            return getValidationService().getStoredJob(Integer.parseInt(jobId), groupBy);
93
        } catch (ValidatorServiceException e) {
94
            e.printStackTrace();
95
        }
96
        return null;
97
    }
98

  
99
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3
import eu.dnetlib.domain.data.Repository;
4
import eu.dnetlib.domain.data.RepositoryInterface;
5
import eu.manager.repo.manager.shared.Aggregations;
6
import eu.manager.repo.manager.shared.Country;
7
import eu.manager.repo.manager.shared.Timezone;
8
import org.json.JSONException;
9
import org.springframework.http.MediaType;
10
import org.springframework.web.bind.annotation.RequestMapping;
11
import org.springframework.web.bind.annotation.RequestMethod;
12
import org.springframework.web.bind.annotation.ResponseBody;
13
import org.springframework.web.bind.annotation.RestController;
14
import java.util.List;
15
import java.util.Set;
16

  
17
@RestController
18
@RequestMapping(value = "/repository")
19
public interface RepositoryApi {
20

  
21

  
22
    @RequestMapping(value = "/testAggregations", method = RequestMethod.GET,
23
            produces = MediaType.APPLICATION_JSON_VALUE)
24
    @ResponseBody
25
    Aggregations testAggregations() throws JSONException;
26

  
27
    @RequestMapping(value = "/getCountries", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
28
    @ResponseBody
29
    Country[] getCountries() ;
30

  
31
    @RequestMapping(value = "/getRepositoriesByCountry/{country}", method = RequestMethod.GET,
32
            produces = MediaType.APPLICATION_JSON_VALUE)
33
    @ResponseBody
34
    Set<String> getRepositoriesByCountry(String country) throws JSONException;
35

  
36
    @RequestMapping(value = "/getRepositoriesOfUser/{userEmail}/{page}/{size}")
37
    @ResponseBody
38
    List<Repository> getRepositoriesOfUser( String userEmail,
39
                                        String page,
40
                                        String size) throws JSONException;
41

  
42
    @RequestMapping(value = "/getRepositoryById/{id}", method = RequestMethod.GET,
43
            produces = MediaType.APPLICATION_JSON_VALUE)
44
    @ResponseBody
45
    Repository getRepositoryById(String id) throws JSONException;
46

  
47

  
48
    @RequestMapping(value = "/getRepositoryAggregations/{id}", method = RequestMethod.GET,
49
            produces = MediaType.APPLICATION_JSON_VALUE)
50
    @ResponseBody
51
    Aggregations getRepositoryAggregations(String id) throws JSONException;
52

  
53

  
54
    @RequestMapping(value = "/getRepositoriesByName/{name}/{page}/{size}/", method = RequestMethod.GET,
55
            produces = MediaType.APPLICATION_JSON_VALUE)
56
    @ResponseBody
57
    List<Repository> getRepositoriesByName(String name,
58
                                          String page,
59
                                          String size) throws JSONException;
60

  
61
    @RequestMapping(value = "/getRepositoryInterface/{id}", method = RequestMethod.GET,
62
            produces = MediaType.APPLICATION_JSON_VALUE)
63
    @ResponseBody
64
    RepositoryInterface getRepositoyInterface(String id) throws JSONException;
65

  
66
    @RequestMapping(value = "/addRepository", method = RequestMethod.POST,
67
            consumes = MediaType.APPLICATION_JSON_VALUE)
68
    @ResponseBody
69
    String addRepository(Repository repository) throws JSONException;
70

  
71
    @RequestMapping(value = "/addInterface", method = RequestMethod.POST,
72
            consumes = MediaType.APPLICATION_JSON_VALUE)
73
    @ResponseBody
74
    String addRepositoryInterface(RepositoryInterface repositoryInterface) throws JSONException;
75

  
76
    @RequestMapping(value = "/getDnetCountries", method = RequestMethod.GET,
77
            produces = MediaType.APPLICATION_JSON_VALUE)
78
    @ResponseBody
79
    List<String> getDnetCountries();
80

  
81
    @RequestMapping(value = "/getTypologies", method = RequestMethod.GET,
82
            produces = MediaType.APPLICATION_JSON_VALUE)
83
    @ResponseBody
84
    List<String> getTypologies();
85

  
86
    @RequestMapping(value = "/getTimezones", method = RequestMethod.GET,
87
            produces = MediaType.APPLICATION_JSON_VALUE)
88
    @ResponseBody
89
    List<Timezone> getTimezones();
90

  
91
    @RequestMapping(value = "/updateManagedStatus", method = RequestMethod.POST,
92
            produces = MediaType.APPLICATION_JSON_VALUE)
93
    @ResponseBody
94
    String updateManagedStatus(String id,String managed);
95

  
96
    @RequestMapping(value = "/updateEnglishName", method = RequestMethod.POST,
97
            produces = MediaType.APPLICATION_JSON_VALUE)
98
    @ResponseBody
99
    String updateEnglishName(String id,String englishName);
100

  
101
    @RequestMapping(value = "/updateLatitude", method = RequestMethod.POST,
102
            produces = MediaType.APPLICATION_JSON_VALUE)
103
    @ResponseBody
104
    String updateLatitude(String id,String latitude);
105

  
106
    @RequestMapping(value = "/updateLongitude", method = RequestMethod.POST,
107
            produces = MediaType.APPLICATION_JSON_VALUE)
108
    @ResponseBody
109
    String updateLongitude(String id,String longitude);
110

  
111
    @RequestMapping(value = "/updateOfficialName", method = RequestMethod.POST,
112
            produces = MediaType.APPLICATION_JSON_VALUE)
113
    @ResponseBody
114
    String updateOfficialName(String id,String officialName);
115

  
116
    @RequestMapping(value = "/getUrlsOfUserRepos/{email}/{page}/{size}/",method = RequestMethod.GET,
117
            produces = MediaType.APPLICATION_JSON_VALUE)
118
    @ResponseBody
119
    List<String> getUrlsOfUserRepos(String user_email,
120
                              String page,
121
                              String size) throws JSONException;
122

  
123
    @RequestMapping(value = "/getDatasourceVocabularies/{mode}",method = RequestMethod.GET,
124
            produces = MediaType.APPLICATION_JSON_VALUE)
125
    @ResponseBody
126
    List<String> getDatasourceVocabularies(String mode);
127

  
128

  
129

  
130

  
131

  
132

  
133

  
134
}
modules/uoa-repository-manager-service/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java
1
package eu.manager.repo.manager.service.controllers;
2

  
3
import eu.dnetlib.domain.enabling.Vocabulary;
4
import eu.manager.repo.manager.shared.Aggregations;
5
import eu.manager.repo.manager.shared.Country;
6
import eu.manager.repo.manager.shared.Timezone;
7
import eu.manager.repo.manager.service.utils.Converter;
8
import eu.dnetlib.domain.data.Repository;
9
import eu.dnetlib.domain.data.RepositoryInterface;
10
import gr.uoa.di.driver.enabling.vocabulary.VocabularyLoader;
11
import org.apache.log4j.Logger;
12
import org.json.JSONArray;
13
import org.json.JSONException;
14
import org.json.JSONObject;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.beans.factory.annotation.Value;
17
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
18
import org.springframework.stereotype.Component;
19
import org.springframework.web.bind.annotation.PathVariable;
20
import org.springframework.web.bind.annotation.RequestBody;
21
import org.springframework.web.bind.annotation.RequestParam;
22
import org.springframework.web.client.RestTemplate;
23
import org.springframework.web.util.UriComponents;
24
import org.springframework.web.util.UriComponentsBuilder;
25

  
26
import javax.annotation.PostConstruct;
27
import java.util.*;
28
import java.util.concurrent.ConcurrentHashMap;
29

  
30

  
31
@Component
32
public class RepositoryApiImpl implements RepositoryApi {
33

  
34
    @Value("${api.baseAddress}")
35
    private String baseAddress;
36

  
37
    private RestTemplate restTemplate = null;
38

  
39
    private final String[] vocabularyNames = {"dnet:countries", "dnet:datasource_typologies", "dnet:compatibilityLevel"};
40

  
41
    private static final Logger LOGGER = Logger.getLogger(RepositoryApiImpl.class);
42

  
43
    @Autowired
44
    private VocabularyLoader vocabularyLoader;
45

  
46
    private Map<String, Vocabulary> vocabularyMap = new ConcurrentHashMap<String, Vocabulary>();
47

  
48

  
49
    @PostConstruct
50
    private void init(){
51
        restTemplate = new RestTemplate();
52
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
53

  
54
        for (String vocName : vocabularyNames) {
55
            vocabularyMap.put(vocName, vocabularyLoader.getVocabulary(vocName, Locale.ENGLISH, Locale.ROOT));
56
        }
57

  
58
    }
59

  
60
    @Override
61
    public Aggregations testAggregations() throws JSONException {
62

  
63
        int page = 1;
64
        int size = 1000;
65

  
66
        UriComponents uriComponents = UriComponentsBuilder
67
                .fromHttpUrl(baseAddress + "/ds/list/")
68
                .path("/{page}/{size}/")
69
                .build().expand(page,size).encode();
70

  
71
        String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
72
        while(!rs.equals("[]")){
73

  
74
            Aggregations aggregations = getFirstNonEmptyAggregation(rs);
75
            if(aggregations != null)
76
                return aggregations;
77

  
78
            LOGGER.debug("Checked " + page*size + " records!");
79

  
80
            page+=1;
81
            uriComponents = UriComponentsBuilder
82
                    .fromHttpUrl(baseAddress + "/ds/list/")
83
                    .path("/{page}/{size}/")
84
                    .build().expand(page,size).encode();
85
            rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
86
        }
87
        
88
        return null;
89
    }
90

  
91
    private Aggregations getFirstNonEmptyAggregation(String rs) throws JSONException {
92

  
93
        JSONArray ids = new JSONArray(rs);
94
        for(int i=0;i<ids.length();i++){
95
            String id = ids.getString(i);
96
            Aggregations aggregations = getRepositoryAggregations(id);
97
            if(aggregations.getAggregationHistory() != null)
98
                return aggregations;
99
        }
100
        return null;
101
    }
102

  
103
    @Override
104
    public Country[] getCountries()  {
105
        UriComponents uriComponents = UriComponentsBuilder
106
                .fromHttpUrl(baseAddress + "/ds/countries")
107
                .build().encode();
108
        return restTemplate.getForObject(uriComponents.toUri(),Country[].class);
109
    }
110

  
111

  
112
    @Override
113
    public Set<String> getRepositoriesByCountry(@PathVariable("country") String country) throws JSONException {
114

  
115

  
116
        int page = 1;
117
        int size = 10;
118
        String mode = "openaire____::opendoar";
119

  
120
        UriComponents uriComponents = UriComponentsBuilder
121
                                            .fromHttpUrl(baseAddress + "/ds/search/country/")
122
                                            .path("/{page}/{size}/")
123
                                            .queryParam("country",country)
124
                                            .build().expand(page,size).encode();
125

  
126
        String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
127
        Set<String> resultSet = new HashSet<>();
128
        while(!rs.equals("[]")){
129
            List<Repository> rep = Converter.jsonToRepositoryList(new JSONArray(rs));
130

  
131
            Collection<String> repos = this.getRepositoriesByMode(mode,rep);
132
            this.addRepos(resultSet,repos);
133
            
134
            page+=1;
135
            uriComponents = UriComponentsBuilder
136
                    .fromHttpUrl(baseAddress + "/ds/search/country/")
137
                    .path("/{page}/{size}/")
138
                    .queryParam("country",country)
139
                    .build().expand(page,size).encode();
140
            rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
141
        }
142

  
143
        return resultSet;
144
    }
145

  
146
    private void addRepos(Set<String> resultSet, Collection<String> repos) {
147
        for(String s : repos)
148
            if(!resultSet.contains(s))
149
                resultSet.add(s);
150
    }
151

  
152
    private Collection<String> getRepositoriesByMode(String mode, List<Repository> rs) {
153

  
154
        List<String> reps = new ArrayList<>();
155

  
156
        for(Repository r : rs)
157
            if(r.getCollectedFrom().equals(mode))
158
                reps.add(r.getOfficialName());
159

  
160
        return reps;
161
    }
162

  
163
    @Override
164
    public List<Repository> getRepositoriesOfUser(@PathVariable("userEmail") String userEmail,
165
                                                  @PathVariable("page") String page,
166
                                                  @PathVariable("size") String size) throws JSONException {
167

  
168
        UriComponents uriComponents = UriComponentsBuilder
169
                .fromHttpUrl(baseAddress + "/ds/search/email/")
170
                .path("/{page}/{size}/")
171
                .queryParam("contactemail",userEmail)
172
                .build().expand(page,size).encode();
173

  
174
        String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
175
        return Converter.jsonToRepositoryList(new JSONArray(rs));
176
    }
177

  
178
    @Override
179
    public Repository getRepositoryById(@PathVariable("id") String id) throws JSONException {
180

  
181
        UriComponents uriComponents = UriComponentsBuilder
182
                .fromHttpUrl(baseAddress + "/ds/get/")
183
                .path("/{id}/")
184
                .build().expand(id).encode();
185

  
186
        String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
187
        return  Converter.jsonToRepositoryObject(new JSONObject(rs));
188
    }
189

  
190
    @Override
191
    public Aggregations getRepositoryAggregations(@PathVariable("id") String id) throws JSONException {
192

  
193
        UriComponents uriComponents = UriComponentsBuilder
194
                .fromHttpUrl(baseAddress + "/ds/get/")
195
                .path("/{id}/")
196
                .build().expand(id).encode();
197

  
198
        String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
199
        JSONObject repository = new JSONObject(rs);
200

  
201
        Aggregations aggregations = new Aggregations();
202
        
203
        aggregations.setAggregationHistory(Converter.getAggregationHistoryFromJson(repository));
204
        aggregations.setLastCollection(Converter.getLastCollectionFromJson(repository));
205
        aggregations.setLastTransformation(Converter.getLastTransformationFromJson(repository));
206
        return aggregations;
207
    }
208

  
209
    @Override
210
    public List<Repository> getRepositoriesByName(@PathVariable("name") String name,
211
                                                  @PathVariable("page") String page,
212
                                                  @PathVariable("size") String size) throws JSONException {
213
        UriComponents uriComponents = UriComponentsBuilder
214
                .fromHttpUrl(baseAddress + "/ds/search/name/")
215
                .path("/{page}/{size}")
216
                .queryParam("name",name)
217
                .build().expand(page,size).encode();
218

  
219
        String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
220
        return Converter.jsonToRepositoryList(new JSONArray(rs));
221
    }
222

  
223
    @Override
224
    public RepositoryInterface getRepositoyInterface(@PathVariable("id") String id) throws JSONException {
225

  
226
        UriComponents uriComponents = UriComponentsBuilder
227
                .fromHttpUrl(baseAddress + "/ds/service/")
228
                .path("/{id}/")
229
                .build().expand(id).encode();
230

  
231
        String rs = restTemplate.getForObject(uriComponents.toUri(),String.class);
232
        return  Converter.jsonToRepositoryInterfaceObject(new JSONArray(rs).getJSONObject(0));
233
    }
234

  
235
    @Override
236
    public String addRepository(@RequestBody Repository repository) throws JSONException {
237
        UriComponents uriComponents = UriComponentsBuilder
238
                .fromHttpUrl(baseAddress + "/ds/add/")
239
                .build()
240
                .encode();
241
        return restTemplate.postForObject(uriComponents.toUri(),Converter.repositoryObjectToJson(repository),String.class);
242
    }
243

  
244
    @Override
245
    public String addRepositoryInterface(RepositoryInterface repositoryInterface) throws JSONException {
246
        UriComponents uriComponents = UriComponentsBuilder
247
                .fromHttpUrl(baseAddress + "/ds/service/add/")
248
                .build()
249
                .encode();
250
        return restTemplate.postForObject(uriComponents.toUri(), Converter.repositoryInterfaceObjectToJson(repositoryInterface),String.class);
251
    }
252

  
253
    @Override
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff