r255 - branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator
Author: bleny Date: 2010-08-12 19:28:30 +0200 (Thu, 12 Aug 2010) New Revision: 255 Url: http://nuiton.org/repositories/revision/wikitty/255 Log: introducing purifier transformer, moving stuff to Util Added: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java Removed: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyGeneratorUtil.java branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaGenerator.java Modified: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java Modified: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2010-08-12 17:09:58 UTC (rev 254) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyAbstractGenerator.java 2010-08-12 17:28:30 UTC (rev 255) @@ -7,27 +7,38 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.Transformer; import org.nuiton.eugene.java.ObjectModelTransformerToJava; +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.ObjectModelModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; +/*{generator option: writeString = }*/ +/*{generator option: parentheses = false}*/ +/*{generator option: writeString = +}*/ + /** * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyAbstractGenerator" */ public class WikittyAbstractGenerator extends ObjectModelTransformerToJava { private static final Log log = LogFactory.getLog(WikittyAbstractGenerator.class); + + @Override + protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() { + return new WikittyPurifierTransformer(); + } @Override public void transformFromClass(ObjectModelClass clazz) { ObjectModelClass abstractClass = createAbstractClass(clazz.getName() + "Abstract", clazz.getPackageName()); // TODO 20100811 bleny remove unused imports - addImport(abstractClass, WikittyGeneratorUtil.BUSINESS_ENTITY_CLASS_FQN); - addImport(abstractClass, WikittyGeneratorUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); - addImport(abstractClass, WikittyGeneratorUtil.WIKITTY_CLASS_FQN); + addImport(abstractClass, WikittyTransformerUtil.BUSINESS_ENTITY_CLASS_FQN); + addImport(abstractClass, WikittyTransformerUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); + addImport(abstractClass, WikittyTransformerUtil.WIKITTY_CLASS_FQN); addImport(abstractClass, "org.nuiton.wikitty.WikittyExtension"); addImport(abstractClass, "org.nuiton.wikitty.WikittyUtil"); addImport(abstractClass, "org.nuiton.wikitty.WikittyUser"); @@ -73,14 +84,14 @@ }*/); constructor = addConstructor(abstractClass, ObjectModelModifier.PUBLIC); - addParameter(constructor, WikittyGeneratorUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(constructor, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); setOperationBody(constructor, "" /*{ super(wikitty); }*/); constructor = addConstructor(abstractClass, ObjectModelModifier.PUBLIC); - addParameter(constructor, WikittyGeneratorUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN, "businessEntityWikitty"); + addParameter(constructor, WikittyTransformerUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN, "businessEntityWikitty"); setOperationBody(constructor, "" /*{ super(businessEntityWikitty.getWikitty()); @@ -103,20 +114,20 @@ //// preparing static equals(w1, w2) ObjectModelOperation equals = addOperation(abstractClass, "equals", "boolean", ObjectModelModifier.STATIC); - addParameter(equals, WikittyGeneratorUtil.WIKITTY_CLASS_FQN, "w1"); - addParameter(equals, WikittyGeneratorUtil.WIKITTY_CLASS_FQN, "w2"); + addParameter(equals, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "w1"); + addParameter(equals, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "w2"); // the body of the equals method, will be assembled while reading attributes String equalsBody = "" /*{ boolean result = true; }*/; - String extensionVariableName = WikittyGeneratorUtil.classToExtensionVariableName(clazz); + String extensionVariableName = WikittyTransformerUtil.classToExtensionVariableName(clazz); for(ObjectModelAttribute attribute : clazz.getAttributes()) { if (attribute.isNavigable()) { // two variables needed below // String fieldVariableName = "FIELD_" + clazz.getName().toUpperCase() + "_" + attribute.getName().toUpperCase(); - String fieldVariableName = WikittyGeneratorUtil.attributeToFielVariableName(attribute); + String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute); // considering field in equals body equalsBody += "" @@ -151,7 +162,7 @@ for(ObjectModelAttribute attribute : clazz.getAttributes()) { if (attribute.isNavigable()) { // now add the attribute to the piece of code that build the extension - String wikittyType = WikittyGeneratorUtil.typeToWikittyColumn(attribute.getType()); + String wikittyType = WikittyTransformerUtil.typeToWikittyColumn(attribute.getType()); String multiplicity = ""; if (attribute.getMinMultiplicity() != 1 || attribute.getMaxMultiplicity() != 1) { @@ -187,7 +198,7 @@ String requires = null; for (ObjectModelClass superClass : superClasses) { // using "for" but there will be 0 or 1 iteration - requires = superClass.getName() + "." + WikittyGeneratorUtil.classToExtensionVariableName(superClass); + requires = superClass.getName() + "." + WikittyTransformerUtil.classToExtensionVariableName(superClass); } String staticInitializationBody = "" Modified: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2010-08-12 17:09:58 UTC (rev 254) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyContractGenerator.java 2010-08-12 17:28:30 UTC (rev 255) @@ -4,30 +4,41 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.Transformer; import org.nuiton.eugene.java.ObjectModelTransformerToJava; +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.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelModifier; +/*{generator option: writeString = }*/ +/*{generator option: parentheses = false}*/ +/*{generator option: writeString = +}*/ + /** * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyContractGenerator" */ public class WikittyContractGenerator extends ObjectModelTransformerToJava { private static final Log log = LogFactory.getLog(WikittyContractGenerator.class); - + @Override + protected Transformer<ObjectModel, ObjectModel> initPreviousTransformer() { + return new WikittyPurifierTransformer(); + } + + @Override public void transformFromClass(ObjectModelClass clazz) { ObjectModelInterface contract = createInterface(clazz.getName(), clazz.getPackageName()); - addInterface(contract, WikittyGeneratorUtil.BUSINESS_ENTITY_CLASS_FQN); + addInterface(contract, WikittyTransformerUtil.BUSINESS_ENTITY_CLASS_FQN); // TODO 20100811 bleny remove unused imports - addImport(contract, WikittyGeneratorUtil.BUSINESS_ENTITY_CLASS_FQN); - addImport(contract, WikittyGeneratorUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); - addImport(contract, WikittyGeneratorUtil.WIKITTY_CLASS_FQN); + addImport(contract, WikittyTransformerUtil.BUSINESS_ENTITY_CLASS_FQN); + addImport(contract, WikittyTransformerUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); + addImport(contract, WikittyTransformerUtil.WIKITTY_CLASS_FQN); addImport(contract, "org.nuiton.wikitty.WikittyExtension"); addImport(contract, "org.nuiton.wikitty.WikittyUtil"); addImport(contract, "org.nuiton.wikitty.WikittyUser"); @@ -58,12 +69,12 @@ "\"" + clazz.getName() + "\"", ObjectModelModifier.PUBLIC); - String extensionVariableName = WikittyGeneratorUtil.classToExtensionVariableName(clazz); + String extensionVariableName = WikittyTransformerUtil.classToExtensionVariableName(clazz); for(ObjectModelAttribute attribute : clazz.getAttributes()) { if (attribute.isNavigable()) { // two variables needed below - String fieldVariableName = WikittyGeneratorUtil.attributeToFielVariableName(attribute); + String fieldVariableName = WikittyTransformerUtil.attributeToFielVariableName(attribute); // adding constants to contract addConstant(contract, @@ -80,5 +91,4 @@ } } } - } Deleted: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyGeneratorUtil.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyGeneratorUtil.java 2010-08-12 17:09:58 UTC (rev 254) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyGeneratorUtil.java 2010-08-12 17:28:30 UTC (rev 255) @@ -1,96 +0,0 @@ -package org.nuiton.wikitty.generator; - -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; - - -public class WikittyGeneratorUtil { - - /** utility class should not be instanciated */ - private WikittyGeneratorUtil() {} - - protected static final String BUSINESS_ENTITY_CLASS_FQN = "org.nuiton.wikitty.BusinessEntity"; - protected static final String BUSINESS_ENTITY_WIKITTY_CLASS_FQN = "org.nuiton.wikitty.BusinessEntityWikitty"; - protected static final String WIKITTY_CLASS_FQN = "org.nuiton.wikitty.Wikitty"; - - /** given a class called Client will return "EXT_CLIENT" - * should be used as a variable name to store the extension name - */ - protected static String classToExtensionVariableName(ObjectModelClass clazz) { - String extensionVariableName = "EXT_" + clazz.getName().toUpperCase(); - return extensionVariableName; - } - - /** given the field name of the class client, will return FIELD_CLIENT_NAME */ - protected static String attributeToFielVariableName(ObjectModelAttribute attribute) { - String fieldVariableName = "FIELD_" + attribute.getDeclaringElement().getName().toUpperCase() + "_" + attribute.getName().toUpperCase(); - return fieldVariableName; - } - - /** given "my.java.package.MyClass" or "MyClass" return "MyClass" */ - protected static String FQNtoSimpleName(String fqn) { - int lastDotIndex = fqn.lastIndexOf("."); - String simpleName = fqn; - if (lastDotIndex != -1) { - simpleName = fqn.substring(lastDotIndex + 1); - } - return simpleName; - } - - /** - * wikitty interface provide getFieldAsString, getFieldAsDate etc. methods - * this method returns the good name of the method to call depending the - * type given as parameter - * @param typeName a name of a business entity or "String", "Integer" etc. - * @return the name of a method "getFieldAsInt" for example - */ - protected static String generateGetFieldAsCall(String typeName) { - String asWhat = FQNtoSimpleName(typeName); - if ("boolean".equals(asWhat)) { - asWhat = "Boolean"; - } else if ("int".equals(asWhat) || "Integer".equals(asWhat)) { - asWhat = "Int"; - } else if ("Date".equals(asWhat)) { - // asWhat = "Date"; - } else { - asWhat = "String"; - } - return "getFieldAs" + asWhat; - } - - - protected static String generateResultType(String typeName) { - String asWhat = FQNtoSimpleName(typeName); - if ("boolean".equals(asWhat)) { - // asWhat = "boolean"; - } else if ("int".equals(asWhat) || "Integer".equals(asWhat)) { - // asWhat = "Int"; - } else if ("Date".equals(asWhat)) { - // asWhat = "Date"; - } else { - asWhat = "String"; - } - return asWhat; - } - - protected static String typeToWikittyColumn(String type) { - String simpleType = FQNtoSimpleName(type); - String result = null; - if ("Date".equals(simpleType)) { - result = "Date"; - } else if ("String".equals(simpleType)) { - result = "String"; - } else if ("boolean".equals(simpleType)) { - result = "boolean"; - } else if ("int".equals(simpleType) || - "Integer".equals(simpleType)) { - result = "Numeric"; - } else { - result = "Wikitty"; - } - return result; - } - - - -} Modified: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2010-08-12 17:09:58 UTC (rev 254) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyHelperGenerator.java 2010-08-12 17:28:30 UTC (rev 255) @@ -5,6 +5,10 @@ import org.nuiton.eugene.models.object.ObjectModelModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; +/*{generator option: writeString = }*/ +/*{generator option: parentheses = false}*/ +/*{generator option: writeString = +}*/ + /** * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyHelperGenerator" */ @@ -16,9 +20,9 @@ ObjectModelClass helper = createClass(clazz.getName() + "Helper", clazz.getPackageName()); // TODO 20100811 bleny remove unused imports - addImport(helper, WikittyGeneratorUtil.BUSINESS_ENTITY_CLASS_FQN); - addImport(helper, WikittyGeneratorUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); - addImport(helper, WikittyGeneratorUtil.WIKITTY_CLASS_FQN); + addImport(helper, WikittyTransformerUtil.BUSINESS_ENTITY_CLASS_FQN); + addImport(helper, WikittyTransformerUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); + addImport(helper, WikittyTransformerUtil.WIKITTY_CLASS_FQN); addImport(helper, "org.nuiton.wikitty.WikittyExtension"); addImport(helper, "org.nuiton.wikitty.WikittyUtil"); addImport(helper, "org.nuiton.wikitty.WikittyUser"); Modified: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java 2010-08-12 17:09:58 UTC (rev 254) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyImplementationGenerator.java 2010-08-12 17:28:30 UTC (rev 255) @@ -7,6 +7,10 @@ import org.nuiton.eugene.models.object.ObjectModelModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; +/*{generator option: writeString = }*/ +/*{generator option: parentheses = false}*/ +/*{generator option: writeString = +}*/ + /** * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyImplementationGenerator" */ @@ -17,9 +21,9 @@ ObjectModelClass implementation = createClass(clazz.getName() + "Impl", clazz.getPackageName()); // TODO 20100811 bleny remove unused imports - addImport(implementation, WikittyGeneratorUtil.BUSINESS_ENTITY_CLASS_FQN); - addImport(implementation, WikittyGeneratorUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); - addImport(implementation, WikittyGeneratorUtil.WIKITTY_CLASS_FQN); + addImport(implementation, WikittyTransformerUtil.BUSINESS_ENTITY_CLASS_FQN); + addImport(implementation, WikittyTransformerUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN); + addImport(implementation, WikittyTransformerUtil.WIKITTY_CLASS_FQN); addImport(implementation, "org.nuiton.wikitty.WikittyExtension"); addImport(implementation, "org.nuiton.wikitty.WikittyUtil"); addImport(implementation, "org.nuiton.wikitty.WikittyUser"); @@ -45,14 +49,14 @@ }*/); constructor = addConstructor(implementation, ObjectModelModifier.PUBLIC); - addParameter(constructor, WikittyGeneratorUtil.WIKITTY_CLASS_FQN, "wikitty"); + addParameter(constructor, WikittyTransformerUtil.WIKITTY_CLASS_FQN, "wikitty"); setOperationBody(constructor, "" /*{ super(wikitty); }*/); constructor = addConstructor(implementation, ObjectModelModifier.PUBLIC); - addParameter(constructor, WikittyGeneratorUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN, "businessEntityWikitty"); + addParameter(constructor, WikittyTransformerUtil.BUSINESS_ENTITY_WIKITTY_CLASS_FQN, "businessEntityWikitty"); setOperationBody(constructor, "" /*{ super(businessEntityWikitty.getWikitty()); Deleted: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaGenerator.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaGenerator.java 2010-08-12 17:09:58 UTC (rev 254) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaGenerator.java 2010-08-12 17:28:30 UTC (rev 255) @@ -1,253 +0,0 @@ -package org.nuiton.wikitty.generator; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Random; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.AbstractMetaTransformer; -import org.nuiton.eugene.TemplateConfiguration; -import org.nuiton.eugene.Transformer; -import org.nuiton.eugene.java.ObjectModelTransformerToJava; -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.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelModifier; -import org.nuiton.eugene.models.object.ObjectModelOperation; - -/** - * - * @author bleny - * - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyMetaGenerator" - */ - -// TODO 20100610 use filter with /*[]*/ -/*{generator option: writeString = }*/ -/*{generator option: parentheses = false}*/ -/*{generator option: writeString = +}*/ - -public class WikittyMetaGenerator extends AbstractMetaTransformer<ObjectModel> { - - private static final Log log = LogFactory.getLog(WikittyMetaGenerator.class); - - - /** @deprecated name change : see ticket #798. use BUSINESS_ENTITY_STEREOTYPE_NAME */ - @Deprecated - protected static final String BUSINESS_ENTITY_STEREOTYPE_OLD_NAME = "BusinessEntity"; - - protected static final String BUSINESS_ENTITY_STEREOTYPE_NAME = "entity"; - - public WikittyMetaGenerator() { - super(WikittyContractGenerator.class, - WikittyAbstractGenerator.class, - WikittyImplementationGenerator.class, - WikittyHelperGenerator.class); - } - - @Override - protected boolean validateModel(ObjectModel model) { - - if (model.getClasses().isEmpty()) { - log.warn("model doesn't contains any class"); - } - - for (ObjectModelClass clazz : model.getClasses()) { - if (clazz.getSuperclasses().size() > 1) { - log.error("multiple inheritance for class " + clazz.getName()); - return false; - } - - if (clazz.getStereotypes().contains(BUSINESS_ENTITY_STEREOTYPE_OLD_NAME)) { - log.warn(clazz.getQualifiedName() + " uses deprecated \"" + BUSINESS_ENTITY_STEREOTYPE_OLD_NAME - +"\" stereotype. use \"" + BUSINESS_ENTITY_STEREOTYPE_NAME + "\" instead"); - } - } - - return true; - } - -// will be moved soon -// protected void processAttribute(ObjectModelAttribute attribute) { -// // two variables needed below -// String extensionVariableName = WikittyGeneratorUtil.classToExtensionVariableName(clazz); -// String fieldVariableName = WikittyGeneratorUtil.attributeToFielVariableName(attribute); -// -// -// -// // let's find a name for the getter -// String getterName = getMethodName("get", contract, attribute, attribute.getTagValue("getter")); -// -// // let's find a name for the setter -// String setterName = getMethodName("set", contract, attribute, attribute.getTagValue("setter")); -// -// // attribute type simple name as it should be in signature -// String attributeTypeSimpleName = WikittyGeneratorUtil.FQNtoSimpleName(attribute.getType()); -// if ("boolean".equals(attributeTypeSimpleName)) { -// attributeTypeSimpleName = "Boolean"; -// } else if ("int".equals(attributeTypeSimpleName)) { -// attributeTypeSimpleName = "Integer"; -// } -// -// if (attribute.getMaxMultiplicity() > 1 || attribute.getMaxMultiplicity() == -1) { -// // attributed is a collection, we will generate operations get, add, remove and clear -// String attributeTypeSimpleNameInSet = "Set<" + attributeTypeSimpleName + ">"; -// -// // now, for this attribute, we will generate add, remove and clear methods -// -// // adding operations to contract -// ObjectModelOperation getter = addOperation(contract, getterName, attributeTypeSimpleNameInSet); -// -// String addName = getMethodName("add", contract, attribute, attribute.getTagValue("adder")); -// ObjectModelOperation adder = addOperation(contract, addName, "void"); -// addParameter(adder, "String", "element"); -// -// String removeName = getMethodName("remove", contract, attribute, attribute.getTagValue("remover")); -// ObjectModelOperation remover = addOperation(contract, removeName, "void"); -// addParameter(remover, "String", "element"); -// -// String clearName = getMethodName("clear", contract, attribute, attribute.getTagValue("clear")); -// ObjectModelOperation clear = addOperation(contract, clearName, "void"); -// -// // adding operations to abstract with bodies -// getter = cloneOperationSignature(getter, abstractClass, true, ObjectModelModifier.PUBLIC); -// String getterBody = "" -///*{ -// <%= attributeTypeSimpleNameInSet %> result = getWikitty().getFieldAsSet(<%= extensionVariableName %>, <%= fieldVariableName %>, <%= attributeTypeSimpleName %>.class); -// return result; -//}*/; -// setOperationBody(getter, getterBody); -// -// adder = cloneOperationSignature(adder, abstractClass, true, ObjectModelModifier.PUBLIC); -// String adderBody = "" -///*{ -// getWikitty().addToField(<%=extensionVariableName%>, <%=fieldVariableName%>, element); -// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%= getter.getName() %>()); -//}*/; -// setOperationBody(adder, adderBody); -// -// remover = cloneOperationSignature(remover, abstractClass, true, ObjectModelModifier.PUBLIC); -// String removerBody = "" -///*{ -// getWikitty().removeFromField(<%=extensionVariableName%>, <%=fieldVariableName%>, element); -// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%=getter.getName()%>()); -//}*/; -// setOperationBody(remover, removerBody); -// -// clear = cloneOperationSignature(clear, abstractClass, true, ObjectModelModifier.PUBLIC); -// String clearBody = "" -///*{ -// getWikitty().clearField(<%=extensionVariableName%>, <%=fieldVariableName%>); -// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%=getter.getName()%>()); -//}*/; -// setOperationBody(clear, clearBody); -// -// // adding operations to Helper with bodies -// getter = addOperation(helper, getterName, attributeTypeSimpleNameInSet, ObjectModelModifier.STATIC); -// addParameter(getter, WIKITTY_CLASS_FQN, "wikitty"); -// setOperationBody(getter, "" -///*{ -// <%=attributeTypeSimpleNameInSet%> result = wikitty.getFieldAsSet(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeTypeSimpleName%>.class); -// return result; -//}*/); -// -// adder = addOperation(helper, addName, "void", ObjectModelModifier.STATIC); -// addParameter(adder, WIKITTY_CLASS_FQN, "wikitty"); -// addParameter(adder, attributeTypeSimpleName, "element"); -// setOperationBody(adder, "" -///*{ -// wikitty.addToField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>, element); -//}*/ -//); -// -// remover = addOperation(helper, removeName, "void", ObjectModelModifier.STATIC); -// addParameter(remover, WIKITTY_CLASS_FQN, "wikitty"); -// addParameter(remover, attributeTypeSimpleName, "element"); -// setOperationBody(remover, "" -///*{ -// wikitty.removeFromField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>, element); -//}*/); -// -// clear = addOperation(helper, clearName, "void", ObjectModelModifier.STATIC); -// addParameter(clear, WIKITTY_CLASS_FQN, "wikitty"); -// setOperationBody(clear, "" -///*{ -// wikitty.clearField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>); -//}*/); -// -// } else { -// // attribute is not a collection, we generate a getter and a setter -// String getFieldMethodName = WikittyGeneratorUtil.generateGetFieldAsCall(attribute.getType()); -// String resultType = WikittyGeneratorUtil.generateResultType(attribute.getType()); -// attributeTypeSimpleName = resultType; -// -// // adding getter and setter to contract -// ObjectModelOperation getter = addOperation(contract, getterName, attributeTypeSimpleName); -// ObjectModelOperation setter = addOperation(contract, setterName, "void"); -// addParameter(setter, attributeTypeSimpleName, attribute.getName()); -// -// // adding getter and setter to abstract with bodies -// getter = cloneOperationSignature(getter, abstractClass, true, ObjectModelModifier.PUBLIC); -// setOperationBody(getter, "" -///*{ -// <%=resultType%> result = getWikitty().<%=getFieldMethodName%>(<%=extensionVariableName%>, <%=fieldVariableName%>); -// return result; -//}*/); -// -// setter = cloneOperationSignature(setter, abstractClass, true, ObjectModelModifier.PUBLIC); -// setOperationBody(setter, "" -///*{ -// Object oldValue = getField(<%=extensionVariableName%>, <%=fieldVariableName%>); -// getWikitty().setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attribute.getName()%>); -// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=attribute.getName()%>); -//}*/); -// -// // adding getter and setter to Helper with bodies -// getter = addOperation(helper, getterName, attributeTypeSimpleName, ObjectModelModifier.STATIC); -// addParameter(getter, WIKITTY_CLASS_FQN, "wikitty"); -// setOperationBody(getter, "" -///*{ -// <%=resultType%> result = wikitty.<%=getFieldMethodName%>(<%=extensionVariableName%>, <%=fieldVariableName%>); -// return result; -//}*/); -// -// setter = addOperation(helper, setterName, "void", ObjectModelModifier.STATIC); -// addParameter(setter, WIKITTY_CLASS_FQN, "wikitty"); -// addParameter(setter, attributeTypeSimpleName, attribute.getName()); -// setOperationBody(setter, "" -///*{ -// wikitty.setField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>, <%=attribute.getName()%>); -//}*/); -// } -// } - - /** getMethodName("add", contract, attribute, "myNameForThisAdder") - * will return "myNameForThisAdder" if not already defined in contract ; - * if already defined, will try add<attributeName>. If it already exists - * will return add<attributeName>From<ExtensionName> */ - protected String getMethodName(String operatorName, - ObjectModelClassifier classifier, - ObjectModelAttribute attribute, - String claimedValue) { - String methodName = claimedValue; - if (methodName != null) { - if (! classifier.getOperations(methodName).isEmpty()) { - log.warn(methodName + " operation already exists in " + attribute.getDeclaringElement().getName() + " ignoring tagValue"); - methodName = null; - } - } - - if (methodName == null) { - methodName = operatorName + StringUtils.capitalize(attribute.getName()); - if (! classifier.getOperations(methodName).isEmpty()) { - methodName += "From" + attribute.getDeclaringElement().getName(); - } - } - return methodName; - } -} Copied: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java (from rev 248, branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaGenerator.java) =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java (rev 0) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyMetaTransformer.java 2010-08-12 17:28:30 UTC (rev 255) @@ -0,0 +1,270 @@ +package org.nuiton.wikitty.generator; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Random; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.AbstractMetaTransformer; +import org.nuiton.eugene.TemplateConfiguration; +import org.nuiton.eugene.Transformer; +import org.nuiton.eugene.java.ObjectModelTransformerToJava; +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.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelModifier; +import org.nuiton.eugene.models.object.ObjectModelOperation; + +/** + * + * Wikitty generation steps : + * <ol> + * <li>transform user model to wikitty intermediate model</li> + * <li>generate from wikitty intermediate model : + * <ul> + * <li>a contract;</li> + * <li>an abstract class;</li> + * <li>an implementation;</li> + * <li>a helper</li> + * </ul> + * </li> + * </ol> + * + * @author bleny + * + * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.wikitty.generator.WikittyMetaGenerator" + */ + +// TODO 20100610 use filter with /*[]*/ +/*{generator option: writeString = }*/ +/*{generator option: parentheses = false}*/ +/*{generator option: writeString = +}*/ + +public class WikittyMetaTransformer extends AbstractMetaTransformer<ObjectModel> { + + private static final Log log = LogFactory.getLog(WikittyMetaTransformer.class); + + + + public WikittyMetaTransformer() { + super(WikittyContractGenerator.class, + WikittyAbstractGenerator.class, + WikittyImplementationGenerator.class, + WikittyHelperGenerator.class); + } + + /** */ + @Override + protected boolean validateModel(ObjectModel model) { + + if (model.getClasses().isEmpty()) { + log.warn("model doesn't contains any class"); + } + + for (ObjectModelClass clazz : model.getClasses()) { + if (clazz.getSuperclasses().size() > 1) { + log.error("multiple inheritance for class " + clazz.getName()); + return false; + } + + if (clazz.getStereotypes().contains(WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_OLD_NAME)) { + log.warn(clazz.getQualifiedName() + " uses deprecated \"" + + WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_OLD_NAME + + "\" stereotype. use \"" + + WikittyTransformerUtil.BUSINESS_ENTITY_STEREOTYPE_NAME + + "\" instead"); + } + + if (!clazz.hasTagValue(WikittyTransformerUtil.TAG_VERSION)) { + log.warn(clazz.getQualifiedName() + " misses a \"" + + WikittyTransformerUtil.TAG_VERSION + "\" tagValue"); + } + } + + return true; + } + +// will be moved soon +// protected void processAttribute(ObjectModelAttribute attribute) { +// // two variables needed below +// String extensionVariableName = WikittyGeneratorUtil.classToExtensionVariableName(clazz); +// String fieldVariableName = WikittyGeneratorUtil.attributeToFielVariableName(attribute); +// +// +// +// // let's find a name for the getter +// String getterName = getMethodName("get", contract, attribute, attribute.getTagValue("getter")); +// +// // let's find a name for the setter +// String setterName = getMethodName("set", contract, attribute, attribute.getTagValue("setter")); +// +// // attribute type simple name as it should be in signature +// String attributeTypeSimpleName = WikittyGeneratorUtil.FQNtoSimpleName(attribute.getType()); +// if ("boolean".equals(attributeTypeSimpleName)) { +// attributeTypeSimpleName = "Boolean"; +// } else if ("int".equals(attributeTypeSimpleName)) { +// attributeTypeSimpleName = "Integer"; +// } +// +// if (attribute.getMaxMultiplicity() > 1 || attribute.getMaxMultiplicity() == -1) { +// // attributed is a collection, we will generate operations get, add, remove and clear +// String attributeTypeSimpleNameInSet = "Set<" + attributeTypeSimpleName + ">"; +// +// // now, for this attribute, we will generate add, remove and clear methods +// +// // adding operations to contract +// ObjectModelOperation getter = addOperation(contract, getterName, attributeTypeSimpleNameInSet); +// +// String addName = getMethodName("add", contract, attribute, attribute.getTagValue("adder")); +// ObjectModelOperation adder = addOperation(contract, addName, "void"); +// addParameter(adder, "String", "element"); +// +// String removeName = getMethodName("remove", contract, attribute, attribute.getTagValue("remover")); +// ObjectModelOperation remover = addOperation(contract, removeName, "void"); +// addParameter(remover, "String", "element"); +// +// String clearName = getMethodName("clear", contract, attribute, attribute.getTagValue("clear")); +// ObjectModelOperation clear = addOperation(contract, clearName, "void"); +// +// // adding operations to abstract with bodies +// getter = cloneOperationSignature(getter, abstractClass, true, ObjectModelModifier.PUBLIC); +// String getterBody = "" +///*{ +// <%= attributeTypeSimpleNameInSet %> result = getWikitty().getFieldAsSet(<%= extensionVariableName %>, <%= fieldVariableName %>, <%= attributeTypeSimpleName %>.class); +// return result; +//}*/; +// setOperationBody(getter, getterBody); +// +// adder = cloneOperationSignature(adder, abstractClass, true, ObjectModelModifier.PUBLIC); +// String adderBody = "" +///*{ +// getWikitty().addToField(<%=extensionVariableName%>, <%=fieldVariableName%>, element); +// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%= getter.getName() %>()); +//}*/; +// setOperationBody(adder, adderBody); +// +// remover = cloneOperationSignature(remover, abstractClass, true, ObjectModelModifier.PUBLIC); +// String removerBody = "" +///*{ +// getWikitty().removeFromField(<%=extensionVariableName%>, <%=fieldVariableName%>, element); +// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%=getter.getName()%>()); +//}*/; +// setOperationBody(remover, removerBody); +// +// clear = cloneOperationSignature(clear, abstractClass, true, ObjectModelModifier.PUBLIC); +// String clearBody = "" +///*{ +// getWikitty().clearField(<%=extensionVariableName%>, <%=fieldVariableName%>); +// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, null, <%=getter.getName()%>()); +//}*/; +// setOperationBody(clear, clearBody); +// +// // adding operations to Helper with bodies +// getter = addOperation(helper, getterName, attributeTypeSimpleNameInSet, ObjectModelModifier.STATIC); +// addParameter(getter, WIKITTY_CLASS_FQN, "wikitty"); +// setOperationBody(getter, "" +///*{ +// <%=attributeTypeSimpleNameInSet%> result = wikitty.getFieldAsSet(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attributeTypeSimpleName%>.class); +// return result; +//}*/); +// +// adder = addOperation(helper, addName, "void", ObjectModelModifier.STATIC); +// addParameter(adder, WIKITTY_CLASS_FQN, "wikitty"); +// addParameter(adder, attributeTypeSimpleName, "element"); +// setOperationBody(adder, "" +///*{ +// wikitty.addToField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>, element); +//}*/ +//); +// +// remover = addOperation(helper, removeName, "void", ObjectModelModifier.STATIC); +// addParameter(remover, WIKITTY_CLASS_FQN, "wikitty"); +// addParameter(remover, attributeTypeSimpleName, "element"); +// setOperationBody(remover, "" +///*{ +// wikitty.removeFromField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>, element); +//}*/); +// +// clear = addOperation(helper, clearName, "void", ObjectModelModifier.STATIC); +// addParameter(clear, WIKITTY_CLASS_FQN, "wikitty"); +// setOperationBody(clear, "" +///*{ +// wikitty.clearField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>); +//}*/); +// +// } else { +// // attribute is not a collection, we generate a getter and a setter +// String getFieldMethodName = WikittyGeneratorUtil.generateGetFieldAsCall(attribute.getType()); +// String resultType = WikittyGeneratorUtil.generateResultType(attribute.getType()); +// attributeTypeSimpleName = resultType; +// +// // adding getter and setter to contract +// ObjectModelOperation getter = addOperation(contract, getterName, attributeTypeSimpleName); +// ObjectModelOperation setter = addOperation(contract, setterName, "void"); +// addParameter(setter, attributeTypeSimpleName, attribute.getName()); +// +// // adding getter and setter to abstract with bodies +// getter = cloneOperationSignature(getter, abstractClass, true, ObjectModelModifier.PUBLIC); +// setOperationBody(getter, "" +///*{ +// <%=resultType%> result = getWikitty().<%=getFieldMethodName%>(<%=extensionVariableName%>, <%=fieldVariableName%>); +// return result; +//}*/); +// +// setter = cloneOperationSignature(setter, abstractClass, true, ObjectModelModifier.PUBLIC); +// setOperationBody(setter, "" +///*{ +// Object oldValue = getField(<%=extensionVariableName%>, <%=fieldVariableName%>); +// getWikitty().setField(<%=extensionVariableName%>, <%=fieldVariableName%>, <%=attribute.getName()%>); +// getPropertyChangeSupport().firePropertyChange(<%=fieldVariableName%>, oldValue, <%=attribute.getName()%>); +//}*/); +// +// // adding getter and setter to Helper with bodies +// getter = addOperation(helper, getterName, attributeTypeSimpleName, ObjectModelModifier.STATIC); +// addParameter(getter, WIKITTY_CLASS_FQN, "wikitty"); +// setOperationBody(getter, "" +///*{ +// <%=resultType%> result = wikitty.<%=getFieldMethodName%>(<%=extensionVariableName%>, <%=fieldVariableName%>); +// return result; +//}*/); +// +// setter = addOperation(helper, setterName, "void", ObjectModelModifier.STATIC); +// addParameter(setter, WIKITTY_CLASS_FQN, "wikitty"); +// addParameter(setter, attributeTypeSimpleName, attribute.getName()); +// setOperationBody(setter, "" +///*{ +// wikitty.setField(<%=extensionVariableName%>, <%=clazz.getName()%>.<%=fieldVariableName%>, <%=attribute.getName()%>); +//}*/); +// } +// } + + /** getMethodName("add", contract, attribute, "myNameForThisAdder") + * will return "myNameForThisAdder" if not already defined in contract ; + * if already defined, will try add<attributeName>. If it already exists + * will return add<attributeName>From<ExtensionName> */ + protected String getMethodName(String operatorName, + ObjectModelClassifier classifier, + ObjectModelAttribute attribute, + String claimedValue) { + String methodName = claimedValue; + if (methodName != null) { + if (! classifier.getOperations(methodName).isEmpty()) { + log.warn(methodName + " operation already exists in " + attribute.getDeclaringElement().getName() + " ignoring tagValue"); + methodName = null; + } + } + + if (methodName == null) { + methodName = operatorName + StringUtils.capitalize(attribute.getName()); + if (! classifier.getOperations(methodName).isEmpty()) { + methodName += "From" + attribute.getDeclaringElement().getName(); + } + } + return methodName; + } +} Added: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java (rev 0) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyPurifierTransformer.java 2010-08-12 17:28:30 UTC (rev 255) @@ -0,0 +1,131 @@ +package org.nuiton.wikitty.generator; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.java.ObjectModelTransformerToJava; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; + +/** + * this transformer read the original user model and generate the intermediate + * model needed by generators. + * + * + * + */ +public class WikittyPurifierTransformer extends ObjectModelTransformerToJava { + + private static final Log log = LogFactory.getLog(WikittyPurifierTransformer.class); + + Map<ObjectModelClass, List<String>> namesUsedByClass = new HashMap<ObjectModelClass, List<String>>(); + + List<ObjectModelClass> processedClasses = new ArrayList<ObjectModelClass>(); + + /** + * for a given, class read all attributes name and try to find conflicts + * with parent classes attributes names. + * + * If a conflict is found, we try to solve the conflict by adding an + * tagValue to the conflicting attribute for others transformers + * to consider it as a new name. To choose a new name, we look for + * an alternative name provided by the user through a tagValue on this + * attribute. If no alternative provided, we try to generate an alternative + * name by adding "From<className>" to the attribute name. + */ + protected void processClass(ObjectModelClass clazz) { + if (processedClasses.contains(clazz)) { + // clazz has already been processed, do nothing + } else { + // all attributes names that will be used by clazz + List<String> allUsedNames = new ArrayList<String>(); + + + // first, we have to get all names used by the super classes and + // its superclasses. So they must have been processed before + // current class. Thus, we recursively call processClass on + // superClass. + + // process superclass first + for (ObjectModelClass superClasses : clazz.getSuperclasses()) { + if (WikittyTransformerUtil.isBusinessEntity(superClasses)) { + if (!processedClasses.contains(superClasses)) { + processClass(superClasses); + allUsedNames.addAll(namesUsedByClass.get(superClasses)); + } + } + } + + // now, allUsedNames contains all names used by superClass, we + // have to check current class attributes names for conflict. + // allUsedNames contains name that we + // can't use without generating a conflict + for (ObjectModelAttribute attribute : clazz.getAttributes()) { + if (allUsedNames.contains(attribute.getName())) { + // conflict ! + + // let's try to find an alternative name for this attribute + // as long as we has not found, alternativeName should + // remains null + String alternativeName = null; + + // first, try to use an alternative name provided by the user in the model + if (attribute.hasTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME)) { + alternativeName = attribute.getTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME); + if (allUsedNames.contains(alternativeName)) { + // using alternative name lead to a conflict + alternativeName = null; + } + } + + if (alternativeName == null) { + // it wasn't a success, try to generate an alternative name + alternativeName = attribute.getName() + "From" + clazz.getName(); + if (allUsedNames.contains(alternativeName)) { + log.error("are you joking ? do you *really* " + + "need to call an attribue" + + alternativeName + " ?"); + alternativeName = null; + } + } + + if (alternativeName == null) { + // still no alternative :-( + log.error("no way to resolve conflict with attribute" + + attribute.getName() + " from class " + clazz + + ". You should add or change a tagValue \"" + + WikittyTransformerUtil.TAG_ALTERNATIVE_NAME + + "\" on this attribute"); + } else { + // using alternative name is OK + addTagValue(WikittyTransformerUtil.TAG_ALTERNATIVE_NAME, alternativeName); + allUsedNames.add(alternativeName); + } + + } else { + // no conflict, we name consider this attribute name as taken + allUsedNames.add(attribute.getName()); + } + } + + // saving all names we used in current class will permit to sub classes + // to know what names it must not use + namesUsedByClass.put(clazz, allUsedNames); + } + } + + @Override + public void transformFromModel(ObjectModel model) { + for (ObjectModelClass clazz : model.getClasses()) { + ObjectModelClass clone = cloneClass(clazz, true); + if (WikittyTransformerUtil.isBusinessEntity(clazz)) { + processClass(clone); + } + } + } +} Copied: branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java (from rev 254, branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyGeneratorUtil.java) =================================================================== --- branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java (rev 0) +++ branches/wikitty-eugene-migration/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/WikittyTransformerUtil.java 2010-08-12 17:28:30 UTC (rev 255) @@ -0,0 +1,112 @@ +package org.nuiton.wikitty.generator; + +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; + + +public class WikittyTransformerUtil { + + /** utility class should not be instanciated */ + private WikittyTransformerUtil() {} + + protected static final String BUSINESS_ENTITY_CLASS_FQN = "org.nuiton.wikitty.BusinessEntity"; + protected static final String BUSINESS_ENTITY_WIKITTY_CLASS_FQN = "org.nuiton.wikitty.BusinessEntityWikitty"; + protected static final String WIKITTY_CLASS_FQN = "org.nuiton.wikitty.Wikitty"; + + protected static final String TAG_VERSION = "version"; + protected static final String TAG_ALTERNATIVE_NAME = "alternativeName"; + + /** @deprecated name change : see ticket #798. use BUSINESS_ENTITY_STEREOTYPE_NAME */ + @Deprecated + protected static final String BUSINESS_ENTITY_STEREOTYPE_OLD_NAME = "BusinessEntity"; + + /** user will use this stereotype in his model */ + protected static final String BUSINESS_ENTITY_STEREOTYPE_NAME = "entity"; + + /** given a class called Client will return "EXT_CLIENT" + * should be used as a variable name to store the extension name + */ + protected static String classToExtensionVariableName(ObjectModelClass clazz) { + String extensionVariableName = "EXT_" + clazz.getName().toUpperCase(); + return extensionVariableName; + } + + /** given the field name of the class client, will return FIELD_CLIENT_NAME */ + protected static String attributeToFielVariableName(ObjectModelAttribute attribute) { + String fieldVariableName = "FIELD_" + attribute.getDeclaringElement().getName().toUpperCase() + "_" + attribute.getName().toUpperCase(); + return fieldVariableName; + } + + /** given "my.java.package.MyClass" or "MyClass" return "MyClass" */ + protected static String FQNtoSimpleName(String fqn) { + int lastDotIndex = fqn.lastIndexOf("."); + String simpleName = fqn; + if (lastDotIndex != -1) { + simpleName = fqn.substring(lastDotIndex + 1); + } + return simpleName; + } + + protected static boolean isBusinessEntity(ObjectModelClass clazz) { + boolean result = clazz.hasStereotype(BUSINESS_ENTITY_STEREOTYPE_NAME) + || clazz.hasStereotype(BUSINESS_ENTITY_STEREOTYPE_OLD_NAME); + return result; + } + + /** + * wikitty interface provide getFieldAsString, getFieldAsDate etc. methods + * this method returns the good name of the method to call depending the + * type given as parameter + * @param typeName a name of a business entity or "String", "Integer" etc. + * @return the name of a method "getFieldAsInt" for example + */ + protected static String generateGetFieldAsCall(String typeName) { + String asWhat = FQNtoSimpleName(typeName); + if ("boolean".equals(asWhat)) { + asWhat = "Boolean"; + } else if ("int".equals(asWhat) || "Integer".equals(asWhat)) { + asWhat = "Int"; + } else if ("Date".equals(asWhat)) { + // asWhat = "Date"; + } else { + asWhat = "String"; + } + return "getFieldAs" + asWhat; + } + + + protected static String generateResultType(String typeName) { + String asWhat = FQNtoSimpleName(typeName); + if ("boolean".equals(asWhat)) { + // asWhat = "boolean"; + } else if ("int".equals(asWhat) || "Integer".equals(asWhat)) { + // asWhat = "Int"; + } else if ("Date".equals(asWhat)) { + // asWhat = "Date"; + } else { + asWhat = "String"; + } + return asWhat; + } + + protected static String typeToWikittyColumn(String type) { + String simpleType = FQNtoSimpleName(type); + String result = null; + if ("Date".equals(simpleType)) { + result = "Date"; + } else if ("String".equals(simpleType)) { + result = "String"; + } else if ("boolean".equals(simpleType)) { + result = "boolean"; + } else if ("int".equals(simpleType) || + "Integer".equals(simpleType)) { + result = "Numeric"; + } else { + result = "Wikitty"; + } + return result; + } + + + +}
participants (1)
-
bleny@users.nuiton.org