Author: tchemit Date: 2010-04-29 09:58:31 +0200 (Thu, 29 Apr 2010) New Revision: 879 Log: introduce cloneOperations method in JavaGeneratorUtil to clone operations Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-04-29 06:43:20 UTC (rev 878) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-04-29 07:58:31 UTC (rev 879) @@ -96,11 +96,8 @@ } // Add operations - for (ObjectModelOperation op : clazz.getOperations()) { + createAbstractOperations(resultClass, clazz.getOperations()); - createAbstractOperation(resultClass, op); - } - // Add property change support createPropertyChangeSupport(resultClass); @@ -237,6 +234,16 @@ } + protected void createAbstractOperations(ObjectModelClass resultClass, + Iterable<ObjectModelOperation> operations) { + JavaGeneratorUtil.cloneOperations( + this, + operations, + resultClass, + true, + ObjectModelModifier.ABSTRACT + ); + } protected List<ObjectModelAttribute> getProperties(ObjectModelClass clazz) { List<ObjectModelAttribute> attributes = (List<ObjectModelAttribute>) clazz.getAttributes(); @@ -425,26 +432,26 @@ return resultClassImpl; } - protected void createAbstractOperation(ObjectModelClass resultClass, - ObjectModelOperation op) { - String visibility = op.getVisibility(); - ObjectModelOperation operation = addOperation( - resultClass, - op.getName(), - op.getReturnType(), - ObjectModelModifier.toValue(visibility), - ObjectModelModifier.ABSTRACT - ); +// protected void createAbstractOperation(ObjectModelClass resultClass, +// ObjectModelOperation op) { +// String visibility = op.getVisibility(); +// ObjectModelOperation operation = addOperation( +// resultClass, +// op.getName(), +// op.getReturnType(), +// ObjectModelModifier.toValue(visibility), +// ObjectModelModifier.ABSTRACT +// ); +// +// for (ObjectModelParameter param : op.getParameters()) { +// addParameter(operation, param.getType(), param.getName()); +// } +// +// for (String exception : op.getExceptions()) { +// addException(operation, exception); +// } +// } - for (ObjectModelParameter param : op.getParameters()) { - addParameter(operation, param.getType(), param.getName()); - } - - for (String exception : op.getExceptions()) { - addException(operation, exception); - } - } - protected boolean canGenerate(ObjectModelClass clazz) { return clazz.hasStereotype(JavaGeneratorUtil.STEREOTYPE_BEAN); } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-04-29 06:43:20 UTC (rev 878) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-04-29 07:58:31 UTC (rev 879) @@ -25,6 +25,10 @@ package org.nuiton.eugene.java; import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelModifier; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.ObjectModelParameter; /** * Utility class for pure java templates. @@ -33,8 +37,65 @@ * @since 2.0.2 */ public class JavaGeneratorUtil extends GeneratorUtil { + + /** Stereotype for JavaBean objects. */ + public static final String STEREOTYPE_BEAN = "bean"; + /** - * Stereotype for JavaBean objects. + * Duplicates in the {@code target} classifier the given {@code operations} + * using a {@code transformer} to modify model. + * + * @param transformer the transformer to use + * @param operations operations to duplicate + * @param target where to duplicate operations + * @param useVisibility flag to use operation visibilty to compute his + * modifiers + * @param extraModifiers scopes to apply to all operations */ - public static final String STEREOTYPE_BEAN = "bean"; + public static void cloneOperations(ObjectModelTransformerToJava transformer, + Iterable<ObjectModelOperation> operations, + ObjectModelClassifier target, + boolean useVisibility, + ObjectModelModifier... extraModifiers) { + + for (ObjectModelOperation op : operations) { + ObjectModelOperation resultOp; + ObjectModelModifier[] modifiers = null; + if (useVisibility) { + + // compute visibility modifer + String visibility = op.getVisibility(); + ObjectModelModifier modifier = + ObjectModelModifier.toValue(visibility); + + int length = extraModifiers.length; + if (length == 0) { + modifiers = new ObjectModelModifier[]{modifier}; + } else { + modifiers = new ObjectModelModifier[length + 1]; + modifiers[0] = modifier; + System.arraycopy(extraModifiers, 0, modifiers, 1, length); + } + } else { + + // just use the incoming modifiers + modifiers = extraModifiers; + } + + resultOp = transformer.addOperation(target, + op.getName(), + op.getReturnType(), + modifiers + ); + for (ObjectModelParameter param : op.getParameters()) { + transformer.addParameter(resultOp, + param.getType(), + param.getName() + ); + } + for (String exception : op.getExceptions()) { + transformer.addException(resultOp, exception); + } + } + } } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-04-29 06:43:20 UTC (rev 878) +++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-04-29 07:58:31 UTC (rev 879) @@ -1,23 +1,23 @@ /* * #%L * EUGene :: EUGene - * + * * * $Id$ * $HeadURL$ * %% * 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 + * 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 + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. * #L% @@ -25,27 +25,26 @@ package org.nuiton.eugene.java; -import java.util.Iterator; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelModifier; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; +import java.util.Iterator; + /*{generator option: parentheses = false}*/ /*{generator option: writeString = +}*/ /** * JavaInterfaceTransformer generates simple interfaces for Java language. - * + * <p/> * Created: 7 nov. 2009 * * @author fdesbois <fdesbois@codelutin.com> + * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.java.JavaInterfaceTransformer" * @since 2.0.2 - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.java.JavaInterfaceTransformer" */ public class JavaInterfaceTransformer extends ObjectModelTransformerToJava { @@ -65,13 +64,13 @@ if (log.isDebugEnabled()) { log.debug("generate interface " + - resultInterface.getQualifiedName()); + resultInterface.getQualifiedName()); } // extend interface - Iterator<ObjectModelInterface> it = + Iterator<ObjectModelInterface> it = interfacez.getInterfaces().iterator(); - + if (it.hasNext()) { ObjectModelInterface extend = it.next(); addInterface(resultInterface, extend.getQualifiedName()); @@ -79,24 +78,30 @@ // constant attributes for (ObjectModelAttribute attr : interfacez.getAttributes()) { - // only static attribut with value + // only static attribut with value if (!attr.isStatic() && - StringUtils.isNotEmpty(attr.getDefaultValue())) { + StringUtils.isNotEmpty(attr.getDefaultValue())) { addConstant(resultInterface, attr.getName(), attr.getType(), - attr.getDefaultValue(), ObjectModelModifier.PUBLIC); + attr.getDefaultValue(), ObjectModelModifier.PUBLIC); } } // interface operations - for (ObjectModelOperation op : interfacez.getOperations()) { - ObjectModelOperation resultOp = addOperation(resultInterface, - op.getName(), op.getReturnType()); - for (ObjectModelParameter param : op.getParameters()) { - addParameter(resultOp, param.getType(), param.getName()); - } - for (String exception : op.getExceptions()) { - addException(resultOp, exception); - } - } + JavaGeneratorUtil.cloneOperations(this, + interfacez.getOperations(), + resultInterface, + false + ); + +// for (ObjectModelOperation op : interfacez.getOperations()) { +// ObjectModelOperation resultOp = addOperation(resultInterface, +// op.getName(), op.getReturnType()); +// for (ObjectModelParameter param : op.getParameters()) { +// addParameter(resultOp, param.getType(), param.getName()); +// } +// for (String exception : op.getExceptions()) { +// addException(resultOp, exception); +// } +// } } }
participants (1)
-
tchemit@users.nuiton.org