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

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 javax.ws.rs.Path;

@Name("loadest")
@Description("Time Series: Load Estimation Analysis (LOADEST)")
@VersionInfo("1.0")
@Path("m/cfa/loadest/1.0")
@Resource(file="/bin/win-x86/loadest.exe", wine=true, id="ld", type=ResourceType.EXECUTABLE)
public class V1_0 extends ModelDataService {

    guiLOADEST_Model model = new guiLOADEST_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.setWQtest(inputPayload.getString("wq_test"));
        model.setPTOPT(inputPayload.getInt("ptopt"));
        model.setSEOPT(inputPayload.getInt("seopt"));
        model.setLDOPT(inputPayload.getInt("ldopt"));
        model.setmodelNumber(inputPayload.getInt("modelnumber"));
        model.setPBMON(inputPayload.getInt("pbmon"));
        model.setPEMON(inputPayload.getInt("pemon"));
        model.setULFLAG(inputPayload.getInt("ulflag"));
        model.setStartDate(inputPayload.getString("begin_date", ""));
        model.setEndDate(inputPayload.getString("end_date", ""));
        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("ld");  // looking up the resource by id.
        model.run(e);
    }
    
    @Override
    protected void postProcess() throws Exception {
        PayloadResults resultPayload = results();
        // files
        resultPayload.put(model.getDailyTimeseries(),
                  model.getDailyBoxplot(),
                  model.getMonthlyTimeseries(),
                  model.getMonthlyBoxplot(),
                  model.getYearlyTimeseries(),
                  model.getYearlyBoxplot(),
                  //Graphs no longer handled with Java
                  //new File(model.getDailyGraph()),
                  //new File(model.getDailyBoxplotGraph()),
                  //new File(model.getMonthlyGraph()),
                  //new File(model.getMonthlyBoxplotGraph()),
                  //new File(model.getYearlyGraph()),
                  //new File(model.getYearlyBoxplotGraph()),
                  //Results files desired by the user as output of the model
                  model.getOutputResult1(),
                  model.getOutputResult2(),
                  model.getOutputResult3());

        // values
        resultPayload.put("flow_len", model.getFlowLen());
        resultPayload.put("wq_len", model.getWQLen());
        resultPayload.put("wq_units", model.getWQUnits());
        resultPayload.put("start", model.getStart());
        resultPayload.put("end", model.getEnd());
        resultPayload.put("data_source", model.getDataSource());
        //Daily Data
        resultPayload.put("daily_max", model.getDailyMax(), null, "cfs");
        resultPayload.put("daily_min", model.getDailyMin(), null, "cfs");
        resultPayload.put("daily_upper_quartile", model.getDailyUpperQuartile(), null, "cfs");
        resultPayload.put("daily_lower_quartile", model.getDailyLowerQuartile(), null, "cfs");
        resultPayload.put("daily_median", model.getDailyMedian(), null, "cfs");
        resultPayload.put("daily_mean", model.getDailyMean(), null, "cfs");
        resultPayload.put("daily_standard_deviation", model.getDailyStandardDeviation(), null, "cfs");
        //Monthly Data
        resultPayload.put("monthly_max", model.getMonthlyMax(), null, "cfs");
        resultPayload.put("monthly_min", model.getMonthlyMin(), null, "cfs");
        resultPayload.put("monthly_upper_quartile", model.getMonthlyUpperQuartile(), null, "cfs");
        resultPayload.put("monthly_lower_quartile", model.getMonthlyLowerQuartile(), null, "cfs");
        resultPayload.put("monthly_median", model.getMonthlyMedian(), null, "cfs");
        resultPayload.put("monthly_mean", model.getMonthlyMean(), null, "cfs");
        resultPayload.put("monthly_standard_deviation", model.getMonthlyStandardDeviation(), null, "cfs");
        //Yearly Data
        resultPayload.put("yearly_max", model.getYearlyMax(), null, "cfs");
        resultPayload.put("yearly_min", model.getYearlyMin(), null, "cfs");
        resultPayload.put("yearly_upper_quartile", model.getYearlyUpperQuartile(), null, "cfs");
        resultPayload.put("yearly_lower_quartile", model.getYearlyLowerQuartile(), null, "cfs");
        resultPayload.put("yearly_median", model.getYearlyMedian(), null, "cfs");
        resultPayload.put("yearly_mean", model.getYearlyMean(), null, "cfs");
        resultPayload.put("yearly_standard_deviation", model.getYearlyStandardDeviation(), null, "cfs");
        //Get other results
        resultPayload.put("user_resultFile1", model.getOutputResult1().getName());
        resultPayload.put("user_resultFile2", model.getOutputResult2().getName());
        resultPayload.put("user_resultFile3", model.getOutputResult3().getName());
        
        //Get result files for JSHighCharts
        String graphDataFiles = model.getDailyTimeseries().getName() + "|" +  
                      model.getDailyBoxplot().getName() + "|" + 
                      model.getMonthlyTimeseries().getName() + "|" + 
                      model.getMonthlyBoxplot().getName() + "|" + 
                      model.getYearlyTimeseries().getName() + "|" + 
                      model.getYearlyBoxplot().getName();
        resultPayload.put("graph_data_files", graphDataFiles);
    }
}