felix@1047: package de.intevation.flys.artifacts; felix@1047: felix@1047: import java.util.ArrayList; felix@1047: import java.util.List; felix@1047: felix@1047: import org.apache.log4j.Logger; felix@1047: felix@1047: import org.w3c.dom.Document; felix@1047: felix@1078: import de.intevation.artifactdatabase.state.DefaultFacet; felix@1078: import de.intevation.artifactdatabase.state.Facet; felix@1078: import de.intevation.artifactdatabase.state.DefaultOutput; felix@1078: import de.intevation.artifactdatabase.state.State; felix@1078: felix@1065: import de.intevation.artifacts.Artifact; felix@1047: import de.intevation.artifacts.ArtifactFactory; felix@1047: import de.intevation.artifacts.CallContext; felix@1047: import de.intevation.artifacts.CallMeta; felix@1078: import de.intevation.flys.artifacts.model.RiverFactory; felix@1078: felix@1078: import de.intevation.flys.artifacts.model.FacetTypes; felix@1072: import de.intevation.flys.artifacts.states.StaticState; felix@1047: felix@1078: import de.intevation.flys.model.Gauge; felix@1078: import de.intevation.flys.model.River; felix@1078: felix@1047: felix@1047: /** felix@1047: * Artifact to access names of Points Of Interest along a segment of a river. felix@1072: * This artifact neglects (Static)FLYSArtifacts capabilities of interaction felix@1072: * with the StateEngine by overriding the getState*-methods. felix@1047: */ felix@1047: public class MainValuesArtifact felix@1047: extends StaticFLYSArtifact sascha@1059: { felix@1047: /** The logger for this class. */ felix@1065: private static Logger logger = Logger.getLogger(MainValuesArtifact.class); felix@1047: felix@1047: /** The name of the artifact. */ felix@1065: public static final String ARTIFACT_NAME = "mainvalue"; felix@1072: felix@1078: /** One and only state to be in. */ felix@1078: protected transient State state = null; felix@1078: felix@1072: felix@1072: /** felix@1072: * Trivial Constructor. felix@1072: */ felix@1047: public MainValuesArtifact() { felix@1072: logger.debug("MainValuesArtifact.MainValuesartifact()"); felix@1047: } felix@1047: felix@1072: felix@1047: /** felix@1047: * Gets called from factory, to set things up. felix@1047: */ felix@1047: @Override felix@1047: public void setup( felix@1047: String identifier, felix@1047: ArtifactFactory factory, felix@1047: Object context, felix@1047: CallMeta callMeta, felix@1047: Document data) felix@1047: { felix@1072: logger.debug("MainValuesArtifact.setup"); felix@1072: super.setup(identifier, factory, context, callMeta, data); felix@1047: } felix@1047: felix@1047: felix@1047: /** felix@1072: * Get a list containing the one and only State. felix@1072: * @param context ignored. felix@1072: * @return list with one and only state. felix@1047: */ felix@1072: @Override felix@1072: protected List getStates(Object context) { felix@1072: ArrayList states = new ArrayList(); felix@1072: states.add(getState(null,null)); felix@1072: return states; felix@1072: } felix@1047: felix@1047: felix@1072: /** felix@1072: * Get the "current" state. felix@1072: * @param cc ignored. felix@1072: * @return the "current" state. felix@1072: */ felix@1072: @Override felix@1072: protected State getCurrentState(Object cc) { felix@1072: return getState(); felix@1072: } felix@1072: felix@1072: felix@1072: /** felix@1072: * Get the only possible state. felix@1072: * @return the state. felix@1072: */ felix@1072: protected State getState() { felix@1072: return getState(null, null); felix@1072: } felix@1072: felix@1072: felix@1072: /** felix@1072: * Get the state. felix@1072: * @param context ignored. felix@1072: * @param stateID ignored. felix@1072: * @return the state. felix@1072: */ felix@1072: @Override felix@1072: protected State getState(Object context, String stateID) { felix@1078: if (state != null) { felix@1078: felix@1078: } felix@1078: else { felix@1078: state = new StaticState(); felix@1078: List fs = new ArrayList(); felix@1078: fs.add(new MainValuesFacet()); felix@1078: // TODO check if facets and outputs already exist. felix@1078: // TODO also check, this is usually done in initialize, too. felix@1078: facets.put(state.getID(), fs); felix@1078: DefaultOutput mainValuesOutput1 = new DefaultOutput( felix@1078: "discharge_curve", "output.discharge_curve", "image/png", felix@1078: fs, felix@1078: "chart"); felix@1078: DefaultOutput mainValuesOutput2 = new DefaultOutput( felix@1078: "computed_discharge_curve", felix@1078: "output.computed_discharge_curve", "image/png", felix@1078: fs, felix@1078: "chart"); felix@1078: felix@1078: state.getOutputs().add(mainValuesOutput1); felix@1078: state.getOutputs().add(mainValuesOutput2); felix@1078: } felix@1078: return state; felix@1078: } felix@1078: felix@1047: felix@1072: state.getOutputs().add(mainValuesOutput); felix@1072: return state; felix@1047: } felix@1065: felix@1065: felix@1079: /* FACET IMPLEMENTATION */ felix@1079: // TODO evaluate whether DefaultFacet can do. felix@1079: static class MainValuesFacet felix@1079: extends DefaultFacet felix@1079: implements FacetTypes { felix@1072: felix@1079: public MainValuesFacet() { felix@1079: description = "facet.discharge_curves.mainvalues.description"; felix@1079: name = COMPUTED_DISCHARGE_MAINVALUES; felix@1079: //Resources.getMsg(meta, I18N_DESCRIPTION, I18N_DESCRIPTION)); felix@1079: index = 0; felix@1072: } felix@1065: felix@1079: felix@1065: /** felix@1065: * Returns the description of this facet. felix@1065: * felix@1065: * @return the description of this facet. felix@1065: */ felix@1079: @Override felix@1065: public String getDescription() { felix@1072: // TODO remove, is part of DefaultFacet. felix@1072: return "facet.mainvalues"; felix@1065: } felix@1065: felix@1065: felix@1065: /** felix@1065: * Returns the data this facet requires. felix@1065: * felix@1079: * @param artifact the owner artifact. felix@1079: * @param context the CallContext (ignored). felix@1065: * felix@1065: * @return the data. felix@1065: */ felix@1079: @Override felix@1065: public Object getData(Artifact artifact, CallContext context) { felix@1079: MainValuesArtifact mvArtifact = (MainValuesArtifact) artifact; felix@1079: return mvArtifact.getMainValues(); felix@1065: } felix@1065: felix@1072: felix@1065: /** felix@1072: * Create a deep copy of this Facet. felix@1072: * @return a deep copy. felix@1079: */ felix@1079: @Override felix@1065: public MainValuesFacet deepCopy() { felix@1072: MainValuesFacet copy = new MainValuesFacet(); felix@1072: copy.set(this); felix@1072: return copy; felix@1065: } felix@1065: } felix@1065: felix@1047: }