ingo@2709: package de.intevation.flys.artifacts.states;
ingo@2709: 
ingo@2713: import java.util.ArrayList;
ingo@2709: import java.util.List;
ingo@2709: 
ingo@2709: import org.apache.log4j.Logger;
ingo@2709: 
ingo@2709: import de.intevation.artifacts.CallContext;
ingo@2709: 
ingo@2709: import de.intevation.artifactdatabase.state.Facet;
ingo@2709: 
ingo@2709: import de.intevation.flys.artifacts.FLYSArtifact;
ingo@3230: import de.intevation.flys.artifacts.access.BedHeightAccess;
ingo@2713: import de.intevation.flys.artifacts.model.CalculationResult;
ingo@2713: import de.intevation.flys.artifacts.model.DataFacet;
ingo@2713: import de.intevation.flys.artifacts.model.FacetTypes;
ingo@2713: import de.intevation.flys.artifacts.model.MiddleBedHeightData;
ingo@2713: import de.intevation.flys.artifacts.model.MiddleBedHeightFacet;
ingo@2713: import de.intevation.flys.artifacts.model.MiddleBedHeightCalculation;
ingo@2709: 
ingo@2709: 
felix@4582: /** State in which Middle Bed Heights are generated. */
ingo@2713: public class MiddleBedHeight extends DefaultState implements FacetTypes {
ingo@2709: 
felix@4582:     /** Private logger. */
ingo@2709:     private static final Logger logger = Logger.getLogger(MiddleBedHeight.class);
ingo@2709: 
ingo@2709: 
ingo@2709:     @Override
ingo@2709:     public Object computeAdvance(
ingo@2709:         FLYSArtifact artifact,
ingo@2709:         String       hash,
ingo@2709:         CallContext  context,
ingo@2709:         List<Facet>  facets,
ingo@2709:         Object       old
ingo@2709:     ) {
ingo@2709:         logger.debug("MiddleBedHeight.computeAdvance");
ingo@2709: 
ingo@2713:         List<Facet> newFacets = new ArrayList<Facet>();
sascha@3232: 
felix@4826:         BedHeightAccess access = new BedHeightAccess(artifact, context);
ingo@2709: 
ingo@2713:         CalculationResult res = old instanceof CalculationResult
ingo@2713:             ? (CalculationResult) old
ingo@3230:             : new MiddleBedHeightCalculation().calculate(access);
ingo@2713: 
ingo@2713:         if (facets == null || res == null) {
ingo@2713:             return res;
ingo@2713:         }
ingo@2713: 
ingo@2713:         MiddleBedHeightData[] data = (MiddleBedHeightData[]) res.getData();
ingo@2713: 
ingo@2713:         logger.debug("Calculated " + data.length + " MiddleBedHeightData objects");
ingo@2713: 
ingo@2713:         String id  = getID();
ingo@2713:         int    idx = 0;
ingo@2713: 
ingo@2713:         for (MiddleBedHeightData d: data) {
ingo@2715:             if (d.getStartYear() == d.getEndYear()) {
ingo@2715:                 newFacets.add(new MiddleBedHeightFacet(
ingo@2715:                     idx,
ingo@2715:                     MIDDLE_BED_HEIGHT_SINGLE,
ingo@2715:                     d.getSoundingName(context),
ingo@2715:                     ComputeType.ADVANCE,
ingo@2715:                     id,
ingo@2715:                     hash
ingo@2715:                 ));
ingo@2715:             }
ingo@2715:             else {
ingo@2715:                 newFacets.add(new MiddleBedHeightFacet(
ingo@2715:                     idx,
ingo@2715:                     MIDDLE_BED_HEIGHT_EPOCH,
ingo@2715:                     d.getSoundingName(context),
ingo@2715:                     ComputeType.ADVANCE,
ingo@2715:                     id,
ingo@2715:                     hash
ingo@2715:                 ));
ingo@2715:             }
ingo@2713: 
ingo@2713:             idx++;
ingo@2713:         }
ingo@2713: 
ingo@2713:         Facet csv = new DataFacet(
ingo@2713:             CSV, "CSV data", ComputeType.ADVANCE, hash, id);
ingo@2713: 
ingo@2713:         // TODO ADD PDF FACET
ingo@2713: 
ingo@2713:         newFacets.add(csv);
ingo@2713: 
ingo@2713:         logger.debug("Created " + newFacets.size() + " new Facets.");
ingo@2713: 
ingo@2713:         facets.addAll(newFacets);
ingo@2713: 
ingo@2713:         return res;
ingo@2713:     }
ingo@2709: }
ingo@2709: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :