All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nuiton.topia.templates.TopiaMetaTransformer Maven / Gradle / Ivy

package org.nuiton.topia.templates;

/*
 * #%L
 * ToPIA :: Templates
 * $Id$
 * $HeadURL$
 * %%
 * Copyright (C) 2004 - 2014 CodeLutin
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as 
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public 
 * License along with this program.  If not, see
 * .
 * #L%
 */

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.AbstractMetaTransformer;
import org.nuiton.eugene.models.object.ObjectModel;
import org.nuiton.eugene.models.object.ObjectModelClass;
import org.nuiton.eugene.models.object.validator.AttributeNamesValidator;
import org.nuiton.eugene.models.object.validator.ClassNamesValidator;
import org.nuiton.eugene.models.object.validator.ObjectModelValidator;

import java.util.ArrayList;
import java.util.List;

/**
 * Created: 20 déc. 2009
 *
 * @author Tony Chemit - [email protected]
 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.templates.TopiaMetaTransformer"
 * @since 2.3.0
 */
public class TopiaMetaTransformer extends AbstractMetaTransformer {

    /** Logger */
    private static final Log log = LogFactory.getLog(TopiaMetaTransformer.class);

    public TopiaMetaTransformer() {
//        super(
//                EntityTransformer.class,
//                DAOTransformer.class,
//                DAOImplTransformer.class,
//                DAOAbstractTransformer.class,
//                DAOHelperTransformer.class,
//                EntityHibernateMappingGenerator.class
//        );

        setTemplateTypes(
                ApplicationContextTransformer.class,
                PersistenceContextTransformer.class,
                EntityTransformer.class,
                EntityDaoTransformer.class,
//                DAOTransformer.class,
//                DAOImplTransformer.class,
//                DAOAbstractTransformer.class,
//                DAOHelperTransformer.class,
                EntityHibernateMappingGenerator.class,
                EntityEnumTransformer.class
        );
    }

    protected boolean validateModel(ObjectModel model) {
        List validators = new ArrayList();

        AttributeNamesValidator attrValidator = new AttributeNamesValidator(
                model);
        attrValidator.addNameAndReason("analyze",
                                       "Le nom d'attribut \"analyze\" est incompatible avec certains SGBD");
        attrValidator.addNameAndReason("next",
                                       "Le nom d'attribut \"next\" est incompatible avec HSQL");
        attrValidator.addNameAndReason("value",
                                       "Le nom d'attribut \"value\" est incompatible avec certains SGBD");
        attrValidator.addNameAndReason("values",
                                       "Le nom d'attribut \"values\" est incompatible avec certains SGBD");
        attrValidator.addNameAndReason("begin",
                                       "Le nom d'attribut \"begin\" est incompatible avec certains SGBD");
        attrValidator.addNameAndReason("end",
                                       "Le nom d'attribut \"end\" est incompatible avec certains SGBD");
        attrValidator.addNameAndReason("authorization",
                                       "Le nom d'attribut \"authorization\" est incompatible avec certains SGBD");
        attrValidator.addNameAndReason("order",
                                       "Le nom d'attribut \"order\" est incompatible avec certains SGBD");
        validators.add(attrValidator);

        ClassNamesValidator classValidator = new ClassNamesValidator(model);
        classValidator.addNameAndReason("constraint", "Nom de classe incompatible avec certains SGBD");
        classValidator.addNameAndReason("user", "Nom de classe incompatible avec certains SGBD");
        validators.add(classValidator);

        validators.add(new TopiaJavaValidator(model));
        validators.add(new TopiaRelationValidator(model));

        for (ObjectModelValidator validator : validators) {
            if (!validator.validate()) {
                for (String error : validator.getErrors()) {
                    if (log.isWarnEnabled()) {
                        log.warn("[VALIDATION] " + error);
                    }
                }
            }
        }

        TopiaTemplateHelper templateHelper = new TopiaTemplateHelper(model);

        // test before all if there is some entities to generate
        List classes = templateHelper.getEntityClasses(model, true);

        if (classes.isEmpty()) {
            // no entity to generate, can stop safely
            if (log.isWarnEnabled()) {
                log.warn("No entity to generate, " + getClass().getName() +
                         " is skipped");
            }
            return false;
        }
        //FIXME-TC20091220 seems we still generate if there is some validation errors ? not very normal
        return true;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy