Index: src/org/eclipse/persistence/sdo/helper/DynamicClassWriter.java
===================================================================
--- src/org/eclipse/persistence/sdo/helper/DynamicClassWriter.java (revision 3675)
+++ src/org/eclipse/persistence/sdo/helper/DynamicClassWriter.java (working copy)
@@ -9,41 +9,71 @@
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
+ * bdoughan - Mar 18/2009 - 2.0 - Dynamically generated impl classes now
+ * implement correct interface.
******************************************************************************/
package org.eclipse.persistence.sdo.helper;
import java.io.ObjectStreamException;
import java.io.Serializable;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.List;
import org.eclipse.persistence.sdo.SDOConstants;
import org.eclipse.persistence.sdo.SDODataObject;
+import org.eclipse.persistence.sdo.SDOProperty;
import org.eclipse.persistence.sdo.SDOType;
+import org.eclipse.persistence.sdo.helper.extension.SDOUtil;
import org.eclipse.persistence.internal.libraries.asm.ClassWriter;
import org.eclipse.persistence.internal.libraries.asm.CodeVisitor;
import org.eclipse.persistence.internal.libraries.asm.Constants;
import org.eclipse.persistence.internal.libraries.asm.Type;
+import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
+
import commonj.sdo.helper.HelperContext;
-/**
- *
Purpose: Dynamically create a class for the given name as a subclass of the generic
- * superclass. This dynamically created subclass should only provide constructors
- * and a writeReplace() method.
+/*
+ * Dynamically generate the implementation class for the SDO type. If the type has an instance
+ * (interface) class then the dynamically generated impl class must fully implement it. Additionally
+ * a constructor and a writeReplace() method are added.
*/
public class DynamicClassWriter {
+ private static final String START_PROPERTY_INDEX = "START_PROPERTY_INDEX";
+ private static final String END_PROPERTY_INDEX = "END_PROPERTY_INDEX";
+ private static final String GET = "get";
+ private static final String SET = "set";
+ private static final String LIST = "List";
+ private static final String WRITE_REPLACE = "writeReplace";
+
private Class parentClass;
- private String className;
+ private String typeImplClassDescriptor;
private SDOType type;
+ private Integer startPropertyIndex;
// hold the context containing all helpers so that we can preserve inter-helper relationships
private HelperContext aHelperContext;
public DynamicClassWriter(String className, SDOType type, HelperContext aContext) {
- aHelperContext = aContext;
+ this.aHelperContext = aContext;
this.parentClass = SDODataObject.class;
- this.className = className;
+ this.typeImplClassDescriptor = className.replace('.', '/');
this.type = type;
initializeParentClass();
+
+ if(type.isSubType()) {
+ try {
+ Field parentEndPropertyIndexField = PrivilegedAccessHelper.getField(parentClass, END_PROPERTY_INDEX, true);
+ Integer parentEndPropertyIndex = (Integer) PrivilegedAccessHelper.getValueFromField(parentEndPropertyIndexField, parentClass);
+ startPropertyIndex = parentEndPropertyIndex + 1;
+ } catch(NoSuchFieldException e) {
+ startPropertyIndex = new Integer(0);
+ } catch(IllegalAccessException e) {
+ startPropertyIndex = new Integer(0);
+ }
+ } else {
+ startPropertyIndex = new Integer(0);
+ }
}
private void initializeParentClass() {
@@ -67,10 +97,6 @@
return this.parentClass;
}
- public String getClassName() {
- return this.className;
- }
-
/**
* This is where the byte codes for the generic subclass are defined and the
* class is created dynamically from them.
@@ -78,7 +104,19 @@
public byte[] createClass() {
ClassWriter cw = new ClassWriter(false);
- cw.visit(Constants.V1_5, Constants.ACC_PUBLIC + Constants.ACC_SUPER, className.replace('.', '/'), Type.getType(parentClass).getInternalName(), null, null);
+ if(null == type.getInstanceClass()) {
+ cw.visit(Constants.V1_5, Constants.ACC_PUBLIC + Constants.ACC_SUPER, typeImplClassDescriptor, Type.getType(parentClass).getInternalName(), null, null);
+ } else {
+ String[] interfaces = new String[1];
+ interfaces[0] = type.getInstanceClassName().replace('.', '/');
+ cw.visit(Constants.V1_5, Constants.ACC_PUBLIC + Constants.ACC_SUPER, typeImplClassDescriptor, Type.getType(parentClass).getInternalName(), interfaces, null);
+ addPropertyIndices(cw);
+ for(Object object: type.getDeclaredProperties()) {
+ SDOProperty sdoProperty = (SDOProperty) object;
+ addPropertyGetMethod(cw, sdoProperty);
+ addPropertySetMethod(cw, sdoProperty);
+ }
+ }
addConstructors(cw);
addWriteReplace(cw);
@@ -87,7 +125,20 @@
return cw.toByteArray();
}
- private void addConstructors(ClassWriter cw) {
+ private void addPropertyIndices(ClassWriter cw) {
+ cw.visitField(Constants.ACC_PUBLIC + Constants.ACC_FINAL + Constants.ACC_STATIC, START_PROPERTY_INDEX, "I", startPropertyIndex, null);
+ int declaredPropsSize = type.getDeclaredProperties().size();
+
+ Integer endPropertyIndex;
+ if(declaredPropsSize > 0) {
+ endPropertyIndex = startPropertyIndex + declaredPropsSize - 2;
+ } else {
+ endPropertyIndex = startPropertyIndex - 1;
+ }
+ cw.visitField(Constants.ACC_PUBLIC + Constants.ACC_FINAL + Constants.ACC_STATIC, END_PROPERTY_INDEX, "I", endPropertyIndex, null);
+ }
+
+ private void addConstructors(ClassWriter cw) {
CodeVisitor mv = cw.visitMethod(Constants.ACC_PUBLIC, "", Type.getMethodDescriptor(Type.VOID_TYPE, new Type[0]), new String[] { Type.getInternalName(Serializable.class) }, null);
mv.visitVarInsn(Constants.ALOAD, 0);
mv.visitMethodInsn(Constants.INVOKESPECIAL, Type.getType(parentClass).getInternalName(), "", Type.getMethodDescriptor(Type.VOID_TYPE, new Type[0]));
@@ -95,10 +146,88 @@
mv.visitMaxs(1, 1);
}
+ private void addPropertyGetMethod(ClassWriter cw, SDOProperty property) {
+ String returnType = SDOUtil.getJavaTypeForProperty(property);
+ String outerGetMethodName = SDOUtil.getMethodName(property.getName(), returnType);
+
+ CodeVisitor mv;
+ String propertyInstanceClassDescriptor;
+ if(property.isMany()) {
+ propertyInstanceClassDescriptor = Type.getDescriptor(List.class);
+ } else if(property.getType().isDataType()) {
+ propertyInstanceClassDescriptor = Type.getDescriptor(property.getType().getInstanceClass());
+ } else {
+ propertyInstanceClassDescriptor = "L" + returnType.replace('.', '/') + ";";
+ }
+ mv = cw.visitMethod(Constants.ACC_PUBLIC, outerGetMethodName, "()" + propertyInstanceClassDescriptor, null, null);
+
+ mv.visitVarInsn(Constants.ALOAD, 0);
+ mv.visitIntInsn(Constants.BIPUSH, startPropertyIndex + property.getIndexInType());
+
+ String builtIn = SDOUtil.getBuiltInType(returnType);
+ if(null != builtIn) {
+ if(property.getType().isDataType() && !builtIn.equals(LIST)) {
+ mv.visitMethodInsn(Constants.INVOKEVIRTUAL, typeImplClassDescriptor, GET + builtIn, "(I)" + propertyInstanceClassDescriptor);
+ int iReturnOpcode = Type.getType(property.getType().getInstanceClass()).getOpcode(Constants.IRETURN);
+ mv.visitInsn(iReturnOpcode);
+ } else {
+ mv.visitMethodInsn(Constants.INVOKEVIRTUAL, typeImplClassDescriptor, GET, "(I)Ljava/lang/Object;");
+ mv.visitInsn(Constants.ARETURN);
+ }
+ } else {
+ mv.visitMethodInsn(Constants.INVOKEVIRTUAL, typeImplClassDescriptor, GET, "(I)Ljava/lang/Object;");
+ mv.visitInsn(Constants.ARETURN);
+ }
+ mv.visitMaxs(2, 1);
+ }
+
+ private void addPropertySetMethod(ClassWriter cw, SDOProperty property) {
+ String returnType = SDOUtil.getJavaTypeForProperty(property);
+ String outerSetMethodName = SDOUtil.setMethodName(property.getName());
+
+ CodeVisitor mv;
+ String propertyInstanceClassDescriptor;
+
+ if(property.isMany()) {
+ propertyInstanceClassDescriptor = Type.getDescriptor(List.class);
+ } else if(property.getType().isDataType()) {
+ propertyInstanceClassDescriptor = Type.getDescriptor(property.getType().getInstanceClass());
+ } else {
+ propertyInstanceClassDescriptor = "L" + returnType.replace('.', '/') + ";";
+ }
+ mv = cw.visitMethod(Constants.ACC_PUBLIC, outerSetMethodName, "(" + propertyInstanceClassDescriptor + ")V", null, null);
+
+ mv.visitVarInsn(Constants.ALOAD, 0);
+ mv.visitIntInsn(Constants.BIPUSH, startPropertyIndex + property.getIndexInType());
+
+ String builtIn = SDOUtil.getBuiltInType(returnType);
+ int iLoadOpcode = Constants.ALOAD;
+ if(null != builtIn) {
+ if(property.getType().isDataType() && !builtIn.equals(LIST)) {
+ iLoadOpcode = Type.getType(property.getType().getInstanceClass()).getOpcode(Constants.ILOAD);
+ mv.visitVarInsn(iLoadOpcode, 1);
+ mv.visitMethodInsn(Constants.INVOKEVIRTUAL, typeImplClassDescriptor, SET + builtIn, "(I" + propertyInstanceClassDescriptor + ")V");
+ } else {
+ mv.visitVarInsn(iLoadOpcode, 1);
+ mv.visitMethodInsn(Constants.INVOKEVIRTUAL, typeImplClassDescriptor, SET, "(ILjava/lang/Object;)V");
+ }
+ } else {
+ mv.visitVarInsn(iLoadOpcode, 1);
+ mv.visitMethodInsn(Constants.INVOKEVIRTUAL, typeImplClassDescriptor, SET, "(ILjava/lang/Object;)V");
+ }
+
+ mv.visitInsn(Constants.RETURN);
+ if(iLoadOpcode == Constants.DLOAD || iLoadOpcode == Constants.LLOAD) {
+ mv.visitMaxs(4, 3);
+ } else {
+ mv.visitMaxs(3, 2);
+ }
+ }
+
private void addWriteReplace(ClassWriter cw) {
Method method;
try {
- method = parentClass.getDeclaredMethod("writeReplace", new Class[0]);
+ method = parentClass.getDeclaredMethod(WRITE_REPLACE, new Class[0]);
} catch (NoSuchMethodException e) {
return;
}
@@ -110,4 +239,5 @@
mv.visitInsn(Constants.ARETURN);
mv.visitMaxs(1, 1);
}
+
}
\ No newline at end of file
Index: src/org/eclipse/persistence/sdo/helper/extension/SDOUtil.java
===================================================================
--- src/org/eclipse/persistence/sdo/helper/extension/SDOUtil.java (revision 3675)
+++ src/org/eclipse/persistence/sdo/helper/extension/SDOUtil.java (working copy)
@@ -18,6 +18,8 @@
import java.util.StringTokenizer;
import org.eclipse.persistence.sdo.SDOConstants;
+import org.eclipse.persistence.sdo.SDOProperty;
+import org.eclipse.persistence.sdo.SDOType;
import org.eclipse.persistence.internal.helper.ClassConstants;
import org.eclipse.persistence.logging.AbstractSessionLog;
@@ -467,19 +469,6 @@
/**
* INTERNAL:
- * Return a valid Java get method name for a given string
- * @param s
- * @return
- */
- public static String getMethodName(String s) {
- StringBuffer stringbuffer = new StringBuffer();
- // only log the setMethodName call so we do not get double logs
- stringbuffer.append(GET).append(className(s, true, false, false));
- return stringbuffer.toString();
- }
-
- /**
- * INTERNAL:
* Return a valid Java get method name for a given string. This method will check
* the returnType to see if it is a boolean/Boolean: if so, 'is' will be used in
* the method name instead of 'get'.
@@ -489,13 +478,14 @@
* @return
*/
public static String getMethodName(String s, String returnType) {
+ StringBuffer stringBuffer = new StringBuffer();
if (returnType.equals(ClassConstants.PBOOLEAN.getName()) || returnType.equals(ClassConstants.BOOLEAN.getName())) {
- StringBuffer stringbuffer = new StringBuffer();
- // only log the setMethodName call so we do not get double logs
- stringbuffer.append(IS).append(SDOUtil.className(s, true, false, false));
- return stringbuffer.toString();
+ stringBuffer.append(IS);
+ } else {
+ stringBuffer.append(GET);
}
- return getMethodName(s);
+ stringBuffer.append(SDOUtil.className(s, true, false, false));
+ return stringBuffer.toString();
}
/**
@@ -651,5 +641,54 @@
stringbuffer.replace(j, 6, s);
return stringbuffer.toString();
- }
+ }
+
+ public static String getJavaTypeForProperty(SDOProperty property) {
+ if (property.isMany() || ((SDOType)property.getType()).isXsdList()) {
+ return "java.util.List";
+ } else {
+ SDOType propertyType = property.getType();
+ Class instanceClass = propertyType.getInstanceClass();
+ if (ClassConstants.ABYTE.equals(instanceClass)) {
+ return "Byte[]";
+ } else if (ClassConstants.APBYTE.equals(instanceClass)) {
+ return "byte[]";
+ }
+ return propertyType.getInstanceClassName();
+ }
+ }
+
+ public static String getBuiltInType(String typeName) {
+ if ((typeName.equals(ClassConstants.PBOOLEAN.getName())) || (typeName.equals(ClassConstants.BOOLEAN.getName()))) {
+ return "Boolean";
+ } else if ((typeName.equals(ClassConstants.PBYTE.getName())) || (typeName.equals(ClassConstants.BYTE.getName()))) {
+ return "Byte";
+ } else if (typeName.equals("byte[]") || typeName.equals("Byte[]") || (typeName.equals(ClassConstants.APBYTE.getName())) || (typeName.equals(ClassConstants.ABYTE.getName()))) {
+ return "Bytes";
+ } else if ((typeName.equals(ClassConstants.PCHAR.getName())) || (typeName.equals(ClassConstants.CHAR.getName()))) {
+ return "Char";
+ } else if ((typeName.equals(ClassConstants.PDOUBLE.getName())) || (typeName.equals(ClassConstants.DOUBLE.getName()))) {
+ return "Double";
+ } else if ((typeName.equals(ClassConstants.PFLOAT.getName())) || (typeName.equals(ClassConstants.FLOAT.getName()))) {
+ return "Float";
+ } else if ((typeName.equals(ClassConstants.PLONG.getName())) || (typeName.equals(ClassConstants.LONG.getName()))) {
+ return "Long";
+ } else if ((typeName.equals(ClassConstants.PSHORT.getName())) || (typeName.equals(ClassConstants.SHORT.getName()))) {
+ return "Short";
+ } else if ((typeName.equals(ClassConstants.PINT.getName())) || (typeName.equals(ClassConstants.INTEGER.getName()))) {
+ return "Int";
+ } else if (typeName.equals(ClassConstants.STRING.getName())) {
+ return "String";
+ } else if (typeName.equals(ClassConstants.BIGINTEGER.getName())) {
+ return "BigInteger";
+ } else if (typeName.equals(ClassConstants.BIGDECIMAL.getName())) {
+ return "BigDecimal";
+ } else if (typeName.equals(ClassConstants.UTILDATE.getName())) {
+ return "Date";
+ } else if (typeName.equals("java.util.List")) {
+ return "List";
+ }
+ return null;
+ }
+
}
Index: src/org/eclipse/persistence/sdo/helper/SDOClassGenerator.java
===================================================================
--- src/org/eclipse/persistence/sdo/helper/SDOClassGenerator.java (revision 3675)
+++ src/org/eclipse/persistence/sdo/helper/SDOClassGenerator.java (working copy)
@@ -12,9 +12,7 @@
******************************************************************************/
package org.eclipse.persistence.sdo.helper;
-import commonj.sdo.Property;
import commonj.sdo.helper.HelperContext;
-
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
@@ -46,7 +44,8 @@
private static final String lsep2 = lsep + lsep;
private static final String START_PROPERTY_INDEX = "START_PROPERTY_INDEX";
private Map generatedBuffers;
- private boolean generateInterfaces = true;
+ private boolean interfaceGenerator = true;
+ private boolean implGenerator = true;
private CodeWriter codeWriter;
private SDOClassGeneratorListener sdoClassGeneratorListener;
@@ -62,6 +61,14 @@
generatedBuffers = new HashMap();
}
+ public void setInterfaceGenerator(boolean genIterfaces) {
+ interfaceGenerator = genIterfaces;
+ }
+
+ public void setImplGenerator(boolean genImpls) {
+ implGenerator = genImpls;
+ }
+
public static void main(String[] args) {
// default to dynamic context
SDOClassGenerator generator = new SDOClassGenerator(new SDOHelperContext());
@@ -76,27 +83,27 @@
if (args[i].equals("-help")) {
generator.printUsage(null);
System.exit(0);
- }
- if (args[i].equals("-sourceFile")) {
+ } else if (args[i].equals("-sourceFile")) {
if (i == (argsLength - 1)) {
generator.printUsage("sdo_classgenerator_usage_missing_sourcefile_value");
System.exit(0);
}
sourceFile = args[++i];
- }
- if (args[i].equals("-targetDirectory")) {
+ } else if (args[i].equals("-targetDirectory")) {
if (i == (argsLength - 1)) {
generator.printUsage("sdo_classgenerator_usage_missing_targetdir");
System.exit(0);
}
sourceDir = args[++i];
- }
-
- // log level is optional and will default to INFO
- if (args[i].equals("-logLevel")) {
+ } else if (args[i].equals("-logLevel")) {
+ // log level is optional and will default to INFO
if (i != (argsLength - 1)) {
AbstractSessionLog.getLog().setLevel(Integer.parseInt(args[++i]));
}
+ } else if (args[i].equals("-noInterfaces")) {
+ generator.setInterfaceGenerator(false);
+ } else if (args[i].equals("-noImpls")) {
+ generator.setImplGenerator(false);
}
}
if (null == sourceFile) {
@@ -130,19 +137,23 @@
// Because we can no longer use Helper.cr() inside of message bundles, we must break
// up the message into separate lines and use Helper.cr() here instead. (bug6470503)
- String messageString = ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_1of6", new Object[] { Helper.getShortClassName(getClass()) });
- messageString += Helper.cr() + Helper.cr();
- messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_2of6");
- messageString += Helper.cr();
- messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_3of6");
- messageString += Helper.cr();
- messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_4of6");
- messageString += Helper.cr();
- messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_5of6");
- messageString += Helper.cr();
- messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_6of6");
- messageString += Helper.cr();
-
+ String messageString = ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_1of8", new Object[] { Helper.getShortClassName(getClass()) });
+ messageString += Helper.cr() + Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_2of8");
+ messageString += Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_3of8");
+ messageString += Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_4of8");
+ messageString += Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_5of8");
+ messageString += Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_6of8");
+ messageString += Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_7of8");
+ messageString += Helper.cr();
+ messageString += ToStringLocalization.buildMessage("sdo_classgenerator_usage_help_8of8");
+ messageString += Helper.cr();
+
System.out.println(messageString);
}
@@ -212,7 +223,6 @@
public Map generate(CodeWriter aCodeWriter, java.util.List types) {
generatedBuffers = new HashMap();
- generateInterfaces = true;
codeWriter = aCodeWriter;
for (int i = 0; i < types.size(); i++) {
@@ -224,8 +234,12 @@
String packageDir = nextBuffer.getPackageName();
packageDir = packageDir.replace('.', '/');
- getCodeWriter().writeInterface(packageDir, nextBuffer.getInterfaceName() + ".java", nextBuffer.getInterfaceBuffer());
- getCodeWriter().writeImpl(packageDir, nextBuffer.getClassName() + ".java", nextBuffer.getClassBuffer());
+ if(interfaceGenerator) {
+ getCodeWriter().writeInterface(packageDir, nextBuffer.getInterfaceName() + ".java", nextBuffer.getInterfaceBuffer());
+ }
+ if(implGenerator) {
+ getCodeWriter().writeImpl(packageDir, nextBuffer.getClassName() + ".java", nextBuffer.getClassBuffer());
+ }
}
}
return generatedBuffers;
@@ -235,7 +249,7 @@
private ClassBuffer buildClassForType(SDOType sdoType) {
ClassBuffer classBuffer = new ClassBuffer(sdoClassGeneratorListener);
classBuffer.setSdoType(sdoType);
- classBuffer.setGenerateInterface(generateInterfaces);
+ classBuffer.setGenerateInterface(interfaceGenerator);
classBuffer.setSdoTypeName(sdoType.getName());
StringBuffer currentClassBuffer = new StringBuffer();
if (sdoClassGeneratorListener != null) {
@@ -299,7 +313,7 @@
}
currentClassBuffer.append("extends ").append(implExtends);
- if (generateInterfaces) {
+ if (interfaceGenerator) {
currentClassBuffer.append(" implements ")//
.append(interfaceName);
}
@@ -308,7 +322,7 @@
classBuffer.getMethodBuffer().append(buildNoArgCtor(fullClassName));
currentClassBuffer.append(indent).append(" {").append(lsep2);
- if (generateInterfaces) {
+ if (interfaceGenerator) {
StringBuffer currentInterfaceBuffer = new StringBuffer();
if (sdoClassGeneratorListener != null) {
sdoClassGeneratorListener.preInterfacePackage(currentInterfaceBuffer);
@@ -468,7 +482,7 @@
* @param className
*/
private void buildGetMethodBuffer(ClassBuffer classBuffer, SDOProperty property, java.util.List documentation) {
- String returnType = getJavaTypeForProperty(property);
+ String returnType = SDOUtil.getJavaTypeForProperty(property);
String methodName = SDOUtil.getMethodName(property.getName(), returnType);
if (!(property.getType().isChangeSummaryType() && methodName.equals("getChangeSummary"))) {
@@ -484,7 +498,7 @@
pushIndent();
classBuffer.getMethodBuffer().append(indent).append("return ");
//cast return value
- String builtIn = getBuiltInType(returnType);
+ String builtIn = SDOUtil.getBuiltInType(returnType);
if (builtIn != null) {
String wrapperCall = getWrapperCall(returnType);
@@ -513,7 +527,7 @@
popIndent();
classBuffer.getMethodBuffer().append(indent).append("}").append(lsep2);
}
- if (generateInterfaces) {
+ if (interfaceGenerator) {
classBuffer.getInterfaceBuffer().append(indent);
classBuffer.getInterfaceBuffer().append("public ");
classBuffer.getInterfaceBuffer().append(returnType).append(" ");
@@ -546,7 +560,7 @@
classBuffer.getMethodBuffer().append(methodName);
classBuffer.getMethodBuffer().append("(");
- String paramType = getJavaTypeForProperty(property);
+ String paramType = SDOUtil.getJavaTypeForProperty(property);
classBuffer.getMethodBuffer().append(paramType).append(" value");
@@ -563,7 +577,7 @@
classBuffer.getMethodBuffer().append(indent).append("}");
classBuffer.getMethodBuffer().append(lsep2);
- if (generateInterfaces) {
+ if (interfaceGenerator) {
classBuffer.getInterfaceBuffer().append(indent);
classBuffer.getInterfaceBuffer().append("public void ");
classBuffer.getInterfaceBuffer().append(methodName);
@@ -590,46 +604,6 @@
indent = buf.toString();
}
- /**
- * INTERNAL:
- * @param qualifiedName
- * @param targetNamespace
- * @return
- */
- private String getBuiltInType(String typeName) {
- if ((typeName.equals(ClassConstants.PBOOLEAN.getName())) || (typeName.equals(ClassConstants.BOOLEAN.getName()))) {
- return "Boolean";
- } else if ((typeName.equals(ClassConstants.PBYTE.getName())) || (typeName.equals(ClassConstants.BYTE.getName()))) {
- return "Byte";
- } else if ((typeName.equals(ClassConstants.APBYTE.getName())) || (typeName.equals(ClassConstants.ABYTE.getName()))) {
- return "Bytes";
- } else if ((typeName.equals(ClassConstants.PCHAR.getName())) || (typeName.equals(ClassConstants.CHAR.getName()))) {
- return "Char";
- } else if ((typeName.equals(ClassConstants.PDOUBLE.getName())) || (typeName.equals(ClassConstants.DOUBLE.getName()))) {
- return "Double";
- } else if ((typeName.equals(ClassConstants.PFLOAT.getName())) || (typeName.equals(ClassConstants.FLOAT.getName()))) {
- return "Float";
- } else if ((typeName.equals(ClassConstants.PLONG.getName())) || (typeName.equals(ClassConstants.LONG.getName()))) {
- return "Long";
- } else if ((typeName.equals(ClassConstants.PSHORT.getName())) || (typeName.equals(ClassConstants.SHORT.getName()))) {
- return "Short";
- } else if ((typeName.equals(ClassConstants.PINT.getName())) || (typeName.equals(ClassConstants.INTEGER.getName()))) {
- return "Int";
- } else if (typeName.equals(ClassConstants.STRING.getName())) {
- return "String";
- } else if (typeName.equals(ClassConstants.BIGINTEGER.getName())) {
- return "BigInteger";
- } else if (typeName.equals(ClassConstants.BIGDECIMAL.getName())) {
- return "BigDecimal";
- } else if (typeName.equals(ClassConstants.UTILDATE.getName())) {
- return "Date";
- } else if (typeName.equals("java.util.List")) {
- return "List";
- }
-
- return null;
- }
-
public void setGeneratedBuffers(Map generatedBuffersMap) {
generatedBuffers = generatedBuffersMap;
}
@@ -655,21 +629,6 @@
return null;
}
- private String getJavaTypeForProperty(SDOProperty property) {
- if (property.isMany() || ((SDOType)property.getType()).isXsdList()) {
- return "java.util.List";
- } else {
- SDOType propertyType = property.getType();
- Class instanceClass = propertyType.getInstanceClass();
- if (ClassConstants.ABYTE.equals(instanceClass)) {
- return "Byte[]";
- } else if (ClassConstants.APBYTE.equals(instanceClass)) {
- return "byte[]";
- }
- return propertyType.getInstanceClassName();
- }
- }
-
public void setCodeWriter(CodeWriter theCodeWriter) {
codeWriter = theCodeWriter;
}
Index: src/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java
===================================================================
--- src/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java (revision 3675)
+++ src/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java (working copy)
@@ -2432,6 +2432,7 @@
if(sdoType == null) {
sdoType = new SDOType(typeURI, typeName, sdoTypeHelper);
sdoType.setXsdLocalName(complexType.getName());
+ sdoType.preInitialize(packageName, namespaceResolvers);
}
sdoType.setXsd(true);
if(!sdoType.getQName().equals(sdoType.getXsdType())) {
Index: src/org/eclipse/persistence/sdo/SDOType.java
===================================================================
--- src/org/eclipse/persistence/sdo/SDOType.java (revision 3675)
+++ src/org/eclipse/persistence/sdo/SDOType.java (working copy)
@@ -758,7 +758,6 @@
getXmlDescriptor().setJavaClassName(getImplClassName());
// load classes by classloader by getting the current instance class
getInstanceClass();
- getImplClass();
// See SDOResolvable enhancement
String schemaContext = getName();
@@ -807,6 +806,9 @@
sdoRefMapping.setField(xmlField);
xmlDescriptor.addMapping(sdoRefMapping);
}
+ if(!isDataType()) {
+ getImplClass();
+ }
}
/**
Index: src/org/eclipse/persistence/sdo/types/SDODataType.java
===================================================================
--- src/org/eclipse/persistence/sdo/types/SDODataType.java (revision 3675)
+++ src/org/eclipse/persistence/sdo/types/SDODataType.java (working copy)
@@ -23,12 +23,12 @@
public SDODataType(String aUri, String aName, SDOTypeHelper sdoTypeHelper) {
super(aUri, aName, sdoTypeHelper);
+ isDataType = true;
}
public SDODataType(String aUri, String aName, Class aClass, SDOTypeHelper sdoTypeHelper) {
this(aUri, aName, sdoTypeHelper);
setInstanceClass(aClass);
- isDataType = true;
xmlDescriptor = null;
}