package com.constellio.app.ui.pages.imports; import com.constellio.app.services.schemas.bulkImport.*; import com.constellio.app.services.schemas.bulkImport.data.ImportDataProvider; import com.constellio.app.services.schemas.bulkImport.data.ImportServices; import com.constellio.app.services.schemas.bulkImport.data.excel.Excel2003ImportDataProvider; import com.constellio.app.services.schemas.bulkImport.data.xml.XMLImportDataProvider; import com.constellio.app.ui.framework.components.fields.upload.TempFileUpload; import com.constellio.app.ui.i18n.i18n; import com.constellio.app.ui.pages.base.BasePresenter; import com.constellio.model.conf.FoldersLocator; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.frameworks.validation.ValidationException; import com.constellio.model.services.factories.ModelLayerFactory; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import static com.constellio.app.ui.i18n.i18n.$; public class ImportFilePresenter extends BasePresenter<ImportFileView> implements ImportFilePresenterInterface { private transient ImportServices importServices; public ImportFilePresenter(ImportFileView view) { super(view); initTransient(); FoldersLocator foldersLocator = new FoldersLocator(); File resourcesFolder = foldersLocator.getModuleResourcesFolder("rm"); File exampleExcelFile = new File(resourcesFolder, "Fichier test.xls"); view.setExampleFile(exampleExcelFile); } @Override protected boolean hasPageAccess(String params, User user) { return user.has(CorePermissions.MANAGE_SYSTEM_DATA_IMPORTS).globally(); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); initTransient(); } private void initTransient() { importServices = newImportServices(modelLayerFactory); } protected ImportServices newImportServices(ModelLayerFactory modelLayerFactory) { return new RecordsImportServices(modelLayerFactory); } public void uploadButtonClicked(TempFileUpload upload) { if (upload != null && upload.getTempFile() != null) { File file = upload.getTempFile(); try { User currentUser = getCurrentUser(); BulkImportProgressionListener progressionListener = new LoggerBulkImportProgressionListener(); // BulkImportProgressionListener progressionListener = new BulkImportProgressionListener() { // @Override // public void updateTotal(int newTotal) { // view.setTotal(newTotal); // } // // @Override // public void updateProgression(int stepProgression, int totalProgression) { // view.setProgress(totalProgression); // } // // @Override // public void updateCurrentStepTotal(int newTotal) { // // } // // @Override // public void updateCurrentStepName(String stepName) { // // } // // }; ImportDataProvider importDataProvider = null; if (upload.getFileName().endsWith(".xls")) { importDataProvider = getExcelImportDataProviderFromFile(file); } else if (upload.getFileName().endsWith(".zip")) { importDataProvider = getXMLImportDataProviderForZipFile(modelLayerFactory, file); } else if (upload.getFileName().endsWith(".xml")) { importDataProvider = getXMLImportDataProviderForSingleXMLFile(modelLayerFactory, file, upload.getFileName()); } else { view.showErrorMessage("Only xml, zip or xls formats are accepted"); } if (importDataProvider != null) { BulkImportParams params; if (view.getImportFileMode() == ImportFileMode.PERMISSIVE) { params = BulkImportParams.PERMISSIVE(); } else { params = BulkImportParams.STRICT(); } BulkImportResults errors = importServices .bulkImport(importDataProvider, progressionListener, currentUser, view.getSelectedCollections(), params); for (ImportError error : errors.getImportErrors()) { view.showErrorMessage(format(error)); } view.showImportCompleteMessage(); } } catch (ValidationException e) { view.showErrorMessage(i18n.$(e.getValidationErrors())); } catch (Exception e) { e.printStackTrace(); StringWriter writer = new StringWriter(); PrintWriter pWriter = new PrintWriter(writer); e.printStackTrace(pWriter); view.showErrorMessage(writer.toString()); } finally { FileUtils.deleteQuietly(file); } } } protected ImportDataProvider getXMLImportDataProviderForSingleXMLFile(ModelLayerFactory modelLayerFactory, File file, String fileName) { return XMLImportDataProvider.forSingleXMLFile(modelLayerFactory, file, fileName); } protected ImportDataProvider getXMLImportDataProviderForZipFile(ModelLayerFactory modelLayerFactory, File file) { return XMLImportDataProvider.forZipFile(modelLayerFactory, file); } protected ImportDataProvider getExcelImportDataProviderFromFile(File file) { return Excel2003ImportDataProvider.fromFile(file); } protected String format(ImportError error) { return $("ImportUsersFileViewImpl.errorWith") + " " + error.getInvalidElementId() + " : " + error.getErrorMessage(); } public void backButtonClicked() { view.navigate().to().adminModule(); } }