teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts; ingo@1855: ingo@1855: import java.util.List; ingo@1855: ingo@1855: import org.w3c.dom.Document; ingo@1855: ingo@1855: import org.apache.log4j.Logger; ingo@1855: ingo@1855: import com.vividsolutions.jts.geom.Envelope; ingo@1855: teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.CallMeta; ingo@1855: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.State; ingo@1855: teichmann@5831: import org.dive4elements.river.model.HWSLine; teichmann@5831: import org.dive4elements.river.model.River; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.RiverFactory; teichmann@5865: import org.dive4elements.river.utils.RiverUtils; teichmann@5831: import org.dive4elements.river.utils.GeometryUtils; ingo@1855: ingo@1855: aheinecke@5347: public class WMSHWSLinesArtifact extends WMSDBArtifact { ingo@1855: aheinecke@5347: public static final String NAME = "hws_lines"; ingo@1855: ingo@1855: ingo@1855: private static final Logger logger = aheinecke@5347: Logger.getLogger(WMSHWSLinesArtifact.class); ingo@1855: ingo@1855: ingo@1855: @Override ingo@1855: public void setup( ingo@1855: String identifier, ingo@1855: ArtifactFactory factory, ingo@1855: Object context, ingo@1855: CallMeta callMeta, ingo@1855: Document data) ingo@1855: { aheinecke@5347: logger.debug("WMSHWSLinesArtifact.setup"); ingo@1855: ingo@1855: super.setup(identifier, factory, context, callMeta, data); ingo@1855: } ingo@1855: ingo@1855: ingo@1855: @Override ingo@1855: public String getName() { ingo@1855: return NAME; ingo@1855: } ingo@1855: ingo@1855: ingo@1855: @Override ingo@1855: public State getCurrentState(Object cc) { aheinecke@5347: State s = new HWSLinesState(this); ingo@1855: bjoern@4497: List fs = getFacets(getCurrentStateId()); ingo@1855: ingo@1855: DefaultOutput o = new DefaultOutput( ingo@1855: "floodmap", ingo@1855: "floodmap", ingo@1855: "image/png", ingo@1855: fs, ingo@1855: "map"); ingo@1855: ingo@1855: s.getOutputs().add(o); ingo@1855: ingo@1855: return s; ingo@1855: } ingo@1855: ingo@1855: aheinecke@5347: public static class HWSLinesState extends WMSDBState implements FacetTypes ingo@1855: { ingo@1855: private static final Logger logger = aheinecke@5347: Logger.getLogger(HWSLinesState.class); ingo@1855: ingo@1855: protected int riverId; ingo@1855: aheinecke@5347: public HWSLinesState(WMSDBArtifact artifact) { ingo@1855: super(artifact); ingo@1855: riverId = 0; ingo@1855: } ingo@1855: ingo@1855: public int getRiverId() { ingo@1855: if (riverId == 0) { ingo@2672: String ids = artifact.getDataAsString("ids"); ingo@2672: String[] parts = ids.split(";"); ingo@1855: ingo@1855: try { sascha@3405: riverId = Integer.parseInt(parts[0]); ingo@1855: } ingo@1855: catch (NumberFormatException nfe) { ingo@2672: logger.error("Cannot parse river id from '" + parts[0] + "'"); ingo@1855: } ingo@1855: } ingo@1855: ingo@1855: return riverId; ingo@1855: } ingo@1855: ingo@1855: @Override ingo@1855: protected String getFacetType() { aheinecke@5347: return FLOODMAP_HWS_LINES; ingo@1855: } ingo@1855: ingo@1855: @Override ingo@1855: protected String getUrl() { teichmann@5865: return RiverUtils.getUserWMSUrl(artifact.identifier()); ingo@1855: } ingo@1855: ingo@1855: @Override ingo@1855: protected String getSrid() { ingo@1855: River river = RiverFactory.getRiver(getRiverId()); teichmann@5865: return RiverUtils.getRiverSrid(river.getName()); ingo@1855: } ingo@1855: ingo@1855: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { aheinecke@5094: List hws = HWSLine.getLines(getRiverId(), getName()); ingo@1855: ingo@1855: Envelope max = null; ingo@1855: aheinecke@5094: for (HWSLine h: hws) { ingo@1855: Envelope env = h.getGeom().getEnvelopeInternal(); ingo@1855: ingo@1855: if (max == null) { ingo@1855: max = env; ingo@1855: continue; ingo@1855: } ingo@1855: ingo@1855: max.expandToInclude(env); ingo@1855: } ingo@1855: ingo@3918: return max != null && reproject ingo@3301: ? GeometryUtils.transform(max, getSrid()) ingo@3301: : max; ingo@1855: } ingo@1855: ingo@1855: @Override ingo@1855: protected String getFilter() { ingo@2672: return "river_id=" + String.valueOf(getRiverId()) ingo@2672: + " AND name='" + getName() + "'"; ingo@1855: } ingo@1855: ingo@1855: @Override ingo@1855: protected String getDataString() { ingo@1855: String srid = getSrid(); ingo@1855: teichmann@5865: if (RiverUtils.isUsingOracle()) { aheinecke@5347: return "geom FROM hws_lines USING SRID " + srid; ingo@1855: } ingo@1855: else { aheinecke@5347: return "geom FROM hws_lines USING UNIQUE id USING SRID " + srid; ingo@1855: } ingo@1855: } ingo@1855: ingo@1855: @Override ingo@1855: protected String getGeometryType() { ingo@1855: return "LINE"; ingo@1855: } aheinecke@5347: } ingo@1855: } ingo@1855: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :