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

import csip.annotations.*;
import static csip.annotations.ResourceType.ARCHIVE;
import static csip.annotations.ResourceType.OUTPUT;
import static csip.annotations.ResourceType.PYTHON3;
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 static csip.annotations.ResourceType.FILE;
import csip.annotations.VersionInfo;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Path;

@Name("trend_statistics")
@Description("CSIP end point for trend assessment of time series data")
@VersionInfo("1.0")
@Path("m/cfa/trends/1.0")
@Resource(type = ARCHIVE, file = "/archive/**")
// @Resource(type = PYTHON3, file = "/archive/trends_WQseries.py",  id = "trends_WQseries")
@Resource(type = PYTHON3, file = "/archive/trends.py",  id = "trends")
public class V1_0 extends ModelDataService {

    File resultFile = null;
    
    @Override
    protected void doProcess() throws Exception {
        String directory = workspace().getDir().toString();
        
        //Get Inputs
        //PayloadParameter inputPayload = parameter();
        //String ts_data = inputPayload.getString("ts_data", "");
        
        //Setup directory/result file
        //File pythonModel = resources().getFile("trends_WQseries");
        File pythonModel = resources().getFile("trends");
        resultFile = new File(directory, "trendsResult.csv");
        
        //Setup inputs to python
        List<String> args = new ArrayList<>();
        args.add("python");
        args.add(pythonModel.getAbsolutePath());
        args.add(directory); 
        args.add(resultFile.getAbsolutePath());

        //Call service
        ProcessBuilder pb = new ProcessBuilder(args);
        Process p = pb.start();
        BufferedReader bfr_error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        int exitCode = p.waitFor();

        //Log any errors (probably not necessary)
        String line;
        String error_log = "";
        while ((line = bfr_error.readLine()) != null) {
            error_log += line + "\n";
            System.err.println(error_log);
        }
        String temp = (error_log.isEmpty()) ? null : error_log;
    }

    @Override
    protected void postProcess() throws Exception {
        PayloadResults resultPayload = results();
        // files (auto added as a download link by csip)
        resultPayload.put(resultFile);
        // values (if you want a simple statistics value, like sens slope, add it this way)
        //resultPayload.put("result_file", resultFile.getName());
    }
}