/******************************************************************************* * Copyright © 2006, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.edt.javart.services.servlet; import org.eclipse.edt.javart.json.ArrayNode; import org.eclipse.edt.javart.json.JsonParser; import org.eclipse.edt.javart.json.JsonUtilities; import org.eclipse.edt.javart.json.ObjectNode; import org.eclipse.edt.javart.json.ParseException; import org.eclipse.edt.javart.json.StringNode; import org.eclipse.edt.javart.resources.egldd.Binding; import eglx.services.Encoding; public abstract class ServiceInvoker extends Invoker { public static final String REST_SERVICE_SESSION_ID = "com.ibm.javart.services.Rest.restfulService.session"; private static String EGL_PARAMETER_ORDER = "EGL_PARAMETER_ORDER"; private static final int ENCODING_JSON = 0; private static final int ENCODING_XML = 1; public static String JSON_RPC_BINDINGNAME_ID = "bindingName"; public static String JSON_RPC_METHOD_ID = "method"; public static String JSON_RPC_PARAMETER_ID = "params"; public static String JSON_RPC_RESULT_ID = "result"; private String userId; private String password; private int timeout = -1; private static String BINDING_ID = "binding"; private static String WEB_BINDING_INTERFACE_ID = "interfacename"; private static String BINDING_WEBTYPE_ID = "WebBinding"; private static String BINDING_EGLTYPE_ID = "EGLBinding"; private static String BINDING_NAME_ID = "name"; private static String BINDING_TYPE_ID = "type"; private static String PROTOCOL_LOCAL_ID = "local"; private static String EGL_BINDING_SERVICE_NAME_ID = "serviceName"; private static String EGL_BINDING_ALIAS_ID = "alias"; private static String PROTOCOL_ID = "protocol"; private static String WEB_BINDING_WSDL_LOCATION_ID = "wsdlLocation"; private static String WEB_BINDING_WSDL_PORT_ID = "wsdlPort"; private static String WEB_BINDING_WSDL_SERVICE_ID = "wsdlService"; private static String WEB_BINDING_URI_ID = "uri"; ServiceInvoker() { } private class JsonFunctionInfo extends FunctionInfo { JsonFunctionInfo( String body, Encoding outEncoding ) { super( body, outEncoding ); } protected Object parsedObject() { if( parsedObject == null ) { parsedObject = getJsonParameters(body); } return parsedObject; } protected String getParameterOrder() { if( parameterOrder == null ) { parameterOrder = JsonUtilities.getValueNode((ObjectNode)parsedObject(), EGL_PARAMETER_ORDER, new StringNode("",false) ).toJava(); } return parameterOrder; } protected Object getJsParameters() { if( jsParameters == null ) { jsParameters = (ArrayNode)JsonUtilities.getValueNode((ObjectNode)parsedObject(), JSON_RPC_PARAMETER_ID, new ArrayNode() ); } return jsParameters; } } protected abstract class FunctionInfo { protected String body; protected String serviceName; protected String serviceAlias; protected Object parsedObject; protected String parameterOrder; protected String functionName; protected Object jsParameters; protected Binding binding; protected Encoding outEncoding; FunctionInfo( String body, Encoding outEncoding ) { this.body = body; this.outEncoding = outEncoding; } FunctionInfo( String body, String serviceName, String serviceAlias ) { this.body = body; this.serviceName = serviceName; this.serviceAlias = serviceAlias; } protected abstract Object parsedObject(); protected String getFunctionName() { functionName = JsonUtilities.getValueNode((ObjectNode)parsedObject(), JSON_RPC_METHOD_ID, new StringNode("",false) ).toJava(); return functionName; } protected abstract Object getJsParameters(); protected abstract String getParameterOrder(); } FunctionInfo getFunctionInfo( Encoding inEncoding, Encoding outEncoding, String body, boolean b ) { FunctionInfo info = null; if( inEncoding.equals(ENCODING_JSON) ) { info = new JsonFunctionInfo( body, outEncoding ); } else { //FIXME } return info; } FunctionInfo getFunctionInfo( Encoding inEncoding, Encoding outEncoding, String body ) { FunctionInfo info = null; if( inEncoding.equals(ENCODING_JSON) ) { info = new JsonFunctionInfo( body, outEncoding ); } else { //FIXME } return info; } private ObjectNode getJsonParameters( String body ) { ObjectNode payload; try { payload = JsonParser.parse( body ); } catch( ParseException e ) { payload = new ObjectNode(); } return payload; } public void setUserId( String userId ) { this.userId = userId; } public void setPassword( String password ) { this.password = password; } public int getTimeout() { return timeout; } public void setTimeout( int timeout ) { this.timeout = timeout; } }