package com.constellio.app.ui.pages.batchprocess;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.Hours;
import org.joda.time.LocalDateTime;
import com.constellio.app.ui.entities.BatchProcessVO;
import com.constellio.app.ui.framework.builders.BatchProcessToVOBuilder;
import com.constellio.app.ui.framework.data.BatchProcessDataProvider;
import com.constellio.app.ui.pages.base.BasePresenter;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.batchprocess.BatchProcess;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.batch.manager.BatchProcessesManager;
public class ListBatchProcessesPresenter extends BasePresenter<ListBatchProcessesView> {
private int secondsSinceLastRefresh = 0;
private BatchProcessToVOBuilder voBuilder = new BatchProcessToVOBuilder();
private BatchProcessDataProvider userBatchProcessDataProvider = new BatchProcessDataProvider();
private BatchProcessDataProvider systemBatchProcessDataProvider = new BatchProcessDataProvider();
public ListBatchProcessesPresenter(ListBatchProcessesView view) {
super(view);
init();
}
private void init() {
refreshDataProviders();
view.setUserBatchProcesses(userBatchProcessDataProvider);
User currentUser = getCurrentUser();
if (areSystemBatchProcessesVisible(currentUser)) {
view.setSystemBatchProcesses(systemBatchProcessDataProvider);
}
}
private void refreshDataProviders() {
userBatchProcessDataProvider.clear();
systemBatchProcessDataProvider.clear();
User currentUser = getCurrentUser();
String currentUsername = currentUser.getUsername();
BatchProcessesManager batchProcessesManager = modelLayerFactory.getBatchProcessesManager();
List<BatchProcess> displayedBatchProcesses = new ArrayList<>();
LocalDateTime oldestAgeDisplayed = new LocalDateTime().minus(Hours.FIVE);
List<BatchProcess> finishedBatchProcesses = batchProcessesManager.getFinishedBatchProcesses();
for (BatchProcess batchProcess : finishedBatchProcesses) {
if (oldestAgeDisplayed.isBefore(batchProcess.getStartDateTime())) {
displayedBatchProcesses.add(batchProcess);
}
}
BatchProcess currentBatchProcess = batchProcessesManager.getCurrentBatchProcess();
if (currentBatchProcess != null) {
displayedBatchProcesses.add(currentBatchProcess);
}
List<BatchProcess> pendingBatchProcesses = batchProcessesManager.getPendingBatchProcesses();
displayedBatchProcesses.addAll(pendingBatchProcesses);
for (int i = 0; i < displayedBatchProcesses.size(); i++) {
BatchProcess batchProcess = displayedBatchProcesses.get(i);
BatchProcessVO batchProcessVO = voBuilder.build(batchProcess);
String batchProcessUsername = batchProcessVO.getUsername();
if (currentUsername.equals(batchProcessUsername)) {
userBatchProcessDataProvider.addBatchProcess(batchProcessVO);
}
systemBatchProcessDataProvider.addBatchProcess(batchProcessVO);
}
userBatchProcessDataProvider.fireDataRefreshEvent();
systemBatchProcessDataProvider.fireDataRefreshEvent();
}
@Override
protected boolean hasPageAccess(String params, User user) {
return true;
}
private boolean areSystemBatchProcessesVisible(User user) {
return user.has(CorePermissions.VIEW_SYSTEM_BATCH_PROCESSES).globally();
}
public void backgroundViewMonitor() {
secondsSinceLastRefresh++;
if (secondsSinceLastRefresh >= 10) {
refreshDataProviders();
secondsSinceLastRefresh = 0;
}
}
}