Project

General

Profile

1 50222 konstantin
package eu.dnetlib.uoaadmintools.controllers;
2
3 50612 konstantin
import eu.dnetlib.uoaadmintools.dao.DivIdDAO;
4 50222 konstantin
import eu.dnetlib.uoaadmintools.dao.EntityDAO;
5
import eu.dnetlib.uoaadmintools.dao.PageDAO;
6
import eu.dnetlib.uoaadmintools.entities.*;
7
import eu.dnetlib.uoaadmintools.dao.CommunityDAO;
8
9
import org.apache.log4j.Logger;
10
import org.springframework.web.bind.annotation.*;
11
import org.springframework.beans.factory.annotation.Autowired;
12
13
import java.util.*;
14
15
@RestController
16
@CrossOrigin(origins = "*")
17
public class CommunityController {
18
    private final Logger log = Logger.getLogger(this.getClass());
19
20
    @Autowired
21
    private CommunityDAO communityDAO;
22
23
    @Autowired
24
    private PageDAO pageDAO;
25
26
    @Autowired
27
    private EntityDAO entityDAO;
28
29 50612 konstantin
    @Autowired
30
    private DivIdDAO divIdDAO;
31
32
    @Autowired
33
    private PageHelpContentController pageHelpContentController;
34
35
    @Autowired
36
    private DivHelpContentController divHelpContentController;
37
38
    @Autowired
39
    private DivIdController divIdController;
40
41 50222 konstantin
    @RequestMapping(value = "/community", method = RequestMethod.GET)
42 50612 konstantin
    public List<Community> getAllCommunities(@RequestParam(value="div", required = false) String div) {
43
        List<Community> communities = communityDAO.findAll();
44
        Iterator it = communities.iterator();
45
        while(it.hasNext()) {
46
            Community community = (Community)it.next();
47
            if(div != null && div.equals("true")) {
48
                List<DivId> divIds = divIdDAO.findByCommunity(community.getId());
49
                if(divIds.isEmpty()) {
50
                    it.remove();
51
                }
52
            }
53
        }
54
        return communities;
55 50222 konstantin
    }
56
57
    @RequestMapping(value = "/communityFull", method = RequestMethod.GET)
58
    public List<CommunityResponse> getAllCommunitiesFull() {
59
        List<Community> communities = communityDAO.findAll();
60
        List<CommunityResponse> communitiesResponse = new ArrayList<>();
61
        for(Community community : communities) {
62
            CommunityResponse communityResponse = new CommunityResponse(community);
63
64 50612 konstantin
            List<CommunityPage> pages = this.getPagesForCommunityByType(community.getPid(), null, null, null);
65 50476 konstantin
            log.debug("PAGES number="+pages.size());
66 50222 konstantin
            Iterator<CommunityPage> iteratorPages = pages.iterator();
67
            while(iteratorPages.hasNext()) {
68
                CommunityPage page = iteratorPages.next();
69
                if(!page.getIsEnabled()) {
70
                    iteratorPages.remove();
71
                }
72
            }
73
            communityResponse.setPages(pages);
74 50476 konstantin
            log.debug("PAGES set");
75 50222 konstantin
76 50476 konstantin
            List<CommunityEntity> entities = this.getEntitiesForCommunity(community.getPid(), null);
77
            log.debug("ENTITIES number="+entities.size());
78 50222 konstantin
            Iterator<CommunityEntity> iteratorEntities = entities.iterator();
79
            while(iteratorEntities.hasNext()) {
80
                CommunityEntity entity = iteratorEntities.next();
81
                if(!entity.getIsEnabled()) {
82
                    iteratorEntities.remove();
83
                }
84
            }
85
            communityResponse.setEntities(entities);
86
87
            communitiesResponse.add(communityResponse);
88
        }
89
        return communitiesResponse;
90
    }
91
92 50476 konstantin
    @RequestMapping(value = "/communityFull/{pid}", method = RequestMethod.GET)
93
    public CommunityResponse getCommunityFull(@PathVariable(value = "pid") String pid) {
94
        Community community = communityDAO.findByPid(pid);
95 50222 konstantin
        CommunityResponse communityResponse = new CommunityResponse(community);
96
97 50612 konstantin
        List<CommunityPage> pages = this.getPagesForCommunityByType(community.getPid(), null, null, null);
98 50222 konstantin
        Iterator<CommunityPage> iteratorPages = pages.iterator();
99
        while(iteratorPages.hasNext()) {
100
            CommunityPage page = iteratorPages.next();
101
            if(!page.getIsEnabled()) {
102
                iteratorPages.remove();
103
            }
104
        }
105
        communityResponse.setPages(pages);
106
107 50476 konstantin
        List<CommunityEntity> entities = this.getEntitiesForCommunity(community.getPid(), null);
108 50222 konstantin
        Iterator<CommunityEntity> iteratorEntities = entities.iterator();
109
        while(iteratorEntities.hasNext()) {
110
            CommunityEntity entity = iteratorEntities.next();
111
            if(!entity.getIsEnabled()) {
112
                iteratorEntities.remove();
113
            }
114
        }
115
        communityResponse.setEntities(entities);
116
//        communityResponse.setPages(this.getPagesForCommunityByType(community.getId(), null));
117
//        communityResponse.setEntities(this.getEntitiesForCommunity(community.getId()));
118
119
        return communityResponse;
120
    }
121 50476 konstantin
/*
122 50222 konstantin
123
    @RequestMapping(value = "/communityFullByName/{name}", method = RequestMethod.GET)
124
    public CommunityResponse getCommunityFullByName(@PathVariable(value = "name") String name) {
125
        Community community = communityDAO.findByName(name);
126
        CommunityResponse communityResponse = new CommunityResponse(community);
127
128 50384 konstantin
        List<CommunityPage> pages = this.getPagesForCommunityByType(community.getId(), null, null);
129 50222 konstantin
        Iterator<CommunityPage> iteratorPages = pages.iterator();
130
        while(iteratorPages.hasNext()) {
131
            CommunityPage page = iteratorPages.next();
132
            if(!page.getIsEnabled()) {
133
                iteratorPages.remove();
134
            }
135
        }
136
        communityResponse.setPages(pages);
137
138 50476 konstantin
        List<CommunityEntity> entities = this.getEntitiesForCommunity(community.getId(), null);
139 50222 konstantin
        Iterator<CommunityEntity> iteratorEntities = entities.iterator();
140
        while(iteratorEntities.hasNext()) {
141
            CommunityEntity entity = iteratorEntities.next();
142
            if(!entity.getIsEnabled()) {
143
                iteratorEntities.remove();
144
            }
145
        }
146
        communityResponse.setEntities(entities);
147
148
        return communityResponse;
149
    }
150 50476 konstantin
*/
151 50222 konstantin
152
    @RequestMapping(value = "/community/update", method = RequestMethod.POST)
153
    public CommunityResponse updateCommunity(@RequestBody Community community) {
154
        Community com = communityDAO.findById(community.getId());
155
        com.setName(community.getName());
156 50384 konstantin
        com.setPid(community.getPid());
157 50222 konstantin
        // = this.getCommunityByCommunityResponse(communityResponse);
158
        communityDAO.save(com);
159 50612 konstantin
        CommunityResponse communityResponse = this.getCommunityFull(community.getPid());
160 50384 konstantin
161 50222 konstantin
        return communityResponse;
162
    }
163
164
    @RequestMapping(value = "/community/save", method = RequestMethod.POST)
165
    public CommunityResponse insertCommunity(@RequestBody Community community) {
166
        //Community community = this.getCommunityByCommunityResponse(communityResponse);
167
168
        List<CommunityEntity> communityEntities = new ArrayList<>();
169
        List<CommunityPage> communityPages = new ArrayList<>();
170
        Map<String, Boolean> pages = new HashMap<>();
171
        Map<String, Boolean> entities = new HashMap<>();
172
        for(Entity entity : entityDAO.findAll()) {
173 50249 konstantin
            entities.put(entity.getId(), true);
174 50222 konstantin
175
            CommunityEntity communityEntity = new CommunityEntity(entity);
176 50249 konstantin
            communityEntity.setIsEnabled(true);
177 50222 konstantin
            communityEntities.add(communityEntity);
178
        }
179
        for(Page page : pageDAO.findAll()) {
180 50249 konstantin
            pages.put(page.getId(), true);
181 50222 konstantin
182
            CommunityPage communityPage = new CommunityPage(page);
183 50249 konstantin
            communityPage.setIsEnabled(true);
184 50222 konstantin
185
            communityPages.add(communityPage);
186
        }
187 50612 konstantin
188 50222 konstantin
        community.setEntities(entities);
189 50249 konstantin
        community.setPages(pages);
190 50612 konstantin
191 50222 konstantin
        Community savedCommunity = communityDAO.save(community);
192 50612 konstantin
        CommunityResponse communityResponse = this.getCommunityFull(savedCommunity.getPid());
193 50222 konstantin
194
        return communityResponse;
195
    }
196
197
    private Community getCommunityByCommunityResponse(CommunityResponse communityResponse) {
198
        Community community = new Community();
199
        community.setId(communityResponse.getId());
200
        community.setName(communityResponse.getName());
201
202
        List<CommunityEntity> fullEntities = communityResponse.getEntities();
203
        Map<String, Boolean> entities = new HashMap<String, Boolean>();
204
        for(CommunityEntity entity : fullEntities) {
205
            entities.put(entity.getId(), true);
206
        }
207
        for(Entity entity : entityDAO.findAll()) {
208
            if(!entities.containsKey(entity.getId())) {
209
                entities.put(entity.getId(), false);
210
            }
211
        }
212
        community.setEntities(entities);
213
214
        List<CommunityPage> fullPages = communityResponse.getPages();
215
        Map<String, Boolean> pages = new HashMap<String, Boolean>();
216
        for(CommunityPage page : fullPages) {
217
            pages.put(page.getId(), true);
218
        }
219
        for(Page page : pageDAO.findAll()) {
220
            if(!pages.containsKey(page.getId())) {
221
                pages.put(page.getId(), false);
222
            }
223
        }
224
        community.setPages(pages);
225
226
        return community;
227
    }
228
229
    @RequestMapping(value = "/community/delete", method = RequestMethod.POST)
230
    public Boolean deleteCommunities(@RequestBody List<String> communities) throws Exception {
231
        for (String id: communities) {
232
            communityDAO.delete(id);
233 50612 konstantin
234
            // delete divIds related to this page from all communities
235
            List<DivId> divIds = divIdController.getDivIds(id, null);
236
            for(DivId divId : divIds) {
237
                divIdController.deleteDivId(divId.getId());
238
            }
239
240
            // delete div contents related to this page from all communities
241
            List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents(null, id, null);
242
            for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
243
                divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
244
            }
245
246
            // delete contents related to this community
247
            List<PageHelpContentResponse> pageHelpContentResponses = pageHelpContentController.getPageHelpContents(id, null, null, null, null);
248
            for(PageHelpContentResponse pageHelpContentResponse : pageHelpContentResponses) {
249
                pageHelpContentController.deletePageHelpContent(pageHelpContentResponse.getId());
250
            }
251 50222 konstantin
        }
252
253
        return true;
254
    }
255
256 50612 konstantin
//    @RequestMapping(value = "/community", method = RequestMethod.DELETE)
257
//    public void deleteAllCommunities() {
258
//        communityDAO.deleteAll();
259
//    }
260 50222 konstantin
261
    @RequestMapping(value = "/community", method = RequestMethod.POST)
262
    public Community insertOrUpdateCommunity(@RequestBody Community community) {
263
        return communityDAO.save(community);
264
    }
265
266 50476 konstantin
    @RequestMapping(value = "/community/{pid}", method = RequestMethod.GET)
267
    public Community getCommunity(@PathVariable(value = "pid") String pid) {
268
        log.debug("PID: "+ pid);
269
        return communityDAO.findByPid(pid);
270 50222 konstantin
    }
271
272
    @RequestMapping(value = "/community/{id}", method = RequestMethod.DELETE)
273
    public void deleteCommunity(@PathVariable(value = "id") String id) {
274
        communityDAO.delete(id);
275
    }
276
277 50476 konstantin
    @RequestMapping(value = "/community/{pid}/pages", method = RequestMethod.GET)
278 50612 konstantin
    public List<CommunityPage> getPagesForCommunityByType(@PathVariable(value = "pid") String pid,
279
                                                          @RequestParam(value="page_type", required=false) String page_type,
280
                                                          @RequestParam(value="page_route", required=false) String page_route,
281
                                                          @RequestParam(value="div", required = false) String div) {
282 50222 konstantin
        List<CommunityPage> return_pages = new ArrayList<CommunityPage>();
283 50476 konstantin
        Map<String, Boolean> pages = communityDAO.findByPid(pid).getPages();
284 50222 konstantin
285 50476 konstantin
        if(pages != null) {
286
            for (Map.Entry<String, Boolean> page : pages.entrySet()) {
287 50612 konstantin
                if(div != null && div.equals("true")) {
288
                    Community community = communityDAO.findByPid(pid);
289
                    List<DivId> divIds = divIdDAO.findByCommunityAndPage(community.getId(), page.getKey());
290
                    if(divIds.isEmpty()) {
291
                        continue;
292
                    }
293
                }
294
295 50476 konstantin
                Page p = pageDAO.findById(page.getKey());
296
                if ((page_type == null && page_route == null) || (page_route == null && p.getType().equals(page_type))
297
                        || p.getRoute().equals(page_route)) {
298
                    CommunityPage communityPage = new CommunityPage(p);
299 50222 konstantin
300 50476 konstantin
                    List<Entity> entities = new ArrayList<>();
301
                    for (String entity : p.getEntities()) {
302
                        entities.add(entityDAO.findById(entity));
303
                    }
304
                    communityPage.setEntities(entities);
305
                    communityPage.setIsEnabled(page.getValue());
306
307
                    return_pages.add(communityPage);
308
309
                    if (page_route != null) {
310
                        break;
311
                    }
312 50222 konstantin
                }
313
            }
314
        }
315
        return return_pages;
316
    }
317
318
    @RequestMapping(value = "/community/{id}/page", method = RequestMethod.POST)
319
    public Community insertOrUpdatePage(@PathVariable(value = "id") String id, @RequestBody CommunityPage page) {
320
        Community community = communityDAO.findById(id);
321
        Map<String, Boolean> pages = community.getPages();
322
323
        String name = page.getName();
324
        boolean isEnabled = page.getIsEnabled();
325
326
        pages.put(name, isEnabled);
327
        community.setPages(pages);
328
329
        return communityDAO.save(community);
330
    }
331
332 50476 konstantin
    @RequestMapping(value = "community/{pid}/page/toggle", method = RequestMethod.POST)
333
    public Community togglePage(@PathVariable(value = "pid") String pid, @RequestBody List<String> pageIds, @RequestParam String status) throws Exception {
334
        Community community = communityDAO.findByPid(pid);
335 50222 konstantin
        Map<String, Boolean> pages = community.getPages();
336 50249 konstantin
337
        for (String pageId: pageIds) {
338 50476 konstantin
            log.debug("Toggle community page: " + pageId + " of community: " + pid + " to " + status);
339 50249 konstantin
            pages.put(pageId, Boolean.parseBoolean(status));
340
        }
341
342 50222 konstantin
        community.setPages(pages);
343
        return communityDAO.save(community);
344
    }
345
346 50476 konstantin
    @RequestMapping(value = "community/{pid}/entity/toggle", method = RequestMethod.POST)
347
    public Community toggleEntity(@PathVariable(value = "pid") String pid, @RequestBody List<String> entityIds, @RequestParam String status) throws Exception {
348
        Community community = communityDAO.findByPid(pid);
349 50222 konstantin
        Map<String, Boolean> entities = community.getEntities();
350 50249 konstantin
        Map<String, Boolean> pages = community.getPages();
351 50222 konstantin
352 50249 konstantin
        for (String entityId: entityIds) {
353 50476 konstantin
            log.debug("Toggle community entity: " + entityId + " of community: " + pid + " to " + status);
354 50249 konstantin
355
            entities.put(entityId, Boolean.parseBoolean(status));
356
357 50476 konstantin
            if(pages != null) {
358
                for (Map.Entry<String, Boolean> pageEntry : pages.entrySet()) {
359
                    Page page = pageDAO.findById(pageEntry.getKey());
360
                    if (page.getEntities().contains(entityId) && page.getType().equals("search")) {
361
                        pages.put(pageEntry.getKey(), Boolean.parseBoolean(status));
362
                    }
363 50249 konstantin
                }
364 50222 konstantin
            }
365
        }
366 50249 konstantin
367
        community.setEntities(entities);
368 50222 konstantin
        return communityDAO.save(community);
369
    }
370
371 50476 konstantin
    @RequestMapping(value = "/community/{pid}/entities", method = RequestMethod.GET)
372
    public List<CommunityEntity> getEntitiesForCommunity(@PathVariable(value = "pid") String pid, @RequestParam(value="entity", required=false) String entity) {
373 50222 konstantin
        List<CommunityEntity> return_entities = new ArrayList<CommunityEntity>();
374 50476 konstantin
        Map<String, Boolean> entities = communityDAO.findByPid(pid).getEntities();
375
376
        log.debug("/community/"+pid+"/entities -- entity: "+entity);
377
        if (entity != null) {
378
            String entityId = entityDAO.findByPid(entity).getId();
379
            CommunityEntity communityEntity = new CommunityEntity(entityDAO.findById(entityId));
380
            communityEntity.setIsEnabled(entities.get(entityId));
381 50222 konstantin
            return_entities.add(communityEntity);
382 50476 konstantin
        } else {
383
            if(entities != null) {
384
                for (Map.Entry<String, Boolean> _entity : entities.entrySet()) {
385
                    CommunityEntity communityEntity = new CommunityEntity(entityDAO.findById(_entity.getKey()));
386
                    communityEntity.setIsEnabled(_entity.getValue());
387
                    return_entities.add(communityEntity);
388
                }
389
            }
390 50222 konstantin
        }
391
        return return_entities;
392
    }
393
}