Project

General

Profile

1
package eu.dnetlib.uoaadmintools.controllers;
2

    
3
import eu.dnetlib.uoaadmintools.dao.CommunityDAO;
4
import eu.dnetlib.uoaadmintools.dao.DivIdDAO;
5
import eu.dnetlib.uoaadmintools.dao.MongoDBCommunityDAO;
6
import eu.dnetlib.uoaadmintools.dao.PageDAO;
7
import eu.dnetlib.uoaadmintools.entities.*;
8
import org.apache.log4j.Logger;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.web.bind.annotation.*;
11

    
12
import java.util.*;
13

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

    
19
    @Autowired
20
    private DivIdDAO divIdDAO;
21

    
22
    @Autowired
23
    private PageDAO pageDAO;
24

    
25
    @Autowired
26
    private CommunityController communityController;
27

    
28
    @Autowired
29
    private DivHelpContentController divHelpContentController;
30

    
31
    DivIdController() {}
32

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

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

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

    
71
        return divIds;
72
    }
73

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

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

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

    
90
            divIdResponses.add(divIdResponse);
91
        }
92

    
93
        return divIdResponses;
94
    }
95

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

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

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

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

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

    
126
        DivId savedDivId = divIdDAO.save(divId);
127
        divIdResponse.setId(savedDivId.getId());
128

    
129
        return this.getDivIdFull(divId.getId());
130
    }
131

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

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

    
147
        return divId;
148
    }
149

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

    
163
        boolean openaireEnabled = divId.getOpenaire();
164
        boolean connectEnabled = divId.getConnect();
165

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

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

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

    
197
        if(!openaireEnabled) {
198
            Community community = communityController.getCommunity("openaire");
199

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

    
207
        if(!connectEnabled) {
208
            Community community = communityController.getCommunity("connect");
209

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

    
217
        return divIdResponse;
218
    }
219

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

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

    
231
            divIdDAO.delete(id);
232
        }
233
        return true;
234
    }
235

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

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

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

    
258
        for(DivId divId : divIds) {
259
            for(String pageId : divId.getPages()) {
260
                hasCommunityPageDivIds.add(pageId);
261
            }
262
        }
263
        return hasCommunityPageDivIds;
264
    }
265

    
266
}
(5-5/16)