teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts; rrenkert@5501: rrenkert@5501: import java.util.ArrayList; rrenkert@5501: import java.util.List; rrenkert@5501: rrenkert@5501: import org.apache.log4j.Logger; rrenkert@5501: import org.w3c.dom.Document; rrenkert@5501: teichmann@5831: import org.dive4elements.artifactdatabase.data.DefaultStateData; teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.ArtifactNamespaceContext; teichmann@5831: import org.dive4elements.artifacts.CallMeta; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; teichmann@5831: import org.dive4elements.river.artifacts.model.sq.StaticSQRelation; teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources; teichmann@5831: import org.dive4elements.river.artifacts.states.StaticState; teichmann@5831: import org.dive4elements.river.artifacts.states.sq.SQStaticState; rrenkert@5501: rrenkert@5501: rrenkert@5501: public class SQRelationArtifact rrenkert@5501: extends AbstractStaticStateArtifact rrenkert@5501: { rrenkert@5501: private static final Logger logger = rrenkert@5501: Logger.getLogger(SQRelationArtifact.class); rrenkert@5501: rrenkert@5501: public static final String XPATH_RIVER = "/art:action/art:river/@art:name"; rrenkert@5501: public static final String XPATH_STATION = rrenkert@5501: "/art:action/art:measurement_station/@art:number"; rrenkert@5501: public static final String NAME = "staticsqrelation"; rrenkert@5501: public static final String STATIC_STATE_NAME = "state.sqrelation.static"; rrenkert@5501: public static final String UIPROVIDER = "static_sqrelation"; rrenkert@5501: public static final String SQ_RELATION_OUT_A = "sq_relation_a"; rrenkert@5501: public static final String SQ_RELATION_OUT_B = "sq_relation_b"; rrenkert@5501: public static final String SQ_RELATION_OUT_C = "sq_relation_c"; rrenkert@5501: public static final String SQ_RELATION_OUT_D = "sq_relation_d"; rrenkert@5501: public static final String SQ_RELATION_OUT_E = "sq_relation_e"; rrenkert@5501: public static final String SQ_RELATION_OUT_F = "sq_relation_f"; rrenkert@5501: rrenkert@5501: rrenkert@5501: @Override rrenkert@5501: public void setup( rrenkert@5501: String identifier, rrenkert@5501: ArtifactFactory factory, rrenkert@5501: Object context, rrenkert@5501: CallMeta callmeta, rrenkert@5501: Document data rrenkert@5501: ) { rrenkert@5501: logger.debug("SQRelationArtifact.setup()"); rrenkert@5501: rrenkert@5501: String river = XMLUtils.xpathString( rrenkert@5501: data, rrenkert@5501: XPATH_RIVER, rrenkert@5501: ArtifactNamespaceContext.INSTANCE); rrenkert@5501: String station = XMLUtils.xpathString( rrenkert@5501: data, rrenkert@5501: XPATH_STATION, rrenkert@5501: ArtifactNamespaceContext.INSTANCE); rrenkert@5501: rrenkert@5501: addData( rrenkert@5501: "river", rrenkert@5501: new DefaultStateData( rrenkert@5501: "river", rrenkert@5501: Resources.getMsg(callmeta, "static.sq.river", "Rivername"), rrenkert@5501: "String", rrenkert@5501: river)); rrenkert@5501: addData( rrenkert@5501: "station", rrenkert@5501: new DefaultStateData( rrenkert@5501: "station", rrenkert@5501: Resources.getMsg(callmeta, "static.sq.station", "Station"), rrenkert@5501: "String", rrenkert@5501: station)); rrenkert@5501: super.setup(identifier, factory, context, callmeta, data); rrenkert@5501: } rrenkert@5501: rrenkert@5501: @Override rrenkert@5501: protected void initStaticState() { rrenkert@5501: StaticState state = new SQStaticState(STATIC_STATE_NAME); rrenkert@5501: rrenkert@5501: List fs = new ArrayList(); rrenkert@5501: state.staticCompute(fs, this); rrenkert@5501: rrenkert@5501: if (hasParameter(StaticSQRelation.Parameter.A, fs)) { rrenkert@5501: DefaultOutput outputA = new DefaultOutput( rrenkert@5501: SQ_RELATION_OUT_A, rrenkert@5501: "output.static.sqrelation.a", rrenkert@5501: "image/png", rrenkert@5501: fs, rrenkert@5501: "chart"); rrenkert@5501: state.addOutput(outputA); rrenkert@5501: } rrenkert@5501: if (hasParameter(StaticSQRelation.Parameter.B, fs)) { rrenkert@5501: DefaultOutput outputB = new DefaultOutput( rrenkert@5501: SQ_RELATION_OUT_B, rrenkert@5501: "output.static.sqrelation.b", rrenkert@5501: "image/png", rrenkert@5501: fs, rrenkert@5501: "chart"); rrenkert@5501: state.addOutput(outputB); rrenkert@5501: } rrenkert@5501: if (hasParameter(StaticSQRelation.Parameter.C, fs)) { rrenkert@5501: DefaultOutput outputC = new DefaultOutput( rrenkert@5501: SQ_RELATION_OUT_C, rrenkert@5501: "output.static.sqrelation.c", rrenkert@5501: "image/png", rrenkert@5501: fs, rrenkert@5501: "chart"); rrenkert@5501: state.addOutput(outputC); rrenkert@5501: } rrenkert@5501: if (hasParameter(StaticSQRelation.Parameter.D, fs)) { rrenkert@5501: DefaultOutput outputD = new DefaultOutput( rrenkert@5501: SQ_RELATION_OUT_D, rrenkert@5501: "output.static.sqrelation.d", rrenkert@5501: "image/png", rrenkert@5501: fs, rrenkert@5501: "chart"); rrenkert@5501: state.addOutput(outputD); rrenkert@5501: } rrenkert@5501: if (hasParameter(StaticSQRelation.Parameter.E, fs)) { rrenkert@5501: DefaultOutput outputE = new DefaultOutput( rrenkert@5501: SQ_RELATION_OUT_E, rrenkert@5501: "output.static.sqrelation.e", rrenkert@5501: "image/png", rrenkert@5501: fs, rrenkert@5501: "chart"); rrenkert@5501: state.addOutput(outputE); rrenkert@5501: } rrenkert@5501: if (hasParameter(StaticSQRelation.Parameter.F, fs)) { rrenkert@5501: DefaultOutput outputF = new DefaultOutput( rrenkert@5501: SQ_RELATION_OUT_F, rrenkert@5501: "output.static.sqrelation.f", rrenkert@5501: "image/png", rrenkert@5501: fs, rrenkert@5501: "chart"); rrenkert@5501: state.addOutput(outputF); rrenkert@5501: } rrenkert@5501: addFacets(STATIC_STATE_NAME, fs); rrenkert@5501: state.setUIProvider(UIPROVIDER); rrenkert@5501: setStaticState(state); rrenkert@5501: } rrenkert@5501: rrenkert@5501: @Override rrenkert@5501: public String getName() { rrenkert@5501: return NAME; rrenkert@5501: } rrenkert@5501: rrenkert@5501: private boolean hasParameter(StaticSQRelation.Parameter p, List fs) { rrenkert@5501: for (Facet f : fs) { rrenkert@5501: if (f.getName().equals("sq_" + rrenkert@5501: p.toString().toLowerCase() + "_curve")) { rrenkert@5501: return true; rrenkert@5501: } rrenkert@5501: } rrenkert@5501: return false; rrenkert@5501: } rrenkert@5501: }