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 ae...@apache.org on 2007/02/26 23:16:45 UTC
svn commit: r512037 -
/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/
Author: aeberbac
Date: Mon Feb 26 14:16:44 2007
New Revision: 512037
URL: http://svn.apache.org/viewvc?view=rev&rev=512037
Log:
MUSE-172: Changed the structure of the server-side code synthesizer
to be more like the proxy synthesizer. However, I didn't implement the
abstract structure because after some discussions it doesn't really help
things.
MUSE-175: Made the imports better so that the generated classes don't
blindly import everything but instead import the smallest set.
Added:
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerClassSynthesizer.java
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerInterfaceSynthesizer.java
Modified:
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java
webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java
Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java?view=diff&rev=512037&r1=512036&r2=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java Mon Feb 26 14:16:44 2007
@@ -19,9 +19,11 @@
import java.io.File;
import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import javax.xml.namespace.QName;
+import org.apache.muse.tools.generator.util.Capability;
import org.apache.muse.tools.inspector.JavaMethod;
import org.apache.muse.tools.inspector.JavaProperty;
import org.apache.muse.util.ReflectUtils;
@@ -30,8 +32,8 @@
static final String INDENT = " ";
static final String REQUEST_SUFFIX = "Request";
-
- static final String IMPL_SUFFIX = "Impl";
+
+ private static final String JAVA_CLASS_NAME = "MyCapability";
static final String INTERFACE_PREFIX = "I";
@@ -39,30 +41,35 @@
private HashMap _prefixes = new HashMap();
- protected String makeFileName(ClassInfo classInfo, boolean isInterface) {
- String name = classInfo.getPackageName() + ".";
- if (isInterface) {
- name += getInterfaceName(classInfo.getClassShortName());
- } else {
- name += classInfo.getClassShortName();
- }
- return name.replaceAll("\\.", "\\" + File.separator) + ".java";
- }
-
-
protected String createFileName(String interfaceName) {
return interfaceName.replaceAll("\\.", "\\" + File.separator) + ".java";
}
+ protected String generateClassName(Capability capability) {
+ return generateClassName(null, capability);
+ }
- protected String getInterfaceName(String classShortName) {
- int indexOfImpl = classShortName.indexOf(IMPL_SUFFIX);
- if (indexOfImpl > 0) {
- classShortName = classShortName.substring(0, indexOfImpl);
+ protected String generateClassName(String prefix, Capability capability) {
+ String implementingClass = capability.getImplementingClass();
+
+ String packageName = null;
+ String shortClassName = null;
+
+ if(implementingClass == null) {
+ packageName = ClassInfo.getPackageName(capability.getURI());
+ shortClassName = JAVA_CLASS_NAME;
+ } else {
+ packageName = ReflectUtils.getPackageName(implementingClass);
+ shortClassName = ReflectUtils.getShortName(implementingClass);
}
- return INTERFACE_PREFIX + classShortName;
+
+ if(prefix != null) {
+ shortClassName = prefix + shortClassName;
+ }
+
+ return packageName + "." + shortClassName;
}
-
+
protected String getMethodName(JavaMethod method) {
String name = method.getJavaName();
if (name.endsWith(REQUEST_SUFFIX)) {
@@ -70,6 +77,48 @@
}
return name;
}
+
+ protected void generateClassDef(String remoteClassName, boolean isInterface, StringBuffer code) {
+ generateClassDef(remoteClassName, null, null, isInterface, code);
+ }
+
+ protected void generateClassDef(String remoteClassName, String extendsClass, String[] implementsClasses ,boolean isInterface, StringBuffer code) {
+ code.append("public ");
+ code.append(isInterface?"interface":"class");
+ code.append(" ");
+ code.append(ReflectUtils.getShortName(remoteClassName));
+
+ if(extendsClass != null) {
+ code.append(" extends " + extendsClass);
+ }
+
+ if(implementsClasses != null && implementsClasses.length > 0) {
+ code.append(" implements ");
+ code.append(implementsClasses[0]);
+
+ for(int i=1; i < implementsClasses.length; i++) {
+ code.append(", " + implementsClasses[i]);
+ }
+ }
+
+ newLine(code);
+ generateOpenBlock(code);
+ newLine(code);
+ }
+
+ protected void generateImports(ClassInfo classInfo, StringBuffer code) {
+ Iterator i = classInfo.getImports().iterator();
+
+ while (i.hasNext()) {
+ String className = needsImport((Class) i.next());
+ if (className != null) {
+ statement("import " + className + ";", code);
+ newLine(code);
+ }
+ }
+
+ newLine(code);
+ }
protected String needsImport(Class className) {
if (className.isPrimitive()) {
@@ -281,5 +330,14 @@
}
return prefix;
+ }
+
+ protected StringBuffer beginHeaderCode(String className) {
+ StringBuffer code = new StringBuffer();
+
+ generateHeaderComment(className, code);
+ generatePackage(className, code);
+
+ return code;
}
}
Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java?view=diff&rev=512037&r1=512036&r2=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java Mon Feb 26 14:16:44 2007
@@ -37,48 +37,23 @@
*/
public class ClassInfo {
- private static final String JAVA_CLASS_NAME = "MyCapability";
-
- String _packageName = null;
-
- String _classShortName = null;
-
Capability _capability = null;
Set _imports = new HashSet();
Map _conflicts = new HashMap();
- private String _classFullName;
-
public ClassInfo(Capability capability) {
- _capability = capability;
-
- updateClassNameDetails();
-
+ _capability = capability;
findImports();
}
-
- public ClassInfo() {}
- private void updateClassNameDetails() {
- String implementingClass = _capability.getImplementingClass();
-
- if(implementingClass == null) {
- _packageName = getPackageName(_capability.getURI());
- _classShortName = JAVA_CLASS_NAME;
- _classFullName = _packageName + "." + _classShortName;
- _capability.setImplementingClass(_classFullName);
- } else {
- _classFullName = implementingClass;
- _classShortName = ReflectUtils.getShortName(_classFullName);
- _packageName = ReflectUtils.getPackageName(_classFullName);
- }
+ public ClassInfo() {
+ // do nothing
}
public void setCapability(Capability capability) {
- _capability = capability;
-
+ _capability = capability;
findImports();
}
@@ -117,18 +92,6 @@
_imports.add(theClass);
}
- public String getClassShortName() {
- return _classShortName;
- }
-
- public String getPackageName() {
- return _packageName;
- }
-
- public String getClassFullName() {
- return _classFullName;
- }
-
public Set getImports() {
return _imports;
}
@@ -180,5 +143,11 @@
}
}
return false;
+ }
+
+ public void addImports(Set set) {
+ for(Iterator i=set.iterator(); i.hasNext(); ) {
+ addImport((Class) i.next());
+ }
}
}
Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java?view=diff&rev=512037&r1=512036&r2=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java Mon Feb 26 14:16:44 2007
@@ -25,7 +25,6 @@
import org.apache.muse.core.proxy.ProxyHandler;
import org.apache.muse.core.proxy.ReflectionProxyHandler;
-import org.apache.muse.tools.generator.util.Capability;
import org.apache.muse.tools.generator.util.ConfigurationData;
import org.apache.muse.tools.generator.util.ConfigurationDataDescriptor;
import org.apache.muse.tools.inspector.JavaMethod;
@@ -145,12 +144,9 @@
return code;
}
- protected void updateCode(Capability capability) {
- ClassInfo classInfo = new ClassInfo();
- classInfo.setCapability(capability);
-
+ protected void updateCode(ClassInfo classInfo) {
updateMethods(classInfo, _operationsCode);
- updateImports(classInfo);
+ classInfo.addImports(_importSet);
}
protected void generateMethodQualifier(StringBuffer code) {
@@ -436,7 +432,7 @@
generateCloseBlock(code);
}
- public String generateCombinedCode() {
+ public String generateCombinedCode(ClassInfo classInfo) {
endDeclarationCode(_operationNamesCode);
endDeclarationCode(_returnTypesCode);
endDeclarationCode(_actionsCode);
@@ -447,7 +443,8 @@
StringBuffer footerCode = generateFooterCode();
- endHeaderCode();
+ classInfo.addImports(_importSet);
+ endHeaderCode(classInfo);
StringBuffer code = new StringBuffer();
@@ -477,18 +474,11 @@
return code.toString();
}
- protected void generateClassDef(String remoteClassName, StringBuffer code) {
- code.append("public class ");
- code.append(ReflectUtils.getShortName(_className));
- newLine(code);
- indent(code);
- code.append("extends ");
- code.append(ReflectUtils.getShortName(_baseClientClass));
- code.append(' ');
- code.append("implements ");
- code.append(ReflectUtils.getShortName(_interfaceName));
- newLine(code);
- generateOpenBlock(code);
+ protected void endHeaderCode(ClassInfo classInfo) {
+ generateImports(classInfo, _headerCode);
+ String[] interfaces = { ReflectUtils.getShortName(_interfaceName) };
+ String parentClass = ReflectUtils.getShortName(_baseClientClass);
+ generateClassDef(_className, parentClass, interfaces, false, _headerCode);
}
private StringBuffer generateFooterCode() {
@@ -545,12 +535,6 @@
newLine(2, code);
}
}
-
- private void addImports(Class[] classes) {
- for(int i=0; i < classes.length; i++) {
- addImport(classes[i]);
- }
- }
private void generateGetHandler(StringBuffer code) {
indent(code);
@@ -636,14 +620,6 @@
indent(code);
generateCloseBlock(code);
}
-
- private void addImport(Class className) {
- _importSet.add(className);
- }
-
- public void updateImports(ClassInfo classInfo) {
- _importSet.addAll(classInfo.getImports());
- }
private void endDeclarationCode(StringBuffer code) {
int length = code.length();
Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java?view=diff&rev=512037&r1=512036&r2=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java Mon Feb 26 14:16:44 2007
@@ -144,14 +144,18 @@
_baseClientClass = getBaseClientClass(capabilityMap);
initializeCode(className);
+ ClassInfo classInfo = new ClassInfo();
+
for (Iterator i = capabilityMap.values().iterator(); i.hasNext();) {
Capability capability = (Capability)i.next();
- if(needsGeneratedCode(_baseClientClass, capability)) {
- updateCode(capability);
+
+ if(needsGeneratedCode(_baseClientClass, capability)) {
+ classInfo.setCapability(capability);
+ updateCode(classInfo);
}
}
- files.put(createFileName(className), generateCombinedCode());
+ files.put(createFileName(className), generateCombinedCode(classInfo));
}
private boolean needsGeneratedCode(Class clientClass, Capability capability) {
@@ -205,15 +209,6 @@
_hasProperties = false;
}
- protected StringBuffer beginHeaderCode(String className) {
- StringBuffer code = new StringBuffer();
-
- generateHeaderComment(className, code);
- generatePackage(className, code);
-
- return code;
- }
-
private StringBuffer beginOperationsCode() {
return new StringBuffer();
}
@@ -227,11 +222,9 @@
return code;
}
- protected void updateCode(Capability capability) {
- ClassInfo classInfo = new ClassInfo();
-
- classInfo.setCapability(capability);
-
+ protected void updateCode(ClassInfo classInfo) {
+ Capability capability = classInfo.getCapability();
+
updateMethods(classInfo, _operationsCode);
if (!capability.getProperties().isEmpty()) {
@@ -239,7 +232,7 @@
updateProperties(classInfo, _propertiesCode);
}
- updateImports(classInfo);
+ classInfo.addImports(_importSet);
}
protected void updateMethods(ClassInfo classInfo, StringBuffer code) {
@@ -289,12 +282,22 @@
newLine(code);
indent(2, code);
code.append("throws SoapFault");
- classInfo.addImport(SoapFault.class);
+ addImport(SoapFault.class);
generateMethodBody(method, classInfo, code);
newLine(code);
}
+
+ protected void addImports(Class[] classes) {
+ for(int i=0; i < classes.length; i++) {
+ addImport(classes[i]);
+ }
+ }
+
+ protected void addImport(Class className) {
+ _importSet.add(className);
+ }
protected void generateMethodQualifier(StringBuffer code) {
//Do nothing
@@ -350,7 +353,7 @@
newLine(code);
indent(2, code);
code.append("throws SoapFault");
- classInfo.addImport(SoapFault.class);
+ addImport(SoapFault.class);
generatePropertyGetBody(property, classInfo, propertyIndex, code);
@@ -392,7 +395,7 @@
newLine(code);
indent(2, code);
code.append("throws SoapFault");
- classInfo.addImport(SoapFault.class);
+ addImport(SoapFault.class);
generatePropertySetBody(property, classInfo, propertyIndex, setType, code);
@@ -416,7 +419,7 @@
newLine(code);
indent(2, code);
code.append("throws SoapFault");
- classInfo.addImport(SoapFault.class);
+ addImport(SoapFault.class);
generatePropertyDeleteBody(property, classInfo, propertyIndex, code);
@@ -431,7 +434,7 @@
Iterator i = classInfo.getCapability().getProperties().iterator();
if (i.hasNext()) {
- classInfo.addImport(QName.class);
+ addImport(QName.class);
}
while (i.hasNext()) {
@@ -447,12 +450,8 @@
code.append(",");
}
- protected void updateImports(ClassInfo classInfo) {
- _importSet.addAll(classInfo.getImports());
- }
-
- protected String generateCombinedCode() {
- endHeaderCode();
+ protected String generateCombinedCode(ClassInfo classInfo) {
+ endHeaderCode(classInfo);
endOperationsCode();
endPropertiesCode();
@@ -468,31 +467,9 @@
return code.append(generateFooterCode()).toString();
}
- protected void endHeaderCode() {
- generateRemoteImports(_importSet, _headerCode);
- generateClassDef(_className, _headerCode);
- }
-
- private void generateRemoteImports(Set importSet, StringBuffer code) {
- Iterator i = importSet.iterator();
-
- while (i.hasNext()) {
- String className = needsImport((Class) i.next());
- if (className != null) {
- statement("import " + className + ";", code);
- newLine(code);
- }
- }
-
- newLine(code);
- }
-
- protected void generateClassDef(String remoteClassName, StringBuffer code) {
- code.append("public interface ");
- code.append(ReflectUtils.getShortName(remoteClassName));
-
- newLine(code);
- generateOpenBlock(code);
+ protected void endHeaderCode(ClassInfo classInfo) {
+ generateImports(classInfo, _headerCode);
+ generateClassDef(_className, true, _headerCode);
}
private void endOperationsCode() {
Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerClassSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerClassSynthesizer.java?view=auto&rev=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerClassSynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerClassSynthesizer.java Mon Feb 26 14:16:44 2007
@@ -0,0 +1,201 @@
+/*=============================================================================*
+ * 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.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.apache.muse.tools.generator.util.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.addressing.soap.SoapFault;
+
+public class ServerClassSynthesizer extends ServerInterfaceSynthesizer {
+
+ protected void generateCapability(Capability capability, Map files, Set ignoreSet) {
+ ClassInfo classInfo = new ClassInfo(capability);
+ String className = generateClassName(capability);
+ initializeCode(className, classInfo);
+
+ addImport(getBaseClass(capability));
+
+ if(classInfo.needsInitializer()) {
+ generateInitialize(classInfo, _bodyCode);
+ }
+
+ generatePropertiesDeclarations(classInfo, _bodyCode);
+ generatePropertyOperations(classInfo, _bodyCode);
+ generateOperations(classInfo, _bodyCode);
+
+ classInfo.addImports(_importSet);
+
+ String classFileName = createFileName(className);
+ files.put(classFileName, generateCombinedCode(classInfo));
+ ignoreSet.add(new File(classFileName));
+ }
+
+ protected void endHeaderCode(ClassInfo classInfo) {
+ generateImports(classInfo, _headerCode);
+ Capability capability = classInfo.getCapability();
+ String[] interfaces = { ReflectUtils.getShortName(generateClassName(INTERFACE_PREFIX,capability)) };
+ String parentClass = convertType(getBaseClass(capability), classInfo);
+ generateClassDef(_className, parentClass, interfaces , false, _headerCode);
+ }
+
+ 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);
+ addImport(QName.class);
+
+ 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, false)
+ + "\", 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, false)
+ + ";");
+ newLine(2, code);
+ }
+ }
+
+ private void generateInitialize(ClassInfo classInfo, StringBuffer code) {
+ indent(code);
+ code.append("public void initialize() throws SoapFault ");
+ generateOpenBlock(code);
+ addImport(SoapFault.class);
+ newLine(code);
+
+ indent(2, code);
+ code.append("//TODO: perform intitialization of non primitive types");
+ newLine(code);
+
+ indent(2, code);
+ code.append("throw new RuntimeException(\"User needs to update initialization code\");");
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ newLine(2, code);
+ }
+
+ protected void generateGetOperationBody(JavaProperty property, StringBuffer code) {
+ newLine(code);
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ statement("return _"
+ + getPropertyName(property, false)
+ + ";",code);
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ }
+
+ protected void generateOperationBody(JavaMethod method, StringBuffer code) {
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ code.append("//TODO implement " + getMethodName(method));
+ newLine(code);
+
+ indent(2,code);
+ code.append("throw new RuntimeException(\"Unimplemented Method: " + getMethodName(method) + "\");");
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ }
+
+ protected void generateSetOperationBody(JavaProperty property, StringBuffer code) {
+ newLine(code);
+ indent(code);
+ generateOpenBlock(code);
+ newLine(code);
+
+ indent(2,code);
+ statement("_"
+ + getPropertyName(property, false)
+ + " = param0;",code);
+ newLine(code);
+
+ indent(code);
+ generateCloseBlock(code);
+ }
+}
Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerInterfaceSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerInterfaceSynthesizer.java?view=auto&rev=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerInterfaceSynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerInterfaceSynthesizer.java Mon Feb 26 14:16:44 2007
@@ -0,0 +1,283 @@
+/*=============================================================================*
+ * 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.HashSet;
+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.util.Capability;
+import org.apache.muse.tools.generator.util.ConfigurationData;
+import org.apache.muse.tools.generator.util.ConfigurationDataDescriptor;
+import org.apache.muse.tools.generator.util.SubscriptionManagerHelper;
+import org.apache.muse.tools.inspector.JavaMethod;
+import org.apache.muse.tools.inspector.JavaProperty;
+import org.apache.muse.ws.resource.impl.AbstractWsResourceCapability;
+
+public class ServerInterfaceSynthesizer extends AbstractSynthesizer {
+
+ static ConfigurationDataDescriptor[] REQUIRED_PARAMETERS =
+ new ConfigurationDataDescriptor[] {
+ ConfigurationData.CAPABILITIES_MAP_LIST_CONFIGURATION,
+ };
+
+ protected StringBuffer _headerCode;
+
+ protected StringBuffer _bodyCode;
+
+ protected String _className;
+
+ protected Set _importSet;
+
+ private Map[] _capabilityMaps;
+
+ private Set[] _ignoreSets;
+
+ private Map[] _filesMaps;
+
+ public ConfigurationData synthesize(ConfigurationData configuration) throws Exception {
+ ConfigurationData.checkConfiguration(this, configuration);
+
+ loadParameters(configuration);
+
+ for(int i = 0; i < _capabilityMaps.length; i++) {
+
+ Map capabilities = _capabilityMaps[i];
+ if(_filesMaps[i] == null) {
+ _filesMaps[i] = new HashMap();
+ }
+
+ if(_ignoreSets[i] == null) {
+ _ignoreSets[i] = new HashSet();
+ }
+
+ for (Iterator j = capabilities.values().iterator(); j.hasNext();) {
+ Capability capability = (Capability)j.next();
+ if(!capability.isBuiltIn()) {
+ generateCapability(capability, _filesMaps[i], _ignoreSets[i]);
+ }
+ }
+ }
+
+ ConfigurationData resultData = (ConfigurationData) configuration.clone();
+ resultData.addParameter(ConfigurationData.FILES_MAP_LIST, _filesMaps);
+ resultData.addParameter(ConfigurationData.IGNORE_SET_LIST, _ignoreSets);
+
+ resultData = SubscriptionManagerHelper.addSubscriptionManager(resultData);
+
+ return resultData;
+ }
+
+ private void loadParameters(ConfigurationData configuration) {
+ _capabilityMaps = (Map[])configuration.getParameter(ConfigurationData.CAPABILITIES_MAP_LIST);
+ _ignoreSets = (Set[])configuration.getParameter(ConfigurationData.IGNORE_SET_LIST);
+ _filesMaps = (Map[])configuration.getParameter(ConfigurationData.FILES_MAP_LIST);
+
+ if(_filesMaps == null) {
+ _filesMaps = new HashMap[_capabilityMaps.length];
+ }
+
+ if(_ignoreSets == null) {
+ _ignoreSets = new HashSet[_capabilityMaps.length];
+ }
+ }
+
+ protected void generateCapability(Capability capability, Map files, Set ignoreSet) {
+ ClassInfo classInfo = new ClassInfo(capability);
+ String className = generateClassName(INTERFACE_PREFIX, capability);
+ initializeCode(className, classInfo);
+
+ generateNSDeclarations(classInfo, _bodyCode);
+ generatePropertyOperations(classInfo, _bodyCode);
+ generateOperations(classInfo, _bodyCode);
+
+ classInfo.addImports(_importSet);
+
+ String classFileName = createFileName(className);
+ files.put(classFileName, generateCombinedCode(classInfo));
+ }
+
+ protected String generateCombinedCode(ClassInfo classInfo) {
+ endHeaderCode(classInfo);
+ endBodyCode();
+
+ StringBuffer code = new StringBuffer();
+
+ code.append(_headerCode);
+ code.append(_bodyCode);
+
+ return code.append(generateFooterCode()).toString();
+ }
+
+ protected void endBodyCode() {
+ //do nothing
+ }
+
+ protected void endHeaderCode(ClassInfo classInfo) {
+ generateImports(classInfo, _headerCode);
+ generateClassDef(_className, true, _headerCode);
+ }
+
+ protected StringBuffer generateFooterCode() {
+ StringBuffer footer = new StringBuffer();
+ generateCloseBlock(footer);
+ return footer;
+ }
+
+ protected void initializeCode(String className, ClassInfo classInfo) {
+ _className = className;
+ _headerCode = beginHeaderCode(_className);
+ _bodyCode = beginBodyCode();
+ _importSet = new HashSet();
+ }
+
+ protected StringBuffer beginBodyCode() {
+ StringBuffer code = new StringBuffer();
+ return code;
+ }
+
+ protected void generateOperations(ClassInfo classInfo, StringBuffer code) {
+ 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();
+ QName[] paramNames = method.getParameterTypeNames();
+ code.append("(");
+
+ if (params.length > 0) {
+ int j;
+
+ for (j = 0; j < params.length - 1; j++) {
+
+ code.append(convertType(params[j], classInfo)
+ + " "
+ + getParamName(paramNames[j], j)
+ + ", ");
+ }
+
+ code.append(convertType(params[j], classInfo)
+ + " "
+ + getParamName(paramNames[j], j));
+ }
+
+ code.append(") throws Exception");
+
+ generateOperationBody(method, code);
+
+ newLine(2,code);
+ }
+ }
+
+ protected void generateOperationBody(JavaMethod method, StringBuffer code) {
+ code.append(";");
+ }
+
+ protected void generatePropertyOperations(ClassInfo classInfo, StringBuffer code) {
+ Capability capability = classInfo.getCapability();
+
+ if(capability.getProperties().size() == 0) {
+ return;
+ }
+
+ for(Iterator i=capability.getProperties().iterator(); i.hasNext();) {
+ JavaProperty property = (JavaProperty)i.next();
+
+ generateGetOperation(property, classInfo, code);
+ genereateSetOperation(property, classInfo, code);
+
+ }
+ }
+
+ protected void genereateSetOperation(JavaProperty property, ClassInfo classInfo, StringBuffer code) {
+ indent(code);
+ code.append("public void");
+ code.append(" set"
+ + getPropertyName(property, true)
+ + "("
+ + convertType(property.getJavaType(), classInfo)
+ + " param0)");
+
+ generateSetOperationBody(property, code);
+
+ newLine(2,code);
+ }
+
+ protected void generateSetOperationBody(JavaProperty property, StringBuffer code) {
+ code.append(";");
+ }
+
+ protected void generateGetOperation(JavaProperty property, ClassInfo classInfo, StringBuffer code) {
+ indent(code);
+ code.append("public "
+ + convertType(property.getJavaType(), classInfo)
+ + " get"
+ + getPropertyName(property, true)
+ + "()");
+
+ generateGetOperationBody(property, code);
+
+ newLine(2,code);
+ }
+
+ protected void generateGetOperationBody(JavaProperty property, StringBuffer code) {
+ code.append(";");
+ }
+
+ protected 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);
+ }
+
+ protected Class getBaseClass(Capability capability) {
+ if(capability.getProperties().size() > 0) {
+ return AbstractWsResourceCapability.class;
+ }
+ return AbstractCapability.class;
+ }
+
+ protected void addImports(Class[] classes) {
+ for(int i=0; i < classes.length; i++) {
+ addImport(classes[i]);
+ }
+ }
+
+ protected void addImport(Class className) {
+ _importSet.add(className);
+ }
+
+ public ConfigurationDataDescriptor[] getConfigurationDataDescriptions() {
+ return REQUIRED_PARAMETERS;
+ }
+}
Modified: 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?view=diff&rev=512037&r1=512036&r2=512037
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java Mon Feb 26 14:16:44 2007
@@ -16,25 +16,8 @@
package org.apache.muse.tools.generator.synthesizer;
-import java.io.File;
-import java.util.HashMap;
-import java.util.HashSet;
-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.util.Capability;
import org.apache.muse.tools.generator.util.ConfigurationData;
import org.apache.muse.tools.generator.util.ConfigurationDataDescriptor;
-import org.apache.muse.tools.generator.util.SubscriptionManagerHelper;
-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.addressing.soap.SoapFault;
-import org.apache.muse.ws.resource.impl.AbstractWsResourceCapability;
/**
* A <code>Synthesizer</code> implementation that creates
@@ -51,374 +34,23 @@
*
* @see org.apache.muse.tools.generator.synthesizer.Synthesizer
*/
-public class ServerSynthesizer extends AbstractSynthesizer {
+public class ServerSynthesizer implements Synthesizer {
static ConfigurationDataDescriptor[] REQUIRED_PARAMETERS =
new ConfigurationDataDescriptor[] {
ConfigurationData.CAPABILITIES_MAP_LIST_CONFIGURATION,
};
- public ConfigurationData synthesize(ConfigurationData configuration) throws Exception {
- ConfigurationData.checkConfiguration(this, configuration);
-
- Map[] capabilityMaps = (Map[])configuration.getParameter(ConfigurationData.CAPABILITIES_MAP_LIST);
- Map[] filesMaps = new HashMap[capabilityMaps.length];
- Set[] ignoreSets = new HashSet[capabilityMaps.length];
-
- for(int i = 0; i < capabilityMaps.length; i++) {
-
- Map capabilities = capabilityMaps[i];
- filesMaps[i] = new HashMap();
- ignoreSets[i] = new HashSet();
-
- for (Iterator j = capabilities.values().iterator(); j.hasNext();) {
- Capability capability = (Capability)j.next();
- if(!capability.isBuiltIn()) {
- generateCapability(capability, filesMaps[i], ignoreSets[i]);
- }
- }
- }
-
- ConfigurationData resultData = (ConfigurationData) configuration.clone();
- resultData.addParameter(ConfigurationData.FILES_MAP_LIST, filesMaps);
- resultData.addParameter(ConfigurationData.IGNORE_SET_LIST, ignoreSets);
-
- resultData = SubscriptionManagerHelper.addSubscriptionManager(resultData);
-
- return resultData;
+ public ConfigurationData synthesize(ConfigurationData data) throws Exception {
+ ServerInterfaceSynthesizer serverInterfaceSynthesizer = new ServerInterfaceSynthesizer();
+ ServerClassSynthesizer serverClassSynthesizer = new ServerClassSynthesizer();
+
+ data = serverInterfaceSynthesizer.synthesize(data);
+ data = serverClassSynthesizer.synthesize(data);
+
+ return data;
}
- protected void generateCapability(Capability capability, Map files, Set ignoreSet) {
- ClassInfo classInfo = new ClassInfo(capability);
-
- makeInterface(classInfo, files);
- makeAbstractClass(classInfo, files, ignoreSet);
- }
-
- protected void makeInterface(ClassInfo classInfo, Map files) {
- 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 classFileName = makeFileName(classInfo, true);
-
- files.put(classFileName, code.toString());
- }
-
- private void makeAbstractClass(ClassInfo classInfo, Map files, Set ignoreSet) {
- StringBuffer code = new StringBuffer();
-
- generatePackageHeader(classInfo, code);
- generateImports(classInfo, true, code);
- generateClassDeclaration(classInfo, code);
-
- generateOpenBlock(code);
- newLine(code);
-
- if(classInfo.needsInitializer()) {
- generateInitialize(classInfo, code);
- }
-
- generatePropertiesDeclarations(classInfo, code);
- generatePropertyOperations(classInfo, code, true);
- generateOperations(classInfo, code, true);
-
- generateCloseBlock(code);
-
- String classFileName = makeFileName(classInfo, false);
-
- files.put(classFileName, code.toString());
- ignoreSet.add(new File(classFileName));
- }
-
- private void generateInitialize(ClassInfo classInfo, StringBuffer code) {
- indent(code);
- code.append("public void initialize() throws SoapFault ");
- generateOpenBlock(code);
- newLine(code);
-
- indent(2, code);
- code.append("//TODO: perform intitialization of non primitive types");
- newLine(code);
-
- indent(2, code);
- code.append("throw new RuntimeException(\"User needs to update initialization code\");");
- newLine(code);
-
- indent(code);
- generateCloseBlock(code);
- newLine(2, code);
- }
-
- private void generateInterfaceDeclaration(ClassInfo classInfo, StringBuffer code) {
- code.append("public interface "
- + getInterfaceName(classInfo.getClassShortName()));
- newLine(code);
- }
-
- protected void generateClassDeclaration(ClassInfo classInfo, StringBuffer code) {
- Capability capability = classInfo.getCapability();
- code.append("public class "
- + ReflectUtils.getShortName(capability.getImplementingClass())
- + " extends "
- + convertType(getBaseClass(capability),classInfo));
- code.append(" implements " + getInterfaceName(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, false)
- + "\", 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, false)
- + ";");
- newLine(2, code);
- }
- }
-
- protected 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();
- QName[] paramNames = method.getParameterTypeNames();
- code.append("(");
-
- if (params.length > 0) {
- int j;
-
- for (j = 0; j < params.length - 1; j++) {
-
- code.append(convertType(params[j], classInfo)
- + " "
- + getParamName(paramNames[j], j)
- + ", ");
- }
-
- code.append(convertType(params[j], classInfo)
- + " "
- + getParamName(paramNames[j], j));
- }
-
- code.append(") throws Exception");
-
- if(generateBody) {
- indent(code);
- generateOpenBlock(code);
- newLine(code);
-
- indent(2,code);
- code.append("//TODO implement " + getMethodName(method));
- newLine(code);
-
- indent(2,code);
- code.append("throw new RuntimeException(\"Unimplemented Method: " + getMethodName(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, true)
- + "()");
-
- if(generateBody) {
- newLine(code);
- indent(code);
- generateOpenBlock(code);
- newLine(code);
-
- indent(2,code);
- statement("return _"
- + getPropertyName(property, false)
- + ";",code);
- newLine(code);
-
- indent(code);
- generateCloseBlock(code);
- } else {
- code.append(";");
- }
- newLine(2,code);
-
- indent(code);
- code.append("public void");
- code.append(" set"
- + getPropertyName(property, true)
- + "("
- + convertType(property.getJavaType(), classInfo)
- + " param0)");
-
- if(generateBody) {
- newLine(code);
- indent(code);
- generateOpenBlock(code);
- newLine(code);
-
- indent(2,code);
- statement("_"
- + getPropertyName(property, false)
- + " = 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);
- }
-
- protected void generateImports(ClassInfo classInfo, boolean isImpl, StringBuffer code) {
- Set imports = classInfo.getImports();
-
- Class baseClass = getBaseClass(classInfo.getCapability());
-
- if(isImpl && !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);
- }
-
- generateImport(SoapFault.class, code);
-
- newLine(code);
- }
-
- private void generateImport(Class theClass, StringBuffer code) {
- String className = needsImport(theClass);
- if (className != null) {
- code.append("import " + className + ";");
- newLine(code);
- }
- }
-
- protected void generatePackageHeader(ClassInfo classInfo, StringBuffer code) {
- statement("package " + classInfo.getPackageName() + ";",code);
- newLine(2, code);
- }
-
- protected Class getBaseClass(Capability capability) {
- if(capability.getProperties().size() > 0) {
- return AbstractWsResourceCapability.class;
- }
- return AbstractCapability.class;
- }
-
public ConfigurationDataDescriptor[] getConfigurationDataDescriptions() {
return REQUIRED_PARAMETERS;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: muse-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-commits-help@ws.apache.org