V1_0.java [src/java/m/cfa/baseflow] Revision:   Date:
package m.cfa.baseflow;

import csip.api.server.Executable;
import csip.ModelDataService;
import csip.api.server.PayloadParameter;
import csip.api.server.PayloadResults;
import csip.annotations.Description;
import csip.annotations.Name;
import csip.annotations.Resource;
import csip.annotations.ResourceType;
import csip.annotations.VersionInfo;
import java.io.File;
import javax.ws.rs.Path;

import org.apache.commons.io.FileUtils;

@Name("baseflow")
@Description("Time Series: Baseflow Separation")
@VersionInfo("1.0")
@Path("m/cfa/baseflow/1.0")
@Resource(file="/bin/win-x86/bflow.exe", wine=true, id="bf", type=ResourceType.EXECUTABLE)
public class V1_0 extends ModelDataService {

    guiBaseflow_Model model = new guiBaseflow_Model();

    @Override
    protected void preProcess() throws Exception {
        model.setDirectory(workspace().getDir().toString());
        
        PayloadParameter inputPayload = parameter();
        model.setDatabase(inputPayload.getString("database"));
        model.setOrganizationID(inputPayload.getString("org_id"));
        model.setStationId(inputPayload.getString("station_id"));
        model.setStationName(inputPayload.getString("station_name"));
        model.setDrainageArea(inputPayload.getDouble("drainage_area"));
        model.setModelType(inputPayload.getString("model_type"));
        model.setStartDate(inputPayload.getString("begin_date", ""));
        model.setEndDate(inputPayload.getString("end_date", ""));
        model.setNDMIN(inputPayload.getInt("ndmin"));
        model.setNDMAX(inputPayload.getInt("ndmax"));
        model.setMergeDatasets(inputPayload.getBoolean("merge_datasets", false));
        model.setMergeMethod(inputPayload.getString("merge_method", "user"));
        model.setUserData(inputPayload.getString("user_data", ""));
    }
    
    @Override
    protected void doProcess() throws Exception {
        Executable e = resources().getExe("bf");  // looking up the resource by id.
        model.run(e);
    }

    @Override
    protected void postProcess() throws Exception {
        PayloadResults resultPayload = results();
        // files
        File wd = workspace().getDir();
        resultPayload.put(new File(wd, model.getGraph()),
                  model.getBaseflow_out(),
                  model.getTimeseriesOutput());

        // values
        resultPayload.put("len", model.getLen());
        resultPayload.put("start", model.getStart());
        resultPayload.put("end", model.getEnd());
        resultPayload.put("data_source", model.getDataSource());

        String baseflowSummary = FileUtils.readFileToString(model.getBaseflow_dat());
        resultPayload.put("baseflow_summary", baseflowSummary);
        resultPayload.put("baseflow_results", model.getBaseflow_out().getName());
        resultPayload.put("graph", model.getGraph());
        //Get BFLOW stream flow stats
        resultPayload.put("streamflow_max", model.getBFLOWstream_Max(), null, "cfs");
        resultPayload.put("streamflow_min", model.getBFLOWstream_Min(), null, "cfs");
        resultPayload.put("streamflow_median", model.getBFLOWstream_Median(), null, "cfs");
        resultPayload.put("streamflow_mean", model.getBFLOWstream_Mean(), null, "cfs");
        //Get BFLOW pass 1 stats
        resultPayload.put("bflowPass1_max", model.getBFLOWpass1_Max(), null, "cfs");
        resultPayload.put("bflowPass1_min", model.getBFLOWpass1_Min(), null, "cfs");
        resultPayload.put("bflowPass1_median", model.getBFLOWpass1_Median(), null, "cfs");
        resultPayload.put("bflowPass1_mean", model.getBFLOWpass1_Mean(), null, "cfs");
        //Get BFLOW pass 2 stats
        resultPayload.put("bflowPass2_max", model.getBFLOWpass2_Max(), null, "cfs");
        resultPayload.put("bflowPass2_min", model.getBFLOWpass2_Min(), null, "cfs");
        resultPayload.put("bflowPass2_median", model.getBFLOWpass2_Median(), null, "cfs");
        resultPayload.put("bflowPass2_mean", model.getBFLOWpass2_Mean(), null, "cfs");
        //Get BFLOW pass 3 stats
        resultPayload.put("bflowPass3_max", model.getBFLOWpass3_Max(), null, "cfs");
        resultPayload.put("bflowPass3_min", model.getBFLOWpass3_Min(), null, "cfs");
        resultPayload.put("bflowPass3_median", model.getBFLOWpass3_Median(), null, "cfs");
        resultPayload.put("bflowPass3_mean", model.getBFLOWpass3_Mean(), null, "cfs");

        //Get result files for JSHighCharts
        String graphDataFiles = model.getTimeseriesOutput().getName();
        resultPayload.put("graph_data_files", graphDataFiles);
    }
}