Author: tchemit Date: 2012-09-21 15:25:26 +0200 (Fri, 21 Sep 2012) New Revision: 678 Url: http://forge.codelutin.com/repositories/revision/echobase/678 Log: fixes #1439: Tableau de bord refs #1437: Suppression des imports Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DashBoard.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseDbMeta.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java trunk/echobase-ui/src/main/resources/config/struts-workingDb.xml 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/decorators.xml trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/confirmDelete.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/importLogs.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/information.jsp Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/EchoBaseFunctions.java 2012-09-21 13:25:26 UTC (rev 678) @@ -23,6 +23,8 @@ package fr.ifremer.echobase; import com.google.common.base.Function; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Echotype; @@ -308,6 +310,20 @@ } }; + public static final Function<ImportLog, String> IMPORT_LOG_VOYAGE_ID = new Function<ImportLog, String>() { + @Override + public String apply(ImportLog input) { + return input.getVoyageId(); + } + }; + + public static final Function<ImportLog, ImportType> IMPORT_LOG_IMPORT_TYPE= new Function<ImportLog, ImportType>() { + @Override + public ImportType apply(ImportLog input) { + return input.getImportType(); + } + }; + public static String getSpeciesCategoryKey(Species species, SizeCategory sizeCategory, SexCategory sexCategory) { String key = species.getBaracoudaCode(); if (sizeCategory != null) { Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseDbMeta.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseDbMeta.java 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseDbMeta.java 2012-09-21 13:25:26 UTC (rev 678) @@ -33,16 +33,15 @@ import java.util.List; /** - * TODO + * Metasof the working db. * * @author tchemit <chemit@codelutin.com> - * @since TODO + * @since 1.1 */ public class EchoBaseDbMeta extends DbMeta<EchoBaseEntityEnum> { public static EchoBaseDbMeta newDbMeta() { - return new EchoBaseDbMeta(new EchoBasePersistenceHelper() - ); + return new EchoBaseDbMeta(new EchoBasePersistenceHelper()); } private static final List<EchoBaseEntityEnum> REFERENCE_TYPES = ImmutableList.copyOf(Arrays.asList( @@ -127,7 +126,8 @@ EchoBaseDbMeta(EchoBasePersistenceHelper persistenceHelper) { super(persistenceHelper, EchoBaseEntityEnum.values(), - EchoBaseEntityEnum.EntityModificationLog); + EchoBaseEntityEnum.EntityModificationLog, + EchoBaseEntityEnum.ImportLog); { // reference tables @@ -145,7 +145,6 @@ { // data tables - List<TableMeta<EchoBaseEntityEnum>> result = Lists.newArrayList(); addTables(result, DATA_TYPES); dataTables = ImmutableList.copyOf(result); @@ -157,7 +156,6 @@ addAssociations(result, DATA_TYPES); dataAssociations = ImmutableList.copyOf(result); } - } public int getEntriesSize() { 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-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-09-21 13:25:26 UTC (rev 678) @@ -182,6 +182,19 @@ } } + public <E extends TopiaEntity> void decorateForeignKey( + Map data, + Class<E> propertyType, + String property, + String decoratorContext) { + + DecoratorService decoratorService = getService(DecoratorService.class); + + E mission = getEntityById(propertyType, (String) data.get(property)); + String voyageToString = decoratorService.decorate(getLocale(), mission, decoratorContext); + data.put(property + "_lbl", voyageToString); + } + public void saveEntity(TableMeta<EchoBaseEntityEnum> meta, Map<String, String> properties, EchoBaseUser user) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DecoratorService.java 2012-09-21 13:25:26 UTC (rev 678) @@ -105,6 +105,8 @@ */ public class DecoratorService extends EchoBaseServiceSupport { + public static final String DATE_ONLY = "dateOnly"; + protected final DecoratorMulti18nProvider decoratorProvider; public DecoratorService() { @@ -183,7 +185,10 @@ // ImportLog decorator registerJXPathDecorator(locale, ImportLog.class, "${importType}$s - ${importDate}$s - ${importText}$s"); + // ImportLog decorator + registerJXPathDecorator(locale, ImportLog.class, DATE_ONLY, "${importDate}$s"); + // WorkingDbConfiguration decorator registerJXPathDecorator(locale, WorkingDbConfiguration.class, "${url}$s - ${login}$s (${description}$s)"); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2012-09-21 13:25:26 UTC (rev 678) @@ -52,6 +52,8 @@ import org.nuiton.util.TimeLog; import org.nuiton.util.decorator.Decorator; +import java.util.Collections; +import java.util.Comparator; import java.util.EnumMap; import java.util.List; import java.util.Set; @@ -96,11 +98,21 @@ // compute nb steps int nbSteps = 0; + List<ImportLog> importsToTreat = Lists.newArrayList(); for (String id : model.getImportLogIds()) { ImportLog importLog = getEntityById(ImportLog.class, id); nbSteps += importLog.getImportId().size() + 3; + importsToTreat.add(importLog); } model.setNbSteps(nbSteps); + + // sort import logs from importType + Collections.sort(importsToTreat, new Comparator<ImportLog>() { + @Override + public int compare(ImportLog o1, ImportLog o2) { + return o1.getImportType().ordinal() - o2.getImportType().ordinal(); + } + }); StringBuilder result = new StringBuilder(); for (String id : model.getImportLogIds()) { String importResult = removeImport(model, id, user); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/dbeditor/GetEntities.java 2012-09-21 13:25:26 UTC (rev 678) @@ -23,13 +23,17 @@ */ package fr.ifremer.echobase.ui.actions.dbeditor; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.DbEditorService; import fr.ifremer.echobase.services.DecoratorService; -import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.ui.actions.AbstractJSONPaginedAction; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -39,6 +43,7 @@ import org.nuiton.util.decorator.Decorator; import java.util.Arrays; +import java.util.Collection; import java.util.Map; /** @@ -106,16 +111,7 @@ public String entityImportLogs() throws Exception { entityType = EchoBaseEntityEnum.ImportLog; - execute(); - Map<String, String> importTypes = decorateEnums(ImportType.values()); - Decorator<Voyage> voyageDecorator = - getService(DecoratorService.class).getDecorator( - getLocale(), Voyage.class, null); - - EchoBaseServiceSupport service = - getService(EchoBaseServiceSupport.class); - if (StringUtils.isNotBlank(voyageId)) { // add a filter on voyageId @@ -123,17 +119,64 @@ FilterRuleOperator.eq, ImportLog.PROPERTY_VOYAGE_ID, voyageId ))); } + execute(); + Map<String, String> importTypes = decorateEnums(ImportType.values()); + + DbEditorService service = getService(DbEditorService.class); for (Map row : datas) { String importType = (String) row.get(ImportLog.PROPERTY_IMPORT_TYPE); String importTypeToString = importTypes.get(importType); row.put(ImportLog.PROPERTY_IMPORT_TYPE, importTypeToString); - String voyageId = (String) row.get(ImportLog.PROPERTY_VOYAGE_ID); - Voyage voyage = service.getEntityById(Voyage.class, voyageId); - String voyageToString = voyageDecorator.toString(voyage); - row.put("voyage", voyageToString); + service.decorateForeignKey(row, Voyage.class, ImportLog.PROPERTY_VOYAGE_ID, null); } return SUCCESS; } + + public String dashboardImportLogs() throws Exception { + entityType = EchoBaseEntityEnum.Voyage; + execute(); + + DbEditorService service = getService(DbEditorService.class); + + DecoratorService decoratorService = getService(DecoratorService.class); + Decorator<ImportLog> importLogDecorator = decoratorService.getDecorator( + getLocale(), ImportLog.class, DecoratorService.DATE_ONLY); + + Multimap<String, ImportLog> importLogsByVoyage = Multimaps.index( + service.getEntities(ImportLog.class), + EchoBaseFunctions.IMPORT_LOG_VOYAGE_ID); + + for (Map row : datas) { + + String id = (String) row.get("id"); + + Collection<ImportLog> importLogs = importLogsByVoyage.get(id); + + service.decorateForeignKey(row, Voyage.class, "id", null); + + // to keep importLogs decorated, indexed by their topiaId + Map<String, String> imports = Maps.newHashMap(); + + // to keep importLogs ids indexed by their importType + Multimap<ImportType, String> result = ArrayListMultimap.create(); + + for (ImportLog importLog : importLogs) { + String importLogToString = + importLogDecorator.toString(importLog); + String importId = importLog.getTopiaId(); + imports.put(importId, importLogToString); + result.put(importLog.getImportType(), importId); + } + row.put("importLogs", imports); + + for (ImportType importType : result.keySet()) { + row.put("importType." + importType.name(), result.get(importType)); + } + + + } + return SUCCESS; + } } Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DashBoard.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DashBoard.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DashBoard.java 2012-09-21 13:25:26 UTC (rev 678) @@ -0,0 +1,30 @@ +package fr.ifremer.echobase.ui.actions.workingDb; + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; + +import java.util.Map; + +/** + * DashBoard of existing voyages. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class DashBoard extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + protected Map<String, String> importTypes; + + public Map<String, String> getImportTypes() { + return importTypes; + } + + @Override + public String execute() throws Exception { + + importTypes = decorateEnums(ImportType.values()); + return SUCCESS; + } +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/DashBoard.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java 2012-09-21 13:25:26 UTC (rev 678) @@ -0,0 +1,54 @@ +package fr.ifremer.echobase.ui.actions.workingDb; + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.util.Map; + +/** + * Obtain details of a given {@link ImportLog}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class GetImportLogDetail extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + protected String importLogId; + + protected Map data; + + public void setImportLogId(String importLogId) { + this.importLogId = importLogId; + } + + public Map<?, ?> getData() { + return data; + } + + @Override + public String execute() throws Exception { + + DbEditorService service = getService(DbEditorService.class); + TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(EchoBaseEntityEnum.ImportLog); + data = service.getData(tableMeta, importLogId); + + + // decorate import type + Map<String, String> importTypes = decorateEnums(ImportType.values()); + String importType = (String) data.get(ImportLog.PROPERTY_IMPORT_TYPE); + data.put(ImportLog.PROPERTY_IMPORT_TYPE, importTypes.get(importType)); + + // decorate foreign keys + service.decorateForeignKey(data, Voyage.class, ImportLog.PROPERTY_VOYAGE_ID, null); + + return SUCCESS; + } + +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetImportLogDetail.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java 2012-09-21 13:25:26 UTC (rev 678) @@ -0,0 +1,51 @@ +package fr.ifremer.echobase.ui.actions.workingDb; + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.AreaOfOperation; +import fr.ifremer.echobase.entities.references.Mission; +import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.util.Map; + +/** + * Obtain details of a given {@link ImportLog}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class GetVoyage extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + protected String voyageId; + + protected Map data; + + public void setVoyageId(String voyageId) { + this.voyageId = voyageId; + } + + public Map<?, ?> getData() { + return data; + } + + @Override + public String execute() throws Exception { + + DbEditorService service = getService(DbEditorService.class); + TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(EchoBaseEntityEnum.Voyage); + data = service.getData(tableMeta, voyageId); + + // decorate foreign keys + service.decorateForeignKey(data, Mission.class, Voyage.PROPERTY_MISSION, null); + service.decorateForeignKey(data, AreaOfOperation.class, Voyage.PROPERTY_AREA_OF_OPERATION, null); + + return SUCCESS; + } + + +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/workingDb/GetVoyage.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/resources/config/struts-workingDb.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-workingDb.xml 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/resources/config/struts-workingDb.xml 2012-09-21 13:25:26 UTC (rev 678) @@ -137,8 +137,21 @@ <action name="getDashboardImportLogs" method="dashboardImportLogs" class="fr.ifremer.echobase.ui.actions.dbeditor.GetEntities"> <result type="jsonWithPager"/> + </action> + <!-- Get import log detail --> + <action name="getDashboardImportLog" method="execute" + class="fr.ifremer.echobase.ui.actions.workingDb.GetImportLogDetail"> + <result type="json"/> + </action> + + <!-- Get voyage detail --> + <action name="getDashboardVoyage" method="execute" + class="fr.ifremer.echobase.ui.actions.workingDb.GetVoyage"> + <result type="json"/> + </action> + <!-- Show dashboard --> <action name="dashboard" method="execute" class="fr.ifremer.echobase.ui.actions.workingDb.DashBoard"> 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-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-09-21 13:25:26 UTC (rev 678) @@ -10,7 +10,9 @@ echobase.action.createNewMission=Create a new mission echobase.action.createSqlQuery=Save echobase.action.createWorkingDbConfiguration=Save +echobase.action.dashboard=Voyages dashboard echobase.action.delete=Delete +echobase.action.delete.selectedImport=Delete selected imports echobase.action.downloadEmbeddedApplicationFile=Download the portable database echobase.action.downloadExportDbFile=Download database export file echobase.action.export=Export @@ -61,6 +63,7 @@ echobase.common.dataProcessing=DataProcessing echobase.common.dataProcessingNotes=Data processing notes echobase.common.datum=Datum +echobase.common.description=Description echobase.common.digitThreshold=Digitization threshold echobase.common.distributionStatement=Distribution statement echobase.common.echotypeFile= @@ -129,6 +132,8 @@ echobase.common.soundSpeedCalculationsME70=Sound speed calculation method (ME70 instrument) echobase.common.sounderConstant=Sounder constant (if relevant) echobase.common.source=Source +echobase.common.startEndDate=Start - End date +echobase.common.startEndPort=Start - End port echobase.common.subSampleFile= echobase.common.totalSampleFile= echobase.common.transceiverAcquisitionAbsorptionDescription=Transceiver absorption coefficient computation method (data acquisition) @@ -145,6 +150,7 @@ echobase.common.voyageFile= echobase.confirm.delete.importData=Delete import echobase.confirm.delete.query=Delete query +echobase.confirm.delete.selected.importData=Delete selected imports echobase.confirm.delete.workingDbConfiguration=Delete working database configuration echobase.error.bad.password=Invalid password echobase.error.email.already.used=The user name already exists @@ -321,20 +327,21 @@ echobase.menu.removeData=Remove data echobase.menu.users=Manage users echobase.menu.viewData=Display data +echobase.message.clickToShowImportDefail=Click to show import detail echobase.message.createEmbedded.result=Portable application was successful in %s. echobase.message.download.link=If download did not start by itself, you can start it manually from this link\: echobase.message.exportDb.result=Export of database (mode %s) was successful (file %s) in %s. echobase.message.importData.result=Data import successful in %s \:\n%s echobase.message.no.row.selected=No data selected echobase.message.noEntrySelection=No field selected -echobase.action.delete.selectedImport=Delete selected imports +echobase.message.noImportLogSelected=No import selected +echobase.message.noVoyageSelected=No voyage selected echobase.message.removeData.result=Data import removalwas successful in %s\:\n%s echobase.message.warnEmbeddedApplicationInProgress=Please do not close the window to access the new portable database file echobase.message.warnExportInProgress=Please do not close the window to access the export file echobase.message.warnImportInProgress=Please do not close the window to access the imported file echobase.message.warnRemoveDataInProgress=Please do not close the window to access remove data result echobase.title.confirm.deleteImportLogs=Delete data -echobase.confirm.delete.selected.importData=Delete selected imports echobase.title.confirm.deleteQuery=Delete a query echobase.title.confirm.deleteWorkingDbConfiguration=Delete a configuration echobase.title.connectToDbInformations=Database connection information @@ -364,6 +371,7 @@ echobase.title.removeDataProgress=Remove import data echobase.title.removeDataResult=Result of remove import data echobase.title.users=Administrate users +echobase.title.voyage.detail=Voyage detail echobase.title.welcome=Welcome to Echobase echobase.title.workingDbConfiguration=Manage working database configurations echobase.tooltip.disconnectWorkingDb=Change working database 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-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-09-21 13:25:26 UTC (rev 678) @@ -10,7 +10,9 @@ echobase.action.createNewMission=Créer une nouvelle mission echobase.action.createSqlQuery=Enregistrer echobase.action.createWorkingDbConfiguration=Enregistrer +echobase.action.dashboard=Tableau de bord des campagnes echobase.action.delete=Suppression +echobase.action.delete.selectedImport=Supprimer les imports sélectionnés echobase.action.downloadEmbeddedApplicationFile=Télécharger l'application embarquée echobase.action.downloadExportDbFile=Télécharger le fichier d'export de la base complète echobase.action.export=Exporter @@ -61,6 +63,7 @@ echobase.common.dataProcessing=DataProcessing echobase.common.dataProcessingNotes=Notes sur le pré-traitement des données echobase.common.datum=Référenciel +echobase.common.description=Description echobase.common.digitThreshold=Seuil de numérisation echobase.common.distributionStatement=Conditions de diffusion des données echobase.common.echotypeFile= @@ -129,6 +132,8 @@ echobase.common.soundSpeedCalculationsME70=Méthode de calcul de la célérité du son (ME70) echobase.common.sounderConstant=Constante sondeur (si besoin) echobase.common.source=Source +echobase.common.startEndDate=Date de début - fin +echobase.common.startEndPort=Port de départ - arrivé echobase.common.subSampleFile= echobase.common.totalSampleFile= echobase.common.transceiverAcquisitionAbsorptionDescription=Méthode de calcul du coefficient d'absorption pour l'acquisition des données @@ -145,6 +150,7 @@ echobase.common.voyageFile= echobase.confirm.delete.importData=Confirmer la suppression de l'import echobase.confirm.delete.query=Confirmer la suppression de la requête +echobase.confirm.delete.selected.importData=Confirmer la suppression des imports sélectionnés echobase.confirm.delete.workingDbConfiguration=Confirmer la suppression de la configuration suivante echobase.error.bad.password=Mot de passe incorrect echobase.error.email.already.used=Nom d'utilisateur déjà utilisé @@ -321,20 +327,21 @@ echobase.menu.removeData=Supprimer des données echobase.menu.users=Gérer les utilisateurs echobase.menu.viewData=Visualiser les données +echobase.message.clickToShowImportDefail=Cliquer pour obtenir les détails de l'import echobase.message.createEmbedded.result=La création de l'application embarqué a réussi en %s echobase.message.download.link=Si le téléchargement n'a pas démarré automatiquement, suivez ce lien \: echobase.message.exportDb.result=L'export de la base (mode %s) a réussi (fichier %s) en %s echobase.message.importData.result=Import de données réussi en %s \:\n%s echobase.message.no.row.selected=Aucune donnée sélectionnée echobase.message.noEntrySelection=Pas de champ sélectionné +echobase.message.noImportLogSelected=Pas d'import sélectionné +echobase.message.noVoyageSelected=Pas de campagne sélectionné echobase.message.removeData.result=La suppression de l'import s'est déroule avec succès en %s \:\n%s echobase.message.warnEmbeddedApplicationInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de la création de l'application embarquée echobase.message.warnExportInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de l'export echobase.message.warnImportInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de l'import echobase.message.warnRemoveDataInProgress=Merci de ne pas fermer la fenètre pour pouvoir accéder aux résultats de la suppression de l'import echobase.title.confirm.deleteImportLogs=Supprimer des données -echobase.action.delete.selectedImport=Supprimer les imports sélectionnés -echobase.confirm.delete.selected.importData=Confirmer la suppression des imports sélectionnés echobase.title.confirm.deleteQuery=Supprimer une requête echobase.title.confirm.deleteWorkingDbConfiguration=Supprimer la configuration echobase.title.connectToDbInformations=Informations de connexion à la base de données @@ -364,6 +371,7 @@ echobase.title.removeDataProgress=Suppression d'un import en cours... echobase.title.removeDataResult=Résultat de la suppression d'un import echobase.title.users=Administration des utilisateurs +echobase.title.voyage.detail=Détail de la campagne echobase.title.welcome=Bienvenue dans EchoBase echobase.title.workingDbConfiguration=Administration des configurations de base de travail echobase.tooltip.disconnectWorkingDb=Changer de base de travail Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml 2012-09-21 13:25:26 UTC (rev 678) @@ -36,6 +36,7 @@ <pattern>/exportQuery/confirmDelete*</pattern> <pattern>/importData/get*</pattern> <pattern>/workingDb/confirmDelete*</pattern> + <pattern>/workingDb/get*</pattern> <!--<pattern>/removeData/confirmDelete*</pattern>--> </excludes> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp 2012-09-21 13:25:26 UTC (rev 678) @@ -50,3 +50,14 @@ </ul> </fieldset> </div> +<br/> +<s:if test="%{workingDbSelected}"> + <s:form namespace="/workingDb" action="dashboard"> + <ul class="toolbar floatLeft"> + <li> + <s:submit theme="simple" action="dashboard" + key="echobase.action.dashboard"/> + </li> + </ul> + </s:form> +</s:if> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/confirmDelete.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/confirmDelete.jsp 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/confirmDelete.jsp 2012-09-21 13:25:26 UTC (rev 678) @@ -42,6 +42,9 @@ <s:form namespace="/removeData"> + <s:iterator value="model.importLogIds" var="id"> + <s:hidden name="model.importLogIds" value="%{#id}"/> + </s:iterator> <br/> <ul class="toolbar floatRight"> <li> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/importLogs.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/importLogs.jsp 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/importLogs.jsp 2012-09-21 13:25:26 UTC (rev 678) @@ -27,10 +27,6 @@ <script type="text/javascript" src="<s:url value='/js/gridHelper.js' />"></script> -<s:set var="emptySelection"> - <s:text name="echobase.message.noEntrySelection"/> -</s:set> - <script type="text/javascript"> function reloadPage(params) { @@ -39,26 +35,45 @@ return false; } + function loadImportLogDetail(importLogId) { + $.ajax( + { + url:'<s:url action="getDashboardImportLog" namespace="/workingDb"/>', + data:{importLogId:importLogId}, + async:false, + dataType:"json", + success:function (data, textStatus) { + + $('#noImportLogDetail').hide(); + $('#importLogDetail').show(); + var json = data.data; + + if ($('#noVoyageDetail').is(":visible")) { + + // need to load voyage + loadVoyageDetail(json['voyageId']); + } + + $('#importLogVoyage').html(json['voyageId_lbl']); + $('#importLogText').html(json['importText']); + $('#importLogUser').html(json['importUser']); + $('#importLogDate').html(json['importDate']); + $('#importLogImportType').html(json['importType']); + } + }); + return false; + } + jQuery(document).ready(function () { $('[name="voyageId"]').change(function (event) { reloadPage({'voyageId':this.value}); }); - $.addRowSelectTopic('importLogs', function () { + $.addRowSelectTopic('importLogs', function (event) { - $('#extraInfos').show(); - var text = $("tr[aria-selected=true] td[aria-describedby='importLogs_importText']").text(); - $('#importLogText').html(text); - var voyage = $("tr[aria-selected=true] td[aria-describedby='importLogs_voyage']").text(); - $('#importLogVoyage').html(voyage); - var user = $("tr[aria-selected=true] td[aria-describedby='importLogs_importUser']").text(); - $('#importLogUser').html(user); - var date = $("tr[aria-selected=true] td[aria-describedby='importLogs_importDate']").text(); - $('#importLogDate').html(date); - var importType = $("tr[aria-selected=true] td[aria-describedby='importLogs_importType']").text(); - $('#importLogImportType').html(importType); - + var id = event.originalEvent.id; + loadImportLogDetail(id); }); $.addClearSelectTopic('importLogs', function (event) { @@ -70,7 +85,8 @@ elem.attr("name", "model.importLogIds"); elem.attr("value", newId); }); - $('#extraInfos').hide(); + $('#noImportLogDetail').show(); + $('#importLogDetail').hide(); }); $.addEvenAndOddClasses('importLogs'); }); @@ -113,7 +129,7 @@ <sjg:gridColumn name="id" title="id" hidden="true"/> <sjg:gridColumn name="importType" sortable="true" title="%{getText('echobase.common.importType')}"/> - <sjg:gridColumn name="voyage" sortable="true" + <sjg:gridColumn name="voyageId_lbl" sortable="true" title="%{getText('echobase.common.voyage')}"/> <sjg:gridColumn name="importDate" sortable="true" title="%{getText('echobase.common.importDate')}"/> @@ -125,30 +141,30 @@ <br/> <fieldset> <legend><s:text name="echobase.title.importLog.detail"/></legend> - <div id="extraInfos"> + <div id="noImportLogDetail"> + <pre> + <s:text name="echobase.message.noImportLogSelected"/> + </pre> + </div> + <div id="importLogDetail"> <s:label key='echobase.common.importType' value=''/> - <div class="clearBoth"/> <pre id='importLogImportType' style="font-weight: bold;"></pre> <br/> <s:label key='echobase.common.voyage' value=''/> - <div class="clearBoth"/> <pre id='importLogVoyage' style="font-weight: bold;"></pre> <br/> <s:label key='echobase.common.importDate' value=''/> - <div class="clearBoth"/> <pre id='importLogDate' style="font-weight: bold;"></pre> <br/> <s:label key='echobase.common.importText' value=''/> - <div class="clearBoth"/> <pre id='importLogText' style="font-weight: bold;"></pre> <br/> <s:label key='echobase.common.importUser' value=''/> - <div class="clearBoth"/> <pre id='importLogUser' style="font-weight: bold;"></pre> </div> </fieldset> @@ -156,6 +172,6 @@ <br/> <s:submit id='confirmDelete' action="confirmDelete" method="input" onclick="return checkOneRowSelected();" - key="echobase.action.delete.selectedImport" /> + key="echobase.action.delete.selectedImport"/> </s:form> \ No newline at end of file Added: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp (rev 0) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp 2012-09-21 13:25:26 UTC (rev 678) @@ -0,0 +1,223 @@ +<%-- +#%L + EchoBase :: UI + $Id$ + $HeadURL: http://svn.forge.codelutin.com/svn/echobase/trunk/echobase-ui/src/main/webap... $ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% +--%> +<%@page contentType="text/html" pageEncoding="UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> +<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %> +<script type="text/javascript" + src="<s:url value='/js/gridHelper.js' />"></script> + +<s:set var="importTooltip"> + <s:text name="echobase.message.clickToShowImportDefail"/> +</s:set> + +<script type="text/javascript"> + + function loadImportLogDetail(importLogId) { + $.ajax( + { + url:'<s:url action="getDashboardImportLog" namespace="/workingDb"/>', + data:{importLogId:importLogId}, + async:false, + dataType:"json", + success:function (data, textStatus) { + + $('#noImportLogDetail').hide(); + $('#importLogDetail').show(); + var json = data.data; + + if ($('#noVoyageDetail').is(":visible")) { + + // need to load voyage + loadVoyageDetail(json['voyageId']); + } + + $('#importLogVoyage').html(json['voyageId_lbl']); + $('#importLogText').html(json['importText']); + $('#importLogUser').html(json['importUser']); + $('#importLogDate').html(json['importDate']); + $('#importLogImportType').html(json['importType']); + } + }); + return false; + } + + function loadVoyageDetail(voyageId) { + $.ajax( + { + url:'<s:url action="getDashboardVoyage" namespace="/workingDb"/>', + data:{voyageId:voyageId}, + async:false, + dataType:"json", + success:function (data, textStatus) { + + $('#noVoyageDetail').hide(); + $('#voyageDetail').show(); + var json = data.data; + + $('#voyageMission').html(json['mission_lbl']); + $('#voyageAreaOfOperation').html(json['areaOfOperation_lbl']); + $('#voyageStartEndPort').html(json['startPort'] + " - " + json['endPort']); + $('#voyageStartEndDate').html(json['startDate'] + " - " + json['endDate']); + $('#voyageDatum').html(json['datum']); + $('#voyageName').html(json['name']); + $('#voyageDescription').html(json['description']); + + } + }); + return false; + } + + function formatImportLogs(cellvalue, options, rowObject) { + var result = "<ul>"; + var importMapping = rowObject['importLogs']; + $(cellvalue).each(function () { + var importId = this; + var val = importMapping[importId]; + result += "<li><a href='#' title='${importTooltip}' onclick='return loadImportLogDetail(\"" + importId + + "\")' class='fontsize11'>" + val + "</a></li>"; + }); + result += "</ul>"; + return result; + } + + jQuery(document).ready(function () { + + // display voyage infos + $.addRowSelectTopic('voyages', function () { + var voyageId = $("tr[aria-selected=true] td[aria-describedby='voyages_id']").text(); + loadVoyageDetail(voyageId); + }); + + $.addClearSelectTopic('voyages', function (event) { + + $('#noImportLogDetail').show(); + $('#importLogDetail').hide(); + $('#noVoyageDetail').show(); + $('#voyageDetail').hide(); + }); + $.addEvenAndOddClasses('voyages'); + }); + + +</script> + +<title><s:text name="echobase.title.importLogs"/></title> + +<s:url id="loadUrl" action="getDashboardImportLogs" namespace="/workingDb" + escapeAmp="false"/> +<sjg:grid id="voyages" dataType="json" href="%{loadUrl}" gridModel="datas" + pager="true" pagerButtons="true" pagerInput="true" navigator="true" + autowidth="true" rownumbers="false" viewrecords="true" + navigatorEdit="false" navigatorSearch="false" + navigatorDelete="false" + navigatorAdd="false" rowList="10,15,20,50,100,250,500" rowNum="10" + onSelectRowTopics="voyages-rowSelect" + onCellSelectTopics="voyages-rowSelect" + onCompleteTopics="voyages-clearSelect"> + + <sjg:gridColumn name="id" title="id" hidden="true"/> + <sjg:gridColumn name="id_lbl" sortable="true" + title="%{getText('echobase.common.voyage')}"/> + + <s:iterator value="%{importTypes.entrySet()}" var="entry"> + <sjg:gridColumn name="importType.%{#entry.key}" sortable="true" + title="%{#entry.value}" formatter="formatImportLogs"/> + </s:iterator> +</sjg:grid> +<br/> + + +<fieldset> + <legend><s:text name="echobase.title.voyage.detail"/></legend> + + <div id="noVoyageDetail"> + <pre> + <s:text name="echobase.message.noVoyageSelected"/> + </pre> + </div> + <div id="voyageDetail"> + + <s:label key='echobase.common.name' value=''/> + <pre id='voyageName' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.description' value=''/> + <pre id='voyageDescription' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.mission' value=''/> + <pre id='voyageMission' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.areaOfOperation' value=''/> + <pre id='voyageAreaOfOperation' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.startEndPort' value=''/> + <pre id='voyageStartEndPort' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.startEndDate' value=''/> + <pre id='voyageStartEndDate' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.datum' value=''/> + <pre id='voyageDatum' style="font-weight: bold;"></pre> + <br/> + + </div> + +</fieldset> + +<fieldset> + <legend><s:text name="echobase.title.importLog.detail"/></legend> + + <div id="noImportLogDetail"> + <pre> + <s:text name="echobase.message.noImportLogSelected"/> + </pre> + </div> + <div id="importLogDetail"> + + <s:label key='echobase.common.importType' value=''/> + <pre id='importLogImportType' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.voyage' value=''/> + <pre id='importLogVoyage' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.importDate' value=''/> + <pre id='importLogDate' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.importText' value=''/> + <pre id='importLogText' style="font-weight: bold;"></pre> + <br/> + + <s:label key='echobase.common.importUser' value=''/> + <pre id='importLogUser' style="font-weight: bold;"></pre> + </div> + +</fieldset> Property changes on: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/dashboard.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/information.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/information.jsp 2012-09-21 10:32:50 UTC (rev 677) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/workingDb/information.jsp 2012-09-21 13:25:26 UTC (rev 678) @@ -87,6 +87,10 @@ <s:submit theme="simple" action="disconnect" key="echobase.action.workingDbconfiguration.disconnect"/> </li> + <li> + <s:submit theme="simple" action="dashboard" + key="echobase.action.dashboard"/> + </li> </ul> </s:form>