r2149 - trunk/topia-persistence/src/main/java/org/nuiton/topia/generator
Author: tchemit Date: 2010-11-25 10:41:54 +0100 (Thu, 25 Nov 2010) New Revision: 2149 Url: http://nuiton.org/repositories/revision/topia/2149 Log: Anomalie #1094: Service transformer does not generate well when using generics Evolution #1097: Add a new Tag noLogInService to be able to remove all tracing code in generated method of services Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java 2010-11-22 14:43:30 UTC (rev 2148) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java 2010-11-25 09:41:54 UTC (rev 2149) @@ -200,6 +200,14 @@ protected String exceptionName; + /** + * flag to not use any logger code inside service method, globally set + * for all the incoming model. + * + * @since 2.4.4 + */ + protected boolean noLog; + private static final String OP_NAME_BEGIN_TRANSACTION = "beginTransaction"; private static final String OP_NAME_CLOSE_TRANSACTION = "closeTransaction"; @@ -215,6 +223,7 @@ exceptionName = model.getTagValue(TopiaGeneratorUtil.TAG_EXCEPTION_CLASS); modelName = model.getName(); + noLog = isNoLog(null, model); } @Override @@ -225,11 +234,15 @@ // global transaction needed (if set to false then never use transaction) boolean needTransaction = isTransactionNeeded(input); + boolean noLog = this.noLog || isNoLog(input,null); ObjectModelInterface serviceContract = createServiceContract(input); - createServiceAbstract(input, serviceContract, needTransaction); + createServiceAbstract(input, + serviceContract, + needTransaction, + noLog); } /** @@ -247,15 +260,18 @@ setDocumentation(serviceContract, source.getDocumentation()); for (ObjectModelOperation op : source.getOperations()) { - ObjectModelOperation newOp = - addOperation(serviceContract, - op.getName(), op.getReturnType()); + ObjectModelOperation newOp = addOperation(serviceContract, + op.getName(), + op.getReturnType() + ); setDocumentation(newOp.getReturnParameter(), - op.getReturnParameter().getDocumentation()); + op.getReturnParameter().getDocumentation() + ); for (ObjectModelParameter param : op.getParameters()) { - ObjectModelParameter newParam = - addParameter(newOp, param.getType(), - param.getName()); + ObjectModelParameter newParam = addParameter(newOp, + param.getType(), + param.getName() + ); setDocumentation(newParam, param.getDocumentation()); } for (String ex : op.getExceptions()) { @@ -336,10 +352,12 @@ * @param source interface from model * @param serviceContract to implement * @param needTransaction flag to know if service globally use transaction + * @param noLog a flag to not add any log code in body of methods */ protected void createServiceAbstract(ObjectModelInterface source, ObjectModelInterface serviceContract, - boolean needTransaction) { + boolean needTransaction, + boolean noLog) { ObjectModelClass serviceAbstract = createAbstractClass( getServiceAbstractClassName(serviceContract.getName()), @@ -350,23 +368,26 @@ addImport(serviceAbstract, TopiaContext.class); } addImport(serviceAbstract, I18n.class); - addImport(serviceAbstract, ArrayList.class); - addImport(serviceAbstract, DurationFormatUtils.class); +// addImport(serviceAbstract, ArrayList.class); + if (!noLog) { + addImport(serviceAbstract, DurationFormatUtils.class); + + // Add Logger attribute + addAttribute(serviceAbstract, "log", + Log.class, + "LogFactory.getLog(" + source.getName() + ".class)", + ObjectModelModifier.PRIVATE, + ObjectModelModifier.STATIC, + ObjectModelModifier.FINAL); + + addImport(serviceAbstract, Log.class); + addImport(serviceAbstract, LogFactory.class); + } + // Implements contract interface addInterface(serviceAbstract, serviceContract.getQualifiedName()); - // Add Logger attribute - addAttribute(serviceAbstract, "log", - Log.class, - "LogFactory.getLog(" + source.getName() + ".class)", - ObjectModelModifier.PRIVATE, - ObjectModelModifier.STATIC, - ObjectModelModifier.FINAL); - - addImport(serviceAbstract, Log.class); - addImport(serviceAbstract, LogFactory.class); - // Create abstract methods if (needTransaction) { @@ -413,7 +434,8 @@ executeOperation, operation, source.getName(), - needTransaction + needTransaction, + noLog ); } } @@ -479,6 +501,7 @@ * @param source ObjectModelOperation from model * @param serviceContractName where the signature method is defined * @param needTransaction flag to know if service globally use transaction + * @param noLog a flag to not add any log inside method * @see #isErrorArgsNeeded(ObjectModelOperation) * @see #isTransactionNeeded(ObjectModelElement) */ @@ -487,7 +510,8 @@ ObjectModelOperation abstOp, ObjectModelOperation source, String serviceContractName, - boolean needTransaction) { + boolean needTransaction, + boolean noLog) { // boolean to specify if the method need a transaction or not // Default set to true but can be override by a tagvalue on the @@ -512,12 +536,13 @@ for (ObjectModelParameter param : source.getParameters()) { String paramName = param.getName(); addParameter(implOp, param.getType(), paramName); - - // Prepare Log - toStringAppend += - "\n\t\t\t.append(\"" + separatorLog + paramName + " = \")" + - ".append(" + paramName + ")"; - separatorLog = " _ "; + if (!noLog) { + // Prepare Log + toStringAppend += + "\n\t\t\t.append(\"" + separatorLog + paramName + " = \")" + + ".append(" + paramName + ")"; + separatorLog = " _ "; + } } // Use buffer for operation body @@ -532,9 +557,11 @@ String abstReturnType = ""; String abstReturn = ""; String finalReturn = ""; - if (!abstOp.getReturnType().equals("void")) { - abstReturnType = GeneratorUtil.getSimpleName(abstOp.getReturnType()) - + " result = "; + String returnType = GeneratorUtil.getSimpleName(abstOp.getReturnType(), + true + ); + if (!returnType.equals("void")) { + abstReturnType = returnType + " result = "; abstReturn = "return result;"; finalReturn = "return " + getReturnValue(abstOp.getReturnType()) + ";"; @@ -576,7 +603,13 @@ }*/ ); } - + if (noLog) { + buffer.append("" + /*{ + <%=abstReturnType%><%=abstName%>(<%=abstParams%>); + <%=abstReturn%> + }*/); + } else { String implName = StringUtils.capitalize(implOp.getName()); String first = modelName.substring(0, 1); @@ -603,7 +636,7 @@ stopTime - startTime) + " _ Memory = " + mem + " Mo"); } <%=abstReturn%> }*/); - + } if (needTransaction) { // Finally block to close transaction buffer.append("" @@ -666,6 +699,29 @@ } /** + * boolean to specify if inside the method body we should add log informations. + * + * @param op model element where the tagvalue is set + * @param model model where to tagvalue can be also set + * @return true if no log will be generated insde body's method + * @see TopiaGeneratorUtil#TAG_NO_LOG_IN_SERVICE + */ + protected boolean isNoLog(ObjectModelElement op, ObjectModel model) { + boolean noLog = false; + + String tagValue = GeneratorUtil.findTagValue( + TopiaGeneratorUtil.TAG_NO_LOG_IN_SERVICE, + op, + model + ); + + if (tagValue != null) { + noLog = Boolean.parseBoolean(tagValue); + } + return noLog; + } + + /** * boolean to specify if the method need error arguments or not * Default set to false but can be override using a tagvalue "errorArgs" on * the method from model. Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2010-11-22 14:43:30 UTC (rev 2148) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2010-11-25 09:41:54 UTC (rev 2149) @@ -257,6 +257,13 @@ * Tag pour spécifier le type d'une propriété dans le mapping hibernate */ public static final String TAG_TYPE= "type"; + /** + * Tag to specify if we want to add logs in any method of service generated by {@link ServiceTransformer}. + * + * <b>Note:</b> To have no log just use this tag on services or gloabally on model (for all services). + * @since 2.4.4 + */ + public static final String TAG_NO_LOG_IN_SERVICE = "noLogInService"; /** * Type de persistence Hibernate */
participants (1)
-
tchemit@users.nuiton.org