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; 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; aheinecke@7236: import org.dive4elements.artifacts.Artifact; 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 aheinecke@7236: extends StaticD4EArtifact rrenkert@5501: { teichmann@8202: private static final Logger log = 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@7842: Document data, rrenkert@7842: List loadFacets) rrenkert@7842: { teichmann@8202: log.debug("SQRelationArtifact.setup()"); rrenkert@5501: aheinecke@7236: String code = getDatacageIDValue(data); aheinecke@7236: teichmann@8202: log.debug("SQRelationDCArtifact.setup Id: " + code); aheinecke@7236: aheinecke@7236: if (code != null && !code.isEmpty()) { aheinecke@7236: /* Case that we were instantiated from the datacage */ aheinecke@7236: addStringData("ids", code); rrenkert@7842: super.setup(identifier, factory, context, callmeta, data, loadFacets); aheinecke@7236: return; aheinecke@7236: } aheinecke@7236: 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@7842: super.setup(identifier, factory, context, callmeta, data, loadFacets); aheinecke@7236: // When we are in this case we did not come from the datacage aheinecke@7236: // e.g. had an ID string set. So we also did not have a template aheinecke@7236: // set and initialize is not called. So we have to do this ourself. aheinecke@7236: initialize(this, context, callmeta); rrenkert@5501: } rrenkert@5501: rrenkert@5501: @Override aheinecke@7236: protected void initialize( aheinecke@7236: Artifact artifact, aheinecke@7236: Object context, aheinecke@7236: CallMeta callMeta aheinecke@7236: ) { rrenkert@5501: StaticState state = new SQStaticState(STATIC_STATE_NAME); rrenkert@5501: rrenkert@5501: List fs = new ArrayList(); aheinecke@7236: state.computeInit(this, hash(), context, callMeta, fs); teichmann@8202: log.debug("Init static state computed facets"); aheinecke@7236: for (Facet face: fs) { teichmann@8202: log.debug("Got a facet with name: " + face.getName()); aheinecke@7236: } 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: } 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: }