uoa-admin-tools/src/main/java/eu/dnetlib/uoaadmintools/controllers/DivIdController.java

267 lines
10 KiB
Java

package eu.dnetlib.uoaadmintools.controllers;
import eu.dnetlib.uoaadmintools.dao.CommunityDAO;
import eu.dnetlib.uoaadmintools.dao.DivIdDAO;
import eu.dnetlib.uoaadmintools.dao.MongoDBCommunityDAO;
import eu.dnetlib.uoaadmintools.dao.PageDAO;
import eu.dnetlib.uoaadmintools.entities.*;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@CrossOrigin(origins = "*")
public class DivIdController {
private final Logger log = Logger.getLogger(this.getClass());
@Autowired
private DivIdDAO divIdDAO;
@Autowired
private PageDAO pageDAO;
@Autowired
private CommunityController communityController;
@Autowired
private DivHelpContentController divHelpContentController;
DivIdController() {}
@RequestMapping(value = "/div", method = RequestMethod.GET)
public List<DivId> getDivIds(@RequestParam(required = false) String page,
@RequestParam(required = false) String name,
@RequestParam(value = "communityId", required = false) String pid) {
List<DivId> divIds = null;
if(page != null && name != null) {
DivId divId = divIdDAO.findByPagesContainingAndName(page, name);
if(divId != null) {
divIds = new ArrayList<>();
divIds.add(divId);
}
} else if(page != null) {
divIds = divIdDAO.findByPagesContaining(page);
} else if(name != null) {
DivId divId = divIdDAO.findByName(name);
if(divId != null) {
divIds = new ArrayList<>();
divIds.add(divId);
}
} else {
divIds = divIdDAO.findAll();
}
if(pid != null) {
Iterator<DivId> iteratorDivIds = divIds.iterator();
while(iteratorDivIds.hasNext()) {
DivId divId = iteratorDivIds.next();
if (pid.equals("openaire") && !divId.getOpenaire()) {
iteratorDivIds.remove();
} else if (pid.equals("connect") && !divId.getConnect()) {
iteratorDivIds.remove();
} else if(!pid.equals("openaire") && !pid.equals("connect") && !divId.getCommunities()){
iteratorDivIds.remove();
}
}
}
return divIds;
}
@RequestMapping(value = "/divFull", method = RequestMethod.GET)
public List<DivIdResponse> getDivIdsFull(@RequestParam(required = false) String page,
@RequestParam(required = false) String name,
@RequestParam(value="communityId", required = false) String pid) {
List<DivId> divIds = this.getDivIds(page, name, pid);
List<DivIdResponse> divIdResponses = new ArrayList<>();
for(DivId divId : divIds) {
DivIdResponse divIdResponse = new DivIdResponse(divId);
List<Page> pages = new ArrayList<>();
for(String pageId : divId.getPages()) {
pages.add(pageDAO.findById(pageId));
}
divIdResponse.setPages(pages);
divIdResponses.add(divIdResponse);
}
return divIdResponses;
}
@RequestMapping(value = "/div/{id}", method = RequestMethod.GET)
public DivId getDivId(@PathVariable(value = "id") String id) {
return divIdDAO.findById(id);
}
@RequestMapping(value = "/divFull/{id}", method = RequestMethod.GET)
public DivIdResponse getDivIdFull(@PathVariable(value = "id") String id) {
DivId divId = divIdDAO.findById(id);
return divIdResponseFromDivId(divId);
}
public DivIdResponse divIdResponseFromDivId(DivId divId) {
DivIdResponse divIdResponse = new DivIdResponse(divId);
List<Page> pages = new ArrayList<>();
for(String pageId : divId.getPages()) {
pages.add(pageDAO.findById(pageId));
}
divIdResponse.setPages(pages);
return divIdResponse;
}
@RequestMapping(value = "/div", method = RequestMethod.DELETE)
public void deleteAllDivIds() {
divIdDAO.deleteAll();
}
@RequestMapping(value = "/div/save", method = RequestMethod.POST)
public DivIdResponse insertDivId(@RequestBody DivIdResponse divIdResponse) {
DivId divId = this.getDivIdByDivIdResponse(divIdResponse);
DivId savedDivId = divIdDAO.save(divId);
divIdResponse.setId(savedDivId.getId());
return this.getDivIdFull(divId.getId());
}
private DivId getDivIdByDivIdResponse(DivIdResponse divIdResponse) {
DivId divId = new DivId();
divId.setId(divIdResponse.getId());
divId.setName(divIdResponse.getName());
divId.setOpenaire(divIdResponse.getOpenaire());
divId.setConnect(divIdResponse.getConnect());
divId.setCommunities(divIdResponse.getCommunities());
List<Page> fullPages = divIdResponse.getPages();
List<String> pages = new ArrayList<String>();
for(Page page : fullPages) {
pages.add(page.getId());
}
divId.setPages(pages);
return divId;
}
@RequestMapping(value = "/div/update", method = RequestMethod.POST)
public DivIdResponse updateDivId(@RequestBody DivIdResponse divIdResponse) {
/*
DivId divId = divIdDAO.findById(_divId.getId());
divId.setName(_divId.getName());
divId.setPages(_divId.getPages());
divIdDAO.save(divId);
return this.getDivIdFull(divId.getId());
*/
DivId divIdOld = divIdDAO.findById(divIdResponse.getId());
DivId divId = this.getDivIdByDivIdResponse(divIdResponse);
divIdDAO.save(divId);
boolean openaireEnabled = divId.getOpenaire();
boolean connectEnabled = divId.getConnect();
if(divId.getCommunities() && !divIdOld.getCommunities()) {
List<Community> communities = communityController.getAllCommunities();
for( Community community : communities ) {
if(!community.getPid().equals("openaire") && !community.getPid().equals("connect")) {
divHelpContentController.addDivHelpContentsInCommunity(community.getPid(), community.getId(), divId.getName());
}
}
}
if(openaireEnabled && !divIdOld.getOpenaire()) {
Community community = communityController.getCommunity("openaire");
divHelpContentController.addDivHelpContentsInCommunity(community.getPid(), community.getId(), divId.getName());
}
if(connectEnabled && !divIdOld.getConnect()) {
Community community = communityController.getCommunity("connect");
divHelpContentController.addDivHelpContentsInCommunity(community.getPid(), community.getId(), divId.getName());
}
if(!divId.getCommunities()) {
List<Community> communities = communityController.getAllCommunities();
for( Community community : communities ) {
if(!community.getPid().equals("openaire") && !community.getPid().equals("connect")) {
// delete div contents related to this divId
List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents(community.getPid(), null, divId.getName(), null);
for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
}
}
}
}
if(!openaireEnabled) {
Community community = communityController.getCommunity("openaire");
// delete div contents related to this divId
List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents("openaire", null, divId.getName(), null);
for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
}
}
if(!connectEnabled) {
Community community = communityController.getCommunity("connect");
// delete div contents related to this divId
List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents("connect", null, divId.getName(), null);
for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
}
}
return divIdResponse;
}
@RequestMapping(value = "/div/delete", method = RequestMethod.POST)
public Boolean deleteDivIds(@RequestBody List<String> divIds) throws Exception {
for (String id: divIds) {
DivId divId = divIdDAO.findById(id);
// delete div contents related to this divId
List<DivHelpContentResponse> divHelpContentResponses = divHelpContentController.getDivHelpContents(null, null, divId.getName(), null);
for(DivHelpContentResponse divHelpContentResponse : divHelpContentResponses) {
divHelpContentController.deleteDivHelpContent(divHelpContentResponse.getId());
}
divIdDAO.delete(id);
}
return true;
}
@RequestMapping(value = "/div/{id}", method = RequestMethod.DELETE)
public void deleteDivId(@PathVariable(value = "id") String id) {
divIdDAO.delete(id);
}
@RequestMapping(value = "/div/pages", method = RequestMethod.GET)
public Set<String> getDivIdsPages(@RequestParam(value="communityId", required = false) String pid) {
List<DivId> divIds = null;
Set<String> hasCommunityPageDivIds = new HashSet<>();
if(pid != null) {
if(pid.equals("openaire")) {
divIds = divIdDAO.findByOpenaire(true);
} else if(pid.equals("connect")) {
divIds = divIdDAO.findByConnect(true);
} else {
divIds = divIdDAO.findByCommunities(true);
}
} else {
divIds = divIdDAO.findAll();
}
for(DivId divId : divIds) {
for(String pageId : divId.getPages()) {
hasCommunityPageDivIds.add(pageId);
}
}
return hasCommunityPageDivIds;
}
}