FPPSoilParams.java [src/java/crp/utils] Revision: default  Date:
/*
 * $Id$
 *
 * This file is part of the Cloud Services Integration Platform (CSIP),
 * a Model-as-a-Service framework, API, and application suite.
 *
 * 2012-2019, OMSLab, Colorado State University.
 *
 * OMSLab licenses this file to you under the MIT license.
 * See the LICENSE file in the project root for more information.
 */
package crp.utils;

import static csip.ModelDataService.KEY_METAINFO;
import static csip.ModelDataService.KEY_PARAMETER;
import csip.ServiceException;
import gisobjects.GISObject;
import gisobjects.GISObjectException;
import java.io.IOException;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

/**
 *
 * @author <a href="mailto:shaun.case@colostate.edu">Shaun Case</a>
 */
public class FPPSoilParams extends ServiceCall {

    protected String _callingMetaInfo;
    protected GISObject _location;

        
    public FPPSoilParams(String metaInfo, GISObject shape, String URI) {
        super(URI);
        _callingMetaInfo = metaInfo;
        errorPrefix = "FPPSoilParams_ServiceCall";    
        _location = shape;
    }

    @Override
    protected void createRequest() throws ServiceException {
        JSONArray dataArray;

        requestMetainfoObject = new JSONObject();
        request = new JSONObject();

        dataArray = new JSONArray();
        try {
            requestMetainfoObject.put("MultipartRequest", "Bundled Service Request From csip-crp MetaModeling CliWindSoil Service");
            requestMetainfoObject.put("CliWindSoil_Metainfo", new JSONObject(_callingMetaInfo));
            request.put(KEY_METAINFO, requestMetainfoObject);
            GISObject newLocation = _location.buffer(1.0);
            JSONObject polyLocation = null;
            if (null != newLocation) {
                polyLocation = newLocation.toJSON();
            } else {
                throwServiceCallException("Cannot get a buffer location around that centroid.");
            }

            if (null != polyLocation) {
                polyLocation.put("name", "aoa_geometry");
                dataArray.put(polyLocation);

                request.put(KEY_PARAMETER, dataArray);
            } else {
                throwServiceCallException("Cannot convert centroid buffer to JSON.");
            }
        } catch (JSONException ex) {
            throwServiceCallException("Cannot create the JSON request for call.", ex);
        } catch (GISObjectException ex) {
             throwServiceCallException("Cannot convert centroid to buffer");
        } catch (IOException ex) {
            throwServiceCallException("Cannot convert centroid buffer to JSON.");
        }
    }

}