Author: tchemit Date: 2012-03-16 12:57:15 +0100 (Fri, 16 Mar 2012) New Revision: 367 Url: http://forge.codelutin.com/repositories/revision/echobase/367 Log: permettre l'export d'une table comme ?\195?\160 l'?\195?\169cran + am?\195?\169lioration d?\195?\169coration de Species (ajout baracoudaCode) Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseDecoratorProvider.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EntityCsvModel.java trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseDecoratorProvider.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseDecoratorProvider.java 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseDecoratorProvider.java 2012-03-16 11:57:15 UTC (rev 367) @@ -210,7 +210,7 @@ registerJXPathDecorator(locale, SizeCategory.class, "${name}$s"); // Species decorator - registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s"); + registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s (${baracoudaCode}$s)"); // SpeciesCategory decorator registerJXPathDecorator(locale, SpeciesCategory.class, "${species/genusSpecies}$s - (size:: ${sizeCategoryName}$s) - (age: ${ageCategoryLabel}$s) - (sex: ${sexCategoryLabel}$s)"); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-03-16 11:57:15 UTC (rev 367) @@ -33,7 +33,6 @@ import fr.ifremer.echobase.entities.meta.ColumnMeta; import fr.ifremer.echobase.entities.meta.DbMeta; import fr.ifremer.echobase.entities.meta.TableMeta; -import fr.ifremer.echobase.services.csv.CsvModelUtil; import fr.ifremer.echobase.services.csv.EntityCsvModel; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -50,6 +49,7 @@ import org.nuiton.util.csv.ExportableColumn; import org.nuiton.util.csv.ImportExportModel; import org.nuiton.util.csv.ImportableColumn; +import org.nuiton.util.decorator.Decorator; import org.nuiton.util.decorator.JXPathDecorator; import org.nuiton.web.struts2.FilterPagerUtil; @@ -107,7 +107,7 @@ Map<?, ?>[] rows = new Map[entities.size()]; - ImportExportModel<TopiaEntity> model = buildForLoad(meta, "id", true); + ExportModel<TopiaEntity> model = buildForLoad(meta, "id", true); int i = 0; for (Object o : entities) { @@ -543,9 +543,9 @@ return model; } - protected <E extends TopiaEntity> ImportExportModel<E> buildForLoad(TableMeta meta, - String idName, - boolean addDecorated) { + protected <E extends TopiaEntity> ExportModel<E> buildForLoad(TableMeta meta, + String idName, + boolean addDecorated) { EntityCsvModel<E> model = EntityCsvModel.newModel( getConfiguration().getCsvSeparator(), @@ -566,13 +566,16 @@ if (addDecorated) { // translate foreign key to his decorated value - model.newColumnForExport( + Decorator<TopiaEntity> decorator = + getDecoratorService().getDecorator(getLocale(), entityType, null); + model.addDecoratedForeignKeyForExport( propertyName + "_lib", propertyName, - CsvModelUtil.newForeignKeyDecoratedValue( - entityType, - getDecoratorService(), - getLocale()) + decorator +// CsvModelUtil.newForeignKeyDecoratedValue( +// entityType, +// getDecoratorService(), +// getLocale()) ); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java 2012-03-16 11:57:15 UTC (rev 367) @@ -36,6 +36,7 @@ import org.nuiton.util.TimeLog; import org.nuiton.util.csv.Export; import org.nuiton.util.csv.ExportModel; +import org.nuiton.util.decorator.Decorator; import java.io.File; import java.util.List; @@ -62,21 +63,46 @@ return model; } - public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta meta) { + public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta meta, boolean asSeen) { - EntityCsvModel<E> model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta, - TopiaEntity.TOPIA_ID - ); + EntityCsvModel<E> model; + if (asSeen) { + + // no need to have topiaId as first column + model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta + ); + } else { + + // normla export add topiaId column + model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta, + TopiaEntity.TOPIA_ID + ); + } + + DecoratorService service = getService(DecoratorService.class); + for (ColumnMeta columnMeta : meta) { String propertyName = columnMeta.getName(); Class<?> type = columnMeta.getType(); if (columnMeta.isFK()) { Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - model.addForeignKeyForExport(propertyName, entityType); + if (asSeen) { + + // export decorated foreign key value + Decorator<TopiaEntity> decorator = + service.getDecorator(getLocale(), entityType, null); + model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); + } else { + + // export foreign key value as his topiaId + model.addForeignKeyForExport(propertyName, entityType); + } } else { model.addDefaultColumn(propertyName, type); } @@ -84,9 +110,9 @@ return model; } - public String exportDatas(TableMeta tableMeta) { + public String exportDatas(TableMeta tableMeta, boolean asSeen) { - Export<TopiaEntity> export = prepareExport(tableMeta); + Export<TopiaEntity> export = prepareExport(tableMeta, asSeen); try { return export.toString(Charsets.UTF_8); @@ -101,7 +127,7 @@ log.info("Export table " + tableMeta + " to " + file); } long s1 = TimeLog.getTime(); - Export<TopiaEntity> export = prepareExport(tableMeta); + Export<TopiaEntity> export = prepareExport(tableMeta, false); TIME_LOG.log(s1, "exportDatas::prepareExport"); long s2 = TimeLog.getTime(); try { @@ -130,11 +156,11 @@ TIME_LOG.log(s2, "exportDatas::exportToFile"); } - protected Export<TopiaEntity> prepareExport(TableMeta tableMeta) { + protected Export<TopiaEntity> prepareExport(TableMeta tableMeta, boolean asSeen) { DbEditorService service = getService(DbEditorService.class); List<TopiaEntity> datas = service.getEntities(tableMeta, null, null, null, null); - ExportModel<TopiaEntity> model = buildForExport(tableMeta); + ExportModel<TopiaEntity> model = buildForExport(tableMeta, asSeen); return Export.newExport(model, datas); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/CsvModelUtil.java 2012-03-16 11:57:15 UTC (rev 367) @@ -32,7 +32,6 @@ import fr.ifremer.echobase.entities.data.ResultImpl; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.DataMetadata; -import fr.ifremer.echobase.services.DecoratorService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaException; @@ -60,7 +59,6 @@ import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -95,11 +93,6 @@ return new ForeignKeyValueForAssociation<E>(type, propertyName, universe); } - public static <E extends TopiaEntity> ForeignKeyDecoratedValue<E> newForeignKeyDecoratedValue(Class<E> entityType, - DecoratorService decoratorService, Locale locale) { - return new ForeignKeyDecoratedValue<E>(entityType, decoratorService, locale); - } - public static <E extends TopiaEntity> ValueFormatter<Collection<E>> newAssociationValueFormatter() { return new AssociationValueParserFormatter<E>(null, null); } @@ -280,32 +273,7 @@ } } - public static class ForeignKeyDecoratedValue<E extends TopiaEntity> implements ValueFormatter<E> { - protected final Class<E> entityType; - - protected final DecoratorService decoratorService; - - protected final Locale locale; - - public ForeignKeyDecoratedValue(Class<E> entityType, DecoratorService decoratorService, Locale locale) { - this.entityType = entityType; - this.decoratorService = decoratorService; - this.locale = locale; - - } - - @Override - public String format(E e) { - String value = ""; - if (e != null) { - - value = decoratorService.decorate(locale, e, null); - } - return value; - } - } - protected CsvModelUtil() { // avoid instanciation on helper class } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EntityCsvModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EntityCsvModel.java 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EntityCsvModel.java 2012-03-16 11:57:15 UTC (rev 367) @@ -28,6 +28,8 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.entities.meta.TableMeta; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.csv.ValueFormatter; +import org.nuiton.util.decorator.Decorator; import java.util.Collection; import java.util.Collections; @@ -77,6 +79,11 @@ ); } + public <T> void addDecoratedForeignKeyForExport(String headerName, String propertyName, Decorator<T> decorator) { + modelBuilder.newColumnForExport(headerName, propertyName, + new ForeignKeyDecoratedValue<T>(decorator)); + } + public <E extends TopiaEntity> void addForeignKeyForImport(String headerName, String propertyName, Class<E> entityType, @@ -211,19 +218,24 @@ } } -// public ImportableColumn<E, String> newMandatoryColumn(String headerName, -// String propertyName) { -// return modelBuilder.newMandatoryColumn(headerName, propertyName); -// } -// -// public ImportableColumn<E, String> newMandatoryColumn(String headerName) { -// return modelBuilder.newMandatoryColumn(headerName, headerName); -// } -// -// public <T> ImportableColumn<E, T> newMandatoryColumn(String headerName, String propertyName, ValueParser<T> valueParser) { -// return modelBuilder.newMandatoryColumn(headerName, valueParser, CsvModelUtil.<E, T>newBeanProperty(propertyName)); -// } + public static class ForeignKeyDecoratedValue<E> implements ValueFormatter<E> { + protected final Decorator<E> decorator; + + public ForeignKeyDecoratedValue(Decorator<E> decorator) { + this.decorator = decorator; + } + + @Override + public String format(E e) { + String value = ""; + if (e != null) { + value = decorator.toString(e); + } + return value; + } + } + protected EntityCsvModel(char separator, TableMeta tableMeta) { super(separator); Modified: trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties =================================================================== --- trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-03-16 11:57:15 UTC (rev 367) @@ -35,6 +35,7 @@ echobase.common.transitFile= echobase.common.voyageFile= echobase.importError.can.only.import.one.voyage.atime= +echobase.importError.dataMetadata.notFound= echobase.importError.duplicate.sample= echobase.importError.esduCell.notfound= echobase.importError.fromFile= Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/ExportTable.java 2012-03-16 11:57:15 UTC (rev 367) @@ -61,6 +61,9 @@ /** Type of the file to export. */ protected String contentType; + /** Export datas as seen on screen (no topiaId). */ + protected boolean exportAsSeen; + public void setEntityType(EchoBaseEntityEnum entityType) { this.entityType = entityType; } @@ -69,6 +72,10 @@ this.exportFileName = exportFileName; } + public void setExportAsSeen(boolean exportAsSeen) { + this.exportAsSeen = exportAsSeen; + } + public InputStream getInputStream() { return inputStream; } @@ -91,7 +98,7 @@ ExportService exportService = newService(ExportService.class); TableMeta table = serviceContext.getDbMeta().getTable(entityType); - String content = exportService.exportDatas(table); + String content = exportService.exportDatas(table, exportAsSeen); if (log.isDebugEnabled()) { log.debug("file to export " + content); Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-03-16 11:57:15 UTC (rev 367) @@ -46,6 +46,7 @@ echobase.info.user.delete= echobase.info.user.update= echobase.information.mission.created= +echobase.label.exportAsSeen=Export as seen on screen echobase.legend.dbeditor.show=Visualisation de '%s' echobase.legend.importData.result.resume=Résultat echobase.legend.libreOfficeQuery=Requète "libre office" Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-03-16 11:57:15 UTC (rev 367) @@ -167,6 +167,7 @@ echobase.label.createIfNotFound=Créer les entités non trouvées en base echobase.label.embeddedApplicationFileName=Nom de l'archive à télécharger echobase.label.embeddedWarFileName=Nom du war à utiliser +echobase.label.exportAsSeen=Exporter "comme à l'écran" echobase.label.exportDbFileName=Nom du fichier d'export echobase.label.exportFileName=Nom du fichier d'export echobase.label.import.accoustique=Fichier accoustique Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2012-03-16 10:08:35 UTC (rev 366) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2012-03-16 11:57:15 UTC (rev 367) @@ -225,6 +225,8 @@ <s:textfield key="exportFileName" required="true" size="100" label="%{getText('echobase.label.exportFileName')}"/> + <s:checkbox key='exportAsSeen' value='false' + label='%{getText("echobase.label.exportAsSeen")}'/> <br/> <s:submit key="echobase.action.exportTable" action="doExport" align="right"/>