Project

General

Profile

1
package eu.dnetlib.uoaadmintoolslibrary.controllers;
2

    
3
import org.apache.log4j.Logger;
4
import org.springframework.beans.factory.annotation.Autowired;
5
import org.springframework.web.bind.annotation.*;
6

    
7
import java.util.*;
8

    
9
import eu.dnetlib.uoaadmintoolslibrary.dao.DivIdDAO;
10
import eu.dnetlib.uoaadmintoolslibrary.dao.PageDAO;
11
import eu.dnetlib.uoaadmintoolslibrary.entities.Community;
12
import eu.dnetlib.uoaadmintoolslibrary.entities.DivId;
13
import eu.dnetlib.uoaadmintoolslibrary.entities.Page;
14
import eu.dnetlib.uoaadmintoolslibrary.entities.fullEntities.DivHelpContentResponse;
15
import eu.dnetlib.uoaadmintoolslibrary.entities.fullEntities.DivIdResponse;
16

    
17
@RestController
18
@CrossOrigin(origins = "*")
19
public class DivIdController {
20
    private final Logger log = Logger.getLogger(this.getClass());
21

    
22
    @Autowired
23
    private DivIdDAO divIdDAO;
24

    
25
    @Autowired
26
    private PageDAO pageDAO;
27

    
28
    @Autowired
29
    private CommunityController communityController;
30

    
31
    @Autowired
32
    private DivHelpContentController divHelpContentController;
33

    
34
    DivIdController() {}
35

    
36
    @RequestMapping(value = "/div", method = RequestMethod.GET)
37
    public List<DivId> getDivIds(@RequestParam(required = false) String page,
38
                                 @RequestParam(required = false) String name,
39
                                 @RequestParam(value = "communityId", required = false) String pid) {
40
        List<DivId> divIds = null;
41

    
42
        if(page != null && name != null) {
43
            DivId divId = divIdDAO.findByPagesContainingAndName(page, name);
44
            if(divId != null) {
45
                divIds = new ArrayList<>();
46
                divIds.add(divId);
47
            }
48
        } else if(page != null) {
49
            divIds = divIdDAO.findByPagesContaining(page);
50
        } else if(name != null) {
51
            DivId divId = divIdDAO.findByName(name);
52
            if(divId != null) {
53
                divIds = new ArrayList<>();
54
                divIds.add(divId);
55
            }
56
        } else {
57
            divIds = divIdDAO.findAll();
58
        }
59

    
60
        if(pid != null) {
61
            Iterator<DivId> iteratorDivIds = divIds.iterator();
62
            while(iteratorDivIds.hasNext()) {
63
                DivId divId = iteratorDivIds.next();
64
                if (pid.equals("openaire") && !divId.getOpenaire()) {
65
                    iteratorDivIds.remove();
66
                } else if (pid.equals("connect") && !divId.getConnect()) {
67
                    iteratorDivIds.remove();
68
                } else if(!pid.equals("openaire") && !pid.equals("connect") && !divId.getCommunities()){
69
                    iteratorDivIds.remove();
70
                }
71
            }
72
        }
73

    
74
        return divIds;
75
    }
76

    
77
    @RequestMapping(value = "/divFull", method = RequestMethod.GET)
78
    public List<DivIdResponse> getDivIdsFull(@RequestParam(required = false) String page,
79
                                             @RequestParam(required = false) String name,
80
                                             @RequestParam(value="communityId", required = false) String pid) {
81

    
82
        List<DivId> divIds = this.getDivIds(page, name, pid);
83

    
84
        List<DivIdResponse> divIdResponses = new ArrayList<>();
85
        for(DivId divId : divIds) {
86
            DivIdResponse divIdResponse = new DivIdResponse(divId);
87
            List<Page> pages = new ArrayList<>();
88
            for(String pageId : divId.getPages()) {
89
                pages.add(pageDAO.findById(pageId));
90
            }
91
            divIdResponse.setPages(pages);
92

    
93
            divIdResponses.add(divIdResponse);
94
        }
95

    
96
        return divIdResponses;
97
    }
98

    
99
    @RequestMapping(value = "/div/{id}", method = RequestMethod.GET)
100
    public DivId getDivId(@PathVariable(value = "id") String id) {
101
        return divIdDAO.findById(id);
102
    }
103

    
104
    @RequestMapping(value = "/divFull/{id}", method = RequestMethod.GET)
105
    public DivIdResponse getDivIdFull(@PathVariable(value = "id") String id) {
106
        DivId divId = divIdDAO.findById(id);
107
        return divIdResponseFromDivId(divId);
108
    }
109

    
110
    public DivIdResponse divIdResponseFromDivId(DivId divId) {
111
        DivIdResponse divIdResponse = new DivIdResponse(divId);
112
        List<Page> pages = new ArrayList<>();
113
        for(String pageId : divId.getPages()) {
114
            pages.add(pageDAO.findById(pageId));
115
        }
116
        divIdResponse.setPages(pages);
117
        return divIdResponse;
118
    }
119

    
120
    @RequestMapping(value = "/div", method = RequestMethod.DELETE)
121
    public void deleteAllDivIds() {
122
        divIdDAO.deleteAll();
123
    }
124

    
125
    @RequestMapping(value = "/div/save", method = RequestMethod.POST)
126
    public DivIdResponse insertDivId(@RequestBody DivIdResponse divIdResponse) {
127
        DivId divId = this.getDivIdByDivIdResponse(divIdResponse);
128

    
129
        DivId savedDivId = divIdDAO.save(divId);
130
        divIdResponse.setId(savedDivId.getId());
131

    
132
        return this.getDivIdFull(divId.getId());
133
    }
134

    
135
    private DivId getDivIdByDivIdResponse(DivIdResponse divIdResponse) {
136
        DivId divId = new DivId();
137
        divId.setId(divIdResponse.getId());
138
        divId.setName(divIdResponse.getName());
139
        divId.setOpenaire(divIdResponse.getOpenaire());
140
        divId.setConnect(divIdResponse.getConnect());
141
        divId.setCommunities(divIdResponse.getCommunities());
142

    
143
        List<Page> fullPages = divIdResponse.getPages();
144
        List<String> pages = new ArrayList<String>();
145
        for(Page page : fullPages) {
146
            pages.add(page.getId());
147
        }
148
        divId.setPages(pages);
149

    
150
        return divId;
151
    }
152

    
153
    @RequestMapping(value = "/div/update", method = RequestMethod.POST)
154
    public DivIdResponse updateDivId(@RequestBody DivIdResponse divIdResponse) {
155
        /*
156
        DivId divId = divIdDAO.findById(_divId.getId());
157
        divId.setName(_divId.getName());
158
        divId.setPages(_divId.getPages());
159
        divIdDAO.save(divId);
160
        return this.getDivIdFull(divId.getId());
161
        */
162
        DivId divIdOld = divIdDAO.findById(divIdResponse.getId());
163
        DivId divId = this.getDivIdByDivIdResponse(divIdResponse);
164
        divIdDAO.save(divId);
165

    
166
        boolean openaireEnabled = divId.getOpenaire();
167
        boolean connectEnabled = divId.getConnect();
168

    
169
        if(divId.getCommunities() && !divIdOld.getCommunities()) {
170
            List<Community> communities = communityController.getAllCommunities();
171
            for( Community community : communities ) {
172
                if(!community.getPid().equals("openaire") && !community.getPid().equals("connect")) {
173
                    divHelpContentController.addDivHelpContentsInCommunity(community.getPid(), community.getId(), divId.getName());
174
                }
175
            }
176
        }
177
        if(openaireEnabled && !divIdOld.getOpenaire()) {
178
            Community community = communityController.getCommunity("openaire");
179
            divHelpContentController.addDivHelpContentsInCommunity(community.getPid(), community.getId(), divId.getName());
180
        }
181

    
182
        if(connectEnabled && !divIdOld.getConnect()) {
183
            Community community = communityController.getCommunity("connect");
184
            divHelpContentController.addDivHelpContentsInCommunity(community.getPid(), community.getId(), divId.getName());
185
        }
186

    
187
        if(!divId.getCommunities()) {
188
            List<Community> communities = communityController.getAllCommunities();
189
            for( Community community : communities ) {
190
                if(!community.getPid().equals("openaire") && !community.getPid().equals("connect")) {
191
                    // delete div contents related to this divId
192
                    List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents(community.getPid(), null, divId.getName(), null);
193
                    for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
194
                        divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
195
                    }
196
                }
197
            }
198
        }
199

    
200
        if(!openaireEnabled) {
201
            Community community = communityController.getCommunity("openaire");
202

    
203
            // delete div contents related to this divId
204
            List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents("openaire", null, divId.getName(), null);
205
            for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
206
                divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
207
            }
208
        }
209

    
210
        if(!connectEnabled) {
211
            Community community = communityController.getCommunity("connect");
212

    
213
            // delete div contents related to this divId
214
            List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents("connect", null, divId.getName(), null);
215
            for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
216
                divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
217
            }
218
        }
219

    
220
        return divIdResponse;
221
    }
222

    
223
    @RequestMapping(value = "/div/delete", method = RequestMethod.POST)
224
    public Boolean deleteDivIds(@RequestBody List<String> divIds) throws Exception {
225
        for (String id: divIds) {
226
            DivId divId = divIdDAO.findById(id);
227

    
228
            // delete div contents related to this divId
229
            List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents(null, null, divId.getName(), null);
230
            for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
231
                divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
232
            }
233

    
234
            divIdDAO.delete(id);
235
        }
236
        return true;
237
    }
238

    
239
    @RequestMapping(value = "/div/{id}", method = RequestMethod.DELETE)
240
    public void deleteDivId(@PathVariable(value = "id") String id) {
241
        divIdDAO.delete(id);
242
    }
243

    
244
    @RequestMapping(value = "/div/pages", method = RequestMethod.GET)
245
    public Set<String> getDivIdsPages(@RequestParam(value="communityId", required = false) String pid) {
246
        List<DivId> divIds = null;
247
        Set<String> hasCommunityPageDivIds = new HashSet<>();
248

    
249
        if(pid != null) {
250
            if(pid.equals("openaire")) {
251
                divIds = divIdDAO.findByOpenaire(true);
252
            } else if(pid.equals("connect")) {
253
                divIds = divIdDAO.findByConnect(true);
254
            } else {
255
                divIds = divIdDAO.findByCommunities(true);
256
            }
257
        } else {
258
            divIds = divIdDAO.findAll();
259
        }
260

    
261
        for(DivId divId : divIds) {
262
            for(String pageId : divId.getPages()) {
263
                hasCommunityPageDivIds.add(pageId);
264
            }
265
        }
266
        return hasCommunityPageDivIds;
267
    }
268

    
269
}
(3-3/6)