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.javasource.JClass; import org.exolab.javasource.JMethod; import org.exolab.javasource.JParameter; import org.exolab.javasource.JSourceCode; /** * The Factory for Java2 Collections. */ public class CollectionJ2MemberAndAccessorFactory extends CollectionMemberAndAccessorFactory { /** * Creates a new CollectionJ2MemberAndAccessorFactory. * @param naming the javaNaming to use */ public CollectionJ2MemberAndAccessorFactory(final JavaNaming naming) { super(naming); } /** * {@inheritDoc} * <br/> * To the Java-1 collection iterators, we add the Java-2 Iterator. */ protected final void createCollectionIterationMethods(final CollectionInfo fieldInfo, final JClass jClass, final boolean useJava50) { super.createCollectionIterationMethods(fieldInfo, jClass, useJava50); this.createIteratorMethod(fieldInfo, jClass, useJava50); } /** * {@inheritDoc} */ protected final 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 possible elements of this collection"); JSourceCode sourceCode = method.getSourceCode(); sourceCode.add("return java.util.Collections.enumeration(this."); sourceCode.append(fieldInfo.getName()); sourceCode.append(");"); jClass.addMethod(method); } /** * {@inheritDoc} */ protected final void createAddMethod(final CollectionInfo fieldInfo, final JClass jClass) { JMethod method = new JMethod(fieldInfo.getWriteMethodName()); method.addException(SGTypes.INDEX_OUT_OF_BOUNDS_EXCEPTION, "if the index given is outside the bounds of the collection"); final JParameter parameter = new JParameter(fieldInfo.getContentType().getJType(), fieldInfo.getContentName()); method.addParameter(parameter); JSourceCode sourceCode = method.getSourceCode(); this.addMaxSizeCheck(fieldInfo, method.getName(), sourceCode); sourceCode.add("this."); sourceCode.append(fieldInfo.getName()); sourceCode.append(".add("); sourceCode.append(fieldInfo.getContentType().createToJavaObjectCode(parameter.getName())); sourceCode.append(");"); if (fieldInfo.isBound()) { this.createBoundPropertyCode(fieldInfo, sourceCode); } jClass.addMethod(method); } }