Project

General

Profile

1
package eu.dnetlib.organizations.controller;
2

    
3
import java.util.Arrays;
4
import java.util.List;
5
import java.util.UUID;
6

    
7
import org.apache.commons.codec.digest.DigestUtils;
8
import org.apache.commons.lang3.StringUtils;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.data.domain.Page;
11
import org.springframework.data.domain.PageRequest;
12
import org.springframework.web.bind.annotation.PathVariable;
13
import org.springframework.web.bind.annotation.RequestBody;
14
import org.springframework.web.bind.annotation.RequestMapping;
15
import org.springframework.web.bind.annotation.RequestMethod;
16
import org.springframework.web.bind.annotation.RequestParam;
17
import org.springframework.web.bind.annotation.RestController;
18

    
19
import eu.dnetlib.organizations.model.Acronym;
20
import eu.dnetlib.organizations.model.OpenaireSimRel;
21
import eu.dnetlib.organizations.model.Organization;
22
import eu.dnetlib.organizations.model.OtherIdentifier;
23
import eu.dnetlib.organizations.model.OtherName;
24
import eu.dnetlib.organizations.model.Type;
25
import eu.dnetlib.organizations.model.Url;
26
import eu.dnetlib.organizations.model.utils.BrowseEntry;
27
import eu.dnetlib.organizations.model.utils.RelationByOrg;
28
import eu.dnetlib.organizations.model.view.OrganizationSimpleView;
29
import eu.dnetlib.organizations.model.view.OrganizationView;
30
import eu.dnetlib.organizations.repository.AcronymRepository;
31
import eu.dnetlib.organizations.repository.OpenaireSimRelRepository;
32
import eu.dnetlib.organizations.repository.OrganizationRepository;
33
import eu.dnetlib.organizations.repository.OtherIdentifierRepository;
34
import eu.dnetlib.organizations.repository.OtherNameRepository;
35
import eu.dnetlib.organizations.repository.TypeRepository;
36
import eu.dnetlib.organizations.repository.UrlRepository;
37
import eu.dnetlib.organizations.repository.readonly.OrganizationSimpleViewRepository;
38
import eu.dnetlib.organizations.repository.readonly.OrganizationViewRepository;
39

    
40
@RestController
41
@RequestMapping("/api/organizations")
42
public class OrganizationController {
43

    
44
	@Autowired
45
	private OrganizationViewRepository organizationViewRepository;
46
	@Autowired
47
	private OrganizationSimpleViewRepository organizationSimpleViewRepository;
48
	@Autowired
49
	private OpenaireSimRelRepository openaireSimRelRepository;
50

    
51
	@Autowired
52
	private AcronymRepository acronymRepository;
53
	@Autowired
54
	private OrganizationRepository organizationRepository;
55
	@Autowired
56
	private OtherIdentifierRepository otherIdentifierRepository;
57
	@Autowired
58
	private OtherNameRepository otherNameRepository;
59
	@Autowired
60
	private TypeRepository typeRepository;
61
	@Autowired
62
	private UrlRepository urlRepository;
63

    
64
	@RequestMapping(value = "/save", method = RequestMethod.POST)
65
	public List<String> save(@RequestBody final OrganizationView org) {
66
		final String orgId = insertOrUpdateOrganization(org, StringUtils.isNotBlank(org.getId()));
67
		return Arrays.asList(orgId);
68
	}
69

    
70
	private String insertOrUpdateOrganization(final OrganizationView org, final boolean update) {
71

    
72
		final String orgId = update ? org.getId() : "openorgs____::" + DigestUtils.md5Hex(UUID.randomUUID().toString());
73

    
74
		if (update) {
75
			acronymRepository.deleteByOrgId(orgId);
76
			otherNameRepository.deleteByOrgId(orgId);
77
			otherIdentifierRepository.deleteByOrgId(orgId);
78
			typeRepository.deleteByOrgId(orgId);
79
			urlRepository.deleteByOrgId(orgId);
80
		}
81

    
82
		organizationRepository.save(new Organization(orgId, org.getName(), org.getLat(), org.getLng(), org.getCity(), org.getCountry()));
83
		org.getAcronyms().forEach(s -> acronymRepository.save(new Acronym(orgId, s)));
84
		org.getOtherNames().forEach(n -> otherNameRepository.save(new OtherName(orgId, n.getName(), n.getLang())));
85
		org.getOtherIdentifiers().forEach(id -> otherIdentifierRepository.save(new OtherIdentifier(orgId, id.getId(), id.getType())));
86
		org.getTypes().forEach(t -> typeRepository.save(new Type(orgId, t)));
87
		org.getUrls().forEach(u -> urlRepository.save(new Url(orgId, u)));
88

    
89
		if (update) {
90
			// SET LAST MODIFICATION DATE AND USER
91
		} else {
92
			// SET LAST CREATION AND MODIFICATION 5DATE AND USER
93
		}
94

    
95
		return orgId;
96
	}
97

    
98
	@RequestMapping(value = "/get", method = RequestMethod.GET)
99
	public OrganizationView findById(@RequestParam final String id) {
100
		return organizationViewRepository.findById(id).get();
101
	}
102

    
103
	@RequestMapping(value = "/relations", method = RequestMethod.GET)
104
	public List<RelationByOrg> findRelationsById(@RequestParam final String id) {
105
		return organizationViewRepository.findRelations(id);
106
	}
107

    
108
	@RequestMapping(value = "/similarities", method = RequestMethod.GET)
109
	public List<OpenaireSimRel> findSimilaritiesById(@RequestParam final String id) {
110
		return openaireSimRelRepository.findByLocalId(id);
111
	}
112

    
113
	@RequestMapping(value = "/search/{page}/{size}", method = RequestMethod.GET)
114
	public Page<OrganizationSimpleView> search(@PathVariable final int page, @PathVariable final int size, @RequestParam final String q) {
115
		return organizationSimpleViewRepository.findByNameContainingIgnoreCase(q, PageRequest.of(page, size));
116
	}
117

    
118
	@RequestMapping(value = "/byCountry/{code}/{page}/{size}", method = RequestMethod.GET)
119
	public Page<OrganizationSimpleView> findByCountry(@PathVariable final String code, @PathVariable final int page, @PathVariable final int size) {
120
		return organizationSimpleViewRepository.findByCountry(code, PageRequest.of(page, size));
121
	}
122

    
123
	@RequestMapping(value = "/byType/{type}/{page}/{size}", method = RequestMethod.GET)
124
	public Page<OrganizationSimpleView> findByType(@PathVariable final String type, @PathVariable final int page, @PathVariable final int size) {
125
		return organizationSimpleViewRepository.findByType(type, PageRequest.of(page, size));
126
	}
127

    
128
	@RequestMapping(value = "/browse/countries", method = RequestMethod.GET)
129
	public List<BrowseEntry> browseCountries() {
130
		return organizationSimpleViewRepository.browseCountries();
131
	}
132

    
133
	@RequestMapping(value = "/browse/types", method = RequestMethod.GET)
134
	public List<BrowseEntry> browseOrganizationTypes() {
135
		return organizationSimpleViewRepository.browseTypes();
136
	}
137
}
(1-1/3)