This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 6072d6954a5209c992d8aa3a3c403345a6d1b5a3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat May 14 11:38:43 2016 +0200 Ajout de l'import des mises en œuvre des engins (See #8181) --- .../GearCharacteristicValuesImportModel.java | 39 +++++++ .../GearCharacteristicValuesImportRow.java | 47 ++++++++ .../services/service/importdb/ImportService.java | 76 +++++++++++++ .../dbeditor/ImportGearCharacteristics.java | 122 +++++++++++++++++++++ .../src/main/resources/config/struts-dbeditor.xml | 9 ++ .../resources/i18n/echobase-ui_en_GB.properties | 1 + .../resources/i18n/echobase-ui_fr_FR.properties | 1 + .../main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp | 15 +++ 8 files changed, 310 insertions(+) diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/GearCharacteristicValuesImportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/GearCharacteristicValuesImportModel.java new file mode 100644 index 0000000..37271bb --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/GearCharacteristicValuesImportModel.java @@ -0,0 +1,39 @@ +package fr.ifremer.echobase.services.service.importdb; + +import fr.ifremer.echobase.entities.references.Gear; +import fr.ifremer.echobase.entities.references.GearCharacteristic; +import fr.ifremer.echobase.services.service.importdata.csv.EchoBaseImportExportModelSupport; + +import java.util.Map; + +/** + * Created on 14/05/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class GearCharacteristicValuesImportModel extends EchoBaseImportExportModelSupport<GearCharacteristicValuesImportRow> { + + public static GearCharacteristicValuesImportModel forImport(char separator, + Map<String, Gear> gearsByCasinoGearName, + Map<String, GearCharacteristic> gearCharacteristicsByName) { + + GearCharacteristicValuesImportModel model = new GearCharacteristicValuesImportModel(separator); + model.newForeignKeyColumn(GearCharacteristicValuesImportRow.PROPERTY_GEAR, Gear.class, Gear.PROPERTY_CASINO_GEAR_NAME, gearsByCasinoGearName); + model.newForeignKeyColumn(GearCharacteristicValuesImportRow.PROPERTY_CHARACTERISTIC, GearCharacteristic.class, GearCharacteristic.PROPERTY_NAME, gearCharacteristicsByName); + model.newMandatoryColumn(GearCharacteristicValuesImportRow.PROPERTY_DATA_VALUE); + + return model; + + } + + @Override + public GearCharacteristicValuesImportRow newEmptyInstance() { + return new GearCharacteristicValuesImportRow(); + } + + protected GearCharacteristicValuesImportModel(char separator) { + super(separator); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/GearCharacteristicValuesImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/GearCharacteristicValuesImportRow.java new file mode 100644 index 0000000..04356da --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/GearCharacteristicValuesImportRow.java @@ -0,0 +1,47 @@ +package fr.ifremer.echobase.services.service.importdb; + +import fr.ifremer.echobase.entities.references.Gear; +import fr.ifremer.echobase.entities.references.GearCharacteristic; +import fr.ifremer.echobase.entities.references.GearCharacteristicValue; +import fr.ifremer.echobase.entities.references.GearCharacteristicValueImpl; + +/** + * Created on 14/05/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class GearCharacteristicValuesImportRow { + + public static final String PROPERTY_GEAR = "gear"; + public static final String PROPERTY_CHARACTERISTIC = "characteristic"; + public static final String PROPERTY_DATA_VALUE = "dataValue"; + + private Gear gear; + private final GearCharacteristicValue gearCharacteristicValue; + + public GearCharacteristicValuesImportRow() { + gearCharacteristicValue = new GearCharacteristicValueImpl(); + } + + public void setGear(Gear gear) { + this.gear = gear; + } + + public void setDataValue(String dataValue) { + gearCharacteristicValue.setDataValue(dataValue); + } + + public void setCharacteristic(GearCharacteristic characteristic) { + gearCharacteristicValue.setGearCharacteristic(characteristic); + } + + public Gear getGear() { + return gear; + } + + public GearCharacteristicValue getGearCharacteristicValue() { + return gearCharacteristicValue; + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java index 75fb24d..0ca2c5a 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdb/ImportService.java @@ -21,10 +21,15 @@ package fr.ifremer.echobase.services.service.importdb; import com.google.common.base.Charsets; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import com.google.common.io.Files; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; +import fr.ifremer.echobase.entities.references.Gear; +import fr.ifremer.echobase.entities.references.GearCharacteristic; +import fr.ifremer.echobase.entities.references.GearCharacteristicValue; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.service.DbEditorService; import fr.ifremer.echobase.services.service.UserDbPersistenceService; @@ -37,11 +42,14 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.metadata.TableMeta; import org.nuiton.topia.service.csv.in.CsvImportResult; import org.nuiton.topia.service.csv.in.ImportModelFactory; +import org.nuiton.util.beans.BeanMonitor; import javax.inject.Inject; import java.io.BufferedReader; import java.io.File; import java.io.IOException; +import java.util.Collection; +import java.util.Map; /** * To import datas from a csv file into the db. @@ -119,4 +127,72 @@ public class ImportService extends EchoBaseServiceSupport { return result; } + public CsvImportResult<EchoBaseUserEntityEnum> importGearCharacteristicValues(String importFileName, + File importFile, + EchoBaseUser user) throws IOException { + + // On importe et regroupe les caractéristiques par engin + Multimap<Gear, GearCharacteristicValue> gearCharacteristicValuesByGear = ArrayListMultimap.create(); + + try (BufferedReader bf = Files.newReader(importFile, Charsets.UTF_8)) { + + Map<String, Gear> gearsByCasinoGearName = persistenceService.getEntitiesMap(Gear.class, Gear::getCasinoGearName); + Map<String, GearCharacteristic> gearCharacteristicsByName = persistenceService.getEntitiesMap(GearCharacteristic.class, GearCharacteristic::getName); + GearCharacteristicValuesImportModel csvModel = GearCharacteristicValuesImportModel.forImport(getCsvSeparator(), gearsByCasinoGearName, gearCharacteristicsByName); + + try (Import<GearCharacteristicValuesImportRow> importer = Import.newImport(csvModel, bf)) { + + for (GearCharacteristicValuesImportRow gearCharacteristicValuesImportRow : importer) { + + Gear gear = gearCharacteristicValuesImportRow.getGear(); + GearCharacteristicValue gearCharacteristicValue = gearCharacteristicValuesImportRow.getGearCharacteristicValue(); + gearCharacteristicValuesByGear.put(gear, gearCharacteristicValue); + + } + + } + + } catch (EchoBaseTechnicalException eee) { + throw eee; + } catch (Exception eee) { + log.error("Failed to read import file " + importFile.getName(), eee); + throw new EchoBaseTechnicalException(eee); + } + + String messagePrefix = "Import des caractéristiques d'engin à partir du fichier " + importFileName + " le " + newDate(); + + CsvImportResult<EchoBaseUserEntityEnum> result = CsvImportResult.newResult(EchoBaseUserEntityEnum.Gear, importFileName, false); + + TableMeta<EchoBaseUserEntityEnum> meta = dbEditorService.getTableMeta(EchoBaseUserEntityEnum.Gear); + BeanMonitor beanMonitor = new BeanMonitor(); + + for (Map.Entry<Gear, Collection<GearCharacteristicValue>> gearCollectionEntry : gearCharacteristicValuesByGear.asMap().entrySet()) { + + Gear gear = gearCollectionEntry.getKey(); + beanMonitor.setBean(gear); + + Collection<GearCharacteristicValue> gearCharacteristicValues = gearCollectionEntry.getValue(); + gear.addAllGearCharacteristicValue(gearCharacteristicValues); + + result.incrementsNumberUpdated(); + + if (user != null) { + + dbEditorService.createEntityModificationLog( + meta, + messagePrefix, + gear, + user, + beanMonitor); + + } + + } + + persistenceService.commit(); + + return result; + + } + } diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportGearCharacteristics.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportGearCharacteristics.java new file mode 100644 index 0000000..b1d1adb --- /dev/null +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ImportGearCharacteristics.java @@ -0,0 +1,122 @@ +package fr.ifremer.echobase.ui.actions.dbeditor; + +import com.opensymphony.xwork2.interceptor.annotations.InputConfig; +import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; +import fr.ifremer.echobase.services.service.importdb.ImportService; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.service.csv.in.CsvImportResult; + +import javax.inject.Inject; +import java.io.File; + +/** + * Created on 14/05/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ImportGearCharacteristics extends AbstractLoadPage { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(ImportGearCharacteristics.class); + + /** WTF ? */ + protected File importFile; + + /** WTF ? */ + protected String importFileContentType; + + /** WTF ? */ + protected String importFileFileName; + + /** CSV import result */ + private CsvImportResult<EchoBaseUserEntityEnum> result; + + private Exception error; + + public CsvImportResult<EchoBaseUserEntityEnum> getResult() { + return result; + } + + public File getImportFile() { + return importFile; + } + + public void setImportFile(File importFile) { + this.importFile = importFile; + } + + public String getImportFileContentType() { + return importFileContentType; + } + + public void setImportFileContentType(String importFileContentType) { + this.importFileContentType = importFileContentType; + } + + public String getImportFileFileName() { + return importFileFileName; + } + + public void setImportFileFileName(String importFileFileName) { + this.importFileFileName = importFileFileName; + } + + public Exception getError() { + return error; + } + + public String getErrorStack() { + + String errorStack = null; + if (error != null) { + + errorStack = ExceptionUtils.getStackTrace(error); + } + return errorStack; + } + + @Override + public String input() throws Exception { + load(); + return INPUT; + } + + @Override + @InputConfig(methodName = "input") + public String execute() throws Exception { + + try { + result = importService.importGearCharacteristicValues( + importFileFileName, + importFile, + getEchoBaseSession().getUser()); + + } catch (Exception eee) { + + result = CsvImportResult.newResult(EchoBaseUserEntityEnum.GearCharacteristic, + importFileFileName, + false); + error = eee; + + addFlashError(t("echobase.info.import.failed")); + + if (log.isErrorEnabled()) { + log.error("Error while import ", eee); + } + } + + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + @Inject + protected transient ImportService importService; + +} diff --git a/echobase-ui/src/main/resources/config/struts-dbeditor.xml b/echobase-ui/src/main/resources/config/struts-dbeditor.xml index c571650..bba646d 100644 --- a/echobase-ui/src/main/resources/config/struts-dbeditor.xml +++ b/echobase-ui/src/main/resources/config/struts-dbeditor.xml @@ -84,6 +84,15 @@ <!--<result name="error">/WEB-INF/jsp/dbeditor/dbeditor.jsp</result>--> </action> + <!-- Import some entities from a csv file --> + <action name="doImportGearCharacteristics" + class="fr.ifremer.echobase.ui.actions.dbeditor.ImportGearCharacteristics"> + <interceptor-ref name="prepareParamsStackLoggued"/> + <result>/WEB-INF/jsp/dbeditor/csvImportResult.jsp</result> + <result name="input">/WEB-INF/jsp/dbeditor/dbeditor.jsp</result> + <!--<result name="error">/WEB-INF/jsp/dbeditor/dbeditor.jsp</result>--> + </action> + <!-- Export a selected entity type to a csv file --> <action name="doExport" class="fr.ifremer.echobase.ui.actions.dbeditor.ExportTable"> diff --git a/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties index b658fcd..a993625 100644 --- a/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties +++ b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties @@ -421,6 +421,7 @@ echobase.title.importData.selectImportType=Select type of import echobase.title.importDb=Database import echobase.title.importDbProgress=Importing data echobase.title.importDbResult=Data import results +echobase.title.importGearCharacteristics=Import Gears characteristics echobase.title.importLog.detail=Import detail echobase.title.importLog.files=Import files echobase.title.importLogs=Import logs diff --git a/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties index 01edb49..06a8fd6 100644 --- a/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties +++ b/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties @@ -424,6 +424,7 @@ echobase.title.importData.selectImportType=Sélection du type d'import echobase.title.importDb=Import d'une base echobase.title.importDbProgress=Import de données en cours echobase.title.importDbResult=Résultats de l'import de données +echobase.title.importGearCharacteristics=Importer les caractéristiques des engins echobase.title.importLog.detail=Détail d'un import echobase.title.importLog.files=Fichiers d'import echobase.title.importLogs=Liste des imports diff --git a/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp b/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp index 0366ac1..265021a 100644 --- a/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp +++ b/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp @@ -225,6 +225,21 @@ align="right"/> </s:form> </s:if> + <s:if test="%{entityType.name() == 'Gear'}"> + <sj:tab id="tab_importGearCharacteristicValuesForm" target="importGearCharacteristicValuesForm" + key="echobase.title.importGearCharacteristics"/> + + <s:form id="importGearCharacteristicValuesForm" namespace="/dbeditor" method="post" + enctype="multipart/form-data"> + + <s:hidden key="entityType" label=''/> + <s:file key="importFile" requiredLabel="true" label="%{getText('echobase.label.importFile')}"/> + + <br/> + <s:submit key="echobase.action.importTable" action="doImportGearCharacteristics" + align="right"/> + </s:form> + </s:if> <sj:tab id="tab_exportForm" target="exportForm" key="echobase.title.exportTable"/> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.