package org.exolab.castor.builder.factory;
import org.castor.xml.JavaNaming;
import org.exolab.castor.builder.SGTypes;
import org.exolab.castor.builder.info.CollectionInfo;
import org.exolab.castor.builder.info.FieldInfo;
import org.exolab.javasource.JClass;
import org.exolab.javasource.JMethod;
import org.exolab.javasource.JSourceCode;
/**
* A JField factory for CollectionODMG30Member.
*/
public class CollectionODMG30MemberAndAccessorFactory extends CollectionMemberAndAccessorFactory {
/**
* Creates a new CollectionODMG30MemberAndAccessorFactory.
* @param naming the javaNaming to use
*/
public CollectionODMG30MemberAndAccessorFactory(final JavaNaming naming) {
super(naming);
}
/**
* {@inheritDoc}
*/
public void generateInitializerCode(final FieldInfo fieldInfo,
final JSourceCode jsc) {
jsc.add("this.");
jsc.append(fieldInfo.getName());
jsc.append(" = ODMG.getImplementation().newDArray();");
}
/**
* {@inheritDoc}
*/
protected void createEnumerateMethod(final CollectionInfo fieldInfo,
final JClass jClass, final boolean useJava50) {
JMethod method = new JMethod("enumerate" + fieldInfo.getMethodSuffix(),
SGTypes.createEnumeration(fieldInfo.getContentType().getJType(), useJava50, true),
"an Enumeration over all elements of this collection");
JSourceCode sourceCode = method.getSourceCode();
sourceCode.add("java.util.Vector v = new java.util.Vector();"); // ODMG 3.0
sourceCode.add("java.util.Iterator i = ");
sourceCode.append(fieldInfo.getName());
sourceCode.append(".iterator();");
sourceCode.add("");
sourceCode.add("while (i.hasNext()) {");
sourceCode.indent();
sourceCode.add("v.add(i.next());");
sourceCode.unindent();
sourceCode.add("");
sourceCode.add("return v.elements();");
jClass.addMethod(method);
}
}