Project

General

Profile

1
package eu.dnetlib.openaire.exporter.datasource;
2

    
3
import java.util.List;
4

    
5
import eu.dnetlib.common.rmi.DNetRestDocumentation;
6

    
7
import eu.dnetlib.openaire.exporter.AbstractExporterController;
8
import eu.dnetlib.openaire.exporter.datasource.clients.ClientResponse;
9
import eu.dnetlib.openaire.exporter.datasource.clients.DatasourceDao;
10
import eu.dnetlib.openaire.exporter.model.datasource.BrowseTerm;
11
import eu.dnetlib.openaire.exporter.model.datasource.DatasourceResponse;
12
import eu.dnetlib.openaire.exporter.model.datasource.db.Api;
13
import eu.dnetlib.openaire.exporter.model.datasource.db.Datasource;
14
import eu.dnetlib.openaire.exporter.model.datasource.db.SearchInterfacesEntry;
15
import org.apache.commons.lang.StringUtils;
16
import org.apache.commons.logging.Log;
17
import org.apache.commons.logging.LogFactory;
18
import org.apache.http.HttpStatus;
19
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.data.domain.PageRequest;
21
import org.springframework.web.bind.annotation.*;
22

    
23
@RestController
24
@DNetRestDocumentation
25
public class DatasourcesApiController extends AbstractExporterController implements DatasourcesApi {
26

    
27
	private static final Log log = LogFactory.getLog(DatasourcesApiController.class);
28

    
29
	@Autowired
30
	private DatasourceDao dsDao;
31

    
32
	@Override
33
	@RequestMapping(value = "/ds/list/{page}/{size}", produces = { "application/json" }, method = RequestMethod.GET)
34
    public List<String> listIds(@PathVariable int page, @PathVariable int size) throws ApiException {
35
	    return dsDao.listIds(new PageRequest(page, size));
36
    }
37

    
38
    @Override
39
    @RequestMapping(value = "/ds/get/{id}", produces = { "application/json" }, method = RequestMethod.GET)
40
    public DatasourceResponse getDs(@PathVariable final String id) {
41

    
42
	    if (log.isDebugEnabled()) {
43
		    log.debug(String.format("getDatasourceInfo(dsId = %s)", id));
44
	    }
45

    
46
	    final ClientResponse clientResponse = dsDao.getDsById(id);
47
    	return clientResponse.getDatasourceResponse();
48
    }
49

    
50
	@Override
51
	@RequestMapping(value = "/ds/search/name/{page}/{size}", produces = { "application/json" }, method = RequestMethod.GET)
52
	public List<DatasourceResponse> searchByName(
53
			@RequestParam final String name, @PathVariable final int page, @PathVariable final int size) {
54
		return dsDao.searchByName(name, new PageRequest(page, size));
55
	}
56

    
57
	@Override
58
	@RequestMapping(value = "/ds/search/email/{page}/{size}", produces = { "application/json" }, method = RequestMethod.GET)
59
	public List<DatasourceResponse> searchByContactemail(
60
			@RequestParam final String contactemail, @PathVariable final int page, @PathVariable final int size) {
61
		return dsDao.searchByContactemail(contactemail, new PageRequest(page, size));
62
	}
63

    
64
	@Override
65
	@RequestMapping(value = "/ds/search/country/{page}/{size}", produces = { "application/json" }, method = RequestMethod.GET)
66
	public List<DatasourceResponse> searchByCountry(
67
			@RequestParam final String country, @PathVariable final int page, @PathVariable final int size) {
68
		return dsDao.searchByCountry(country, new PageRequest(page, size));
69
	}
70

    
71
	@Override
72
	@RequestMapping(value = "/api/search/{field}", produces = { "application/json" }, method = RequestMethod.GET)
73
	public List<SearchInterfacesEntry> searchInterface(@PathVariable final String field, @RequestParam final String value) {
74
		return dsDao.searchInterface(field, value);
75
	}
76

    
77
	@Override
78
	@RequestMapping(value = "/api/browse/{field}", produces = { "application/json" }, method = RequestMethod.GET)
79
	public List<? extends BrowseTerm> browseField(@PathVariable final String field) throws ApiException {
80
		switch (field) {
81
		case "country":
82
			return dsDao.browseCountries();
83
		case "typology":
84
			return dsDao.browseTypologies();
85
		case "protocol":
86
			return dsDao.browseProtocols();
87
		case "compatibility":
88
			return dsDao.browseCompatibility();
89
		case "activation":
90
			return dsDao.browseActivation();
91
		default:
92
			throw new ApiException(HttpStatus.SC_BAD_REQUEST, String.format("unsupported browse field '%s'", field));
93
		}
94
	}
95

    
96
	@Override
97
	@RequestMapping(value = "/ds/api/{dsId}", produces = { "application/json" }, method = RequestMethod.GET)
98
	public List<Api> getApi(@PathVariable final String dsId) throws ApiException {
99
		return dsDao.getApi(dsId);
100
	}
101

    
102
	@Override
103
	@RequestMapping(value = "/ds/api/{dsId}", method = RequestMethod.DELETE)
104
	public void deleteApi(@PathVariable final String apiId) throws ApiException {
105
		dsDao.deleteApi(apiId);
106
	}
107

    
108
	@Override
109
	@RequestMapping(value = "/ds/api/add", method = RequestMethod.POST)
110
	public void addApi(@RequestParam final Api api) throws ApiException {
111
		if (StringUtils.isBlank(api.getDatasource())) {
112
			throw new ApiException(HttpStatus.SC_BAD_REQUEST, "missing datasource id");
113
		}
114
		dsDao.addApi(api);
115
	}
116

    
117
	@Override
118
	@RequestMapping(value = "/ds/manage", method = RequestMethod.POST)
119
	public void setManaged(@RequestParam final String id, @RequestParam final boolean managed) {
120
		dsDao.setManaged(id, managed);
121
	}
122

    
123
	@Override
124
	@RequestMapping(value = "/ds/add", method = RequestMethod.POST)
125
	public void saveDatasource(@RequestBody final Datasource datasource) throws ApiException {
126
		if (dsDao.exist(datasource)) { //TODO further check that the DS doesn't have any API
127
			throw new ApiException(HttpStatus.SC_CONFLICT, String.format("cannot already defined '%s'", datasource.getId()));
128
		}
129
		dsDao.save(datasource);
130
	}
131

    
132
	@Override
133
	@RequestMapping(value = "/ds/update/officialname", method = RequestMethod.POST)
134
	public void updateOfficialname(@RequestParam final String dsId, @RequestParam final String officialname) throws ApiException {
135
		dsDao.updateOfficialName(dsId, officialname);
136
	}
137

    
138
	@Override
139
	@RequestMapping(value = "/ds/update/englishname", method = RequestMethod.POST)
140
	public void updateEnglishname(@RequestParam final String dsId, @RequestParam final String englishname) throws ApiException {
141
		dsDao.updateEnglishName(dsId, englishname);
142
	}
143

    
144
	@Override
145
	@RequestMapping(value = "/ds/update/latitude", method = RequestMethod.POST)
146
	public void updateLatitude(final String dsId, final Double latitude) throws ApiException {
147
		dsDao.updateLatitude(dsId, latitude);
148
	}
149

    
150
	@Override
151
	@RequestMapping(value = "/ds/update/longitude", method = RequestMethod.POST)
152
	public void updateLongitude(final String dsId, final Double longitude) throws ApiException {
153
		dsDao.updateLongitude(dsId, longitude);
154
	}
155

    
156
}
(3-3/4)