Package org.exolab.castor.builder.descriptors

Source Code of org.exolab.castor.builder.descriptors.JDODescriptorJClass

/*
* 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();");
    }
}
TOP

Related Classes of org.exolab.castor.builder.descriptors.JDODescriptorJClass

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.