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; aheinecke@7236: import org.dive4elements.artifacts.CallMeta; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.StaticSQRelationAccess; 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@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 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: }