/* * Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.wso2.carbon.rest.api.ui.client; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.llom.util.AXIOMUtil; import org.apache.axis2.AxisFault; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.transport.http.HTTPConstants; import org.wso2.carbon.rest.api.stub.RestApiAdminStub; import javax.xml.stream.XMLStreamException; import java.util.*; public class TestClient { private static String resourceTemplate = "<resource xmlns=\"http://ws.apache.org/ns/synapse\" uri-template=\"[1]\" methods=\"[2]\" >\n" + "\t\t <inSequence>\n" + "\t\t \t<send>\n" + "\t\t\t\t<endpoint name=\"Delecious\" xmlns=\"http://ws.apache.org/ns/synapse\">\n" + "\t\t\t\t\t<address uri=\"[3]\" />\n" + "\t\t\t\t</endpoint>\n" + "\t\t\t</send>\t\n" + "\t\t </inSequence>\n" + "\t\t <outSequence>\n" + "\t\t \t<send />\n" + "\t\t </outSequence>\n" + "\t\t</resource>\t"; private static String apiTemplate = "<api xmlns=\"http://ws.apache.org/ns/synapse\" name=\"[1]\" context=\"[2]\">\t" + "</api>"; private static String handlersTemplate = "<handlers xmlns=\"http://ws.apache.org/ns/synapse\"> </handlers>"; private static String handlerTemplate = "<handler xmlns=\"http://ws.apache.org/ns/synapse\" class=\"[1]\" />"; private Map apiMappings; private List<Map> resourceMappings; private List<Map> handlerMappings; private RestApiAdminStub stub; public static final String KEY_FOR_API_NAME = "key_for_api_name"; public static final String KEY_FOR_API_CONTEXT = "key_for_api_context"; public static final String KEY_FOR_RESOURCE_URI_TEMPLATE = "key_for_resource_uri_template"; public static final String KEY_FOR_RESOURCE_METHODS = "key_for_resource_methods"; public static final String KEY_FOR_RESOURCE_URI = "key_for_resource_uri"; public static final String KEY_FOR_HANDLER = "key_for_handler_class"; public TestClient(Map apiMappings, List<Map> resourceMappings, List<Map> handlerMappings, String cookie) throws AxisFault { this.apiMappings = apiMappings; this.resourceMappings = resourceMappings; this.handlerMappings = handlerMappings; initStub(cookie); } private void initStub(String cookie) throws AxisFault { String serviceURL = AuthAdminServiceClient.SERVICE_URL + "RestApiAdmin"; stub = new RestApiAdminStub(null, serviceURL); ServiceClient client = stub._getServiceClient(); Options options = client.getOptions(); options.setTimeOutInMilliSeconds(15 * 60 * 1000); options.setProperty(HTTPConstants.SO_TIMEOUT, 15 * 60 * 1000); options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 15 * 60 * 1000); options.setManageSession(true); options.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie); } public void addApi() throws AxisFault { try { String apiConfig = getConfigStringForTemplate(); System.out.println(apiConfig); stub.addApiFromString(apiConfig); } catch (Exception e) { // handleException(bundle.getString("could.not.add.api"), e); } } private String getConfigStringForTemplate() { String configAPI = constructAPIConfig(); OMElement configAPIOM = createOMElementFrom(configAPI); assert configAPIOM != null; List<String> configResources = constructResourceConfig(); for (String configResource : configResources) { OMElement configResourceOM = createOMElementFrom(configResource); if (configResourceOM != null) { configAPIOM.addChild(configResourceOM); } } List<String> handlerConfigs = constructHandlerConfig(); OMElement hadlersConfigOM = createOMElementFrom(handlersTemplate); for (String handlerConfig : handlerConfigs) { OMElement configSingleHandlerOM = createOMElementFrom(handlerConfig); if (configSingleHandlerOM != null) { hadlersConfigOM.addChild(configSingleHandlerOM); } } configAPIOM.addChild(hadlersConfigOM); return configAPIOM.toString(); } private String constructAPIConfig() { StringBuffer apiTempl = new StringBuffer(apiTemplate); if (apiMappings.get(KEY_FOR_API_NAME) != null && apiMappings.get(KEY_FOR_API_CONTEXT) != null) { String apiConf = apiTempl.toString().replaceAll("\\[1\\]", (String) apiMappings.get(KEY_FOR_API_NAME)). replaceAll("\\[2\\]", (String) apiMappings.get(KEY_FOR_API_CONTEXT)); return apiConf; } return null; } private List<String> constructHandlerConfig() { Iterator<Map> handlerMaps = handlerMappings.iterator(); List<String> handlerListStr = new ArrayList<String>(); while (handlerMaps.hasNext()) { Map singleHandler = handlerMaps.next(); StringBuffer handlerTempl = new StringBuffer(handlerTemplate); if (singleHandler != null && singleHandler.get(KEY_FOR_HANDLER) != null) { String replacedStr = handlerTempl.toString().replaceAll("\\[1\\]", (String) singleHandler.get(KEY_FOR_HANDLER)); handlerListStr.add(replacedStr); } } return handlerListStr; } private List<String> constructResourceConfig() { Iterator<Map> resourceMaps = resourceMappings.iterator(); List<String> resListStr = new ArrayList<String>(); while (resourceMaps.hasNext()) { Map singleResMap = resourceMaps.next(); StringBuffer resTempl = new StringBuffer(resourceTemplate); if (singleResMap != null && singleResMap.get(KEY_FOR_RESOURCE_METHODS) != null && singleResMap.get(KEY_FOR_RESOURCE_URI_TEMPLATE) != null && singleResMap.get(KEY_FOR_RESOURCE_URI) != null) { String replacedStr = resTempl.toString().replaceAll("\\[1\\]", (String) singleResMap.get(KEY_FOR_RESOURCE_URI_TEMPLATE)). replaceAll("\\[2\\]", (String) singleResMap.get(KEY_FOR_RESOURCE_METHODS)). replaceAll("\\[3\\]", (String) singleResMap.get(KEY_FOR_RESOURCE_URI)); resListStr.add(replacedStr); } } return resListStr; } public static OMElement createOMElementFrom(String omString) { try { return AXIOMUtil.stringToOM(omString); } catch (XMLStreamException e) { // e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return null; } public static void main(String[] args) throws Exception { Map testAPIMappings = new HashMap(); testAPIMappings.put(KEY_FOR_API_NAME, "DelciousAPI3"); testAPIMappings.put(KEY_FOR_API_CONTEXT, "/v3"); Map testResourceMappings_1 = new HashMap(); testResourceMappings_1.put(KEY_FOR_RESOURCE_URI_TEMPLATE, "/tags/get"); testResourceMappings_1.put(KEY_FOR_RESOURCE_METHODS, "GET"); testResourceMappings_1.put(KEY_FOR_RESOURCE_URI, "https://api.del.icio.us"); Map testResourceMappings_2 = new HashMap(); testResourceMappings_2.put(KEY_FOR_RESOURCE_URI_TEMPLATE, "/posts/get"); testResourceMappings_2.put(KEY_FOR_RESOURCE_METHODS, "GET"); testResourceMappings_2.put(KEY_FOR_RESOURCE_URI, "https://api.del.icio.us"); Map testResourceMappings_3 = new HashMap(); testResourceMappings_3.put(KEY_FOR_RESOURCE_URI_TEMPLATE, "/posts/delete?url={posturl}"); testResourceMappings_3.put(KEY_FOR_RESOURCE_METHODS, "DELETE"); testResourceMappings_3.put(KEY_FOR_RESOURCE_URI, "https://api.del.icio.us"); Map testResourceMappings_4 = new HashMap(); testResourceMappings_4.put(KEY_FOR_RESOURCE_URI_TEMPLATE, "/posts/add?url={posturl};description={desc}"); testResourceMappings_4.put(KEY_FOR_RESOURCE_METHODS, "POST"); testResourceMappings_4.put(KEY_FOR_RESOURCE_URI, "https://api.del.icio.us"); List<Map> resourceMappings = new ArrayList<Map>(); resourceMappings.add(testResourceMappings_1); resourceMappings.add(testResourceMappings_2); resourceMappings.add(testResourceMappings_3); resourceMappings.add(testResourceMappings_4); Map testHandlerMappings_1 = new HashMap(); // testHandlerMappings_1.put(KEY_FOR_HANDLER, "org.wso2.throttle.Handler"); List<Map> handlerMappings = new ArrayList<Map>(); handlerMappings.add(testHandlerMappings_1); String adminCookie = null; adminCookie = new AuthAdminServiceClient().login(AuthAdminServiceClient.HOST_NAME, AuthAdminServiceClient.USER_NAME, AuthAdminServiceClient.PASSWORD); /* AuthAdminServiceClient.setSystemProperties(AuthAdminServiceClient.CLIENT_TRUST_STORE_PATH, AuthAdminServiceClient.KEY_STORE_TYPE, AuthAdminServiceClient.KEY_STORE_PASSWORD); boolean loggedin = new AuthWrapper().login(AuthAdminServiceClient.HOST_NAME, AuthAdminServiceClient.USER_NAME, AuthAdminServiceClient.PASSWORD);*/ if (adminCookie != null) { System.out.println("logged in to the back-end server successfully...."); } else { throw new RuntimeException("could not login to the back-end server.... /n aborting..."); } TestClient restAPIClient = new TestClient(testAPIMappings, resourceMappings, handlerMappings, adminCookie); restAPIClient.addApi(); } }