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       * @param naming the javaNaming to use
20       */
21      public CollectionODMG30MemberAndAccessorFactory(final JavaNaming naming) {
22          super(naming);
23      }
24  
25      /**
26       * {@inheritDoc}
27       */
28      public void generateInitializerCode(final FieldInfo fieldInfo, 
29              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, 
39              final JClass jClass, 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  }