raimund@3614: package de.intevation.flys.artifacts;
raimund@3614: 
raimund@3614: import java.util.ArrayList;
raimund@3614: import java.util.List;
raimund@3614: 
raimund@3614: import org.apache.log4j.Logger;
raimund@3614: import org.w3c.dom.Document;
raimund@3614: 
bjoern@4535: import de.intevation.artifactdatabase.state.DefaultOutput;
raimund@3614: import de.intevation.artifactdatabase.state.Facet;
raimund@3614: import de.intevation.artifactdatabase.state.FacetActivity;
raimund@3614: import de.intevation.artifacts.ArtifactFactory;
bjoern@4535: import de.intevation.artifacts.Artifact;
raimund@3614: import de.intevation.artifacts.CallMeta;
raimund@3614: import de.intevation.artifacts.common.utils.XMLUtils;
raimund@3614: import de.intevation.flys.artifacts.model.minfo.BedHeightFacet;
raimund@3614: import de.intevation.flys.artifacts.model.minfo.BedHeightFactory;
raimund@3614: import de.intevation.flys.artifacts.states.StaticState;
raimund@3614: 
raimund@3614: public class BedHeightsArtifact
bjoern@4535: extends      AbstractStaticStateArtifact
raimund@3614: {
raimund@3614:     /** The logger for this class. */
raimund@3614:     private static Logger logger =
raimund@3614:         Logger.getLogger(BedHeightsArtifact.class);
raimund@3614: 
raimund@3614:     private static final String NAME = "bedheights";
bjoern@4535:     private static final String STATIC_FACET_NAME = "bedheight";
raimund@3614: 
raimund@3614:     static {
raimund@3614:         // TODO: Move to configuration.
raimund@3614:         FacetActivity.Registry.getInstance()
raimund@3614:             .register(NAME, FacetActivity.INACTIVE);
raimund@3614:     }
raimund@3614: 
raimund@3614:     public static final String STATIC_STATE_NAME =
raimund@3614:         "state.additional_bedheights.static";
raimund@3614: 
raimund@3614:     /** Data Item name to know whether we are Heighmarks and reveive
raimund@3614:      * some data slightly different. */
raimund@3614:     public static final String DATA_HEIGHT_TYPE =
raimund@3614:         "height_marks";
raimund@3614: 
raimund@3614:     /**
raimund@3614:      * Trivial Constructor.
raimund@3614:      */
raimund@3614:     public BedHeightsArtifact() {
raimund@3614:         logger.debug("BedHeightsArtifact.BedHeightsArtifact");
raimund@3614:     }
raimund@3614: 
raimund@3614:     @Override
raimund@3614:     public String getName() {
raimund@3614:         return NAME;
raimund@3614:     }
raimund@3614: 
raimund@3614:     /**
raimund@3614:      * Gets called from factory, to set things up.
raimund@3614:      */
raimund@3614:     @Override
raimund@3614:     public void setup(
raimund@3614:         String          identifier,
raimund@3614:         ArtifactFactory factory,
raimund@3614:         Object          context,
raimund@3614:         CallMeta        callMeta,
raimund@3614:         Document        data)
raimund@3614:     {
raimund@3614:         logger.debug("BedHeightsArtifact.setup");
raimund@3614: 
raimund@3614:         if (logger.isDebugEnabled()) {
raimund@3614:             logger.debug(XMLUtils.toString(data));
raimund@3614:         }
raimund@3614: 
raimund@3614:         String code = getDatacageIDValue(data);
raimund@3614: 
raimund@3614:         if (code != null) {
raimund@3614:             String [] parts = code.split("-");
raimund@3614: 
raimund@3614:             if (parts.length >= 4) {
bjoern@4535:                 String name = parts[0];
bjoern@4535:                 String type = parts[1];
bjoern@4535:                 String btype = type;
bjoern@4535:                 int hId = Integer.parseInt(parts[2]);
bjoern@4535:                 if (name.equals("bedheight")) {
bjoern@4535:                     addStringData("type", type);
raimund@3614:                     addStringData("height_id", parts[2]);
raimund@3614:                     addStringData("time", parts[3]);
raimund@3614:                 }
bjoern@4535:                 if (type.equals("singlevalues")) {
bjoern@4535:                     btype = "single";
bjoern@4535:                 }
raimund@3614: 
bjoern@4535:                 String bedHName = BedHeightFactory.getHeightName(btype, hId);
raimund@3614: 
bjoern@4535:                 Facet facet = new BedHeightFacet(
bjoern@4535:                         STATIC_FACET_NAME, bedHName, type);
bjoern@4535: 
bjoern@4535:                 ArrayList<Facet> facets = new ArrayList<Facet>(1);
bjoern@4535:                 facets.add(facet);
bjoern@4535: 
bjoern@4535:                 addFacets(STATIC_STATE_NAME, facets);
raimund@3614:             }
raimund@3614:         }
raimund@3614:         super.setup(identifier, factory, context, callMeta, data);
raimund@3614:     }
raimund@3614: 
bjoern@4535:     @Override
bjoern@4535:     protected void initStaticState() {
bjoern@4535: 
bjoern@4535:         logger.debug("initStaticState " + getName() + " " + identifier());
bjoern@4535: 
bjoern@4535:         StaticState state = new StaticState(STATIC_STATE_NAME);
bjoern@4535:         DefaultOutput output = new DefaultOutput(
bjoern@4535:                 "general",
bjoern@4535:                 "general",
bjoern@4535:                 "image/png",
bjoern@4535:                 "chart");
bjoern@4535: 
bjoern@4535:         List<Facet> facets = getFacets(STATIC_STATE_NAME);
bjoern@4535:         output.addFacets(facets);
bjoern@4535:         state.addOutput(output);
bjoern@4535: 
bjoern@4535:         setStaticState(state);
bjoern@4535:     }
bjoern@4535: 
bjoern@4535:     @Override
bjoern@4535:     protected void initialize(Artifact artifact, Object context, CallMeta meta) {
bjoern@4535:         // do not clone facets, etc. from master artifact
bjoern@4535: 
bjoern@4535:         logger.debug("initialize");
bjoern@4535:         importData((FLYSArtifact)artifact, "ld_from");
bjoern@4535:         importData((FLYSArtifact)artifact, "ld_to");
bjoern@4535: 
bjoern@4535:         logger.debug("ld_from " + getDataAsString("ld_from"));
bjoern@4535:         logger.debug("ld_to " + getDataAsString("ld_to"));
bjoern@4535:     }
raimund@3614: }
felix@4459: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :