DocHistoryRestController.java
package sk.iway.iwcm.editor.rest;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.DBPool;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.doc.DocBasic;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.doc.DocHistory;
import sk.iway.iwcm.doc.DocHistoryRepository;
import sk.iway.iwcm.doc.GroupDetails;
import sk.iway.iwcm.doc.GroupsDB;
import sk.iway.iwcm.doc.HistoryDB;
import sk.iway.iwcm.doc.MultigroupMappingDB;
import sk.iway.iwcm.editor.EditorDB;
import sk.iway.iwcm.system.datatable.BaseEditorFields;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
import sk.iway.iwcm.system.datatable.ProcessItemAction;
/**
* #53385 - REST pre zobrazenie stranok v historii
* Data poskytuje len READ ONLY
* Vyuziva mapovanie na DTO objekt
*/
@RestController
@Datatable
@RequestMapping(value = "/admin/rest/web-pages/history")
@PreAuthorize(value = "@WebjetSecurityService.hasPermission('Constants:webpagesFunctionsPerms')")
public class DocHistoryRestController extends DatatableRestControllerV2<DocHistoryDto, Long>{
private final DocHistoryRepository docHistoryRepository;
@Autowired
public DocHistoryRestController(DocHistoryRepository docHistoryRepository) {
super(null);
this.docHistoryRepository = docHistoryRepository;
}
@Override
public Page<DocHistoryDto> getAllItems(Pageable pageable) {
HistoryDB historyDB = new HistoryDB(DBPool.getDBName(getRequest()));
DatatablePageImpl<DocHistoryDto> page;
if("true".equals(getRequest().getParameter("auditVersion"))) {
if(!getUser().isEnabledItem("cmp_adminlog")) throw new IllegalArgumentException("Access is denied");
GroupDetails gd = null;
DocDB docDB = DocDB.getInstance();
GroupsDB groupsDB = GroupsDB.getInstance();
List<DocBasic> publicableDocs = docDB.getPublicableDocs();
List<DocHistoryDto> docDetailsList = new ArrayList<>();
for(DocBasic publicableDoc : publicableDocs) {
gd = groupsDB.getGroup(publicableDoc.getGroupId());
if(gd != null) { //ak stranka ma adresar, pridam ju do zoznamu
if (publicableDoc instanceof DocDetails) {
DocHistoryDto dto = DocHistoryDtoMapper.INSTANCE.docToHistoryDto((DocDetails)publicableDoc);
BaseEditorFields ef = new BaseEditorFields();
ef.addRowClass("is-disabled");
dto.setEditorFields(ef);
docDetailsList.add(dto);
} else if (publicableDoc instanceof DocHistory) {
docDetailsList.add(DocHistoryDtoMapper.INSTANCE.docHistoryToHistoryDto((DocHistory)publicableDoc));
}
}
}
docDetailsList.sort(Comparator.comparing(DocHistoryDto::getPublishStartDate, Comparator.nullsFirst(Comparator.naturalOrder())));
page = new DatatablePageImpl<>(docDetailsList);
} else {
if(!getUser().isEnabledItem("menuWebpages")) throw new IllegalArgumentException("Access is denied");
int docId = Tools.getIntValue(getRequest().getParameter("docId"), -1);
int docIdOriginal = docId;
int masterDocId = MultigroupMappingDB.getMasterDocId(docId);
docId = masterDocId > 0 ? masterDocId : docId; //ak slave stranka, tak ukazem historiu master stranky
List<DocDetails> docDetailsList = historyDB.getHistory(docId, false, false);
page = new DatatablePageImpl<>(DocHistoryDtoMapper.INSTANCE.toHistoryDtos(docDetailsList));
if (docId != docIdOriginal) {
//preserve docId from original request, not from multigroup mapping
for (DocHistoryDto dto : page.getContent()) {
dto.setDocId(docIdOriginal);
}
}
}
processFromEntity(page, ProcessItemAction.GETALL);
return page;
}
@Override
public boolean deleteItem(DocHistoryDto entity, long id) {
//zmazat je mozne len zaznamy v buducnosti
DocHistory history = docHistoryRepository.getById(entity.getId());
if (history!=null && Boolean.TRUE.equals(history.getPublicable()) && history.getPublishStartDate().getTime()>Tools.getNow()) {
if (EditorDB.isPageEditable(getUser(), history.getDocId())) {
docHistoryRepository.deleteByIdPublicable(history.getId(), true);
return true;
}
}
return false;
}
@Override
public void beforeSave(DocHistoryDto entity) {
throwError("datatables.error.recordIsNotEditable");
}
@Override
public DocHistoryDto processFromEntity(DocHistoryDto entity, ProcessItemAction action) {
if (entity.isHistoryActual()) {
BaseEditorFields ef = entity.getEditorFields();
if (ef == null) ef = new BaseEditorFields();
ef.addRowClass("is-default-page");
entity.setEditorFields(ef);
}
if (entity.isDisableAfterEnd()) {
entity.setPublishEndExtra(entity.getPublishEndDate());
}
//If history record is disapproved, set it's color to red in table
if(entity.getHistoryDisapprovedByName() != null && !entity.getHistoryDisapprovedByName().isEmpty()) {
if(entity.getEditorFields() == null) {
BaseEditorFields ef = new BaseEditorFields();
entity.setEditorFields(ef);
}
entity.getEditorFields().addRowClass("is-disapproved");
}
return entity;
}
}