You are viewing a plain text version of this content. The canonical link for it is here.
Posted to muse-commits@ws.apache.org by da...@apache.org on 2006/07/17 22:38:29 UTC
svn commit: r422853 [2/3] - in /webservices/muse/trunk/modules: muse-tools/
muse-tools/src/org/apache/muse/tools/generator/
muse-tools/src/org/apache/muse/tools/generator/analyzer/
muse-tools/src/org/apache/muse/tools/generator/projectizer/ muse-tools/...
Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java?rev=422853&view=auto
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java Mon Jul 17 13:38:27 2006
@@ -0,0 +1,1272 @@
+/*=============================================================================*
+ * 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.synthesizer;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.apache.muse.core.Resource;
+import org.apache.muse.tools.generator.LocalEnvironment;
+import org.apache.muse.tools.inspector.ResourceInspector;
+import org.apache.muse.util.CommandLine;
+import org.apache.muse.util.ReflectUtils;
+import org.apache.muse.util.messages.Messages;
+import org.apache.muse.util.messages.MessagesFactory;
+import org.apache.muse.util.xml.XmlUtils;
+import org.apache.muse.util.xml.XsdUtils;
+import org.apache.muse.ws.notification.remote.NotificationConsumerClient;
+import org.apache.muse.ws.notification.remote.NotificationProducerClient;
+import org.apache.muse.ws.resource.metadata.WsrmdConstants;
+import org.apache.muse.ws.wsdl.WsdlUtils;
+
+/**
+ *
+ * ProxySynthesizer is a tool for creating web service proxies, with extra
+ * support for WS-Addressing and manageability interfaces. It can create
+ * a remote interface and implementation class from a WSDL that describes
+ * a resource type. The tool can be run from the command line or invoked
+ * directly from Java code.
+ *
+ * @author Dan Jemiolo (danj)
+ *
+ * @see #main(String[])
+ * @see #run(String, String)
+ *
+ */
+
+public class ProxySynthesizer implements Synthesizer
+{
+ //
+ // Used to lookup all exception messages
+ //
+ private static Messages _MESSAGES = MessagesFactory.get(ProxySynthesizer.class);
+
+ //
+ // Used to request trace info during code gen
+ //
+ private static final String _VERBOSE_FLAG = "-v";
+
+ /**
+ *
+ * Creates a web service proxy class from a WSDL file.
+ *
+ * @param args
+ * <ol>
+ * <li>WSDL file - The WSDL that contains the resource type's
+ * portType.</li>
+ * <li>Java interface - The name of the interface that the tool
+ * should generate and the proxy class will implement.</li>
+ * </ol>
+ * <br><br>
+ * <b>There is also</b> a <em>-v</em> flag that can be used (at
+ * any point) to turn on verbose mode (useful for debugging).
+ *
+ * @see #run(String, String)
+ *
+ */
+ public static void main(String[] args) throws Exception
+ {
+ CommandLine cmdLine = new CommandLine();
+ cmdLine.parse(args);
+
+ boolean verbose = cmdLine.hasFlag(_VERBOSE_FLAG);
+ args = cmdLine.getArguments();
+
+ if (args.length != 2)
+ printUsageAndQuit();
+
+ ProxySynthesizer theApp = new ProxySynthesizer();
+ theApp.setVerbose(verbose);
+
+ try
+ {
+ Map files = theApp.run(args[0], args[1]);
+ Iterator i = files.keySet().iterator();
+
+ while (i.hasNext())
+ {
+ String typeName = (String)i.next();
+ theApp.writeToFile(typeName, (String)files.get(typeName));
+ }
+ }
+
+ catch (Throwable error)
+ {
+ error.printStackTrace();
+ }
+ }
+
+ private static void printUsageAndQuit()
+ {
+ System.err.println("\nUsage is:\n");
+ System.err.println("\t> ProxyGenerator [WSDL file] [Java interface name]\n");
+
+ System.exit(0);
+ }
+
+ private LocalEnvironment _environment = new LocalEnvironment(false);
+
+ //
+ // True if the tool should print trace info to stdout during code gen
+ //
+ private boolean _isVerbose = false;
+
+ private String createProxyClass(ResourceInspector inspector,
+ String interfaceName,
+ String proxyName)
+ {
+ if (isVerbose())
+ {
+ Object[] filler = { proxyName };
+ System.out.println(_MESSAGES.get("StartCodeGen", filler));
+ }
+
+ StringBuffer writer = new StringBuffer(10000);
+
+ generateProxyHeader(writer, inspector, interfaceName, proxyName);
+ generateMethods(writer, inspector, false);
+ generateProxyConstructors(writer, inspector, proxyName);
+ generateProxyFooter(writer, inspector);
+
+ if (isVerbose())
+ {
+ Object[] filler = { proxyName };
+ System.out.println(_MESSAGES.get("FinishCodeGen", filler));
+ }
+
+ return writer.toString();
+ }
+
+ private String createProxyName(String interfaceName)
+ {
+ return interfaceName + "Proxy";
+ }
+
+ private String createRemoteInterface(ResourceInspector inspector, String interfaceName)
+ {
+ if (isVerbose())
+ {
+ Object[] filler = { interfaceName };
+ System.out.println(_MESSAGES.get("StartCodeGen", filler));
+ }
+
+ StringBuffer writer = new StringBuffer(10000);
+
+ generateRemoteHeader(writer, inspector, interfaceName);
+ generateMethods(writer, inspector, true);
+ generateRemoteFooter(writer, inspector);
+
+ if (isVerbose())
+ {
+ Object[] filler = { interfaceName };
+ System.out.println(_MESSAGES.get("FinishCodeGen", filler));
+ }
+
+ return writer.toString();
+ }
+
+ /**
+ *
+ * Top-level code generation method - this kicks off the interface
+ * and class creation tasks.
+ *
+ * @param interfaceName
+ * The desired interface name for the new proxy.
+ *
+ * @param inspector
+ * The ResourceInspector that has analyzed the WSDL.
+ *
+ * @return A Map of file names (String) to Java code (String).
+ *
+ */
+ private Map generate(String interfaceName, ResourceInspector inspector)
+ {
+ String interfaceJava = createRemoteInterface(inspector, interfaceName);
+
+ String proxyName = createProxyName(interfaceName);
+ String proxyJava = createProxyClass(inspector, interfaceName, proxyName);
+
+ Map results = new HashMap();
+
+ results.put(interfaceName, interfaceJava);
+ results.put(proxyName, proxyJava);
+
+ return results;
+ }
+
+ private void generateActions(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\tprivate static final URI[] _ACTIONS = {\n");
+
+ Iterator i = inspector.getOperations().iterator();
+ boolean hasUserDefinedOperation = false;
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (inspector.isBasicResourceOperation(name))
+ continue;
+
+ hasUserDefinedOperation = true;
+
+ writer.append("\t\tURI.create(\"");
+ writer.append(inspector.getAction(name));
+ writer.append("\")");
+ writer.append(',');
+ writer.append('\n');
+ }
+
+ if (hasUserDefinedOperation)
+ {
+ int length = writer.length();
+ writer.delete(length - 2, length);
+ }
+
+ writer.append("\n\t};\n\n");
+ }
+
+ private void generateClassDef(StringBuffer writer,
+ String proxyClassName,
+ String extendsType,
+ String interfaceType)
+ {
+ writer.append("public class ");
+ writer.append(ReflectUtils.getShortName(proxyClassName));
+ writer.append('\n');
+ writer.append("\textends ");
+ writer.append(ReflectUtils.getShortName(extendsType));
+ writer.append(' ');
+ writer.append("implements ");
+ writer.append(ReflectUtils.getShortName(interfaceType));
+ writer.append("\n{");
+ }
+
+ private void generateComment(StringBuffer writer, String className)
+ {
+ String shortName = ReflectUtils.getShortName(className);
+ String fileName = shortName + ".java";
+
+ writer.append("//\n");
+ writer.append("// " + fileName + '\n');
+ writer.append("// " + new Date() + '\n');
+ writer.append("// Generated by Cowbell, an IBM project\n");
+ writer.append("//\n\n");
+ }
+
+ private void generateFields(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\n\tprivate static final Map _HANDLERS_BY_NAME = new HashMap();\n\n");
+
+ //
+ // this would be better if java had function pointers. I can't be
+ // bothered to write a class for each of these
+ //
+ generateMethodNames(writer, inspector);
+ generateReturnTypes(writer, inspector);
+ generateActions(writer, inspector);
+ generateRequestNames(writer, inspector);
+ generateResponseNames(writer, inspector);
+ generateRequestParams(writer, inspector);
+ }
+
+ private void generateGetHandler(StringBuffer writer)
+ {
+ writer.append("\n\tprotected ProxyHandler getHandler(String methodName)\n");
+ writer.append("\t{\n");
+ writer.append("\t\treturn (ProxyHandler)_HANDLERS_BY_NAME.get(methodName);\n");
+ writer.append("\t}\n");
+ }
+
+ private void generateHandler(StringBuffer writer, String methodName)
+ {
+ writer.append("\t\tProxyHandler handler = getHandler(\"");
+ writer.append(methodName);
+ writer.append("\");\n");
+ }
+
+ private void generateInterfaceDef(StringBuffer writer,
+ String remoteClassName,
+ List extendsTypes)
+ {
+ writer.append("public interface ");
+ writer.append(ReflectUtils.getShortName(remoteClassName));
+ writer.append(" extends ");
+
+ Iterator i = extendsTypes.iterator();
+
+ while (i.hasNext())
+ {
+ Class type = (Class)i.next();
+ writer.append(ReflectUtils.getShortName(type));
+
+ if (i.hasNext())
+ writer.append(", ");
+ }
+
+ writer.append("\n{");
+ }
+
+ private void generateInvoke(StringBuffer writer,
+ ResourceInspector inspector,
+ String methodName)
+ {
+ writer.append("\t\t");
+
+ Class returnType = inspector.getReturnType(methodName);
+
+ if (returnType == void.class)
+ writer.append("invoke(handler, params);\n");
+
+ else if (!returnType.isPrimitive())
+ {
+ writer.append("return (");
+ writer.append(ReflectUtils.getShortName(returnType));
+ writer.append(")invoke(handler, params);\n");
+ }
+
+ else
+ {
+ String className = getPrimitiveClassName(returnType);
+ String convertMethodName = getPrimitiveConvertMethodName(className);
+
+ writer.append(className);
+ writer.append(" result = (");
+ writer.append(className);
+ writer.append(")invoke(handler, params);\n");
+ writer.append("\t\treturn result.");
+ writer.append(convertMethodName);
+ writer.append("();\n");
+ }
+ }
+
+ private void generateMethod(StringBuffer writer,
+ ResourceInspector inspector,
+ String methodName,
+ boolean justSignature)
+ {
+ if (isVerbose())
+ {
+ Object[] filler = { methodName };
+ System.out.println(_MESSAGES.get("MethodGen", filler));
+ }
+
+ writer.append("\n\t");
+
+ if (!justSignature)
+ writer.append("public ");
+
+ Class returnType = inspector.getReturnType(methodName);
+ writer.append(ReflectUtils.getShortName(returnType));
+
+ writer.append(' ');
+ writer.append(methodName);
+
+ String[] paramNames = inspector.getParameterNames(methodName);
+ Class[] paramTypes = inspector.getParameterTypes(methodName);
+ generateParamList(writer, paramNames, paramTypes);
+
+ writer.append("\t\tthrows RemoteException");
+
+ if (justSignature)
+ writer.append(';');
+
+ else
+ {
+ writer.append("\n\t{\n");
+
+ generateParamConversion(writer, inspector, methodName);
+ generateHandler(writer, methodName);
+ generateInvoke(writer, inspector, methodName);
+
+ writer.append("\t}");
+ }
+
+ writer.append('\n');
+ }
+
+ private void generateMethodNames(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\tprivate static final String[] _METHOD_NAMES = {\n");
+ writer.append("\t\t");
+
+ Iterator i = inspector.getOperations().iterator();
+ boolean hasUserDefinedOperation = false;
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (inspector.isBasicResourceOperation(name))
+ continue;
+
+ hasUserDefinedOperation = true;
+ writer.append('\"');
+ writer.append(name);
+ writer.append('\"');
+ writer.append(", ");
+ }
+
+ if (hasUserDefinedOperation)
+ {
+ int length = writer.length();
+ writer.delete(length - 2, length);
+ }
+
+ writer.append("\n\t};\n\n");
+ }
+
+ private void generateMethods(StringBuffer writer,
+ ResourceInspector inspector,
+ boolean justSignature)
+ {
+ Iterator i = inspector.getOperations().iterator();
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (!inspector.isBasicResourceOperation(name))
+ generateMethod(writer, inspector, name, justSignature);
+ }
+
+ i = inspector.getProperties().iterator();
+ int index = 0;
+
+ while (i.hasNext())
+ {
+ QName property = (QName)i.next();
+ generatePropertyGet(writer, inspector, property, index, justSignature);
+
+ if (inspector.isPropertyAppendable(property))
+ generatePropertyInsert(writer, inspector, property, index, justSignature);
+
+ if (inspector.isPropertyMutable(property))
+ {
+ generatePropertyUpdate(writer, inspector, property, index, justSignature);
+ generatePropertyDelete(writer, inspector, property, index, justSignature);
+ }
+
+ ++index;
+ }
+ }
+
+ private void generatePackage(StringBuffer writer, String className)
+ {
+ String packageName = ReflectUtils.getPackageName(className);
+
+ if (packageName != null)
+ writer.append("package " + packageName + ";\n\n");
+ }
+
+ private void generateParamConversion(StringBuffer writer,
+ ResourceInspector inspector,
+ String operation)
+ {
+ String[] paramNames = inspector.getParameterNames(operation);
+ Class[] paramTypes = inspector.getParameterTypes(operation);
+
+ writer.append("\t\tObject[] params = new Object[");
+ writer.append(paramTypes.length);
+ writer.append("];\n");
+
+ if (paramTypes.length > 0)
+ writer.append('\n');
+
+ for (int n = 0; n < paramTypes.length; ++n)
+ {
+ writer.append("\t\tparams[");
+ writer.append(n);
+ writer.append("] = ");
+
+ String name = ResourceInspector.getMethodName(paramNames[n]);
+ writer.append(getObjectName(name, paramTypes[n]));
+ writer.append(";\n");
+ }
+
+ writer.append('\n');
+ }
+
+ private void generateParamList(StringBuffer writer,
+ String[] names,
+ Class[] types)
+ {
+ writer.append('(');
+
+ for (int n = 0; n < types.length; ++n)
+ {
+ writer.append(ReflectUtils.getShortName(types[n]));
+ writer.append(' ');
+
+ if (names != null)
+ writer.append(ResourceInspector.getMethodName(names[n]));
+
+ else
+ writer.append("arg" + n);
+
+ if (n != types.length - 1)
+ writer.append(", ");
+ }
+
+ writer.append(")\n");
+ }
+
+ private void generateProperties(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ Collection properties = inspector.getProperties();
+
+ if (isVerbose())
+ {
+ Object[] filler = { new Integer(properties.size()) };
+ System.out.println(_MESSAGES.get("PropertiesGen", filler));
+ }
+
+ writer.append("\n\tQName[] PROPERTIES = {\n");
+
+ Iterator i = properties.iterator();
+
+ while (i.hasNext())
+ {
+ writer.append("\t\t");
+ generateQName(writer, (QName)i.next());
+ writer.append(',');
+ writer.append('\n');
+ }
+
+ int length = writer.length();
+ writer.delete(length - 2, length);
+
+ writer.append("\n\t};\n");
+ }
+
+ private void generatePropertyDelete(StringBuffer writer,
+ ResourceInspector inspector,
+ QName propertyName,
+ int propertyIndex,
+ boolean justSignature)
+ {
+ if (isVerbose())
+ {
+ Object[] filler = { "delete" + propertyName.getLocalPart() };
+ System.out.println(_MESSAGES.get("MethodGen", filler));
+ }
+
+ writer.append("\n\t");
+
+ if (!justSignature)
+ writer.append("public ");
+
+ Class type = inspector.getPropertyType(propertyName);
+
+ if (type.isArray())
+ type = ReflectUtils.getClassFromArrayClass(type);
+
+ writer.append("void delete" + propertyName.getLocalPart());
+ writer.append("()\n");
+ writer.append("\t\tthrows RemoteException");
+
+ if (justSignature)
+ writer.append(';');
+
+ else
+ {
+ writer.append("\n\t{\n");
+
+ writer.append("\t\tdeleteResourceProperty(PROPERTIES[");
+ writer.append(propertyIndex);
+ writer.append("]);\n");
+
+ writer.append("\t}");
+ }
+
+ writer.append('\n');
+ }
+
+ private void generatePropertyGet(StringBuffer writer,
+ ResourceInspector inspector,
+ QName propertyName,
+ int propertyIndex,
+ boolean justSignature)
+ {
+ if (isVerbose())
+ {
+ Object[] filler = { "get" + propertyName.getLocalPart() };
+ System.out.println(_MESSAGES.get("MethodGen", filler));
+ }
+
+ writer.append("\n\t");
+
+ if (!justSignature)
+ writer.append("public ");
+
+ Class type = inspector.getPropertyType(propertyName);
+ writer.append(ReflectUtils.getShortName(type));
+
+ writer.append(' ');
+ writer.append("get" + propertyName.getLocalPart());
+ writer.append("()\n");
+ writer.append("\t\tthrows RemoteException");
+
+ if (justSignature)
+ writer.append(';');
+
+ else
+ {
+ writer.append("\n\t{\n");
+
+ if (type.isArray())
+ {
+ writer.append("\t\treturn (");
+ writer.append(ReflectUtils.getShortName(type));
+ writer.append(")getPropertyAsObject(");
+ writer.append("PROPERTIES[");
+ writer.append(propertyIndex);
+ writer.append("], ");
+
+ type = ReflectUtils.getClassFromArrayClass(type);
+ writer.append(ReflectUtils.getShortName(type));
+ writer.append(".class);\n");
+ }
+
+ else
+ {
+ writer.append("\t\t");
+
+ Class array = ReflectUtils.getArrayClassFromClass(type);
+ writer.append(ReflectUtils.getShortName(array));
+
+ writer.append(" results = (");
+ writer.append(ReflectUtils.getShortName(array));
+ writer.append(")getPropertyAsObject(");
+ writer.append("PROPERTIES[");
+ writer.append(propertyIndex);
+ writer.append("], ");
+ writer.append(ReflectUtils.getShortName(type));
+ writer.append(".class);\n");
+ writer.append("\t\treturn results.length == 0 ? ");
+ writer.append(getNullValue(type));
+ writer.append(" : results[0];\n");
+ }
+
+ writer.append("\t}");
+ }
+
+ writer.append('\n');
+ }
+
+ private void generatePropertyInsert(StringBuffer writer,
+ ResourceInspector inspector,
+ QName propertyName,
+ int propertyIndex,
+ boolean justSignature)
+ {
+ generatePropertySet(writer, inspector, propertyName, propertyIndex, justSignature, "insert");
+ }
+
+ private void generatePropertySet(StringBuffer writer,
+ ResourceInspector inspector,
+ QName propertyName,
+ int propertyIndex,
+ boolean justSignature,
+ String setType)
+ {
+ if (isVerbose())
+ {
+ Object[] filler = { setType + propertyName.getLocalPart() };
+ System.out.println(_MESSAGES.get("MethodGen", filler));
+ }
+
+ writer.append("\n\t");
+
+ if (!justSignature)
+ writer.append("public ");
+
+ Class type = inspector.getPropertyType(propertyName);
+
+ writer.append("void ");
+ writer.append(setType);
+ writer.append(propertyName.getLocalPart());
+ writer.append('(');
+ writer.append(ReflectUtils.getShortName(type));
+ writer.append(" value)\n");
+ writer.append("\t\tthrows RemoteException");
+
+ if (justSignature)
+ writer.append(';');
+
+ else
+ {
+ writer.append("\n\t{\n\t\t");
+ writer.append(setType);
+ writer.append("ResourceProperty(PROPERTIES[");
+ writer.append(propertyIndex);
+ writer.append("], ");
+
+ if (type.isArray())
+ writer.append("value");
+
+ else
+ {
+ writer.append("new Object[]{ ");
+ writer.append(getArrayValue(type));
+ writer.append(" }");
+ }
+
+ writer.append(");\n");
+
+ writer.append("\t}");
+ }
+
+ writer.append('\n');
+ }
+
+ private void generatePropertyUpdate(StringBuffer writer,
+ ResourceInspector inspector,
+ QName propertyName,
+ int propertyIndex,
+ boolean justSignature)
+ {
+ generatePropertySet(writer, inspector, propertyName, propertyIndex, justSignature, "update");
+ }
+
+ private void generateProxyConstructors(StringBuffer writer,
+ ResourceInspector inspector,
+ String proxyClassName)
+ {
+ int dot = proxyClassName.lastIndexOf('.');
+ String className = proxyClassName.substring(dot + 1);
+
+ Class baseType = inspector.getBaseProxyClass();
+ Constructor[] ctors = baseType.getConstructors();
+
+ for (int n = 0; n < ctors.length; ++n)
+ {
+ writer.append("\n\tpublic ");
+ writer.append(className);
+
+ Class[] params = ctors[n].getParameterTypes();
+ generateParamList(writer, null, ctors[n].getParameterTypes());
+
+ writer.append("\t{\n");
+ writer.append("\t\tsuper(");
+
+ for (int i = 0; i < params.length; ++i)
+ {
+ writer.append("arg" + i);
+
+ if (i != params.length - 1)
+ writer.append(", ");
+ }
+
+ writer.append(");\n");
+ writer.append("\t}\n");
+ }
+ }
+
+ private void generateProxyFooter(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ generateFields(writer, inspector);
+ generateGetHandler(writer);
+ generateStatic(writer);
+ writer.append("}\n");
+ }
+
+ private void generateProxyHeader(StringBuffer writer,
+ ResourceInspector inspector,
+ String interfaceName,
+ String proxyName)
+ {
+ Class extendsType = inspector.getBaseProxyClass();
+ String extendsName = extendsType.getName();
+
+ if (isVerbose())
+ {
+ Object[] filler = { proxyName, extendsName };
+ System.out.println(_MESSAGES.get("Extending", filler));
+ }
+
+ generateComment(writer, proxyName);
+ generatePackage(writer, proxyName);
+ generateProxyImports(writer, extendsName);
+
+ generateClassDef(writer, proxyName, extendsName, interfaceName);
+ }
+
+ private void generateProxyImports(StringBuffer writer, String extendsType)
+ {
+ writer.append("import java.lang.reflect.Array;\n");
+ writer.append("import java.net.URI;\n");
+ writer.append("import java.rmi.RemoteException;\n");
+ writer.append("import java.util.Date;\n");
+ writer.append("import java.util.HashMap;\n");
+ writer.append("import java.util.Map;\n\n");
+
+ writer.append("import javax.xml.namespace.QName;\n\n");
+
+ writer.append("import org.w3c.dom.Element;\n\n");
+
+ writer.append("import com.ibm.cowbell.proxy.ProxyHandler;\n");
+ writer.append("import com.ibm.cowbell.proxy.ReflectionProxyHandler;\n");
+ writer.append("import com.ibm.ws.addressing.EndpointReference;\n");
+ writer.append("import com.ibm.ws.resource.Environment;\n");
+ writer.append("import com.ibm.ws.soap.SoapClient;\n\n");
+
+ writer.append("import " + extendsType + ";\n\n");
+ }
+
+ private void generateQName(StringBuffer writer, QName qname)
+ {
+ generateQName(writer, qname.getNamespaceURI(), qname.getLocalPart());
+ }
+
+ private void generateQName(StringBuffer writer, String uri, String name)
+ {
+ writer.append("new QName(\"");
+
+ if (uri != null && uri.length() > 0)
+ {
+ writer.append(uri);
+ writer.append("\", \"");
+ }
+
+ writer.append(name);
+ writer.append("\")");
+ }
+
+ private void generateRemoteFooter(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ generateProperties(writer, inspector);
+ writer.append("}\n");
+ }
+
+ private void generateRemoteHeader(StringBuffer writer,
+ ResourceInspector inspector,
+ String remoteClassName)
+ {
+ List extendsTypes = getRemoteExtends(inspector);
+
+ if (isVerbose())
+ {
+ Object[] filler = { remoteClassName, extendsTypes };
+ System.out.println(_MESSAGES.get("Extending", filler));
+ }
+
+ generateComment(writer, remoteClassName);
+ generatePackage(writer, remoteClassName);
+ generateRemoteImports(writer, extendsTypes);
+
+ generateInterfaceDef(writer, remoteClassName, extendsTypes);
+ }
+
+ private void generateRemoteImports(StringBuffer writer, List extendsTypes)
+ {
+ writer.append("import java.util.Date;\n\n");
+ writer.append("import java.rmi.RemoteException;\n\n");
+ writer.append("import javax.xml.namespace.QName;\n\n");
+ writer.append("import org.w3c.dom.Element;\n\n");
+
+ writer.append("import com.ibm.ws.addressing.EndpointReference;\n");
+
+ Iterator i = extendsTypes.iterator();
+
+ while (i.hasNext())
+ {
+ Class type = (Class)i.next();
+ writer.append("import " + type.getName() + ";\n");
+ }
+
+ writer.append('\n');
+ }
+
+ private void generateRequestNames(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\tprivate static final QName[] _REQUEST_NAMES = {\n");
+
+ Iterator i = inspector.getOperations().iterator();
+ boolean hasUserDefinedOperation = false;
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (inspector.isBasicResourceOperation(name))
+ continue;
+
+ hasUserDefinedOperation = true;
+ writer.append("\t\t");
+ generateQName(writer, inspector.getRequestName(name));
+ writer.append(",\n");
+ }
+
+ if (hasUserDefinedOperation)
+ {
+ int length = writer.length();
+ writer.delete(length - 2, length);
+ }
+
+ writer.append("\n\t};\n\n");
+ }
+
+ private void generateRequestParams(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\tprivate static final QName[][] _REQUEST_PARAM_NAMES = {\n");
+
+ Iterator i = inspector.getOperations().iterator();
+ boolean hasUserDefinedOperation = false;
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (inspector.isBasicResourceOperation(name))
+ continue;
+
+ hasUserDefinedOperation = true;
+
+ QName[] paramNames = inspector.getParameterQNames(name);
+
+ writer.append("\t\t{\n");
+
+ for (int n = 0; n < paramNames.length; ++n)
+ {
+ writer.append("\t\t\t");
+ generateQName(writer, paramNames[n]);
+
+ if (n != paramNames.length - 1)
+ writer.append(',');
+
+ writer.append('\n');
+ }
+
+ writer.append("\t\t}");
+ writer.append(',');
+ writer.append('\n');
+ }
+
+ if (hasUserDefinedOperation)
+ {
+ int length = writer.length();
+ writer.delete(length - 2, length);
+ }
+
+ writer.append("\n\t};\n\n");
+ }
+
+ private void generateResponseNames(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\tprivate static final QName[] _RESPONSE_NAMES = {\n");
+
+ Iterator i = inspector.getOperations().iterator();
+ boolean hasUserDefinedOperation = false;
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (inspector.isBasicResourceOperation(name))
+ continue;
+
+ hasUserDefinedOperation = true;
+
+ writer.append("\t\t");
+
+ QName returnName = inspector.getReturnName(name);
+
+ if (returnName != null && !returnName.equals(XsdUtils.ANY_TYPE_QNAME))
+ generateQName(writer, returnName);
+
+ else
+ writer.append("null");
+
+ writer.append(',');
+ writer.append('\n');
+ }
+
+ if (hasUserDefinedOperation)
+ {
+ int length = writer.length();
+ writer.delete(length - 2, length);
+ }
+
+ writer.append("\n\t};\n\n");
+ }
+
+ private void generateReturnTypes(StringBuffer writer,
+ ResourceInspector inspector)
+ {
+ writer.append("\tprivate static final Class[] _RETURN_TYPES = {\n");
+ writer.append("\t\t");
+
+ Iterator i = inspector.getOperations().iterator();
+ boolean hasUserDefinedOperation = false;
+
+ while (i.hasNext())
+ {
+ String name = (String)i.next();
+
+ if (inspector.isBasicResourceOperation(name))
+ continue;
+
+ hasUserDefinedOperation = true;
+
+ Class returnType = inspector.getReturnType(name);
+ writer.append(ReflectUtils.getShortName(returnType));
+ writer.append(".class");
+
+ writer.append(", ");
+ }
+
+ if (hasUserDefinedOperation)
+ {
+ int length = writer.length();
+ writer.delete(length - 2, length);
+ }
+
+ writer.append("\n\t};\n\n");
+ }
+
+ private void generateStatic(StringBuffer writer)
+ {
+ writer.append("\n\tstatic\n");
+ writer.append("\t{\n");
+
+ writer.append("\t\tfor (int n = 0; n < _METHOD_NAMES.length; ++n)\n");
+ writer.append("\t\t{\n");
+
+ writer.append("\t\t\tProxyHandler handler = new ReflectionProxyHandler();\n");
+ writer.append("\t\t\thandler.setAction(_ACTIONS[n]);\n");
+ writer.append("\t\t\thandler.setRequestName(_REQUEST_NAMES[n]);\n");
+ writer.append("\t\t\thandler.setRequestParameterNames(_REQUEST_PARAM_NAMES[n]);\n");
+ writer.append("\t\t\thandler.setResponseName(_RESPONSE_NAMES[n]);\n");
+ writer.append("\t\t\thandler.setReturnType(_RETURN_TYPES[n]);\n\n");
+
+ writer.append("\t\t\t_HANDLERS_BY_NAME.put(_METHOD_NAMES[n], handler);\n");
+ writer.append("\t\t}\n");
+ writer.append("\t}\n");
+ }
+
+ private String getObjectName(String name, Class type)
+ {
+ if (!type.isPrimitive())
+ return name;
+
+ else if (type == boolean.class)
+ return "new Boolean(" + name + ')';
+
+ else if (type == double.class)
+ return "new Double(" + name + ')';
+
+ else if (type == float.class)
+ return "new Float(" + name + ')';
+
+ else if (type == int.class)
+ return "new Integer(" + name + ')';
+
+ else if (type == long.class)
+ return "new Long(" + name + ')';
+
+ return "new Short(" + name + ')';
+ }
+
+ private String getPrimitiveClassName(Class type)
+ {
+ if (type == boolean.class)
+ return "Boolean";
+
+ else if (type == float.class || type == double.class)
+ return "Float";
+
+ return "Integer";
+ }
+
+ private String getPrimitiveConvertMethodName(String type)
+ {
+ if (type.endsWith("Boolean"))
+ return "booleanValue";
+
+ else if (type.endsWith("Float") || type.endsWith("Double"))
+ return "floatValue";
+
+ return "intValue";
+ }
+
+ private String getArrayValue(Class type)
+ {
+ if (!type.isPrimitive())
+ return "value";
+
+ if (type == boolean.class)
+ return "Boolean.toString(value)";
+
+ else if (type == float.class || type == double.class)
+ return "Double.toString(value)";
+
+ return "Long.toString(value)";
+ }
+
+ public Element getMetadata(String wsdlPath,
+ Element wsdl,
+ ResourceInspector inspector)
+ {
+ QName portType = inspector.getPortType();
+ Element portTypeMatch = WsdlUtils.getPortType(wsdl, portType);
+ String metadataLocation = XmlUtils.getAttribute(portTypeMatch, WsrmdConstants.DESCRIPTOR_LOCATION_ATTR_QNAME);
+
+ if (metadataLocation == null || metadataLocation.length() == 0)
+ return null;
+
+ String path = _environment.createRelativePath(wsdlPath, metadataLocation);
+ Document rmdDoc = _environment.getDocument(path);
+ return XmlUtils.getFirstElement(rmdDoc);
+ }
+
+ private String getNullValue(Class type)
+ {
+ if (!type.isPrimitive())
+ return "null";
+
+ if (type == boolean.class)
+ return "false";
+
+ return "0";
+ }
+
+ private List getRemoteExtends(ResourceInspector inspector)
+ {
+ List types = new ArrayList();
+ types.add(Resource.class);
+
+ Class proxyClass = inspector.getBaseProxyClass();
+
+ if (proxyClass.equals(NotificationProducerClient.class))
+ types.add(NotificationProducerClient.class);
+
+ if (proxyClass.equals(NotificationConsumerClient.class))
+ types.add(NotificationConsumerClient.class);
+
+ return types;
+ }
+
+ public File getWorkingDirectory()
+ {
+ return _environment.getRealDirectory();
+ }
+
+ public boolean isVerbose()
+ {
+ return _isVerbose;
+ }
+
+ /**
+ *
+ * Allows users to execute the proxy generator from their own Java
+ * code rather than running from a command line (via main()).
+ *
+ * @param wsdlPath
+ * The path of the WSDL file to analyze.
+ *
+ * @param interfaceName
+ * The desired interface name for the new proxy.
+ *
+ * @return A Map of Java type names (String) to Java code (String).
+ *
+ */
+ public Map run(String wsdlPath, String interfaceName)
+ {
+ Document wsdlDoc = WsdlUtils.createWSDL(_environment, wsdlPath, true);
+ Element wsdlDef = XmlUtils.getFirstElement(wsdlDoc);
+
+ removeXsdImports(wsdlDef);
+
+ ResourceInspector inspector = new ResourceInspector();
+ inspector.run(wsdlDef, _environment);
+
+ Element rmd = getMetadata(wsdlPath, wsdlDef, inspector);
+
+ if (rmd != null)
+ inspector.setMetadata(rmd);
+
+ return generate(interfaceName, inspector);
+ }
+
+ public void setVerbose(boolean isVerbose)
+ {
+ _isVerbose = isVerbose;
+ }
+
+ public void setWorkingDirectory(File directory)
+ {
+ _environment.setRealDirectory(directory);
+ }
+
+ public void writeToFile(String javaName, String javaCode)
+ throws IOException
+ {
+ String fileName = javaName.replace('.', '/') + ".java";
+ File javaFile = new File(_environment.getRealDirectory(), fileName);
+
+ File dir = javaFile.getParentFile();
+ dir.mkdirs();
+
+ FileWriter writer = new FileWriter(javaFile);
+ writer.write(javaCode);
+ writer.flush();
+ writer.close();
+ }
+
+ public static Element removeXsdImports(Element wsdl)
+ {
+ Element types = XmlUtils.getElement(wsdl, WsdlUtils.TYPES_QNAME);
+ Element[] schemas = XmlUtils.getElements(types, XsdUtils.SCHEMA_QNAME);
+
+ for (int i = 0; i < schemas.length; ++i)
+ {
+ ResourceInspector.removeImports(schemas[i]);
+ ResourceInspector.removeIncludes(schemas[i]);
+ }
+
+ return wsdl;
+ }
+
+ public Map generateFiles(Map capabilities) {
+ // TODO Auto-generated method stub
+ return new HashMap();
+ }
+}
Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java?rev=422853&view=auto
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java Mon Jul 17 13:38:27 2006
@@ -0,0 +1,444 @@
+/*=============================================================================*
+ * 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.synthesizer;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.apache.muse.core.AbstractCapability;
+import org.apache.muse.tools.generator.Capability;
+import org.apache.muse.tools.inspector.JavaMethod;
+import org.apache.muse.tools.inspector.JavaProperty;
+import org.apache.muse.util.ReflectUtils;
+import org.apache.muse.ws.resource.WsResourceCapability;
+import org.apache.muse.ws.resource.impl.AbstractWsResourceCapability;
+
+/**
+ *
+ * ServerSynthesizer is ...
+ *
+ * @author Andrew Eberbach
+ *
+ */
+
+public class ServerSynthesizer implements Synthesizer {
+
+ private static final String INDENT = " ";
+
+ private HashMap _files;
+
+ public Map generateFiles(Map capabilities) {
+ _files = new HashMap();
+
+ for (Iterator i = capabilities.values().iterator(); i.hasNext();) {
+ Capability capability = (Capability)i.next();
+ if(!capability.isBuiltIn()) {
+ generateCapability(capability);
+ }
+ }
+
+ return _files;
+ }
+
+ private void generateCapability(Capability capability) {
+ ClassInfo classInfo = new ClassInfo(capability);
+
+ makeInterface(classInfo);
+ makeAbstractClass(classInfo);
+ }
+
+ private void makeInterface(ClassInfo classInfo) {
+ StringBuffer code = new StringBuffer();
+
+ generatePackageHeader(classInfo, code);
+ generateImports(classInfo, false, code);
+ generateInterfaceDeclaration(classInfo, code);
+
+ generateOpenBlock(code);
+ newLine(code);
+
+ generateNSDeclarations(classInfo, code);
+ generatePropertyOperations(classInfo, code, false);
+ generateOperations(classInfo, code, false);
+
+ generateCloseBlock(code);
+
+ String className = makeFileName(classInfo, false);
+
+ _files.put(className, code.toString());
+ }
+
+ private void makeAbstractClass(ClassInfo classInfo) {
+ StringBuffer code = new StringBuffer();
+
+ generatePackageHeader(classInfo, code);
+ generateImports(classInfo, true, code);
+ generateClassDeclaration(classInfo, code);
+
+ generateOpenBlock(code);
+ newLine(code);
+
+ generatePropertiesDeclarations(classInfo, code);
+ generatePropertyOperations(classInfo, code, true);
+ generateOperations(classInfo, code, true);
+
+ generateCloseBlock(code);
+
+ String className = makeFileName(classInfo, true);
+
+ _files.put(className, code.toString());
+ }
+
+ private void generateInterfaceDeclaration(ClassInfo classInfo, StringBuffer code) {
+ Capability capability = classInfo.getCapability();
+ code.append("public interface "
+ + classInfo.getClassShortName()
+ + " extends "
+ + convertType(getBaseClass(capability, false),classInfo));
+ newLine(code);
+ }
+
+ private void generateClassDeclaration(ClassInfo classInfo, StringBuffer code) {
+ Capability capability = classInfo.getCapability();
+ code.append("public class "
+ + ReflectUtils.getShortName(capability.getImplementingClass())
+ + " extends "
+ + convertType(getBaseClass(capability, true),classInfo));
+ code.append(" implements " + classInfo.getClassShortName());
+ newLine(code);
+ }
+
+ private void generatePropertiesDeclarations(ClassInfo classInfo, StringBuffer code) {
+ Capability capability = classInfo.getCapability();
+
+ if(capability.getProperties().size() == 0) {
+ return;
+ }
+
+ indent(code);
+ code.append("private static final "
+ + convertType(QName.class, classInfo)
+ + "[] _PROPERTIES = new "
+ + convertType(QName.class, classInfo)
+ + "[]");
+ newLine(code);
+
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ for(Iterator i=capability.getProperties().iterator(); i.hasNext();) {
+ JavaProperty property = (JavaProperty)i.next();
+ indent(2,code);
+ code.append("new "
+ + convertType(QName.class, classInfo)
+ + "(NAMESPACE_URI, \""
+ + getPropertyName(property)
+ + "\", PREFIX)");
+ if(i.hasNext()) {
+ code.append(",");
+ }
+ newLine(code);
+ }
+
+ indent(code);
+ generateCloseBlock(code);
+ statement(";",code);
+ newLine(2,code);
+
+ indent(code);
+ code.append("public "
+ + convertType(QName.class, classInfo)
+ + "[] getPropertyNames()");
+ newLine(code);
+
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ code.append("return _PROPERTIES;");
+
+ newLine(code);
+ indent(code);
+ generateCloseBlock(code);
+ newLine(2,code);
+
+ for(Iterator i=capability.getProperties().iterator(); i.hasNext();) {
+ JavaProperty property = (JavaProperty)i.next();
+ indent(code);
+ code.append("private "
+ + convertType(property.getJavaType(), classInfo)
+ + " _"
+ + getPropertyName(property)
+ + ";");
+ newLine(2, code);
+ }
+ }
+
+ private String getPropertyName(JavaProperty property) {
+ return property.getName().getLocalPart();
+ }
+
+ private void generateOperations(ClassInfo classInfo, StringBuffer code, boolean generateBody) {
+ Capability capability = classInfo.getCapability();
+
+ for(Iterator i=capability.getOperations().iterator(); i.hasNext();) {
+ JavaMethod method = (JavaMethod)i.next();
+
+ indent(code);
+ code.append("public "
+ + convertType(method.getReturnType(), classInfo)
+ + " " + getMethodName(method));
+
+ Class[] params = method.getParameterTypes();
+ code.append("(");
+
+ if (params.length > 0) {
+ int j;
+ for (j = 0; j < params.length - 1; j++) {
+ code.append(convertType(params[j], classInfo)
+ + " "
+ + "param"
+ + j
+ + ", ");
+ }
+ code.append(convertType(params[j], classInfo)
+ + " "
+ + "param" + j);
+ }
+
+ code.append(")");
+
+ if(generateBody) {
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ code.append("throw new RuntimeException(\"Unimplemented Method\");");
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ } else {
+ code.append(";");
+ }
+ newLine(2,code);
+ }
+ }
+
+ private void generatePropertyOperations(ClassInfo classInfo, StringBuffer code, boolean generateBody) {
+ Capability capability = classInfo.getCapability();
+
+ if(capability.getProperties().size() == 0) {
+ return;
+ }
+
+ for(Iterator i=capability.getProperties().iterator(); i.hasNext();) {
+ JavaProperty property = (JavaProperty)i.next();
+ indent(code);
+ code.append("public "
+ + convertType(property.getJavaType(), classInfo)
+ + " get"
+ + getPropertyName(property)
+ + "()");
+
+ if(generateBody) {
+ newLine(code);
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ statement("return _"
+ + getPropertyName(property)
+ + ";",code);
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ } else {
+ code.append(";");
+ }
+ newLine(2,code);
+
+ indent(code);
+ code.append("public void");
+ code.append(" set"
+ + getPropertyName(property)
+ + "("
+ + convertType(property.getJavaType(), classInfo)
+ + " param0)");
+
+ if(generateBody) {
+ newLine(code);
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ statement("_"
+ + getPropertyName(property)
+ + " = param0;",code);
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ } else {
+ code.append(";");
+ }
+ newLine(2,code);
+ }
+ }
+
+ private void generateNSDeclarations(ClassInfo classInfo, StringBuffer code) {
+ Capability capability = classInfo.getCapability();
+ indent(code);
+ statement("String PREFIX = \"tns\";", code);
+ newLine(2,code);
+
+ indent(code);
+ statement("String NAMESPACE_URI = \""+ capability.getURI() +"\";", code);
+ newLine(2,code);
+ }
+
+ private void generateImports(ClassInfo classInfo, boolean isImpl, StringBuffer code) {
+ Set imports = classInfo.getImports();
+
+ Class baseClass = getBaseClass(classInfo.getCapability(), isImpl);
+
+ if(!imports.contains(baseClass)) {
+ generateImport(baseClass, code);
+ }
+
+ if(classInfo.getCapability().getProperties().size() > 0) {
+ if(!imports.contains(QName.class)) {
+ generateImport(QName.class, code);
+ }
+ }
+
+ for (Iterator i = imports.iterator(); i.hasNext(); ) {
+ generateImport((Class)i.next(),code);
+ }
+
+ newLine(code);
+ }
+
+ private void generateImport(Class theClass, StringBuffer code) {
+ String className = needsImport(theClass);
+ if (className != null) {
+ code.append("import " + className + ";");
+ code.append("\n");
+ }
+ }
+
+
+ private void generatePackageHeader(ClassInfo classInfo, StringBuffer code) {
+ statement("package " + classInfo.getPackageName() + ";",code);
+ newLine(2, code);
+ }
+
+ private String getMethodName(JavaMethod method) {
+ String name = method.getName().getLocalPart();
+ name = name.substring(0,1).toLowerCase() + name.substring(1);
+ return name;
+ }
+
+ private String needsImport(Class className) {
+ if(className.isPrimitive()) {
+ return null;
+ }
+ if(className.isArray()) {
+ className = ReflectUtils.getClassFromArrayClass(className);
+ }
+ if(className.getName().startsWith("java.lang.")) {
+ return null;
+ }
+ return className.getName();
+ }
+
+ private String convertType(Class returnType, ClassInfo classInfo) {
+ boolean isArray = returnType.isArray();
+ returnType = isArray?ReflectUtils.getClassFromArrayClass(returnType):returnType;
+
+ //Use fully-qualified name if conflict exists
+ if(classInfo.hasConflict(returnType)) {
+ return returnType.getName();
+ }
+ return ReflectUtils.getShortName(returnType);
+ }
+
+ private Class getBaseClass(Capability capability, boolean isImpl) {
+ if(isImpl) {
+ if(capability.getProperties().size() > 0) {
+ return AbstractWsResourceCapability.class;
+ }
+ return AbstractCapability.class;
+ }
+ if(capability.getProperties().size() > 0) {
+ return WsResourceCapability.class;
+ }
+ return org.apache.muse.core.Capability.class;
+ }
+
+ private String makeFileName(ClassInfo classInfo, boolean isImpl) {
+ String name = null;
+ if(isImpl) {
+ name = classInfo.getCapability().getImplementingClass();
+ } else {
+ name = classInfo.getClassFullName();
+ }
+ return name.replaceAll("\\.", "\\\\") + ".java";
+ }
+
+ private void statement(String statement, StringBuffer code) {
+ code.append(statement);
+ }
+
+ private void newLine(StringBuffer code) {
+ newLine(1,code);
+ }
+
+ private void newLine(int n, StringBuffer code) {
+ for(int i=0; i < n; i++) {
+ code.append("\n");
+ }
+ }
+
+ private void generateCloseBlock(StringBuffer code) {
+ code.append("}");
+ }
+
+ private void generateOpenBlock(StringBuffer code) {
+ code.append("{");
+ }
+
+ private void indent(StringBuffer code) {
+ indent(1,code);
+ }
+
+ private void indent(int indent, StringBuffer code) {
+ for(int i=0; i < indent; i++) {
+ code.append(INDENT);
+ }
+ }
+}
Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/Synthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/Synthesizer.java?rev=422853&view=auto
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/Synthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/Synthesizer.java Mon Jul 17 13:38:27 2006
@@ -0,0 +1,30 @@
+/*=============================================================================*
+ * 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.synthesizer;
+
+import java.util.Map;
+
+/**
+ * Interface for code generators. These classes take a map
+ * of capabilities and produce the necessary implementation
+ * classes and write them out to disk.
+ *
+ * @author Andrew Eberbach
+ */
+public interface Synthesizer {
+ Map generateFiles(Map capabilities);
+}
Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaMethod.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaMethod.java?rev=422853&r1=422852&r2=422853&view=diff
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaMethod.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaMethod.java Mon Jul 17 13:38:27 2006
@@ -1,91 +1,118 @@
-package org.apache.muse.tools.inspector;
-
-import javax.xml.namespace.QName;
-
-/**
- *
- * @author Dan Jemiolo (danj)
- *
- */
-
-class JavaMethod
-{
- private QName _name = null;
-
- private QName[] _parameterTypeNames = null;
- private QName[] _parameterSchemaTypes = null;
- private Class[] _parameterTypes = null;
-
- private QName _returnName = null;
- private QName _returnSchemaType = null;
- private Class _returnType = null;
-
- public QName getName()
- {
- return _name;
- }
-
- public void setName(QName name)
- {
- _name = name;
- }
-
- public QName[] getParameterSchemaTypes()
- {
- return _parameterSchemaTypes;
- }
-
- public void setParameterSchemaTypes(QName[] parameterSchemaTypes)
- {
- _parameterSchemaTypes = parameterSchemaTypes;
- }
-
- public QName[] getParameterTypeNames()
- {
- return _parameterTypeNames;
- }
-
- public void setParameterTypeNames(QName[] parameterTypeNames)
- {
- _parameterTypeNames = parameterTypeNames;
- }
-
- public Class[] getParameterTypes()
- {
- return _parameterTypes;
- }
- public void setParameterTypes(Class[] parameterTypes)
- {
- _parameterTypes = parameterTypes;
- }
-
- public QName getReturnName()
- {
- return _returnName;
- }
-
- public void setReturnName(QName returnName)
- {
- _returnName = returnName;
- }
-
- public QName getReturnSchemaType()
- {
- return _returnSchemaType;
- }
-
- public void setReturnSchemaType(QName returnSchemaType)
- {
- _returnSchemaType = returnSchemaType;
- }
-
- public Class getReturnType()
- {
- return _returnType;
- }
-
- public void setReturnType(Class returnType)
- {
- _returnType = returnType;
- }
-}
+/*=============================================================================*
+ * 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.inspector;
+
+import javax.xml.namespace.QName;
+
+/**
+ *
+ * @author Dan Jemiolo (danj)
+ *
+ */
+
+public class JavaMethod
+{
+ private QName _name = null;
+
+ private QName[] _parameterTypeNames = null;
+ private QName[] _parameterSchemaTypes = null;
+ private Class[] _parameterTypes = null;
+
+ private QName _returnName = null;
+ private QName _returnSchemaType = null;
+ private Class _returnType = null;
+
+ private String _actionURI;
+
+ public QName getName()
+ {
+ return _name;
+ }
+
+ public void setName(QName name)
+ {
+ _name = name;
+ }
+
+ public QName[] getParameterSchemaTypes()
+ {
+ return _parameterSchemaTypes;
+ }
+
+ public void setParameterSchemaTypes(QName[] parameterSchemaTypes)
+ {
+ _parameterSchemaTypes = parameterSchemaTypes;
+ }
+
+ public QName[] getParameterTypeNames()
+ {
+ return _parameterTypeNames;
+ }
+
+ public void setParameterTypeNames(QName[] parameterTypeNames)
+ {
+ _parameterTypeNames = parameterTypeNames;
+ }
+
+ public Class[] getParameterTypes()
+ {
+ return _parameterTypes;
+ }
+
+ public void setParameterTypes(Class[] parameterTypes)
+ {
+ _parameterTypes = parameterTypes;
+ }
+
+ public QName getReturnName()
+ {
+ return _returnName;
+ }
+
+ public void setReturnName(QName returnName)
+ {
+ _returnName = returnName;
+ }
+
+ public QName getReturnSchemaType()
+ {
+ return _returnSchemaType;
+ }
+
+ public void setReturnSchemaType(QName returnSchemaType)
+ {
+ _returnSchemaType = returnSchemaType;
+ }
+
+ public Class getReturnType()
+ {
+ return _returnType;
+ }
+
+ public void setReturnType(Class returnType)
+ {
+ _returnType = returnType;
+ }
+
+ public String getActionURI() {
+ return _actionURI;
+ }
+
+ public void setActionURI(String actionURI) {
+ _actionURI = actionURI;
+ }
+}
Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaProperty.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaProperty.java?rev=422853&view=auto
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaProperty.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaProperty.java Mon Jul 17 13:38:27 2006
@@ -0,0 +1,46 @@
+/*=============================================================================*
+ * 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.inspector;
+
+import javax.xml.namespace.QName;
+
+/**
+ *
+ * @author Andrew Eberbach
+ *
+ */
+public class JavaProperty {
+
+ private QName _name;
+ private Class _type;
+
+ public void setQName(QName property) {
+ _name = property;
+ }
+
+ public QName getName() {
+ return _name;
+ }
+
+ public void setJavaType(Class propertyType) {
+ _type = propertyType;
+ }
+
+ public Class getJavaType() {
+ return _type;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: muse-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-commits-help@ws.apache.org