sascha@3203: package de.intevation.flys.artifacts.access; sascha@3203: sascha@3203: import de.intevation.artifactdatabase.data.StateData; sascha@3203: sascha@3203: import de.intevation.flys.artifacts.FLYSArtifact; sascha@3203: sascha@3203: import de.intevation.flys.artifacts.model.fixings.DateRange; sascha@3203: sascha@3203: import de.intevation.flys.utils.FLYSUtils; sascha@3203: sascha@3203: import gnu.trove.TDoubleArrayList; sascha@3203: sascha@3203: import java.util.ArrayList; sascha@3203: import java.util.Arrays; sascha@3203: import java.util.Date; sascha@3203: sascha@3203: import org.apache.log4j.Logger; sascha@3203: sascha@3203: public class FixationArtifactAccess sascha@3203: { sascha@3203: private static Logger log = Logger.getLogger(FixationArtifactAccess.class); sascha@3203: sascha@3203: protected FLYSArtifact artifact; sascha@3203: sascha@3203: protected String river; sascha@3203: sascha@3203: protected String calculationMode; sascha@3203: sascha@3203: protected Double from; sascha@3203: protected Double to; sascha@3203: protected Double step; sascha@3203: sascha@3203: protected Long start; sascha@3203: protected Long end; sascha@3203: sascha@3203: protected Integer qSectorStart; sascha@3203: protected Integer qSectorEnd; sascha@3203: sascha@3203: protected DateRange referencePeriod; sascha@3203: protected DateRange [] analysisPeriods; sascha@3203: sascha@3203: protected int [] events; sascha@3203: sascha@3203: protected Boolean preprocessing; sascha@3203: sascha@3203: protected String function; sascha@3203: sascha@3203: protected double [] qs; sascha@3203: sascha@3203: public FixationArtifactAccess() { sascha@3203: } sascha@3203: sascha@3203: public FixationArtifactAccess(FLYSArtifact artifact) { sascha@3203: this.artifact = artifact; sascha@3203: } sascha@3203: sascha@3203: public FLYSArtifact getArtifact() { sascha@3203: return artifact; sascha@3203: } sascha@3203: sascha@3203: public String getRiver() { sascha@3203: if (river == null) { sascha@3203: StateData sd = artifact.getData("river"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'river' value"); sascha@3203: return null; sascha@3203: } sascha@3203: river = (String)sd.getValue(); sascha@3203: } sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("river: '" + river + "'"); sascha@3203: } sascha@3203: return river; sascha@3203: } sascha@3203: sascha@3203: public String getCalculationMode() { sascha@3203: if (calculationMode == null) { sascha@3203: StateData sd = artifact.getData("calculation.mode"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'calculation.mode' value"); sascha@3203: return null; sascha@3203: } sascha@3203: calculationMode = (String)sd.getValue(); sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("calculationMode: '" + calculationMode + "'"); sascha@3203: } sascha@3203: return calculationMode; sascha@3203: } sascha@3203: sascha@3203: public Double getFrom() { sascha@3203: sascha@3203: if (from == null) { sascha@3203: StateData sd = artifact.getData("from"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'from' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: from = Double.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("from '" + sd.getValue() + "' is not numeric."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("from: '" + from + "'"); sascha@3203: } sascha@3203: sascha@3203: return from; sascha@3203: } sascha@3203: sascha@3203: public Double getTo() { sascha@3203: sascha@3203: if (to == null) { sascha@3203: StateData sd = artifact.getData("to"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'to' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: to = Double.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("to '" + sd.getValue() + "' is not numeric."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("to: '" + to + "'"); sascha@3203: } sascha@3203: sascha@3203: return to; sascha@3203: } sascha@3203: sascha@3203: public Double getStep() { sascha@3203: sascha@3203: if (step == null) { sascha@3203: StateData sd = artifact.getData("step"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'step' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: step = Double.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("step '" + sd.getValue() + "' is not numeric."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("step: '" + step + "'"); sascha@3203: } sascha@3203: sascha@3203: return step; sascha@3203: } sascha@3203: sascha@3203: public Long getStart() { sascha@3203: sascha@3203: if (start == null) { sascha@3203: StateData sd = artifact.getData("start"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'start' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: start = Long.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("start '" + sd.getValue() + "' is not an integer."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("start: '" + start + "'"); sascha@3203: } sascha@3203: sascha@3203: return start; sascha@3203: } sascha@3203: sascha@3203: public Long getEnd() { sascha@3203: sascha@3203: if (end == null) { sascha@3203: StateData sd = artifact.getData("end"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'end' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: end = Long.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("end '" + sd.getValue() + "' is not an integer."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("end: '" + end + "'"); sascha@3203: } sascha@3203: sascha@3203: return end; sascha@3203: } sascha@3203: sascha@3203: public Integer getQSectorStart() { sascha@3203: sascha@3203: if (qSectorStart == null) { sascha@3203: StateData sd = artifact.getData("q1"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'q1' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: qSectorStart = Integer.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("q1 '" + sd.getValue() + "' is not an integer."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: return qSectorStart; sascha@3203: } sascha@3203: sascha@3203: public Integer getQSectorEnd() { sascha@3203: sascha@3203: if (qSectorEnd == null) { sascha@3203: StateData sd = artifact.getData("q2"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'q2' value"); sascha@3203: return null; sascha@3203: } sascha@3203: try { sascha@3203: qSectorEnd = Integer.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("q2 '" + sd.getValue() + "' is not an integer."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: return qSectorEnd; sascha@3203: } sascha@3203: sascha@3203: public int [] getEvents() { sascha@3203: if (events == null) { sascha@3203: StateData sd = artifact.getData("events"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'events' value"); sascha@3203: return null; sascha@3203: } sascha@3203: events = FLYSUtils.intArrayFromString((String)sd.getValue()); sascha@3203: } sascha@3203: return events; sascha@3203: } sascha@3203: sascha@3203: public DateRange getReferencePeriod() { sascha@3203: if (referencePeriod == null) { sascha@3203: StateData refStart = artifact.getData("ref_start"); sascha@3203: StateData refEnd = artifact.getData("ref_end"); sascha@3203: sascha@3203: if (refStart == null || refEnd == null) { sascha@3203: log.warn("missing 'ref_start' or 'ref_start' value"); sascha@3203: return null; sascha@3203: } sascha@3203: sascha@3203: try { sascha@3203: long rs = Long.parseLong((String)refStart.getValue()); sascha@3203: long re = Long.parseLong((String)refEnd .getValue()); sascha@3203: sascha@3203: if (rs > re) { long t = rs; rs = re; re = t; } sascha@3203: sascha@3203: Date from = new Date(rs); sascha@3203: Date to = new Date(re); sascha@3203: referencePeriod = new DateRange(from, to); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("ref_start or ref_end is not an integer."); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: return referencePeriod; sascha@3203: } sascha@3203: sascha@3203: public DateRange [] getAnalysisPeriods() { sascha@3203: if (analysisPeriods == null) { sascha@3203: StateData sd = artifact.getData("ana_data"); sascha@3203: sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'ana_data'"); sascha@3203: return null; sascha@3203: } sascha@3203: sascha@3203: String data = (String)sd.getValue(); sascha@3203: String[] pairs = data.split("\\s*;\\s*"); sascha@3203: sascha@3203: ArrayList aPs = new ArrayList(pairs.length); sascha@3203: sascha@3203: for (int i = 0; i < pairs.length; i++) { sascha@3203: String[] fromTo = pairs[i].split("\\s*,\\s*"); sascha@3203: if (fromTo.length >= 2) { sascha@3203: try { sascha@3203: Date from = new Date(Long.parseLong(fromTo[0])); sascha@3203: Date to = new Date(Long.parseLong(fromTo[1])); sascha@3203: DateRange aP = new DateRange(from, to); sascha@3203: if (!aPs.contains(aP)) { sascha@3203: aPs.add(aP); sascha@3203: } sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("ana_data contains no long values.", nfe); sascha@3203: } sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: analysisPeriods = aPs.toArray(new DateRange[aPs.size()]); sascha@3203: } sascha@3203: sascha@3203: if (log.isDebugEnabled()) { sascha@3203: for (int i = 0; i < analysisPeriods.length; ++i) { sascha@3203: DateRange ap = analysisPeriods[i]; sascha@3203: log.debug("analysis period " + sascha@3203: ap.getFrom() + " - " + ap.getTo()); sascha@3203: } sascha@3203: } sascha@3203: sascha@3203: return analysisPeriods; sascha@3203: } sascha@3203: sascha@3203: public Boolean getPreprocessing() { sascha@3203: if (preprocessing == null) { sascha@3203: StateData sd = artifact.getData("preprocessing"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'preprocessing'"); sascha@3203: return null; sascha@3203: } sascha@3203: preprocessing = Boolean.valueOf((String)sd.getValue()); sascha@3203: } sascha@3203: return preprocessing; sascha@3203: } sascha@3203: sascha@3203: public String getFunction() { sascha@3203: if (function == null) { sascha@3203: StateData sd = artifact.getData("function"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'function'"); sascha@3203: return null; sascha@3203: } sascha@3203: function = (String)sd.getValue(); sascha@3203: } sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("function: " + function); sascha@3203: } sascha@3203: return function; sascha@3203: } sascha@3203: sascha@3203: public double [] getQs() { sascha@3203: if (qs == null) { sascha@3203: StateData sd = artifact.getData("qs"); sascha@3203: if (sd == null) { sascha@3203: log.warn("missing 'qs'"); sascha@3203: return null; sascha@3203: } sascha@3203: String [] parts = ((String)sd.getValue()).split("[\\s;]"); sascha@3203: TDoubleArrayList list = new TDoubleArrayList(parts.length); sascha@3203: for (String part: parts) { sascha@3203: try { sascha@3203: list.add(Double.parseDouble(part)); sascha@3203: } sascha@3203: catch (NumberFormatException nfe) { sascha@3203: log.warn("'" + part + "' is not numeric."); sascha@3203: } sascha@3203: } sascha@3203: qs = list.toNativeArray(); sascha@3203: } sascha@3203: if (log.isDebugEnabled()) { sascha@3203: log.debug("qs: " + Arrays.toString(qs)); sascha@3203: } sascha@3203: return qs; sascha@3203: } sascha@3203: } sascha@3203: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :