/* * Copyright WSO2, Inc. (http://wso2.com) * * Licensed 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.cloud.gateway.agent.ui; import org.apache.axis2.AxisFault; import org.apache.axis2.client.Options; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.cloud.gateway.agent.stub.CGAgentAdminServiceCGException; import org.wso2.carbon.cloud.gateway.agent.stub.CGAgentAdminServiceStub; import org.wso2.carbon.cloud.gateway.agent.stub.types.carbon.CGProxyToolsURLs; import org.wso2.carbon.cloud.gateway.agent.stub.types.carbon.CGServerBean; import java.rmi.RemoteException; import java.text.MessageFormat; import java.util.Locale; import java.util.ResourceBundle; /** * This class <code>CGAgentAdminClient</code> provides the admin client for CSGAgent. */ public class CGAgentAdminClient { private static final Log log = LogFactory.getLog(CGAgentAdminClient.class); private static final String BUNDLE = "org.wso2.carbon.cloud.gateway.agent.ui.i18n.Resources"; private ResourceBundle bundle; private CGAgentAdminServiceStub stub; public CGAgentAdminClient(String cookie, String backendServerURL, ConfigurationContext configCtx, Locale locale) throws AxisFault { String serviceURL = backendServerURL + "CGAgentAdminService"; bundle = ResourceBundle.getBundle(BUNDLE, locale); stub = new CGAgentAdminServiceStub(configCtx, serviceURL); Options options = stub._getServiceClient().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); } /** * Publish the service * * @param serviceName name of the service to publish * @param serverName name of the server from which to unpublished * @param isAutoMatic the mode of publishing * @throws AxisFault in case of an error */ public void publish(String serviceName, String serverName, boolean isAutoMatic) throws AxisFault { try { stub.publishService(serviceName, serverName, isAutoMatic); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.publish.service", e), e); } } /** * Un publish the service * * @param serviceName name of the service to unpublished * @param serverName name of the server from which to unpublished * @throws AxisFault in case of an error */ public void unPublish(String serviceName, String serverName) throws AxisFault { try { stub.unPublishService(serviceName, serverName, false); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.unpublish.service", e), e); } } /** * Add a CSG server bean * * @param csgServer the csg server bean with server information * @throws AxisFault throws in case of an error */ public void addCGServer(CGServerBean csgServer) throws AxisFault { try { stub.addCGServer(csgServer); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.add.the.csg.server", e), e); } } /** * Get the available list of csg servers * * @return the csg server list * @throws AxisFault throws in case of an error */ public CGServerBean[] getCGServerList() throws AxisFault { try { return stub.getCGServerList(); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.retrieve.csg.servers", e), e); } return null; } /** * Remove this csg server instance * * @param serverName the unique csg server name to delete * @throws AxisFault throws in case of an error */ public void removeCGServer(String serverName) throws AxisFault { try { stub.removeCGServer(serverName); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.remove.csg.server", e), e); } } /** * Get the CSG server bean given the server name * * @param serverName the csg server name * @return the csg server instance given by this name * @throws AxisFault throws in case of an error */ public CGServerBean getCGServer(String serverName) throws AxisFault { try { return stub.getCGServer(serverName); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.retrieve.csg.servers", e), e); } return null; } /** * Update an already existing csg server * * @param bean the new csg server information * @throws AxisFault throws in case of an error */ public void updateCGServer(CGServerBean bean) throws AxisFault { try { stub.updateCGServer(bean); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.update.csg.server", e), e); } } /** * Is the given service already published * * @param serviceName service * @return status of the csg service * @throws AxisFault throws in case of an error */ public String getServiceStatus(String serviceName) throws AxisFault { try { return stub.getServiceStatus(serviceName); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.get.published.flag", e), e); } return null; } public void setServiceStatus(String serviceName, String status) throws AxisFault { try { stub.setServiceStatus(serviceName, status); } catch (Exception e) { handleException("Could not set the new status for the service '" + serviceName + "'", e); } } /** * Get the server that this service has published * * @param serviceName the service * @return the list of servers * @throws AxisFault throws in case of an error */ public String getPublishedServer(String serviceName) throws AxisFault { try { return stub.getPublishedServer(serviceName); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (CGAgentAdminServiceCGException e) { handleException(getI18nString("cannot.get.published.server.list", e), e); } return null; } public CGProxyToolsURLs getPublishedProxyToolsURLs(String serviceName) throws AxisFault { try { return stub.getPublishedProxyToolsURLs(serviceName); } catch (Exception e) { handleException(e.getMessage(), e); } return null; } /** * Determines whether at least one service has been published to specified CSG server. * * @param serverName Name of the CSG sever * @return if there is at least a one service published to the CSG server or false otherwise. * @throws AxisFault in case of an error */ public boolean isHasPublishedServices(String serverName) throws AxisFault { boolean isPublished = false; try { isPublished = stub.isHasPublishedServices(serverName); } catch (RemoteException e) { handleException(getI18nString("connect.error", e), e); } catch (Exception e) { handleException(e.getMessage(), e); } return isPublished; } private void handleException(String msg, Throwable t) throws AxisFault { log.error(msg, t); throw new AxisFault(msg, t); } private String getI18nString(String rowString, Throwable t) { return MessageFormat.format(bundle.getString(rowString), t.getMessage()); } }