/* * Copyright 2008 Filip Hianik * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.exolab.castor.builder.descriptors; import org.exolab.castor.builder.BuilderConfiguration; import org.exolab.javasource.JClass; import org.exolab.javasource.JConstructor; import org.exolab.javasource.JSourceCode; /** * A class which defines the necessary methods for creating the JDO-specific * descriptor source files. * * @see DescriptorJClass * @see DescriptorSourceFactory * * @author Filip Hianik * @since 1.2.1 * */ public final class JDODescriptorJClass extends JClass { /** * JDODescriptors extend this base class. */ private static final String JDO_CLASS_DESCRIPTOR = "org.exolab.castor.mapping.loader.ClassDescriptorImpl"; /** * The type being described by the Descriptor class we'll generate. */ private final JClass _type; /** * Source Builder configuration. */ private final BuilderConfiguration _config; /** * Constructs a JDODescriptorJClass. * * @param config * Builder Configuration * @param className * name of this descriptor class * @param type * the type that is described by this descriptor */ public JDODescriptorJClass(final BuilderConfiguration config, final String className, final JClass type) { super(className); this._config = config; this._type = type; init(); } /** * Initializes this JDODescriptorJClass with the required methods. */ private void init() { // Make sure that the Descriptor is extended JDOClassDescriptor even // when // the user has specified a super class for all the generated classes String superClass = null; if (_config != null) { superClass = _config.getProperty( BuilderConfiguration.Property.SUPER_CLASS, null); } // boolean extended = false; if (_type.getSuperClassQualifiedName() == null || _type.getSuperClassQualifiedName().equals(superClass)) { setSuperClass(JDO_CLASS_DESCRIPTOR); } else { if (_type.getSuperClass() == null) { setSuperClass(null); } else { // extended = true; // setSuperClass(getSuperClassName()); } } superClass = null; if (_type.getPackageName() != null && _type.getPackageName().length() > 0) { addImport(_type.getName()); } // -- add default imports addImports(); // -- add default contructor addDefaultConstructor(); } /** * Adds our default imports. */ private void addImports() { addImport("org.exolab.castor.jdo.engine.nature.ClassDescriptorJDONature"); addImport("org.castor.jdo.engine.SQLTypeInfos"); // addImport("org.exolab.castor.jdo.engine.JDOFieldDescriptor"); // addImport("org.exolab.castor.jdo.engine.JDOFieldDescriptorImpl"); addImport("org.exolab.castor.mapping.AccessMode"); addImport("org.exolab.castor.mapping.FieldDescriptor"); addImport("org.exolab.castor.mapping.FieldHandler"); addImport("org.exolab.castor.mapping.MappingException"); addImport("org.exolab.castor.mapping.loader.FieldHandlerImpl"); addImport("org.exolab.castor.mapping.loader.TypeInfo"); addImport("org.exolab.castor.mapping.xml.ClassChoice"); addImport("org.exolab.castor.mapping.xml.ClassMapping"); addImport("org.exolab.castor.mapping.xml.FieldMapping"); addImport("org.exolab.castor.mapping.xml.MapTo"); addImport("org.exolab.castor.mapping.xml.Sql"); addImport("org.exolab.castor.mapping.xml.types.ClassMappingAccessType"); addImport("org.castor.core.exception.IllegalClassDescriptorInitialization"); addImport("org.exolab.castor.mapping.xml.types.FieldMappingCollectionType"); addImport("org.exolab.castor.mapping.loader.FieldDescriptorImpl"); addImport("org.exolab.castor.jdo.engine.nature.FieldDescriptorJDONature"); addImport("java.lang.reflect.Method"); } /** * Adds our default constructor. */ private void addDefaultConstructor() { addConstructor(createConstructor()); JConstructor cons = getConstructor(0); JSourceCode jsc = cons.getSourceCode(); jsc.add("super();"); jsc.add("ClassMapping mapping = new ClassMapping();"); jsc.add("ClassChoice choice = new ClassChoice();"); jsc.add("MapTo mapTo = new MapTo();"); } }