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.states.sq; rrenkert@5501: rrenkert@5501: import java.text.DateFormat; rrenkert@5501: import java.util.List; aheinecke@7236: import java.text.SimpleDateFormat; rrenkert@5501: rrenkert@5501: import org.apache.log4j.Logger; rrenkert@5501: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; rrenkert@8312: import org.dive4elements.artifacts.CallContext; aheinecke@7236: import org.dive4elements.artifacts.CallMeta; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.StaticSQRelationAccess; rrenkert@8312: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.sq.StaticSQContainer; teichmann@5831: import org.dive4elements.river.artifacts.model.sq.StaticSQFactory; teichmann@5831: import org.dive4elements.river.artifacts.model.sq.StaticSQRelation; teichmann@5831: import org.dive4elements.river.artifacts.states.StaticState; rrenkert@5501: aheinecke@7236: import org.dive4elements.river.artifacts.resources.Resources; rrenkert@5501: rrenkert@5501: public class SQStaticState rrenkert@5501: extends StaticState rrenkert@8312: implements FacetTypes rrenkert@5501: { aheinecke@7236: rrenkert@5501: private static final Logger log = rrenkert@5501: Logger.getLogger(SQStaticState.class); rrenkert@5501: aheinecke@7236: private static final String FACET_DESCRIPTION = aheinecke@7236: "facet.sq_relation.static_data"; aheinecke@7236: rrenkert@5501: public SQStaticState() { rrenkert@5501: super(); rrenkert@5501: } rrenkert@5501: rrenkert@5501: public SQStaticState(String name) { rrenkert@5501: super(name); rrenkert@5501: } rrenkert@5501: rrenkert@5501: @Override rrenkert@8312: public Object computeAdvance( rrenkert@8312: D4EArtifact artifact, rrenkert@8312: String hash, rrenkert@8312: CallContext context, rrenkert@8312: List facets, rrenkert@8312: Object old) { rrenkert@8312: StaticSQContainer sqRelations; rrenkert@8312: StaticSQRelationAccess access = new StaticSQRelationAccess(artifact); rrenkert@8312: String river = access.getRiverName(); rrenkert@8312: String measurementStation = access.getMeasurementStation(); rrenkert@8312: rrenkert@8312: int ms = -1; rrenkert@8312: try { rrenkert@8312: ms = Integer.parseInt(measurementStation); rrenkert@8312: } rrenkert@8312: catch (NumberFormatException nfe) { rrenkert@8312: log.error("Unparseable measurement station: " + measurementStation); rrenkert@8312: return null; rrenkert@8312: } rrenkert@8312: log.debug("Parsed measurement station: " + ms); rrenkert@8312: rrenkert@8312: sqRelations = StaticSQFactory.getSQRelations(river, ms); rrenkert@8312: DateFormat df = new SimpleDateFormat("yyyy"); rrenkert@8312: rrenkert@8312: for (StaticSQRelation.Parameter p: StaticSQRelation.Parameter.values()) { rrenkert@8312: log.debug("parameter: " + p.toString()); rrenkert@8312: List relations = rrenkert@8312: sqRelations.getRelationsByParameter(p); rrenkert@8312: rrenkert@8312: if (!relations.isEmpty()) { rrenkert@8312: int count = 0; rrenkert@8312: rrenkert@8312: for (StaticSQRelation relation : relations) { rrenkert@8312: log.debug("add facet for " + p.toString().toLowerCase()); rrenkert@8312: String name = "sq_" + p.toString().toLowerCase() + "_curve"; rrenkert@8312: String desc = rrenkert@8312: Resources.getMsg(context.getMeta(), rrenkert@8312: FACET_DESCRIPTION, rrenkert@8312: FACET_DESCRIPTION, rrenkert@8312: new Object[] { rrenkert@8312: df.format(relation.getStartTime()), rrenkert@8312: df.format(relation.getStopTime())}); rrenkert@8312: facets.add(new StaticSQRelationFacet( rrenkert@8312: count, rrenkert@8312: name, rrenkert@8312: desc, rrenkert@8312: relation)); rrenkert@8312: count++; rrenkert@8312: } rrenkert@8312: } rrenkert@8312: } rrenkert@8312: return null; rrenkert@8312: } rrenkert@8312: rrenkert@8312: @Override aheinecke@7236: public Object computeInit( aheinecke@7236: D4EArtifact artifact, aheinecke@7236: String hash, aheinecke@7236: Object context, aheinecke@7236: CallMeta meta, aheinecke@7236: List facets rrenkert@5501: ) { aheinecke@7236: StaticSQContainer sqRelations; rrenkert@5501: aheinecke@7236: String id_string = artifact.getDataAsString("ids"); rrenkert@5501: aheinecke@7236: int static_id = -1; aheinecke@7236: String static_desc = null; aheinecke@7236: aheinecke@7236: if (id_string != null && !id_string.isEmpty()) { aheinecke@7236: String[] id_parts = id_string.split(";"); aheinecke@7236: static_id = Integer.parseInt(id_parts[0]); aheinecke@7236: if (id_parts.length > 1) { aheinecke@7236: static_desc = id_parts[1]; aheinecke@7236: } rrenkert@5501: } rrenkert@5501: aheinecke@7236: if (static_id != -1) { aheinecke@7236: // If the next line fails a traceback is the best debug output anyhow aheinecke@7236: sqRelations = StaticSQFactory.getDistinctRelation(static_id); aheinecke@7236: log.debug("Got a distinct relation" + sqRelations); aheinecke@7236: } else { aheinecke@7236: StaticSQRelationAccess access = new StaticSQRelationAccess(artifact); felix@7261: String river = access.getRiverName(); aheinecke@7236: String measurementStation = access.getMeasurementStation(); aheinecke@7236: aheinecke@7236: int ms = -1; aheinecke@7236: try { aheinecke@7236: ms = Integer.parseInt(measurementStation); aheinecke@7236: } aheinecke@7236: catch (NumberFormatException nfe) { aheinecke@7236: log.error("Unparseable measurement station: " + measurementStation); aheinecke@7236: return null; aheinecke@7236: } aheinecke@7236: log.debug("Parsed measurement station: " + ms); aheinecke@7236: aheinecke@7236: sqRelations = StaticSQFactory.getSQRelations(river, ms); aheinecke@7236: } aheinecke@7236: aheinecke@7236: DateFormat df = new SimpleDateFormat("yyyy"); rrenkert@5501: teichmann@5506: for (StaticSQRelation.Parameter p: StaticSQRelation.Parameter.values()) { rrenkert@5501: rrenkert@5501: List relations = rrenkert@5501: sqRelations.getRelationsByParameter(p); teichmann@5506: teichmann@5506: if (!relations.isEmpty()) { rrenkert@5501: int count = 0; rrenkert@5501: rrenkert@5501: for (StaticSQRelation relation : relations) { rrenkert@5501: String name = "sq_" + p.toString().toLowerCase() + "_curve"; aheinecke@7236: String desc = static_desc == null ? aheinecke@7236: Resources.getMsg(meta, aheinecke@7236: FACET_DESCRIPTION, aheinecke@7236: FACET_DESCRIPTION, aheinecke@7236: new Object[] { aheinecke@7236: df.format(relation.getStartTime()), aheinecke@7236: df.format(relation.getStopTime())}) : aheinecke@7236: static_desc; rrenkert@5501: facets.add(new StaticSQRelationFacet( rrenkert@5501: count, rrenkert@5501: name, rrenkert@5501: desc, rrenkert@5501: relation)); rrenkert@5501: count++; rrenkert@5501: } rrenkert@5501: } rrenkert@5501: } rrenkert@5501: return null; rrenkert@5501: } rrenkert@5501: }