/** * Copyright (c) 2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * 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.task.ui.internal; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.context.ConfigurationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.synapse.task.TaskDescription; import org.apache.synapse.task.TaskDescriptionFactory; import org.apache.synapse.task.TaskDescriptionSerializer; import org.wso2.carbon.CarbonConstants; import org.wso2.carbon.task.stub.TaskAdminStub; import org.wso2.carbon.task.stub.TaskManagementException; import org.wso2.carbon.task.stub.types.carbon.TaskData; import org.wso2.carbon.ui.CarbonUIUtil; import org.wso2.carbon.utils.ServerConstants; import javax.servlet.ServletConfig; import javax.servlet.http.HttpSession; import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; /** * */ public class TaskManagementClient { private static final Log log = LogFactory.getLog(TaskManagementClient.class); private static final String TASK_EXTENSION_NS = "http://www.wso2.org/products/wso2commons/tasks"; private static final OMNamespace TASK_OM_NAMESPACE = OMAbstractFactory.getOMFactory().createOMNamespace(TASK_EXTENSION_NS, "task"); private static final QName ROOT_QNAME = new QName(TASK_EXTENSION_NS, "taskExtension", "task"); private TaskAdminStub stub; private TaskManagementClient(String cookie, String backendServerURL, ConfigurationContext configCtx) throws AxisFault, TaskManagementException { String serviceURL = backendServerURL + "TaskAdmin"; stub = new TaskAdminStub(configCtx, serviceURL); ServiceClient client = stub._getServiceClient(); Options option = client.getOptions(); option.setManageSession(true); option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie); } public static TaskManagementClient getInstance(ServletConfig config, HttpSession session) throws TaskManagementException, AxisFault { String backendServerURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); ConfigurationContext configContext = (ConfigurationContext) config.getServletContext().getAttribute( CarbonConstants.CONFIGURATION_CONTEXT); String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); return new TaskManagementClient(cookie, backendServerURL, configContext); } public ResponseInformation addTaskDescription(TaskDescription taskDescription) { validateTaskDescription(taskDescription); if (log.isDebugEnabled()) { log.debug("Going to add TaskDescription :" + taskDescription); } OMElement taskElement = TaskDescriptionSerializer.serializeTaskDescription( TASK_OM_NAMESPACE, taskDescription); validateTaskElement(taskElement); if (log.isDebugEnabled()) { log.debug("TasK configuration :" + taskElement); } ResponseInformation responseInformation = new ResponseInformation(); try { stub.addTaskDescription(taskElement); } catch (Exception e) { responseInformation.setFault(true); responseInformation.setMessage(e.getMessage()); } return responseInformation; } public ResponseInformation deleteTaskDescription(String name, String group) { validateName(name); validateGroup(group); if (log.isDebugEnabled()) { log.debug("Going to delete a TaskDescription with name : " + name); } ResponseInformation responseInformation = new ResponseInformation(); try { stub.deleteTaskDescription(name, group); } catch (Exception e) { responseInformation.setFault(true); responseInformation.setMessage(e.getMessage()); } return responseInformation; } public ResponseInformation editTaskDescription(TaskDescription taskDescription) { validateTaskDescription(taskDescription); if (log.isDebugEnabled()) { log.debug("Going to Edit TaskDescription :" + taskDescription); } OMElement taskElement = TaskDescriptionSerializer.serializeTaskDescription( TASK_OM_NAMESPACE, taskDescription); validateTaskElement(taskElement); if (log.isDebugEnabled()) { log.debug("TasK configuration :" + taskElement); } ResponseInformation responseInformation = new ResponseInformation(); try { stub.editTaskDescription(taskElement); } catch (Exception e) { responseInformation.setFault(true); responseInformation.setMessage(e.getMessage()); } return responseInformation; } public List<TaskDescription> getAllTaskDescriptions() throws Exception { OMElement element = stub.getAllTaskDescriptions(null); if (log.isDebugEnabled()) { log.debug("All TasKs configurations :" + element); } List<TaskDescription> descriptions = new ArrayList<TaskDescription>(); if (element == null) { return descriptions; } OMElement taskRoot = element.getFirstChildWithName(ROOT_QNAME); if (taskRoot == null) { return descriptions; } Iterator iterator = taskRoot.getChildElements(); while (iterator.hasNext()) { OMElement taskElement = (OMElement) iterator.next(); if (taskElement != null) { TaskDescription taskDescription = TaskDescriptionFactory.createTaskDescription( taskElement, TASK_OM_NAMESPACE); if (taskDescription != null) { descriptions.add(taskDescription); } } } if (log.isDebugEnabled()) { log.debug("All TasKs Descriptions :" + descriptions); } return descriptions; } public TaskData[] getAllTaskData() throws Exception { TaskData[] taskData = null; try { taskData = stub.getAllTaskData(); } catch (Exception e) { handleException(e.getLocalizedMessage()); } return taskData; } public TaskDescription getTaskDescription(String name, String group) throws Exception { validateName(name); validateGroup(group); if (log.isDebugEnabled()) { log.debug("Going to retrieve a Task Description for give name :" + name); } OMElement returnElement = stub.getTaskDescription(name, group); validateTaskElement(returnElement); OMElement taskElement = returnElement.getFirstElement(); validateTaskElement(taskElement); if (log.isDebugEnabled()) { log.debug("Retrieved Task Configuration : " + returnElement); } TaskDescription taskDescription = TaskDescriptionFactory.createTaskDescription(taskElement, TASK_OM_NAMESPACE); if (log.isDebugEnabled()) { log.debug("Retrieved Task : " + taskDescription); } validateTaskDescription(taskDescription); long interval = taskDescription.getInterval(); if (taskDescription.getIntervalInMs()) { interval = interval / 1000; } taskDescription.setInterval(interval); taskDescription.setIntervalInMs(false); return taskDescription; } public boolean isContains(String name, String group) throws Exception { validateName(name); validateGroup(group); return stub.isContains(name, group); } public ResponseInformation loadTaskProperties(String className, String group) { validateName(className); validateGroup(group); if (log.isDebugEnabled()) { log.debug("Going to retrieve properties of the Task implementation : " + className); } ResponseInformation responseInformation = new ResponseInformation(); try { OMElement returnElement = (OMElement) stub.loadTaskClassProperties(className.trim(), group); if (log.isDebugEnabled()) { log.debug("Loaded class properties as XML : " + returnElement); } if (returnElement != null) { OMElement properties = returnElement.getFirstChildWithName(new QName(TASK_EXTENSION_NS, "properties", "task")); if (properties != null) { if (log.isDebugEnabled()) { log.debug(" Returning properties : " + properties); } responseInformation.setResult(properties); } } } catch (Exception e) { responseInformation.setFault(true); responseInformation.setMessage(e.getMessage()); } return responseInformation; } public ResponseInformation getAllJobGroups() { if (log.isDebugEnabled()) { log.debug("Going to retrieve all JOBGroup names"); } ResponseInformation responseInformation = new ResponseInformation(); try { String[] jobGroups = stub.getAllJobGroups(); if (jobGroups != null) { if (log.isDebugEnabled()) { log.debug("Loaded JOBGroup names : " + Arrays.toString(jobGroups)); } responseInformation.setResult(jobGroups); } } catch (Exception e) { responseInformation.setFault(true); responseInformation.setMessage(e.getMessage()); } return responseInformation; } private static void validateTaskDescription(TaskDescription description) { if (description == null) { handleException("Task Description can not be found."); } } private static void validateTaskElement(OMElement taskElement) { if (taskElement == null) { handleException("Task Description OMElement can not be found."); } } private static void validateName(String name) { if (name == null || "".equals(name)) { handleException("Name is null or empty"); } } private static void validateGroup(String name) { if (name == null || "".equals(name)) { handleException("Group is null or empty"); } } private static void handleException(String msg) { log.error(msg); throw new IllegalArgumentException(msg); } }