Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeArtifact.java @ 6693:88bb0c794833
issue1391: Enable GaugeDischarge artifact to directly load a table by its ID
This allows us to use the GaugeDischargeArtifact for any discharge
tables that we have in our database. The name of the created facet
is taken from the ids string as is also usual in the WMS artifacts.
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Mon, 29 Jul 2013 12:19:57 +0200 |
parents | 20a32dbdbb59 |
children | 8d5ca5175038 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeArtifact.java Mon Jul 29 12:17:11 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeArtifact.java Mon Jul 29 12:19:57 2013 +0200 @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.HashMap; import org.apache.log4j.Logger; @@ -35,6 +36,7 @@ import org.dive4elements.river.model.Gauge; import org.dive4elements.river.model.River; +import org.dive4elements.river.model.DischargeTable; import org.dive4elements.river.utils.RiverUtils; @@ -52,6 +54,8 @@ /** The name of the artifact. */ public static final String ARTIFACT_NAME = "gaugedischarge"; + /** The name a facet should have */ + protected String facetWishName; /** * Trivial Constructor. @@ -79,6 +83,13 @@ String ids = StaticD4EArtifact.getDatacageIDValue(data); addStringData("ids", ids); logger.debug("id for gaugedischarge: " + ids); + String[] splitIds = ids.split(";"); + /* We assume that if an id's string with a ; is given that the + * format is <gauge_name>;<discharge_table_id>;<facet_desc> + * so that a specific discharge table can be selected */ + if (splitIds.length > 2) { + facetWishName = splitIds[2]; + } super.setup(identifier, factory, context, callMeta, data); } @@ -121,7 +132,10 @@ /** Get the Gauges name which came with datacage data-document. */ public String getGaugeName() { - return this.getDataAsString("ids"); + if (getDataAsString("ids") == null) { + return null; + } + return getDataAsString("ids").split(";")[0]; } @@ -166,13 +180,34 @@ } */ - DischargeTables dt = new DischargeTables(river.getName(), getDataAsString("ids")); + Map<String, double [][]> map; - Map<String, double [][]> map = dt.getValues(); + String[] ids = getDataAsString("ids").split(";"); + if (ids.length > 1) { + /* We assume that if an id's string with a ; is given that the + * format is <gauge_name>;<discharge_table_id>;<facet_desc> + * so that a specific discharge table can be selected */ + int tableId = 0; + try { + tableId = Integer.parseInt(ids[1]); + } catch (NumberFormatException e) { + logger.error("Discharge tables ids string is wrong." + + " Fromat is <gauge_name>;<discharge_table_id>;<facet_desc>" + + " Fix your Datacage!"); + // Let's rather break down completly then show the wrong data. + return null; + } + DischargeTable table = DischargeTable.getDischargeTableById(tableId); + map = new HashMap<String, double [][]>(); + map.put(getGaugeName(), DischargeTables.loadDischargeTableValues(table)); + } else { + DischargeTables dt = new DischargeTables(river.getName(), getGaugeName()); + map = dt.getValues(); + } ArrayList<WQKms> res = new ArrayList<WQKms>(); - Gauge gauge = river.determineGaugeByName(this.getDataAsString("ids")); + Gauge gauge = river.determineGaugeByName(getGaugeName()); String name = getGaugeName(); double [][] values = map.get(name); @@ -191,5 +226,13 @@ res.toArray(new WQKms[res.size()]), new Calculation()); } + + /** Gets the facet wish name. + * + * This is a hack to enable setting the name of the facet / theme in the + * UI from the datacage setting. */ + public String getFacetWishName() { + return facetWishName; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :