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

org.nuiton.eugene.java.ObjectModelTransformerToJava Maven / Gradle / Ivy

There is a newer version: 3.0
Show newest version
/*
 * #%L
 * EUGene :: EUGene
 * 
 * $Id: ObjectModelTransformerToJava.java 1184 2012-10-24 19:34:25Z tchemit $
 * $HeadURL: http://svn.nuiton.org/svn/eugene/tags/eugene-2.6.1/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java $
 * %%
 * Copyright (C) 2004 - 2010 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%
 */

package org.nuiton.eugene.java;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.EugeneTagValues;
import org.nuiton.eugene.GeneratorUtil;
import org.nuiton.eugene.Template;
import org.nuiton.eugene.java.extension.ImportsManager;
import org.nuiton.eugene.models.object.ObjectModel;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
import org.nuiton.eugene.models.object.ObjectModelClass;
import org.nuiton.eugene.models.object.ObjectModelClassifier;
import org.nuiton.eugene.models.object.ObjectModelDependency;
import org.nuiton.eugene.models.object.ObjectModelElement;
import org.nuiton.eugene.models.object.ObjectModelEnumeration;
import org.nuiton.eugene.models.object.ObjectModelInterface;
import org.nuiton.eugene.models.object.ObjectModelJavaModifier;
import org.nuiton.eugene.models.object.ObjectModelModifier;
import org.nuiton.eugene.models.object.ObjectModelOperation;
import org.nuiton.eugene.models.object.ObjectModelParameter;
import org.nuiton.eugene.models.object.ObjectModelTransformer;
import org.nuiton.eugene.models.object.ObjectModelType;
import org.nuiton.i18n.I18n;

import java.beans.Introspector;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * Created: 28 oct. 2009
 *
 * @author fdesbois 
 */
public abstract class ObjectModelTransformerToJava extends ObjectModelTransformer {

    private static final Log log =
            LogFactory.getLog(ObjectModelTransformerToJava.class);

    /**
     * internal builder
     */
    protected JavaBuilder builder;

    private String constantPrefix;

    @Override
    protected Template initOutputTemplate() {
        // by default, use a stupid java generator
        return new JavaGenerator();
    }

    @Override
    protected ObjectModel initOutputModel() {
        if (log.isDebugEnabled()) {
            log.debug("inputModelName = " + getModel().getName());
        }
        builder = new JavaBuilder(getModel().getName());
        setConstantPrefix("");
        return builder.getModel();
    }

    @Override
    protected void debugOutputModel() {
        if (log.isDebugEnabled()) {
            log.debug("classes : " + getOutputModel().getClasses().size());
            for (ObjectModelClass clazz : getOutputModel().getClasses()) {
                log.debug("  class : " + clazz.getQualifiedName());
                ImportsManager manager = getOutputModel().getExtension(
                        clazz.getQualifiedName(), ImportsManager.class
                );
                for (String imports :
                        manager.getImports(clazz.getPackageName())) {
                    log.debug("  import : " + imports);
                }
                for (ObjectModelAttribute attribute : clazz.getAttributes()) {
                    log.debug("  attribute : " + attribute.getType() +
                            " " + attribute.getName());
                }
                for (ObjectModelOperation operation : clazz.getOperations()) {
                    log.debug("  operation : " + operation.getReturnType() +
                            " " + operation.getName());
                }
            }
        }
    }

    protected ObjectModelClass createClass(String name, String packageName) {
        return builder.createClass(name, packageName);
    }

    public ObjectModelEnumeration createEnumeration(String name,
                                                    String packageName) {
        return builder.createEnumeration(name, packageName);
    }

    protected ObjectModelClass createAbstractClass(String name,
                                                   String packageName) {
        return builder.createAbstractClass(name, packageName);
    }

    protected ObjectModelInterface createInterface(String name,
                                                   String packageName) {
        return builder.createInterface(name, packageName);
    }

    protected void setSuperClass(ObjectModelClass classifier,
                                 String superclassQualifiedName) {
        builder.setSuperClass(classifier, superclassQualifiedName);
    }

    protected void setSuperClass(ObjectModelClass classifier,
                                 Class superclassQualifiedName) {
        builder.setSuperClass(classifier, superclassQualifiedName.getName());
    }

    protected void addInterface(ObjectModelClassifier classifier,
                                String interfaceQualifiedName) {
        builder.addInterface(classifier, interfaceQualifiedName);
    }

    protected void addInterface(ObjectModelClassifier classifier,
                                Class interfaceQualifiedName) {
        builder.addInterface(classifier, interfaceQualifiedName.getName());
    }

    protected void addImport(ObjectModelClassifier classifier,
                             String imports) {
        builder.addImport(classifier, imports);
    }

    protected void addImport(ObjectModelClassifier classifier,
                             ObjectModelClass imports) {
        builder.addImport(classifier, imports.getPackageName() + "." + imports.getName());
    }

    protected void addImport(ObjectModelClassifier classifier,
                             Class imports) {
        builder.addImport(classifier, imports.getName());
    }

    /**
     * Adds a tag value to the model.
     *
     * @param name  name of the tag value
     * @param value value of the tag value
     */
    public void addTagValue(String name, String value) {
        builder.addTagValue(name, value);
    }

    /**
     * Adds a tag value to the given {@code element}.
     *
     * @param element the element on which the tag value is attached.
     * @param name    the name of the tag value
     * @param value   the value of the tag value
     */
    public void addTagValue(ObjectModelElement element, String name, String value) {
        builder.addTagValue(element, name, value);
    }

    public String getConstantName(String propertyName) {
        return getConstantPrefix() + builder.getConstantName(propertyName);
    }

    protected String getConstantPrefix(ObjectModelClassifier input,
                                       String defaultPrefix) {

        // look if there is a constant_prefix tag value
        String prefix = JavaGeneratorUtil.getConstantPrefixTagValue(
                getModel(),
                input
        );

        if (StringUtils.isEmpty(prefix)) {

            // no specific prefix, use default prefix
            prefix = defaultPrefix;
        }
        return prefix.trim();
    }

    protected ObjectModelAttribute addConstant(
            ObjectModelClassifier classifier,
            String name,
            String type,
            String value,
            ObjectModelModifier visibility) throws IllegalArgumentException {
        return builder.addConstant(classifier, name, type, value, visibility);
    }

    protected ObjectModelAttribute addConstant(
            ObjectModelClassifier classifier,
            String name,
            Class type,
            String value,
            ObjectModelModifier visibility) throws IllegalArgumentException {
        return builder.addConstant(classifier, name, type.getName(), value, visibility);
    }

    protected ObjectModelAttribute addAttribute(
            ObjectModelClassifier classifier,
            String name,
            String type,
            String value,
            ObjectModelModifier... modifiers) {
        return builder.addAttribute(classifier, name, type, value, modifiers);
    }

    protected ObjectModelAttribute addAttribute(
            ObjectModelClassifier classifier,
            String name,
            Class type,
            String value,
            ObjectModelModifier... modifiers) {
        return builder.addAttribute(classifier, name, type.getName(), value, modifiers);
    }

    protected ObjectModelAttribute addAttribute(
            ObjectModelClassifier classifier,
            ObjectModelAttribute attribute) {
        return builder.addAttribute(classifier, attribute);
    }

    public ObjectModelAttribute addAttribute(
            ObjectModelClassifier classifier,
            String name,
            String type) {
        return builder.addAttribute(classifier, name, type);
    }

    protected ObjectModelOperation addConstructor(
            ObjectModelClass clazz, ObjectModelModifier visibility)
            throws IllegalArgumentException {
        return builder.addConstructor(clazz, visibility);
    }

    protected ObjectModelOperation addConstructor(
            ObjectModelEnumeration clazz, ObjectModelModifier visibility)
            throws IllegalArgumentException {
        return builder.addConstructor(clazz, visibility);
    }

    protected ObjectModelOperation addOperation(
            ObjectModelClassifier classifier,
            String name,
            String type,
            ObjectModelModifier... modifiers) {
        return builder.addOperation(classifier, name, type, modifiers);
    }

    protected ObjectModelOperation addOperation(
            ObjectModelClassifier classifier,
            String name,
            Class type,
            ObjectModelModifier... modifiers) {
        return builder.addOperation(classifier, name, type == null ? null : type.getName(), modifiers);
    }

    /**
     * Adds an operation to the given classifier.
     *
     * @param classifier the classifier on which the operation will be added
     * @param operation  the operation to add
     * @return the added operation
     * @since 2.1.2
     */
    protected ObjectModelOperation addOperation(
            ObjectModelClassifier classifier,
            ObjectModelOperation operation) {
        return builder.addOperation(classifier, operation);
    }

    protected void addLiteral(ObjectModelEnumeration classifier, String name) {
        builder.addLiteral(classifier, name);
    }

    protected ObjectModelParameter addParameter(
            ObjectModelOperation operation,
            String type,
            String name) {
        return builder.addParameter(operation, type, name);
    }

    protected ObjectModelParameter addParameter(
            ObjectModelOperation operation,
            Class type,
            String name) {
        return builder.addParameter(operation, type.getName(), name);
    }

    protected void addException(
            ObjectModelOperation operation,
            String exception) {
        builder.addException(operation, exception);
    }

    protected void addException(
            ObjectModelOperation operation,
            Class exception) {
        builder.addException(operation, exception.getName());
    }

    protected void setOperationBody(ObjectModelOperation operation,
                                    String body)
            throws IllegalArgumentException {
        builder.setOperationBody(operation, body);
    }

    public ObjectModelClassifier addInnerClassifier(
            ObjectModelClass clazz,
            ObjectModelType type,
            String name,
            ObjectModelModifier... modifiers) throws IllegalArgumentException {
        return builder.addInnerClassifier(clazz, type, name, modifiers);
    }

    public void setDocumentation(ObjectModelElement element,
                                 String documentation) {
        builder.setDocumentation(element, documentation);
    }

    /**
     * Adds a min multiplicity to the given {@code attribute}.
     *
     * @param attribute    the attribute on which the min multiplicty will be setted
     * @param multiplicity the multiplicity to set
     * @since 2.1.2
     */
    public void setMinMultiplicity(ObjectModelAttribute attribute, int multiplicity) {
        builder.setMinMultiplicity(attribute, multiplicity);
    }

    /**
     * Adds a max multiplicity to the given {@code attribute}.
     *
     * @param attribute    the attribute on which the min multiplicty will be setted
     * @param multiplicity the multiplicity to set
     * @since 2.1.2
     */
    public void setMaxMultiplicity(ObjectModelAttribute attribute, int multiplicity) {
        builder.setMaxMultiplicity(attribute, multiplicity);
    }

    /**
     * Adds a navigable flag to the given {@code attribute}.
     *
     * @param attribute the attribute on which the navigable flag will be setted
     * @param navigable the navigable flag to set
     * @since 2.3
     */
    public void setNavigable(ObjectModelAttribute attribute, boolean navigable) {
        builder.setNavigable(attribute, navigable);
    }

    /**
     * Adds a comment to the given {@code element}.
     *
     * @param element the element on which the comment will be added.
     * @param comment the comment to add
     * @since 2.1.2
     */
    public void addComment(ObjectModelElement element, String comment) {
        builder.addComment(element, comment);
    }

    public void addAnnotation(ObjectModelClassifier classifier,
                              ObjectModelElement element,
                              String annotation) {
        builder.addAnnotation(classifier, element, annotation);
    }

    /**
     * add an operation to the classifier with the form of a simple block
     * of code.
     * 

* use it to add a "static {}" block into an classifier, then use * setOperationBody with the returned value of this method to complete * the creation of the static block * * @param classifier the classifier where the block will be added * @param modifiers modifiers for the block * @return the block added */ public ObjectModelOperation addBlock(ObjectModelClassifier classifier, ObjectModelModifier... modifiers) { return builder.addBlock(classifier, modifiers); } /** * Add a stereotype to the given {@code element}. * * @param element the element on which the stereotype will be added * @param stereotype the stereotype to add * @since 2.1.2 */ public void addStereotype(ObjectModelElement element, String stereotype) { builder.addStereotype(element, stereotype); } /** * Clone the {@code source} operation into the {@code destination} classifier. * name, returnType, parameters, exceptions and tagValues will be cloned. * You can specify {@code modifiers} for the result operation. * * @param source operation to clone * @param destination classifier where result operation will be added * @param cloneDocumentation flag to add documentation if some found in model * @param modifiers extra modifiers * @return the new operation created in destination classifier * @since 2.1.2 */ public ObjectModelOperation cloneOperationSignature(ObjectModelOperation source, ObjectModelClassifier destination, boolean cloneDocumentation, ObjectModelModifier... modifiers) { ObjectModelOperation outputOperation = addOperation(destination, source.getName(), source.getReturnType(), modifiers); if (cloneDocumentation && GeneratorUtil.hasDocumentation(source)) { setDocumentation(outputOperation, source.getDocumentation()); } for (ObjectModelParameter parameter : source.getParameters()) { ObjectModelParameter outputParam = addParameter(outputOperation, parameter.getType(), parameter.getName()); if (cloneDocumentation && GeneratorUtil.hasDocumentation(parameter)) { setDocumentation(outputParam, parameter.getDocumentation()); } } for (String exception : source.getExceptions()) { addException(outputOperation, exception); } cloneTagValues(source, outputOperation); return outputOperation; } /** * Clone the {@code source} operation into the {@code destination} classifier. * whole signature, tagValues and body code will be cloned. You can specify * {@code modifiers} for the result operation. * * @param source operation to clone * @param destination classifier where result operation will be added * @param cloneDocumentation flag to add documentation if some found in model * @param modifiers extra modifiers * @return the new operation created in destination classifier * @since 2.1.2 */ public ObjectModelOperation cloneOperation(ObjectModelOperation source, ObjectModelClassifier destination, boolean cloneDocumentation, ObjectModelJavaModifier... modifiers) { ObjectModelOperation outputOperation = cloneOperationSignature( source, destination, cloneDocumentation, modifiers ); // add body only if operation is not abstract boolean opAbstract = false; for (ObjectModelModifier modifier : modifiers) { if (modifier == ObjectModelJavaModifier.ABSTRACT) { opAbstract = true; break; } } if (!opAbstract) { setOperationBody(outputOperation, source.getBodyCode()); } return outputOperation; } /** * clone a given attribute into a classifier of the output model * * @param source the original attribute * @param destination classifier where the clone will be added * @param cloneDocumentation flag to add documentation if some found in model * @param modifiers extra modifiers * @return the clone attribute * @since 2.1.2 */ protected ObjectModelAttribute cloneAttribute(ObjectModelAttribute source, ObjectModelClassifier destination, boolean cloneDocumentation, ObjectModelModifier... modifiers) { ObjectModelAttribute outputAttribute = addAttribute(destination, source.getName(), source.getType(), source.getDefaultValue(), modifiers); cloneTagValues(source, outputAttribute); if (cloneDocumentation) { setDocumentation(outputAttribute, source.getDocumentation()); } for (String comment : source.getComments()) { addComment(outputAttribute, comment); } setMinMultiplicity(outputAttribute, source.getMinMultiplicity()); setMaxMultiplicity(outputAttribute, source.getMaxMultiplicity()); setNavigable(outputAttribute, source.isNavigable()); return outputAttribute; } /** * Copy all tag values fro the given {@code source} to the given * {@code destination}. * * @param source the source element * @param destination the destination element * @since 2.3 */ protected void cloneTagValues(ObjectModelElement source, ObjectModelElement destination) { Map tags = source.getTagValues(); for (Map.Entry entry : tags.entrySet()) { addTagValue(destination, entry.getKey(), entry.getValue()); } } /** * @param source * @param destination * @since 2.3 */ protected void cloneStereotypes(ObjectModelClassifier source, ObjectModelClassifier destination) { Collection stereotypes = source.getStereotypes(); for (String stereotype : stereotypes) { addStereotype(destination, stereotype); } } /** * copy attributes, interfaces declartion and operation of a given classifier * into another classifier. *

* class-specific, enumeration-specific and interface-specific features * of the given classifier will not be present in the clone. * To copy those specific elements, use * * @param source the classifier to clone from the source model * @param destination where to clone the given source one * @param copyDocumentation flag to add documentation if some found in model * @link {@link #cloneClassifier(ObjectModelClassifier, boolean)} * @since 2.1.2 * @deprecated since 2.3, prefer use the {@link #cloneClass(ObjectModelClass, boolean)} method */ @Deprecated protected void copyClassifier(ObjectModelClassifier source, ObjectModelClassifier destination, boolean copyDocumentation) { cloneClassifier(source, destination, copyDocumentation); } /** * copy attributes, interfaces declartion and operation of a given classifier * into another classifier. *

* class-specific, enumeration-specific and interface-specific features * of the given classifier will not be present in the clone. * To copy those specific elements, use * * @param source the classifier to clone from the source model * @param destination where to clone the given source one * @param copyDocumentation flag to add documentation if some found in model * @link {@link #cloneClassifier(ObjectModelClassifier, boolean)} * @since 2.3 */ protected void cloneClassifier(ObjectModelClassifier source, ObjectModelClassifier destination, boolean copyDocumentation) { cloneTagValues(source, destination); cloneStereotypes(source, destination); for (ObjectModelAttribute attribute : source.getAttributes()) { cloneAttribute(attribute, destination, copyDocumentation); } for (ObjectModelInterface interfacez : source.getInterfaces()) { addInterface(destination, interfacez.getQualifiedName()); } for (ObjectModelOperation operation : source.getOperations()) { cloneOperation(operation, destination, copyDocumentation); } } /** * creates a clone of the given {@code source} class in the output model * and clones attributes, inheritence declarations and operations into the * clone * * @param source the class to clone from the source model * @param cloneDocumentation flag to add documentation if some found in model * @return the clone of the given class * @since 2.1.2 */ public ObjectModelClass cloneClass(ObjectModelClass source, boolean cloneDocumentation) { ObjectModelClass outputClass = createClass(source.getName(), source.getPackageName()); cloneClassifier(source, outputClass, cloneDocumentation); if (source.getSuperclasses().size() > 1) { log.warn(source.getQualifiedName() + " has multiple inheritence, some of them will be ignored"); } for (ObjectModelClass superClass : source.getSuperclasses()) { setSuperClass(outputClass, superClass.getQualifiedName()); // TODO 20100812 bleny is there something to do with discriminator for superClass ? } if (!CollectionUtils.isEmpty(source.getInnerClassifiers())) { for (ObjectModelClassifier classifier : source.getInnerClassifiers()) { ObjectModelClassifier innerClassifierClone = cloneClassifier(classifier, cloneDocumentation); addInnerClassifier(outputClass, ObjectModelType.OBJECT_MODEL_CLASSIFIER, innerClassifierClone.getName()); } } return outputClass; } /** * creates a clone of the given {@code source} interface in the output model * and clones attributes, inheritence declaration and operations into the * clone * * @param source the interface to clone from the source model * @param cloneDocumentation flag to add documentation if some found in model * @return the clone of the given interface * @since 2.1.2 */ public ObjectModelInterface cloneInterface(ObjectModelInterface source, boolean cloneDocumentation) { ObjectModelInterface outputInterface = createInterface(source.getName(), source.getPackageName()); cloneClassifier(source, outputInterface, cloneDocumentation); // nothing more to do. copyClassifier already done the job return outputInterface; } /** * creates a clone of the given {@code source} enumeration in the output * model and clones attributes, inheritence declaration, operations and * literals into the clone * * @param source the enumeration to clone from the source model * @param cloneDocumentation flag to add documentation if some found in model * @return the clone of the given enumeration * @since 2.1.2 */ public ObjectModelEnumeration cloneEnumeration(ObjectModelEnumeration source, boolean cloneDocumentation) { ObjectModelEnumeration outputEnumeration = createEnumeration(source.getName(), source.getPackageName()); cloneClassifier(source, outputEnumeration, cloneDocumentation); for (String literal : source.getLiterals()) { addLiteral(outputEnumeration, literal); } return outputEnumeration; } /** * creates a clone of the given {@code source} classifier in the output * model and clones attributes, inheritence declaration and operations *

* class-specific, enumeration-specific and interface-specific features * of the given classifier will be present in the clone * * @param source the classifier to clone from the source model * @param cloneDocumentation flag to add documentation if some found in model * @return the clone of the given classifier * @since 2.1.2 */ public ObjectModelClassifier cloneClassifier(ObjectModelClassifier source, boolean cloneDocumentation) { ObjectModelClassifier clone = null; if (source.isInterface()) { clone = cloneInterface((ObjectModelInterface) source, cloneDocumentation); } else if (source.isClass()) { clone = cloneClass((ObjectModelClass) source, cloneDocumentation); } else if (source.isEnum()) { clone = cloneEnumeration((ObjectModelEnumeration) source, cloneDocumentation); } else { // should never occur log.error("strange classifier " + source); } return clone; } /** * Search in {@code input} model, for a enumeration dependency named * {@link JavaGeneratorUtil#DEPENDENCIES_CONSTANTS}. *

* If found, add all literals on {@code output} model as constants. *

* You can add a {@link EugeneTagValues#TAG_CONSTANT_PREFIX} to your * enumeration to prefix constant names. * * @param input the input model * @param output the ouput model * @return the set of constants names generated */ protected Set addConstantsFromDependency(ObjectModelClassifier input, ObjectModelClassifier output) { // constant attributes via 'constants' enumeration dependency // literals of enumeration will be values and constant name will be generated ObjectModelDependency constantsDependencies = input.getDependency(JavaGeneratorUtil.DEPENDENCIES_CONSTANTS); if (constantsDependencies == null) { // no dependency found return Collections.emptySet(); } ObjectModelClassifier classifier = constantsDependencies.getSupplier(); if (!(classifier instanceof ObjectModelEnumeration)) { // do not have an enumeration return Collections.emptySet(); } Set constantNames = new HashSet(); ObjectModelEnumeration constants = (ObjectModelEnumeration) classifier; // add all literal of dependency as constants in interface Collection literals = constants.getLiterals(); for (String literal : literals) { // always use builder method to obtain constant name to not use a // possible altered by transformer String constantName = getConstantName(literal); addConstant(output, constantName, String.class, "\"" + literal + "\"", ObjectModelJavaModifier.PUBLIC ); constantNames.add(constantName); } return constantNames; } public String getConstantPrefix() { return constantPrefix; } public void setConstantPrefix(String constantPrefix) { this.constantPrefix = constantPrefix; } protected String getJavaBeanMethodName(String methodPrefix, String propertyName) { return methodPrefix + JavaGeneratorUtil.capitalizeJavaBeanPropertyName(propertyName); } /** * Used to initialize constant prefix depends on model tagvalue {@link * EugeneTagValues#TAG_CONSTANT_PREFIX}. If no tagvalue found, the default * value will be an empty prefix. */ public void initConstantPrefixFromModel() { constantPrefix = getConstantPrefix(null, ""); } protected URL getFileInClassPath(String fqn) { String resourceName = fqn.replaceAll("\\.", "/") + ".java"; URL fileLocation = getClassLoader().getResource(resourceName); if (log.isDebugEnabled()) { log.debug("Look for resource : " + resourceName + " = " + fileLocation); } return fileLocation; } /** * Generates a static block with I18n keys for each navigable attributes * prefixed by the given {@code i18nPrefix}. * * @param input the input classifier * @param output the output classifier (to generate) * @param i18nPrefix the i81n prefix to use */ protected void generateI18nBlock(ObjectModelClassifier input, ObjectModelClassifier output, String i18nPrefix) { ObjectModelOperation block = addBlock(output, ObjectModelJavaModifier.STATIC); StringBuilder buffer = new StringBuilder(300); addImport(output, I18n.class); addI18n(buffer, i18nPrefix, Introspector.decapitalize(input.getName())); for (ObjectModelAttribute attr : input.getAttributes()) { //tchemit-20100225 only treate navigable relations if (attr.isNavigable()) { addI18n(buffer, i18nPrefix, Introspector.decapitalize(attr.getName()) ); } } setOperationBody(block, buffer.toString()); } protected void addI18n(StringBuilder buffer, String i18nPrefix, String suffix) { buffer.append("\n I18n.n_(\""); buffer.append(i18nPrefix); buffer.append(suffix); buffer.append("\");"); } /** * Checks if the classifier fully qualified name is in class-path and log a * message that fqn will not generated if found * * @param classifier classifier to test * @return {@code true} if fqn of classifier was found in class-path, * {@code false} otherwise. * @since 2.5 */ protected boolean isInClassPath(ObjectModelClassifier classifier) { return isInClassPath(classifier.getQualifiedName()); } /** * Checks if the given fully qualified name is in class-path and log a * message that fqn will not generated if found. * * @param fqn fully qualified name to test * @return {@code true} if fqn was found in class-path, * {@code false} otherwise. * @since 2.5 */ protected boolean isInClassPath(String fqn) { URL fileLocation = getFileInClassPath(fqn); if (fileLocation != null) { // there is already a existing file in class-path, skip if (isVerbose()) { log.info("Will not generate [" + fqn + "], already found in class-path at location : " + fileLocation); } else { log.info("Will not generate [" + fqn + "], already found in class-path."); } return true; } // is not found return false; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy