Package org.apache.muse.tools.generator.util

Source Code of org.apache.muse.tools.generator.util.ServicesDescriptorHelper

/*=============================================================================*
*  Copyright 2006 The Apache Software Foundation
*
*  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.apache.muse.tools.generator.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.xml.namespace.QName;

import org.apache.muse.tools.inspector.JavaMethod;
import org.apache.muse.util.xml.XmlUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
* Helps the Axis2Projectizer create a services.xml. Handles
* adding multiple services to the service group for situations
* where the muse.xml descriptor that we're generating from
* has more than one resource-type.
*
* @author Andrew Eberbach (aeberbac)
*/
public class ServicesDescriptorHelper {
  private static final QName SERVICE_GROUP_QNAME = new QName("serviceGroup");
  private static final QName SERVICE_QNAME = new QName("service");
  private static final QName OPERATION_QNAME = new QName("operation");
   
  String AXIS2_ISOLATION_LAYER = "org.apache.muse.core.platform.axis2.AxisIsolationLayer";
 
  private static final QName ACTION_MAPPING = new QName("actionMapping");
  private static final String NAME_ATTRIBUTE = "name";
  private static final String SERVICE_CLASS = "ServiceClass";
  private static final QName PARAMETER_QNAME = new QName("parameter");
  private static final String LOCKED_ATTRIBUTE = "locked";
  private static final String HANDLE_REQUEST = "handleRequest";
  private static final String MESSAGE_RECV_CLASS = "org.apache.axis2.receivers.RawXMLINOutMessageReceiver";
  private static final QName MESSAGE_RECV_QNAME = new QName("messageReceiver");
  private static final String CLASS_ATTRIBUTE = "class";
 
  private Document _servicesDocument;
  private Element _serviceGroupElement;
  private Map _serviceOperations;
 
  public ServicesDescriptorHelper() {
    _serviceOperations = new HashMap();
   
    _servicesDocument  = XmlUtils.createDocument();
    _serviceGroupElement = XmlUtils.createElement(_servicesDocument, SERVICE_GROUP_QNAME);
    _servicesDocument.appendChild(_serviceGroupElement);
  }

  private String makeActionURI(Capability capability, JavaMethod method) {
    String actionURI = method.getActionURI();
    if(actionURI != null) {
      return actionURI;
    }
   
    String name = method.getName().getLocalPart();
    name = name.substring(0,1).toUpperCase() + name.substring(1);
    return capability.getURI() + "/" + name;
  }
 
  public void addActionMappings(Capability capability, String serviceName) {
    Element operationElement = (Element) _serviceOperations.get(serviceName);
    for (Iterator j = capability.getOperations().iterator(); j.hasNext();) {         
      JavaMethod method = (JavaMethod) j.next();

      Element actionMapping = XmlUtils.createElement(_servicesDocument,ACTION_MAPPING);
     
      XmlUtils.setElementText(actionMapping, makeActionURI(
          capability, method));
     
      operationElement.appendChild(actionMapping);         
    }
  }

  public Node getDocument() {
    return _servicesDocument;
  }

  public void createService(String serviceName) {
    Element serviceElement = XmlUtils.createElement(_servicesDocument, SERVICE_QNAME);
    setName(serviceElement, serviceName);
   
    Element parameter = createParameter(SERVICE_CLASS, AXIS2_ISOLATION_LAYER,false);
    serviceElement.appendChild(parameter);
   
    Element operation = createOperation(HANDLE_REQUEST);
    serviceElement.appendChild(operation);
   
    _serviceOperations.put(serviceName, operation);
   
    _serviceGroupElement.appendChild(serviceElement);
  }

  private Element createOperation(String name) {
    Element operationElement = XmlUtils.createElement(_servicesDocument, OPERATION_QNAME);
    operationElement.setAttribute(NAME_ATTRIBUTE, name);
   
    Element messageReceiver = createMessageReceiver(MESSAGE_RECV_CLASS);
    operationElement.appendChild(messageReceiver);
   
    return operationElement;
  }

  private Element createMessageReceiver(String recvClass) {
    Element messageRecvElement = XmlUtils.createElement(_servicesDocument, MESSAGE_RECV_QNAME);
    messageRecvElement.setAttribute(CLASS_ATTRIBUTE, recvClass);
    return messageRecvElement;
  }

  private Element createParameter(String name, String value, boolean locked) {
    Element parameterElement = XmlUtils.createElement(_servicesDocument, PARAMETER_QNAME);
    parameterElement.setAttribute(NAME_ATTRIBUTE, name);
    parameterElement.setAttribute(LOCKED_ATTRIBUTE, String.valueOf(locked));
    XmlUtils.setElementText(parameterElement, value);
   
    return parameterElement;
  }

  private void setName(Element serviceElement, String serviceName) {
    serviceElement.setAttribute(NAME_ATTRIBUTE, serviceName);   
  }

}
TOP

Related Classes of org.apache.muse.tools.generator.util.ServicesDescriptorHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.