felix@2723: package de.intevation.flys.artifacts.states;
felix@2723: 
felix@2723: import java.util.List;
felix@2723: 
felix@2723: import org.apache.log4j.Logger;
felix@2723: 
felix@2723: import de.intevation.artifacts.CallMeta;
felix@2734: import de.intevation.artifacts.CallContext;
felix@2723: 
felix@2723: import de.intevation.artifactdatabase.state.Facet;
felix@2723: 
felix@2734: import de.intevation.flys.artifacts.ChartArtifact;
felix@2734: import de.intevation.flys.artifacts.GaugeDischargeArtifact;
felix@2723: import de.intevation.flys.artifacts.FLYSArtifact;
felix@2723: 
felix@2723: import de.intevation.flys.artifacts.model.GaugeDischargeFacet;
felix@2723: import de.intevation.flys.artifacts.model.FacetTypes;
felix@2734: import de.intevation.flys.artifacts.model.WQKms;
felix@2734: import de.intevation.flys.artifacts.model.ReportFacet;
felix@2734: import de.intevation.flys.artifacts.model.EmptyFacet;
felix@2734: import de.intevation.flys.artifacts.model.CalculationResult;
felix@2723: 
felix@2723: import de.intevation.flys.artifacts.resources.Resources;
felix@2723: 
felix@3051: import de.intevation.flys.model.Gauge;
felix@3051: 
felix@2723: 
felix@2723: /**
felix@2723:  * The only state for an GaugeDischargeState (River and km known).
felix@2723:  */
felix@2723: public class GaugeDischargeState
felix@2723: extends      DefaultState
felix@2723: implements   FacetTypes
felix@2723: {
felix@2723:     /** Developer-centric description of facet. */
felix@2723:     public static final String I18N_DESCRIPTION = "facet.discharge.curve";
felix@2723: 
felix@2723:     /** The logger that is used in this state. */
felix@3051:     private static final Logger logger =
felix@3051:         Logger.getLogger(GaugeDischargeState.class);
felix@3051: 
felix@3051: 
felix@3051:     /**
felix@3051:      * Create i18ned name for gaugedischargeFacet.
felix@3051:      * @param artifact The artifact which has information about the gauge.
felix@3051:      * @param meta used for i18n.
felix@3051:      * @return localized name for gaugedischargefacet.
felix@3051:      */
felix@3051:     protected String createFacetName(GaugeDischargeArtifact artifact,
felix@3051:         CallMeta meta) {
felix@3051: 
felix@3051:         Gauge gauge = artifact.getGauge();
felix@3051:         Object[] args = new Object[] {
felix@3051:             gauge.getName(),
felix@3051:             gauge.getStation()
felix@3051:         };
felix@3051: 
felix@3051:         String name = Resources.getMsg(
felix@3051:             meta,
felix@3051:             "chart.computed.discharge.curve.gauge",
felix@3051:             "",
felix@3051:             args);
felix@3051: 
felix@3051:         return name;
felix@3051:     }
felix@2723: 
felix@2723: 
felix@2723:     /**
felix@2723:      * Add an GaugeDischargeFacet to list of Facets.
felix@2723:      *
felix@2723:      * @param artifact Ignored.
felix@2723:      * @param hash Ignored.
felix@2723:      * @param context Ignored.
felix@2723:      * @param meta CallMeta to be used for internationalization.
felix@2723:      * @param facets List to add AnnotationFacet to.
felix@2723:      *
felix@2723:      * @return null.
felix@2723:      */
felix@2723:     @Override
felix@2723:     public Object computeInit(
felix@2723:         FLYSArtifact artifact,
felix@2723:         String       hash,
felix@2723:         Object       context,
felix@2723:         CallMeta     meta,
felix@2723:         List<Facet>  facets
felix@2723:     ) {
felix@2723:         logger.debug("GaugeDischargeState.computeInit()");
felix@2723: 
felix@2723:         GaugeDischargeFacet facet = new GaugeDischargeFacet(
felix@2723:             0,
felix@2723:             DISCHARGE_CURVE,
felix@3051:             createFacetName((GaugeDischargeArtifact) artifact, meta));
felix@3051: 
felix@2723:         facets.add(facet);
felix@2723: 
felix@2723:         return null;
felix@2723:     }
felix@2723: 
felix@2734: 
felix@3051:     /**
felix@3051:      * 'Calculate' Discharge at Gauge.
felix@3051:      */
felix@2734:     @Override
felix@2734:     public Object computeAdvance(
felix@2734:         FLYSArtifact artifact,
felix@2734:         String       hash,
felix@2734:         CallContext  context,
felix@2734:         List<Facet>  facets,
felix@2734:         Object       old
felix@2734:     ) {
felix@2734:         if (artifact instanceof GaugeDischargeArtifact) {
felix@2734:             logger.debug("GaugeDischargeState.computeAdvance()");
felix@2734:             GaugeDischargeArtifact dischargeArtifact = (GaugeDischargeArtifact) artifact;
felix@2734: 
felix@2734:             CalculationResult res;
felix@2734: 
felix@3053: 
felix@3053:             if (old instanceof CalculationResult) {
felix@2734:                 res = (CalculationResult) old;
felix@2734:             }
felix@3053:             else {
felix@2734:                 res = dischargeArtifact.getDischargeCurveData();
felix@3053:             }
felix@2734: 
felix@2734:             WQKms[] wqkms = (WQKms[]) res.getData();
felix@2734: 
felix@2734:             if (wqkms != null && facets != null) {
felix@2734:                 logger.debug("GaugeDischargeState.computeAdvance(): create facets");
felix@2734: 
felix@2734:                 GaugeDischargeFacet facet = new GaugeDischargeFacet(
felix@2734:                     0,
felix@3051:                     DISCHARGE_CURVE,
felix@3051:                     createFacetName(dischargeArtifact, context.getMeta()));
felix@3051: 
felix@2734:                 facets.add(facet);
felix@2734: 
felix@2734:                 //facets.add(new DataFacet(CSV, "CSV data"));
felix@2734:                 //facets.add(new DataFacet(PDF, "PDF data"));
felix@2734: 
felix@2734:                 if (res.getReport().hasProblems()) {
felix@2734:                     facets.add(new ReportFacet());
felix@2734:                 }
felix@2734:             }
felix@2734:             else {
felix@2734:                 if (wqkms == null)
felix@3051:                     logger.debug("GaugeDischargeState.computeAdvance(): wqkms 0");
felix@2734:                 else
felix@3051:                     logger.debug("GaugeDischargeState.computeAdvance(): facets 0");
felix@2734:             }
felix@2734: 
felix@2734:             return res;
felix@2734:         }
felix@2734:         else if (artifact instanceof ChartArtifact) {
felix@2734:             ChartArtifact chart = (ChartArtifact)artifact;
felix@2734:             facets.add(new EmptyFacet());
felix@2734:             return null;
felix@2734:         }
felix@2734:         return null;
felix@2734:     }
felix@2723: }
felix@2723: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :