Author: tchemit Date: 2013-09-11 17:58:38 +0200 (Wed, 11 Sep 2013) New Revision: 844 Url: http://forge.codelutin.com/projects/echobase/repository/revisions/844 Log: refs #3061: Visualisation des donn?\195?\169es spatiales Removed: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportquery/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/embeddedapplication/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportdb/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/exportquery/ Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData-validation.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/jsp/spatial/showData.jsp Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellDAOImpl.java 2013-09-11 15:58:38 UTC (rev 844) @@ -24,7 +24,7 @@ */ import com.google.common.collect.Lists; -import fr.ifremer.echobase.EchoBasePredicates; +import fr.ifremer.echobase.entities.references.CellType; import fr.ifremer.echobase.entities.spatial.CellPoint; import org.nuiton.topia.framework.TopiaSQLQuery; @@ -36,38 +36,42 @@ public class CellDAOImpl<E extends Cell> extends CellDAOAbstract<E> { - public List<CellPoint> getVoyageCellPoints(Voyage voyage) { + public List<CellPoint> getVoyageCellPoints(Voyage voyage, CellType cellType) { List<CellPoint> result = Lists.newArrayList(); - TopiaSQLQuery<CellPoint> queryPoint = newLatLongSqlQuery(voyage.getTopiaId()); - TopiaSQLQuery<CellPoint> queryPoint3D = newLatLongDepthSqlQuery(voyage.getTopiaId()); + String voyageId = voyage.getTopiaId(); + String cellTypeId = cellType == null ? null : cellType.getTopiaId(); + TopiaSQLQuery<CellPoint> queryPoint = newLatLongSqlQuery(voyageId, cellTypeId); + TopiaSQLQuery<CellPoint> queryPoint3D = newLatLongDepthSqlQuery(voyageId, cellTypeId); + result.addAll(queryPoint.findMultipleResult(context)); result.addAll(queryPoint3D.findMultipleResult(context)); return result; } - public CellPoint getPoint(E cell) { +// public CellPoint getPoint(E cell) { +// +// TopiaSQLQuery<CellPoint> query = null; +// if (EchoBasePredicates.IS_ESDU_CELL.apply(cell)) { +// +// query = newLatLongSqlQuery(cell.getTopiaId(), null); +// } else if (EchoBasePredicates.IS_ELEMENTARY_CELL.apply(cell)) { +// query = newLatLongDepthSqlQuery(cell.getTopiaId(), null); +// } +// CellPoint result = query == null ? null : query.findSingleResult(context); +// return result; +// } - TopiaSQLQuery<CellPoint> query = null; - if (EchoBasePredicates.IS_ESDU_CELL.apply(cell)) { - - query = newLatLongSqlQuery(cell.getTopiaId()); - } else if (EchoBasePredicates.IS_ELEMENTARY_CELL.apply(cell)) { - query = newLatLongDepthSqlQuery(cell.getTopiaId()); - } - CellPoint result = query == null ? null : query.findSingleResult(context); - return result; - } - - protected TopiaSQLQuery<CellPoint> newLatLongSqlQuery(final String voyageId) { + protected TopiaSQLQuery<CellPoint> newLatLongSqlQuery(final String voyageId, final String cellTypeId) { return new TopiaSQLQuery<CellPoint>() { @Override protected PreparedStatement prepareQuery(Connection connection) throws SQLException { - PreparedStatement ps = connection.prepareStatement("SELECT cellId, ST_Y(ST_ASTEXT(coordinate)), ST_X(ST_ASTEXT(coordinate)) FROM echobase_cell_spatial WHERE coordinate IS NOT NULL AND voyageId = ?"); + PreparedStatement ps = connection.prepareStatement("SELECT cellId, ST_Y(ST_ASTEXT(coordinate)), ST_X(ST_ASTEXT(coordinate)) FROM echobase_cell_spatial WHERE coordinate IS NOT NULL AND voyageId = ? AND celltypeid = ?"); ps.setString(1, voyageId); + ps.setString(2, cellTypeId); return ps; } @@ -81,13 +85,14 @@ }; } - protected TopiaSQLQuery<CellPoint> newLatLongDepthSqlQuery(final String voyageId) { + protected TopiaSQLQuery<CellPoint> newLatLongDepthSqlQuery(final String voyageId, final String cellTypeId) { return new TopiaSQLQuery<CellPoint>() { @Override protected PreparedStatement prepareQuery(Connection connection) throws SQLException { - PreparedStatement ps = connection.prepareStatement("SELECT cellId, ST_Y(ST_ASTEXT(coordinate3D)), ST_X(ST_ASTEXT(coordinate3D)) , ST_Y(ST_ASTEXT(coordinate3D)) FROM echobase_cell_spatial WHERE coordinate3D IS NOT NULL AND voyageId = ?"); + PreparedStatement ps = connection.prepareStatement("SELECT cellId, ST_Y(ST_ASTEXT(coordinate3D)), ST_X(ST_ASTEXT(coordinate3D)) , ST_Y(ST_ASTEXT(coordinate3D)) FROM echobase_cell_spatial WHERE coordinate3D IS NOT NULL AND voyageId = ? AND celltypeid = ?"); ps.setString(1, voyageId); + ps.setString(2, cellTypeId); return ps; } Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/spatial/SpatialConfiguration.java 2013-09-11 15:58:38 UTC (rev 844) @@ -44,6 +44,9 @@ /** Selected data metadata id (can't be null). */ protected String dataMetadataId; + /** Selected data cell type id (can't be null). */ + protected String cellTypeId; + /** Selected species id (can be null). */ protected String speciesId; @@ -74,6 +77,14 @@ this.dataMetadataId = dataMetadataId; } + public String getCellTypeId() { + return cellTypeId; + } + + public void setCellTypeId(String cellTypeId) { + this.cellTypeId = cellTypeId; + } + public String getSpeciesId() { return speciesId; } @@ -99,6 +110,7 @@ return !(jdbcUrl != null ? !jdbcUrl.equals(that.jdbcUrl) : that.jdbcUrl != null) && !(dataMetadataId != null ? !dataMetadataId.equals(that.dataMetadataId) : that.dataMetadataId != null) && + !(cellTypeId != null ? !cellTypeId.equals(that.cellTypeId) : that.cellTypeId!= null) && !(echotypeId != null ? !echotypeId.equals(that.echotypeId) : that.echotypeId != null) && !(speciesId != null ? !speciesId.equals(that.speciesId) : that.speciesId != null) && !(voyageId != null ? !voyageId.equals(that.voyageId) : that.voyageId != null); @@ -109,6 +121,7 @@ int result = jdbcUrl == null ? 0 : jdbcUrl.hashCode(); result = 31 * result + (voyageId == null ? 0 : voyageId.hashCode()); result = 31 * result + (dataMetadataId == null ? 0 : dataMetadataId.hashCode()); + result = 31 * result + (cellTypeId == null ? 0 : cellTypeId.hashCode()); result = 31 * result + (speciesId == null ? 0 : speciesId.hashCode()); result = 31 * result + (echotypeId == null ? 0 : echotypeId.hashCode()); return result; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/DecoratorService.java 2013-09-11 15:58:38 UTC (rev 844) @@ -232,10 +232,10 @@ registerJXPathDecorator(locale, CellMethod.class, "${name}$s"); // CellType decorator - registerJXPathDecorator(locale, CellType.class, "${name}$s"); + registerJXPathDecorator(locale, CellType.class, "${id}$s (${name}$s)"); // DataMetadata decorator - registerJXPathDecorator(locale, DataMetadata.class, "${name}$s - ${standardName}$s"); + registerJXPathDecorator(locale, DataMetadata.class, "${name}$s (${longName}$s)"); //registerJXPathDecorator(locale, DataMetadata.class, "${name}$s"); // DataProtocol decorator @@ -322,7 +322,7 @@ // Species decorator //registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s (${baracoudaCode}$s)"); - registerJXPathDecorator(locale, Species.class, "${genusSpecies}$s"); + registerJXPathDecorator(locale, Species.class, "${baracoudaCode}$s (${genusSpecies}$s)"); // SpeciesCategory decorator registerJXPathDecorator(locale, SpeciesCategory.class, "${species/genusSpecies}$s ${sizeCategoryLabel}$s ${ageCategoryLabel}$s ${sexCategoryLabel}$s"); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java 2013-09-11 15:58:38 UTC (rev 844) @@ -32,12 +32,14 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import fr.ifremer.echobase.EchoBaseFunctions; +import fr.ifremer.echobase.entities.TopiaEchoBasePersistenceContext; import fr.ifremer.echobase.entities.data.Category; import fr.ifremer.echobase.entities.data.CellDAO; import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.ResultDAO; import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.CellType; import fr.ifremer.echobase.entities.references.DataMetadata; import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.entities.spatial.CellPoint; @@ -45,11 +47,9 @@ import fr.ifremer.echobase.entities.spatial.SpatialData; import fr.ifremer.echobase.entities.spatial.SpatialDataCache; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.service.DecoratorService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; import org.nuiton.topia.persistence.TopiaEntities; import org.nuiton.util.TimeLog; @@ -70,46 +70,6 @@ public static final TimeLog TILE_LOG = new TimeLog(SpatialService.class); - public Map<String, String> getDataMetadatas(Voyage voyage) { - - Map<String, String> result = Maps.newLinkedHashMap(); - - DecoratorService service = getDecoratorService(); - - Decorator<DataMetadata> decorator = service.getDecorator(getLocale(), DataMetadata.class, null); - - - long s0 = TimeLog.getTime(); - - CellDAO dao = getEchoBasePersistenceContext().getCellDAO(); - ResultDAO resultDao = getEchoBasePersistenceContext().getResultDAO(); - - // get all cell with spatial points - List<CellPoint> voyageCellPoints = dao.getVoyageCellPoints(voyage); - - int nbCells = voyageCellPoints.size(); - s0 = TILE_LOG.log(s0, String.format("Get cell points (%s)", nbCells)); - - final Map<String, CellPoint> cellPointById = Maps.uniqueIndex(voyageCellPoints, EchoBaseFunctions.CELL_POINT_CELL_ID_FUNCTION); - - Set<String> cellIds = Sets.newHashSet(cellPointById.keySet()); - - s0 = TILE_LOG.log(s0, String.format("Get cell points list and map (%s)", nbCells)); - - String query = "SELECT DISTINCT(r.dataMetadata) " + resultDao.createSimpleQuery("r") + " WHERE r.cell.id IN :cell"; - List<DataMetadata> results = resultDao.findAllByQuery(DataMetadata.class, - query, Result.PROPERTY_CELL, cellIds); - - TILE_LOG.log(s0, String.format("Get all matching datametadata (%s)", results.size())); - - for (DataMetadata dataMetadata : results) { - String key = dataMetadata.getTopiaId(); - String value = decorator.toString(dataMetadata); - result.put(key, value); - } - return result; - } - public Set<SpatialData> getSpatialData(SpatialConfiguration model) { SpatialDataCache cache = getSpatialDataCache(); @@ -121,28 +81,38 @@ String voyageId = model.getVoyageId(); String dataMetadataId = model.getDataMetadataId(); + String cellTypeId = model.getCellTypeId(); String speciesId = model.getSpeciesId(); String echotypeId = model.getEchotypeId(); - Voyage voyage = getEchoBasePersistenceContext().getEntityById(Voyage.class, voyageId); + TopiaEchoBasePersistenceContext persistenceContext = getEchoBasePersistenceContext(); + Voyage voyage = persistenceContext.getEntityById(Voyage.class, voyageId); + Preconditions.checkNotNull( voyage, "Could not find voyage with id " + voyageId); DataMetadata dataMetadata = - getEchoBasePersistenceContext().getEntityById(DataMetadata.class, dataMetadataId); + persistenceContext.getEntityById(DataMetadata.class, dataMetadataId); Preconditions.checkNotNull( dataMetadata, "Could not find dataMetadata with id " + dataMetadataId); + CellType cellType = + persistenceContext.getEntityById(CellType.class, cellTypeId); + + Preconditions.checkNotNull( + cellType, + "Could not find cellType with id " + cellTypeId); + Species species = - getEchoBasePersistenceContext().getEntityOrNullById(Species.class, speciesId); + persistenceContext.getEntityOrNullById(Species.class, speciesId); Echotype echotype = - getEchoBasePersistenceContext().getEntityOrNullById(Echotype.class, echotypeId); + persistenceContext.getEntityOrNullById(Echotype.class, echotypeId); List<Predicate<Category>> predicates = Lists.newArrayList(); if (species != null) { @@ -154,7 +124,7 @@ Predicate<Category> acceptPredicate = Predicates.or(predicates); - result = getSpatialData(voyage, dataMetadata, acceptPredicate); + result = getSpatialData(voyage, dataMetadata, cellType, acceptPredicate); cache.put(model, result); } @@ -164,6 +134,7 @@ protected Set<SpatialData> getSpatialData(Voyage voyage, DataMetadata requiredDataMetadata, + CellType cellType, Predicate<Category> acceptPredicate) { long s0 = TimeLog.getTime(); @@ -182,7 +153,7 @@ boolean filterByCategory = CollectionUtils.isNotEmpty(categoryIds); // get all cell with spatial points - List<CellPoint> voyageCellPoints = dao.getVoyageCellPoints(voyage); + List<CellPoint> voyageCellPoints = dao.getVoyageCellPoints(voyage, cellType); int nbCells = voyageCellPoints.size(); s0 = TILE_LOG.log(s0, String.format("Get cell points (%s)", nbCells)); @@ -226,7 +197,7 @@ } })); - s0 = TILE_LOG.log(s0, String.format("Loaded %s result of cell points (%s)", result.size(), nbCells)); + TILE_LOG.log(s0, String.format("Loaded %s result of cell points (%s)", result.size(), nbCells)); return result; } @@ -252,28 +223,6 @@ return speciesPredicate; } -// protected void addResult(Collection<Cell> cells, -// Map<String, String> result, -// Decorator<DataMetadata> decorator) { -// -// if (CollectionUtils.isNotEmpty(cells)) { -// for (Cell cell : cells) { -// if (!cell.isResultEmpty()) { -// -// for (Result result1 : cell.getResult()) { -// -// DataMetadata dataMetadata = result1.getDataMetadata(); -// String key = dataMetadata.getTopiaId(); -// if (!result.containsKey(key)) { -// String value = decorator.toString(dataMetadata); -// result.put(key, value); -// } -// } -// } -// } -// } -// } - public boolean isSpatialAware() { boolean result = getEchoBasePersistenceContext().isSpatialAware(); return result; Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/AbstractGetVoyage.java 2013-09-11 15:58:38 UTC (rev 844) @@ -34,7 +34,7 @@ import java.util.Map; /** - * Obtain all echotypes used for a given voyage. + * Abstract action to obtain some data linked with a given voyage id. * * @author tchemit <chemit@codelutin.com> * @since 2.2 Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData.java 2013-09-11 15:58:38 UTC (rev 844) @@ -26,6 +26,7 @@ import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.interceptor.annotations.InputConfig; import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.CellType; import fr.ifremer.echobase.services.service.WorkingDbPersistenceService; import fr.ifremer.echobase.services.service.spatial.SpatialService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; @@ -55,9 +56,17 @@ return voyages; } + /** Universe of existing cell types. */ + protected Map<String, String> cellTypes; + + public Map<String, String> getCellTypes() { + return cellTypes; + } + @Override public void prepare() throws Exception { voyages = workingDbPersistenceService.loadSortAndDecorate(Voyage.class); + cellTypes = workingDbPersistenceService.loadSortAndDecorate(CellType.class); model.setJdbcUrl(getServiceContext().getWorkgingDbUrl()); model.setWithSpatial(spatialService.isSpatialAware()); @@ -66,7 +75,6 @@ @Override public String input() throws Exception { -// model.setWithSpatial(spatialService.isSpatialAware()); model.setWithData(false); return SUCCESS; } Modified: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData-validation.xml 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/spatial/ShowSpatialData-validation.xml 2013-09-11 15:58:38 UTC (rev 844) @@ -36,5 +36,33 @@ </field-validator> </field> + <field name="model.cellTypeId"> + <field-validator type="nrequiredstring"> + <message key="echobase.error.showData.cellType.required"/> + </field-validator> + </field> + <field name="model.echotypeId"> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ + !(model.echotypeId == null && model.speciesId == null) + ]]> + </param> + <message key="echobase.error.showData.echoTypeOrSpecies.required"/> + </field-validator> + </field> + + <field name="model.speciesId"> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ + !(model.echotypeId == null && model.speciesId == null) + ]]> + </param> + <message key="echobase.error.showData.echoTypeOrSpecies.required"/> + </field-validator> + </field> + + </validators> \ No newline at end of file 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 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2013-09-11 15:58:38 UTC (rev 844) @@ -59,6 +59,7 @@ echobase.common.cellRegionAssociationFile= echobase.common.cellRegionResultFile= echobase.common.cellRegionsFile= +echobase.common.cellType=Cell type echobase.common.dataCentre=Data center echobase.common.dataCentreEmail=Data center email echobase.common.dataMetadata=Data Metadata @@ -222,7 +223,9 @@ echobase.error.query.name.already.exists=Query name already exists echobase.error.required.email=E-mail address required echobase.error.required.password=Password is required +echobase.error.showData.cellType.required=CellType required echobase.error.showData.dataMetadata.required=DataMetadata required +echobase.error.showData.echoTypeOrSpecies.required=Echotype or (and) Species is required echobase.error.showData.voyage.required=Voyage required echobase.error.warlocation.notFound=Database .war file not found at location %s echobase.error.workingDbConfiguration.couldNotConnect=Could not connect to database (%s) 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 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2013-09-11 15:58:38 UTC (rev 844) @@ -60,6 +60,7 @@ echobase.common.cellRegionAssociationFile= echobase.common.cellRegionResultFile= echobase.common.cellRegionsFile= +echobase.common.cellType=Type de cellule echobase.common.dataCentre=Centre de données echobase.common.dataCentreEmail=Courriel du centre de données echobase.common.dataMetadata=Type de donnée @@ -223,7 +224,9 @@ echobase.error.query.name.already.exists=Nom de requête déjà utilisé echobase.error.required.email=Courriel obligatoire echobase.error.required.password=Le mot de passe est obligatoire +echobase.error.showData.cellType.required=La sélection d'un type de cellule est obligatoire echobase.error.showData.dataMetadata.required=La sélection d'un type de donnée est obligatoire +echobase.error.showData.echoTypeOrSpecies.required=La sélection d'un echotype ou (et) d'une espèces est obligatoire echobase.error.showData.voyage.required=La sélection d'une campagne est obligatoire echobase.error.warlocation.notFound=L'application n'a pas été trouvée à l'emplacement suivant %s echobase.error.workingDbConfiguration.couldNotConnect=Impossible de se connecter (%s) Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp 2013-08-20 06:07:41 UTC (rev 843) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/showData.jsp 2013-09-11 15:58:38 UTC (rev 844) @@ -68,6 +68,7 @@ { "model.voyageId": '<s:property value="model.voyageId"/>', "model.dataMetadataId": '<s:property value="model.dataMetadataId"/>', + "model.cellTypeId": '<s:property value="model.cellTypeId"/>', "model.speciesId": '<s:property value="model.speciesId"/>', "model.echotypeId": '<s:property value="model.echotypeId"/>' }, @@ -102,6 +103,10 @@ label='%{getText("echobase.common.dataMetadata")}' headerKey="" headerValue=""/> + <s:select key="model.cellTypeId" requiredLabel="true" + label='%{getText("echobase.common.cellType")}' + list="cellTypes" headerKey="" headerValue=""/> + <sj:select key="model.speciesId" requiredLabel="false" label='%{getText("echobase.common.species")}' headerKey="" headerValue=""/>