View Javadoc
1   package org.exolab.castor.builder.factory;
2   
3   import org.castor.xml.JavaNaming;
4   import org.exolab.castor.builder.SGTypes;
5   import org.exolab.castor.builder.info.CollectionInfo;
6   import org.exolab.castor.builder.info.FieldInfo;
7   import org.exolab.javasource.JClass;
8   import org.exolab.javasource.JMethod;
9   import org.exolab.javasource.JSourceCode;
10  
11  
12  /**
13   * A JField factory for CollectionODMG30Member.
14   */
15  public class CollectionODMG30MemberAndAccessorFactory extends CollectionMemberAndAccessorFactory {
16  
17    /**
18     * Creates a new CollectionODMG30MemberAndAccessorFactory.
19     * 
20     * @param naming the javaNaming to use
21     */
22    public CollectionODMG30MemberAndAccessorFactory(final JavaNaming naming) {
23      super(naming);
24    }
25  
26    /**
27     * {@inheritDoc}
28     */
29    public void generateInitializerCode(final FieldInfo fieldInfo, final JSourceCode jsc) {
30      jsc.add("this.");
31      jsc.append(fieldInfo.getName());
32      jsc.append(" = ODMG.getImplementation().newDArray();");
33    }
34  
35    /**
36     * {@inheritDoc}
37     */
38    protected void createEnumerateMethod(final CollectionInfo fieldInfo, final JClass jClass,
39        final boolean useJava50) {
40      JMethod method = new JMethod("enumerate" + fieldInfo.getMethodSuffix(),
41          SGTypes.createEnumeration(fieldInfo.getContentType().getJType(), useJava50, true),
42          "an Enumeration over all elements of this collection");
43  
44      JSourceCode sourceCode = method.getSourceCode();
45      sourceCode.add("java.util.Vector v = new java.util.Vector();"); // ODMG 3.0
46      sourceCode.add("java.util.Iterator i = ");
47      sourceCode.append(fieldInfo.getName());
48      sourceCode.append(".iterator();");
49      sourceCode.add("");
50      sourceCode.add("while (i.hasNext()) {");
51      sourceCode.indent();
52      sourceCode.add("v.add(i.next());");
53      sourceCode.unindent();
54      sourceCode.add("");
55      sourceCode.add("return v.elements();");
56  
57      jClass.addMethod(method);
58    }
59  
60  }