This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository coser. See http://git.codelutin.com/coser.git commit b1db4c72b300c4c8b47107f5fa1afdbf191b08f1 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jan 12 18:46:04 2015 +0100 fixes #6444: Problème de cohérence de l'écran d'extraction des données --- .../request/ExtractRawDataAndResultsRequest.java | 27 ++++- .../main/java/fr/ifremer/coser/util/DataType.java | 48 +++++++- .../coser/web/actions/search/ExtractAction.java | 133 +++++---------------- .../WEB-INF/content/search/extract-input.jsp | 120 +++++++++---------- 4 files changed, 149 insertions(+), 179 deletions(-) diff --git a/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java b/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java index e6d1d97..521ee4f 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java +++ b/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java @@ -59,12 +59,27 @@ public class ExtractRawDataAndResultsRequest implements CoserRequest, CoserReque @Override public boolean isFilled() { - return !(CollectionUtils.isEmpty(extractTypeList) || - CollectionUtils.isEmpty(zoneList) || - CollectionUtils.isEmpty(speciesList) || - (CollectionUtils.isEmpty(populationIndicatorList) && - CollectionUtils.isEmpty(communityIndicatorList)) - ); + boolean filled = CollectionUtils.isNotEmpty(extractTypeList) + && CollectionUtils.isNotEmpty(zoneList); + + if (filled) { + if (DataType.isNeedSpecies(extractTypeList)) { + filled = CollectionUtils.isNotEmpty(speciesList); + } + } + + if (filled) { + if (extractTypeList.contains(DataType.COMMUNITY)) { + filled = CollectionUtils.isNotEmpty(communityIndicatorList); + } + } + if (filled) { + if (extractTypeList.contains(DataType.POPULATION)) { + filled = CollectionUtils.isNotEmpty(populationIndicatorList); + } + } + + return filled; } @Override diff --git a/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java b/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java index bb8ce66..a97075a 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java +++ b/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java @@ -22,10 +22,13 @@ package fr.ifremer.coser.util; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; +import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import static org.nuiton.i18n.I18n.l; import static org.nuiton.i18n.I18n.n; @@ -38,15 +41,20 @@ import static org.nuiton.i18n.I18n.n; * @since 1.4 */ public enum DataType { - MAP(n("coser.business.data.type.map")), - POPULATION(n("coser.business.data.type.population")), - COMMUNITY(n("coser.business.data.type.community")), - SOURCE(n("coser.business.data.type.source")); + MAP(n("coser.business.data.type.map"), true, false), + POPULATION(n("coser.business.data.type.population"), true, true), + COMMUNITY(n("coser.business.data.type.community"), true, true), + SOURCE(n("coser.business.data.type.source"), false, false); private final String i18nKey; - DataType(String i18nKey) { + private final boolean needSpecies; + private final boolean indicator; + + DataType(String i18nKey, boolean needSpecies, boolean indicator) { this.i18nKey = i18nKey; + this.needSpecies = needSpecies; + this.indicator=indicator; } public String getLabel(Locale locale) { @@ -60,4 +68,34 @@ public enum DataType { } return result; } + + public static boolean isNeedSpecies(List<DataType> types) { + + boolean result = false; + + for (DataType type : types) { + if (type.needSpecies) { + result = true; + break; + } + } + + return result; + + } + + public static boolean isIndicator(List<DataType> types) { + + boolean result = false; + + for (DataType type : types) { + if (type.indicator) { + result = true; + break; + } + } + + return result; + + } } diff --git a/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java b/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java index 4729157..61fb4fa 100644 --- a/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java +++ b/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java @@ -52,10 +52,10 @@ import java.util.Map; * @since 1.4 */ @InterceptorRefs({ - @InterceptorRef("defaultStack"), - @InterceptorRef(value = "execAndWait", - params = {"excludeMethods", "execute,quality"}) - }) + @InterceptorRef("defaultStack"), + @InterceptorRef(value = "execAndWait", + params = {"excludeMethods", "execute,quality"}) +}) public class ExtractAction extends AbstractCoserJspAction implements ServletRequestAware { /** serialVersionUID. */ @@ -194,32 +194,33 @@ public class ExtractAction extends AbstractCoserJspAction implements ServletRequ toRequest(); zones = getService().toMap(zonesRequest); - if (CollectionUtils.isNotEmpty(selectZones)) { + if (CollectionUtils.isNotEmpty(selectZones) && CollectionUtils.isNotEmpty(selectTypes)) { - GetSpeciesForExtractRawDataAndResultsRequest speciesRequest = - requestBuilder(GetSpeciesForExtractRawDataAndResultsRequest.class). + GetIndicatorsForExtractRawDataAndResultsRequest indicatorsRequest = + requestBuilder(GetIndicatorsForExtractRawDataAndResultsRequest.class). addZoneList(selectZones). - addExtractTypeList(selectTypes). toRequest(); - species = getService().toMap(speciesRequest); - if (selectTypes != null) { + if (selectTypes.contains(DataType.COMMUNITY)) { - GetIndicatorsForExtractRawDataAndResultsRequest indicatorsRequest = - requestBuilder(GetIndicatorsForExtractRawDataAndResultsRequest.class). - addZoneList(selectZones). - toRequest(); + indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.COMMUNITY)); + comIndicators = getService().toMap(indicatorsRequest); + } - if (selectTypes.contains(DataType.COMMUNITY)) { + if (selectTypes.contains(DataType.POPULATION)) { + indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.POPULATION)); + popIndicators = getService().toMap(indicatorsRequest); + } - indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.COMMUNITY)); - comIndicators = getService().toMap(indicatorsRequest); - } + if (DataType.isNeedSpecies(selectTypes)) { + + GetSpeciesForExtractRawDataAndResultsRequest speciesRequest = + requestBuilder(GetSpeciesForExtractRawDataAndResultsRequest.class). + addZoneList(selectZones). + addExtractTypeList(selectTypes). + toRequest(); + species = getService().toMap(speciesRequest); - if (selectTypes.contains(DataType.POPULATION)) { - indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.POPULATION)); - popIndicators = getService().toMap(indicatorsRequest); - } } } } @@ -304,87 +305,9 @@ public class ExtractAction extends AbstractCoserJspAction implements ServletRequ return "Indicateurs_Ifremer.zip"; } - // @Action(value = "extract-quality", -// results = { -// @Result(location = "/WEB-INF/content/search/extract-success.jsp"), -// @Result(name = DOWNLOAD, type = "redirect", params = { -// "location", "${location}"})}) -// public String quality() { -// String result; -// if (!accepted) { -// addFieldError("accepted", getText("message.quality.notaccepted")); -// result = SUCCESS; -// } else { -// -// // petit hack pour mettre la locale dans la session car -// // après, on n'a plus accès au context dans le executeAndWait -// request.getSession().setAttribute("locale", getLocale()); -// result = DOWNLOAD; -// } -// return result; -// } -// -// protected File zipFile; -// -// @Override -// public String execute() { -// -// String result; -// -// if (StringUtils.isNotBlank(submitAction)) { -// result = SUCCESS; -// } else { -// result = INPUT; -// Locale locale = getLocale(); -// WebService webService = ServiceFactory.getWebService(); -// -// try { -// // renvoi la liste des id subzone-survey et leurs label associé -// zones = webService.getZoneForFacade(null, false, false); -// if (CollectionUtils.isNotEmpty(selectZones)) { -// species = webService.getSpecies(selectZones, false); -// -// if (selectTypes != null && selectTypes.contains(DataType.COMMUNITY)) { -// comIndicators = webService.getIndicators(selectZones, DataType.COMMUNITY, locale); -// } -// if (selectTypes != null && selectTypes.contains(DataType.POPULATION)) { -// popIndicators = webService.getIndicators(selectZones, DataType.POPULATION, locale); -// } -// } -// } catch (CoserBusinessException ex) { -// throw new CoserWebException("Can't get zone map", ex); -// } -// } -// -// return result; -// } -// -// public String download() { -// try { -// Locale locale = (Locale)request.getSession().getAttribute("locale"); -// WebService webService = ServiceFactory.getWebService(); -// -// zipFile = webService.extractData(selectZones, selectTypes, selectSpecies, -// selectComIndicators, selectPopIndicators, locale); -// } catch (Exception ex) { -// if (log.isErrorEnabled()) { -// log.error("Can't extract data", ex); -// } -// throw new CoserWebException("Can't extract data", ex); -// } -// return "success"; -// } -// -// public InputStream getInputStream() { -// InputStream is = null; -// try { -// is = new FileInputStream(zipFile); -// } catch (Exception ex) { -// if (log.isErrorEnabled()) { -// log.error("Can't extract data", ex); -// } -// throw new CoserWebException("Can't extract data", ex); -// } -// return is; -//} + public boolean isNeedSpeciesOrIndicators() { + return CollectionUtils.isNotEmpty(selectTypes) && + (DataType.isNeedSpecies(selectTypes) || DataType.isIndicator(selectTypes)); + } + } diff --git a/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp b/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp index 7301740..fffebd1 100644 --- a/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp +++ b/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp @@ -30,11 +30,11 @@ } </style> <script type="text/javascript"> - var checkNextAction= function() { + var checkNextAction = function() { - var valid = $('#selectZones option:selected').length>0; + var valid = $('#selectZones option:selected').length > 0; if (valid) { - valid = $('#selectTypes option:selected').length >0; + valid = $('#selectTypes option:selected').length > 0; } var action = $('#nextAction'); if (valid) { @@ -42,15 +42,12 @@ } else { action.attr('disabled', 'disabled'); } - return valid; + $('#extractPart').hide(); }; var checkSubmitAction = function() { - var valid = checkNextAction(); + var valid = $('#selectSpecies option:selected').length > 0; - if (valid) { - valid = $('#selectSpecies option:selected').length > 0; - } if (valid && $('#selectComIndicators').is(":visible")) { valid = $('#selectComIndicators option:selected').length > 0; } @@ -66,15 +63,25 @@ return valid; }; <s:if test="!selectZones.empty"> - var f = checkSubmitAction; + + $(document).ready(function () { + $('.select1').change(checkNextAction).trigger( "change" ); + $('.select2').change(checkSubmitAction).trigger( "change" ); + checkNextAction(); + checkSubmitAction(); + $('#extractPart').show(); + }); + </s:if> <s:else> - var f = checkNextAction; + $(document).ready(function () { + $('.select1').change(checkNextAction).trigger( "change" ); + + checkNextAction(); + }); + </s:else> - $(document).ready(function () { - $('select').change(f).trigger( "change" ); - f(); - }); + </script> </head> <body> @@ -88,7 +95,7 @@ <td><s:text name="message.common.zones" /> :</td> <td> <select name="selectZones" multiple="multiple" id="selectZones" - class="select"> + class="select select1"> <s:iterator value="zones" var="zone"> <option value="<s:property value="key" />" <s:if test="selectZones.contains(#zone.key)"> @@ -110,7 +117,7 @@ <td><s:text name="message.common.datatypes" /> :</td> <td> <select name="selectTypes" multiple="multiple" id="selectTypes" - class="select"> + class="select select1"> <s:iterator value="types" var="type"> <option value="<s:property value="key" />" <s:if test="selectTypes.contains(#type.key)"> @@ -119,28 +126,7 @@ <s:property value="value" /></option> </s:iterator> </select> - </td><%-- - <option value="<s:property value="@fr.ifremer.coser.util.DataType@MAP" />" - <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@MAP)"> - selected="selected" - </s:if>> - <s:text name="message.index.datatypemap" /></option> - <option value="<s:property value="@fr.ifremer.coser.util.DataType@POPULATION" />" - <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@POPULATION)"> - selected="selected" - </s:if>> - <s:text name="message.index.datatypepop" /></option> - <option value="<s:property value="@fr.ifremer.coser.util.DataType@COMMUNITY" />" - <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@COMMUNITY)"> - selected="selected" - </s:if>> - <s:text name="message.index.datatypecom" /></option> - <option value="<s:property value="@fr.ifremer.coser.util.DataType@SOURCE" />" - <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@SOURCE)"> - selected="selected" - </s:if>> - <s:text name="message.index.datatypesource.short" /></option> - </select></td>--%> + </td> <td style="vertical-align:top"> <img src="<s:url value='/images/stock_select_table.png' />" onClick="javascript:coserSelectAll($('#selectTypes'))" @@ -148,7 +134,8 @@ <br /> <img src="<s:url value='/images/stock_select_clear.png' />" onClick="javascript:coserUnSelectAll($('#selectTypes'))" - title="<s:text name="message.common.selectnone" />" /></td> + title="<s:text name="message.common.selectnone" />" /> + </td> </tr> <tr> <td colspan="2"><s:submit id='nextAction' @@ -157,6 +144,9 @@ </table> <s:if test="!selectZones.empty"> +<span id="extractPart"> + <s:if test="needSpeciesOrIndicators"> + <h2><s:text name="message.search.extract.speciesindicators" /></h2> <table style="width:100%"> @@ -166,7 +156,7 @@ <s:text name="message.common.community" /> :</td> <td> <select name="selectComIndicators" multiple="multiple" - class="select" size="10" id="selectComIndicators"> + class="select select2" size="10" id="selectComIndicators"> <s:iterator value="comIndicators" var="comIndicator"> <option value="<s:property value="key" />" <s:if test="selectComIndicators.contains(#comIndicator.key)"> @@ -191,7 +181,7 @@ <s:text name="message.common.population" /> :</td> <td> <select name="selectPopIndicators" multiple="multiple" - class="select" size="10" id="selectPopIndicators"> + class="select select2" size="10" id="selectPopIndicators"> <s:iterator value="popIndicators" var="popIndicator"> <option value="<s:property value="key" />" <s:if test="selectPopIndicators.contains(#popIndicator.key)"> @@ -210,28 +200,31 @@ title="<s:text name="message.common.selectnone" />" /></td> </tr> </s:if> - <tr> - <td><s:text name="message.common.species" /> :</td> - <td> - <select name="selectSpecies" multiple="multiple" - class="select" size="10" id="selectSpecies"> - <s:iterator value="species" var="specy"> - <option value="<s:property value="key" />" - <s:if test="selectSpecies.contains(#specy.key)"> - selected="selected" - </s:if>> - <s:property value="value" /></option> - </s:iterator> - </select></td> - <td style="vertical-align:top"> - <img src="<s:url value='/images/stock_select_table.png' />" - onClick="javascript:coserSelectAll($('#selectSpecies'))" - title="<s:text name="message.common.selectall" />" /> - <br /> - <img src="<s:url value='/images/stock_select_clear.png' />" - onClick="javascript:coserUnSelectAll($('#selectSpecies'))" - title="<s:text name="message.common.selectnone" />" /></td> - </tr> + <s:if test="species != null"> + <tr> + <td><s:text name="message.common.species" /> :</td> + <td> + <select name="selectSpecies" multiple="multiple" + class="select select2" size="10" id="selectSpecies"> + <s:iterator value="species" var="specy"> + <option value="<s:property value="key" />" + <s:if test="selectSpecies.contains(#specy.key)"> + selected="selected" + </s:if>> + <s:property value="value" /></option> + </s:iterator> + </select></td> + <td style="vertical-align:top"> + <img src="<s:url value='/images/stock_select_table.png' />" + onClick="javascript:coserSelectAll($('#selectSpecies'))" + title="<s:text name="message.common.selectall" />" /> + <br /> + <img src="<s:url value='/images/stock_select_clear.png' />" + onClick="javascript:coserUnSelectAll($('#selectSpecies'))" + title="<s:text name="message.common.selectnone" />" /></td> + </tr> + </s:if> + </s:if> <tr> <td colspan="2"><s:submit name="submitAction" value="%{getText('message.search.extract.extract')}" @@ -239,6 +232,7 @@ </tr> </table> </s:if> +</span> </form> </body> </html> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.