package com.idega.idegaweb.egov.bpm.presentation;
import is.idega.idegaweb.egov.bpm.IWBundleStarter;
import is.idega.idegaweb.egov.cases.business.CasesEngine;
import is.idega.idegaweb.egov.cases.presentation.CasesSearcher;
import is.idega.idegaweb.egov.cases.util.CasesConstants;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.block.web2.business.JQuery;
import com.idega.block.web2.business.Web2Business;
import com.idega.builder.bean.AdvancedProperty;
import com.idega.builder.business.AdvancedPropertyComparator;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.idegaweb.egov.bpm.data.dao.CasesBPMDAO;
import com.idega.presentation.IWContext;
import com.idega.presentation.Layer;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.GenericButton;
import com.idega.presentation.ui.IWDatePicker;
import com.idega.util.CoreConstants;
import com.idega.util.ListUtil;
import com.idega.util.PresentationUtil;
import com.idega.util.expression.ELUtil;
public class CasesExporter extends CasesSearcher {
private static final String PARAMETER_PROCESS_ID = "ce_prm_process_id";
@Autowired
private CasesEngine casesEngine;
@Autowired
private CasesBPMDAO casesBPMDAO;
@Autowired
private Web2Business web2;
@Autowired
private JQuery jQuery;
public static final File getDirectory(String id) {
File baseDir = new File(System.getProperty("java.io.tmpdir") + File.separator + "exported_cases" + File.separator + id);
if (!baseDir.exists()) {
if (baseDir.mkdirs()) {
return baseDir;
}
return null;
}
return baseDir;
}
@Override
public void main(IWContext iwc) throws Exception {
ELUtil.getInstance().autowire(this);
IWBundle bundle = getBundle(iwc);
PresentationUtil.addJavaScriptSourcesLinesToHeader(iwc, Arrays.asList(
jQuery.getBundleURIToJQueryLib(),
web2.getBundleUriToHumanizedMessagesScript(),
CoreConstants.DWR_ENGINE_SCRIPT,
"/dwr/interface/CasesEngine.js",
getBundle(iwc).getVirtualPathWithFileNameString("javascript/CasesExporter.js")
));
IWBundle applicationBundle = iwc.getIWMainApplication().getBundle(is.idega.idegaweb.egov.application.IWBundleStarter.IW_BUNDLE_IDENTIFIER);
IWBundle casesBundle = iwc.getIWMainApplication().getBundle(CasesConstants.IW_BUNDLE_IDENTIFIER);
PresentationUtil.addStyleSheetsToHeader(iwc, Arrays.asList(
applicationBundle.getVirtualPathWithFileNameString("style/application.css"),
bundle.getVirtualPathWithFileNameString("style/casesBPM.css"),
web2.getBundleUriToHumanizedMessagesStyleSheet()
));
Layer container = new Layer();
add(container);
container.setStyleClass("cases-exporter-container");
IWResourceBundle iwrb = casesBundle.getResourceBundle(iwc);
Layer inputsContainer = new Layer();
container.add(inputsContainer);
DropdownMenu processes = getDropdownForProcess(iwc);
addFormItem(inputsContainer, "process", iwrb.getLocalizedString("cases_search_select_process", "Process"), processes);
// Status
DropdownMenu statuses = getDropdownForStatus(iwc);
addFormItem(inputsContainer, "status", iwrb.getLocalizedString("status", "Status"), statuses);
// Dates from and to
IWDatePicker dateRange = getDateRange(iwc, "dateRange", null, null);
addFormItem(inputsContainer, "dateRange", iwrb.getLocalizedString("date_range", "Date range"), dateRange);
Layer resultsContainer = new Layer();
container.add(resultsContainer);
GenericButton export = new GenericButton(iwrb.getLocalizedString("export_search_results", "Export"));
export.setStyleClass("cases-exporter-action-button");
inputsContainer.add(export);
export.setOnClick(
"CasesExporter.doExportCases({exporting: '" + iwrb.getLocalizedString("exporting", "Exporting...") +
"', loading: '" + iwrb.getLocalizedString("loading", "Loading...") + "', dropdownId: '" + processes.getId() +
"', id: '" + UUID.randomUUID().toString() + "', resultsId: '" + resultsContainer.getId() + "', resultsUI: '" +
CasesExporterResults.class.getName() + "', selectCriterias: '" +
iwrb.getLocalizedString("select_status_or_and_date_range", "You have to select status and/or date range") + "'});"
);
}
@Override
public String getBundleIdentifier() {
return IWBundleStarter.IW_BUNDLE_IDENTIFIER;
}
private DropdownMenu getDropdownForProcess(IWContext iwc) {
DropdownMenu menu = new DropdownMenu(PARAMETER_PROCESS_ID);
menu.setStyleClass("availableVariablesChooserForProcess");
String selectedProcess = iwc.isParameterSet(PARAMETER_PROCESS_ID) ? iwc.getParameter(PARAMETER_PROCESS_ID) : null;
List<AdvancedProperty> allProcesses = casesEngine.getAvailableProcesses(iwc);
if (ListUtil.isEmpty(allProcesses)) {
return menu;
}
IWResourceBundle iwrb = getResourceBundle(iwc);
String total = iwrb.getLocalizedString("total", "total");
for (AdvancedProperty process: allProcesses) {
Integer numberOfApplications = casesBPMDAO.getNumberOfApplications(Long.valueOf(process.getId()));
if (numberOfApplications == null) {
numberOfApplications = 0;
}
process.setValue(process.getValue() + CoreConstants.SPACE + CoreConstants.BRACKET_LEFT + total + CoreConstants.COLON + CoreConstants.SPACE +
numberOfApplications + CoreConstants.BRACKET_RIGHT);
}
Collections.sort(allProcesses, new AdvancedPropertyComparator(iwc.getCurrentLocale()));
fillDropdown(iwc.getCurrentLocale(), menu, allProcesses, new AdvancedProperty(String.valueOf(-1),
iwrb.getLocalizedString("cases_search_select_process", "Select process")), selectedProcess);
return menu;
}
}