felix@1629: package de.intevation.flys.artifacts;
felix@1629: 
felix@3111: import de.intevation.artifactdatabase.state.DefaultFacet;
felix@1629: import de.intevation.artifactdatabase.state.Facet;
sascha@3556: import de.intevation.artifactdatabase.state.FacetActivity;
felix@1629: 
felix@1629: import de.intevation.artifacts.Artifact;
felix@1703: import de.intevation.artifacts.ArtifactFactory;
felix@1629: import de.intevation.artifacts.CallMeta;
felix@1629: 
felix@1629: import de.intevation.flys.artifacts.states.DefaultState;
felix@1629: 
felix@1629: import java.util.ArrayList;
felix@1629: import java.util.List;
felix@1629: 
felix@1629: import org.apache.log4j.Logger;
felix@1629: 
felix@1703: import org.w3c.dom.Document;
felix@1703: 
felix@1629: 
felix@1629: /**
felix@1703:  * Clone of an WINFOArtifact to expose exactly one waterlevel only.
felix@1703:  * All Facets of the "longitudinal_section" output will be added to the
felix@1703:  * "w_differences" output and filterFacets adjusted accordingly.
felix@1703:  *
felix@1629:  * @TODO Straighten inheritance-line (waterlevel-WINFO or vice versa).
felix@1629:  */
felix@1629: public class WaterlevelArtifact extends WINFOArtifact {
felix@1629: 
felix@1629:     /** The logger for this class. */
felix@1629:     private static Logger logger = Logger.getLogger(WaterlevelArtifact.class);
felix@1629: 
felix@1629:     /** The name of the artifact. */
felix@1629:     public static final String ARTIFACT_NAME = "waterlevel";
felix@1629: 
sascha@3556:     static {
sascha@3556:         // TODO: Move to configuration.
sascha@3556:         FacetActivity.Registry.getInstance()
sascha@3556:             .register(ARTIFACT_NAME, FacetActivity.INACTIVE);
sascha@3556:     }
felix@1629: 
felix@1629:     /**
felix@1629:      * The default constructor.
felix@1629:      */
felix@1629:     public WaterlevelArtifact() {
felix@1629:     }
felix@1629: 
felix@1629: 
felix@1629:     /**
felix@1703:      * Setup and restate longitudinal_section filterfacets to apply to the
felix@3113:      * w_differences output, too. Also, for w_differences, add respective q-
felix@3113:      * filter facets.
felix@1629:      */
felix@1703:     public void setup(
felix@1703:         String          identifier,
felix@1703:         ArtifactFactory factory,
felix@1703:         Object          context,
felix@1703:         CallMeta        callMeta,
felix@1703:         Document        data)
felix@1703:     {
felix@1703:         super.setup(identifier, factory, context, callMeta, data);
felix@3113:         // For w_differences, also allow q-facets.
felix@1765:         if(filterFacets != null) {
felix@3111:             List<Facet> list = new ArrayList<Facet>();
felix@4240:             List<Facet> wlist = filterFacets.get(ChartType.LS);
felix@3111:             for (Facet f: wlist) {
felix@4234:                 if (!f.getName().equals(LONGITUDINAL_Q)) {
felix@3111:                     DefaultFacet df = new DefaultFacet(f.getIndex(),
sascha@3152:                         "longitudinal_section.q", "");
felix@3113:                     list.add(df);
felix@3111:                 }
felix@3111:             }
felix@3111: 
felix@3111:             list.addAll(wlist);
felix@3111: 
felix@3111:             filterFacets.put("w_differences", list);
felix@1765:         }
felix@1703:     }
felix@1703: 
felix@2017: 
felix@1703:     /**
felix@1703:      * Clone important stuff of an WINFOArtifact.
felix@1703:      * @param artifact the WINFOArtifact to clone stuff from.
felix@1703:      */
felix@1703:     protected void initialize(
felix@1703:         Artifact artifact,
felix@1703:         Object context,
felix@1703:         CallMeta meta)
felix@1703:     {
felix@1629:         WINFOArtifact winfo = (WINFOArtifact) artifact;
bjoern@3920:         setData(winfo.cloneData());
sascha@3258:         logger.debug("Cloned data of winfo artifact.");
felix@1629:         // Statically add Facets.
felix@1629:         List<Facet> fs = new ArrayList<Facet>();
felix@1629:         DefaultState state = (DefaultState) getCurrentState(context);
felix@1629:         state.computeInit(this, hash(), context, meta, fs);
sascha@3076:         if (!fs.isEmpty()) {
sascha@3076:             logger.debug("Facets to add in WaterlevelArtifact.initialize .");
sascha@3076:             facets.put(getCurrentStateId(), fs);
sascha@3076:         }
sascha@3076:         else {
felix@1703:             logger.debug("No facets to add in WaterlevelArtifact.initialize ("
felix@1703:                 + state.getID() + ").");
felix@1629:         }
felix@1629:     }
felix@1629: 
felix@1629: 
felix@1629:     /**
felix@1629:      * Returns the name of the concrete artifact.
felix@1629:      *
felix@1629:      * @return the name of the concrete artifact.
felix@1629:      */
felix@1629:     public String getName() {
felix@1629:         return ARTIFACT_NAME;
felix@1629:     }
felix@1629: }
felix@1629: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :