Eugene-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- 1738 discussions
r915 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
by tchemit@users.nuiton.org 08 Jun '10
by tchemit@users.nuiton.org 08 Jun '10
08 Jun '10
Author: tchemit
Date: 2010-06-08 17:48:48 +0200 (Tue, 08 Jun 2010)
New Revision: 915
Url: http://nuiton.org/repositories/revision/eugene/915
Log:
Evolution #669: Deprecate the copyVersionFile goal (this feature will be integrates in ToPIA migration service)
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java 2010-06-03 16:29:27 UTC (rev 914)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java 2010-06-08 15:48:48 UTC (rev 915)
@@ -44,7 +44,9 @@
*
* Last update : $Date$ By : *
* @goal copyVersionFiles
+ * @deprecated since 2.0.2, will not be replaced (ToPIA migration service does not need old mapping files any longer).
*/
+@Deprecated
public class CopyVersionFiles extends EugeneAbstractMojo { //implements FileFilter {
/**
@@ -128,8 +130,11 @@
@Override
public void doAction() throws Exception {
+
+ getLog().warn("---- Warning -----\n\n" +
+ "This goal is deprecated since version 2.0.2 and will be removed in version 2.1\n\n" +
+ "---- Warning -----");
- //TODO TC-20090820 : iterate on all inputs
File srcModelDir = copyVersionResources.getInputs()[0];
List<File> modelFiles = PluginHelper.getIncludedFiles(
1
0
Author: fdesbois
Date: 2010-06-03 18:29:27 +0200 (Thu, 03 Jun 2010)
New Revision: 914
Url: http://nuiton.org/repositories/revision/eugene/914
Log:
maybe a bug on xsl for Exception
Modified:
trunk/eugene/src/main/xsl/xmi1.2ToObjectModel.xsl
Modified: trunk/eugene/src/main/xsl/xmi1.2ToObjectModel.xsl
===================================================================
--- trunk/eugene/src/main/xsl/xmi1.2ToObjectModel.xsl 2010-06-02 10:27:33 UTC (rev 913)
+++ trunk/eugene/src/main/xsl/xmi1.2ToObjectModel.xsl 2010-06-03 16:29:27 UTC (rev 914)
@@ -8,12 +8,12 @@
xmlns:packageValidator="xalan://org.nuiton.eugene.PackageValidator"
xmlns:UML="org.omg.xmi.namespace.UML" xmlns:UML2="org.omg.xmi.namespace.UML2">
- <xsl:output method="xml"
+ <xsl:output method="xml"
encoding="UTF-8"
- indent="yes"
+ indent="yes"
xalan:indent-amount="2"/>
-
+
<!-- processing entry point. We'll process everything from that root package path. Everything else is ignored -->
<xsl:param name="fullPackagePath"/>
<xsl:param name="extraPackages"/>
@@ -31,7 +31,7 @@
<xsl:attribute name="name">
<xsl:value-of select="../@name"/>
</xsl:attribute>
-
+
<!-- ajout de l'attribut version disponible dans les taggedValue -->
<xsl:attribute name="version">
<xsl:variable name="versionTagId">
@@ -43,24 +43,24 @@
<xsl:for-each select="descendant::UML:Namespace.ownedElement/UML:Comment[not(UML:Comment.annotatedElement)]">
<xsl:call-template name="comment"/>
</xsl:for-each>
-
- <xsl:apply-templates>
+
+ <xsl:apply-templates>
<xsl:with-param name="parentLocalPackageName"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
<xsl:template match="text()|attribute"/>
-
+
<xsl:template match="*">
<xsl:param name="parentLocalPackageName"/>
- <xsl:apply-templates>
+ <xsl:apply-templates>
<xsl:with-param name="parentLocalPackageName">
<xsl:value-of select="$parentLocalPackageName"/>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>
-
+
<xsl:template match="UML:Package">
<xsl:param name="parentLocalPackageName"/>
<xsl:variable name="packageName">
@@ -78,7 +78,7 @@
<xsl:choose>
<xsl:when test="packageValidator:toContinue($fullPackagePath, $localPackageNameDot, $extraPackages)">
- <xsl:apply-templates>
+ <xsl:apply-templates>
<xsl:with-param name="parentLocalPackageName">
<xsl:value-of select="$localPackageNameDot"/>
</xsl:with-param>
@@ -113,7 +113,7 @@
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
- <xsl:apply-templates>
+ <xsl:apply-templates>
<xsl:with-param name="parentLocalPackageName">
<xsl:value-of select="$localPackageNameDot"/>
</xsl:with-param>
@@ -122,8 +122,8 @@
</xsl:choose>
</xsl:template>
-
-
+
+
<!--
.
.
@@ -131,8 +131,8 @@
.
.
-->
-
+
<xsl:template name="UMLInterface">
<xsl:param name="localPackageName"/>
<xsl:variable name="interfaceId">
@@ -179,8 +179,8 @@
</xsl:template>
-
-
+
+
<xsl:template name="UMLClass">
<xsl:param name="localPackageName"/>
<xsl:variable name="classId">
@@ -199,7 +199,7 @@
<xsl:text>true</xsl:text>
</xsl:attribute>
</xsl:if>
-
+
<xsl:call-template name="extern"/>
<xsl:attribute name="package">
@@ -259,8 +259,8 @@
</xsl:template>
-
-
+
+
<xsl:template name="UMLAssociationClass">
<xsl:param name="localPackageName"/>
<xsl:variable name="classId">
@@ -279,7 +279,7 @@
<xsl:text>true</xsl:text>
</xsl:attribute>
</xsl:if>
-
+
<xsl:call-template name="extern"/>
<xsl:attribute name="package">
@@ -329,7 +329,7 @@
</xsl:for-each>
</xsl:element>
</xsl:for-each>
-
+
<!-- class attributes -->
<xsl:for-each select="UML:Classifier.feature/UML:Attribute">
<xsl:call-template name="UMLAttribute"/>
@@ -376,7 +376,7 @@
</xsl:for-each>
</xsl:element>
</xsl:template>
-
+
<xsl:template name="UMLAbstractions">
<xsl:param name="classId"/>
<xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::UML:Abstraction[UML:Dependency.client/UML:Class/@xmi.idref=$classId]">
@@ -384,8 +384,8 @@
</xsl:for-each>
</xsl:template>
-
-
+
+
<xsl:template name="UMLAbstraction">
<xsl:variable name="idInterface">
<xsl:value-of select="UML:Dependency.supplier/UML:Interface/@xmi.idref"/>
@@ -412,8 +412,8 @@
</xsl:for-each>
</xsl:template>
-
-
+
+
<xsl:template name="UMLGeneralizations">
<xsl:param name="classId"/>
<xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$classId]">
@@ -465,7 +465,7 @@
</xsl:for-each>
</xsl:template>
-
+
<xsl:template name="UMLAssociations">
<xsl:param name="classId"/>
<xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::UML:Association.connection/UML:AssociationEnd[UML:AssociationEnd.participant/*/@xmi.idref=$classId]">
@@ -478,8 +478,8 @@
</xsl:for-each>
</xsl:template>
-
-
+
+
<xsl:template name="UMLAssociation">
<!-- BB <xsl:if test="@isNavigable='true'"> -->
<xsl:element name="attribute">
@@ -487,15 +487,15 @@
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
- </xsl:if>
+ </xsl:if>
<xsl:attribute name="visibility">
<xsl:value-of select="@visibility"/>
</xsl:attribute>
-
+
<xsl:variable name="asClassId">
<xsl:value-of select="ancestor::UML:AssociationClass/@xmi.id"/>
</xsl:variable>
-
+
<xsl:if test="$asClassId">
<xsl:for-each select="ancestor::UML:AssociationClass">
<xsl:attribute name="associationClassName">
@@ -534,7 +534,7 @@
<xsl:attribute name="reverseMaxMultiplicity">
<xsl:value-of select="$reverseMaxMultiplicity"/>
</xsl:attribute>
- </xsl:if>
+ </xsl:if>
</xsl:for-each>
<xsl:if test="UML:AssociationEnd.multiplicity">
@@ -545,7 +545,7 @@
<xsl:attribute name="minMultiplicity">
<xsl:value-of select="$minMultiplicity"/>
</xsl:attribute>
- </xsl:if>
+ </xsl:if>
<xsl:variable name="maxMultiplicity">
<xsl:value-of select="UML:AssociationEnd.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@upper"/>
</xsl:variable>
@@ -553,7 +553,7 @@
<xsl:attribute name="maxMultiplicity">
<xsl:value-of select="$maxMultiplicity"/>
</xsl:attribute>
- </xsl:if>
+ </xsl:if>
</xsl:if>
<xsl:attribute name="navigable">
@@ -567,14 +567,14 @@
<xsl:call-template name="taggedValue"/>
</xsl:for-each>
- <xsl:call-template name="stereotype"/>
+ <xsl:call-template name="stereotype"/>
</xsl:element>
<!-- BB </xsl:if> -->
</xsl:template>
-
-
+
+
<xsl:template name="UMLAttribute">
<xsl:element name="attribute">
@@ -600,7 +600,7 @@
<xsl:text>true</xsl:text>
</xsl:attribute>
</xsl:if>
-
+
<xsl:if test="@changeability='frozen'">
<xsl:attribute name="final">
<xsl:text>true</xsl:text>
@@ -612,7 +612,7 @@
<xsl:with-param name="childpath">UML:StructuralFeature.type</xsl:with-param>
</xsl:call-template>
</xsl:attribute>
-
+
<xsl:if test="UML:StructuralFeature.multiplicity">
<xsl:variable name="minMultiplicity">
<xsl:value-of select="UML:StructuralFeature.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@lower"/>
@@ -621,7 +621,7 @@
<xsl:attribute name="minMultiplicity">
<xsl:value-of select="$minMultiplicity"/>
</xsl:attribute>
- </xsl:if>
+ </xsl:if>
<xsl:variable name="maxMultiplicity">
<xsl:value-of select="UML:StructuralFeature.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@upper"/>
</xsl:variable>
@@ -629,7 +629,7 @@
<xsl:attribute name="maxMultiplicity">
<xsl:value-of select="$maxMultiplicity"/>
</xsl:attribute>
- </xsl:if>
+ </xsl:if>
</xsl:if>
<xsl:for-each select="UML:ModelElement.taggedValue/UML:TaggedValue">
@@ -639,21 +639,21 @@
<xsl:for-each select="UML:ModelElement.comment/UML:Comment">
<xsl:call-template name="UMLComment"/>
</xsl:for-each>
-
+
<!-- default value of attribute -->
<xsl:if test="UML:Attribute.initialValue">
<xsl:attribute name="defaultValue">
<xsl:value-of select="UML:Attribute.initialValue/UML:Expression/@body"/>
</xsl:attribute>
</xsl:if>
-
- <xsl:call-template name="stereotype"/>
+ <xsl:call-template name="stereotype"/>
+
</xsl:element>
</xsl:template>
-
-
+
+
<xsl:template name="UMLOperation">
<xsl:element name="operation">
<xsl:attribute name="name">
@@ -674,7 +674,7 @@
<xsl:text>true</xsl:text>
</xsl:attribute>
</xsl:if>
-
+
<xsl:for-each select="UML:ModelElement.taggedValue/UML:TaggedValue">
<xsl:call-template name="taggedValue"/>
</xsl:for-each>
@@ -686,7 +686,7 @@
<xsl:call-template name="UMLReturnParameter"/>
</xsl:when>
<xsl:otherwise>
- <xsl:call-template name="UMLParameter"/>
+ <xsl:call-template name="UMLParameter"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
@@ -694,7 +694,7 @@
<xsl:for-each select="UML:ModelElement.comment/UML:Comment">
<xsl:call-template name="UMLComment"/>
</xsl:for-each>
-
+
<!-- exceptions -->
<xsl:variable name="operationId">
<xsl:value-of select="@xmi.id"/>
@@ -702,29 +702,13 @@
<xsl:for-each select="/XMI/XMI.content/UML:A_context_raisedSignal/UML:Operation[@xmi.idref = $operationId]">
<xsl:variable name="exceptionId">
- <xsl:value-of select="concat(following::UML:Exception/@xmi.idref,following::UML:Signal/@xmi.idref)"/>
+ <xsl:value-of select="concat(following::UML:Exception/@xmi.idref,following::UML:Signal/@xmi.idref)"/>
</xsl:variable>
<xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::UML:Exception[@xmi.id = $exceptionId]">
- <xsl:element name="exceptionParameter">
- <xsl:attribute name="name">
- <xsl:value-of select="@name"/>
- </xsl:attribute>
- <xsl:attribute name="type">
- <xsl:call-template name="packagePathOfWithDot"/>
- <xsl:value-of select="parent::UML:Namespace.ownedElement/parent::UML:Class/@name"/>
- </xsl:attribute>
- </xsl:element>
+ <xsl:call-template name="exception"/>
</xsl:for-each>
<xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::UML:Signal[@xmi.id = $exceptionId]">
- <xsl:element name="exceptionParameter">
- <xsl:attribute name="name">
- <xsl:value-of select="@name"/>
- </xsl:attribute>
- <xsl:attribute name="type">
- <xsl:call-template name="packagePathOfWithDot"/>
- <xsl:value-of select="@name"/>
- </xsl:attribute>
- </xsl:element>
+ <xsl:call-template name="exception"/>
</xsl:for-each>
</xsl:for-each>
@@ -733,8 +717,18 @@
</xsl:element>
</xsl:template>
+ <xsl:template name="exception">
+ <xsl:element name="exceptionParameter">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name" />
+ </xsl:attribute>
+ <xsl:attribute name="type">
+ <xsl:call-template name="packagePathOfWithDot" />
+ <xsl:value-of select="@name" />
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:template>
-
<xsl:template name="UMLParameter">
<xsl:element name="parameter">
<xsl:attribute name="name">
@@ -783,10 +777,10 @@
<xsl:template name="comment">
<xsl:element name="comment">
- <xsl:value-of select="@body"/>
+ <xsl:value-of select="@body"/>
</xsl:element>
</xsl:template>
-
+
<xsl:template name="extern">
<xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype">
<xsl:variable name="id">
@@ -859,7 +853,7 @@
<xsl:template name="fullClassName">
<xsl:param name="childpath"/>
-
+
<xsl:if test="count(child::*[name() = $childpath]) = 1">
<xsl:choose>
<xsl:when test="child::*[name() = $childpath]/*/(a)xmi.idref">
@@ -888,7 +882,7 @@
<xsl:if test="name()!='UML:DataType'">
<xsl:for-each select="ancestor::UML:Package">
<xsl:value-of select="@name"/>
- <xsl:value-of select="string('.')"/>
+ <xsl:value-of select="string('.')"/>
</xsl:for-each>
</xsl:if>
</xsl:template>
1
0
Author: tchemit
Date: 2010-06-02 12:27:33 +0200 (Wed, 02 Jun 2010)
New Revision: 913
Url: http://nuiton.org/repositories/revision/eugene/913
Log:
Utilisation de mavenpom4redmine 2.1.5
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-06-01 13:40:17 UTC (rev 912)
+++ trunk/pom.xml 2010-06-02 10:27:33 UTC (rev 913)
@@ -33,7 +33,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.1.4</version>
+ <version>2.1.5</version>
</parent>
<artifactId>eugene</artifactId>
1
0
01 Jun '10
Author: fdesbois
Date: 2010-06-01 15:40:17 +0200 (Tue, 01 Jun 2010)
New Revision: 912
Url: http://nuiton.org/repositories/revision/eugene/912
Log:
Add serializable for generated bean
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.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-05-28 13:15:02 UTC (rev 911)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-06-01 13:40:17 UTC (rev 912)
@@ -35,6 +35,7 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -94,6 +95,8 @@
addSuperClass(input, output, ouputImpl);
+ addSerializable(output);
+
addInterfaces(input, output);
Set<String> constantNames = addConstantsFromDependency(input, output);
@@ -421,6 +424,13 @@
);
}
+ protected void addSerializable(ObjectModelClass output) {
+ addInterface(output, Serializable.class);
+ // Maybe generate the UID for each different generation ?
+ addConstant(output, "serialVersionUID", "long", "1L",
+ ObjectModelModifier.PRIVATE);
+ }
+
protected void addInterfaces(ObjectModelClass input,
ObjectModelClass output) {
// Add interfaces from inputModel
1
0
28 May '10
Author: fdesbois
Date: 2010-05-28 15:15:02 +0200 (Fri, 28 May 2010)
New Revision: 911
Url: http://nuiton.org/repositories/revision/eugene/911
Log:
change log level to INFO
Modified:
trunk/maven-eugene-plugin/src/main/resources/log4j.properties
Modified: trunk/maven-eugene-plugin/src/main/resources/log4j.properties
===================================================================
--- trunk/maven-eugene-plugin/src/main/resources/log4j.properties 2010-05-27 16:37:38 UTC (rev 910)
+++ trunk/maven-eugene-plugin/src/main/resources/log4j.properties 2010-05-28 13:15:02 UTC (rev 911)
@@ -6,4 +6,4 @@
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
# package level
log4j.logger.org.nuiton=INFO
-#log4j.logger.org.nuiton.eugene=DEBUG
+log4j.logger.org.nuiton.eugene=INFO
1
0
27 May '10
Author: fdesbois
Date: 2010-05-27 18:37:38 +0200 (Thu, 27 May 2010)
New Revision: 910
Url: http://nuiton.org/repositories/revision/eugene/910
Log:
Evo #611 : manage getter method in JavaBeanTransformer for boolean properties : add getter with 'is' prefix
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.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-05-20 11:57:15 UTC (rev 909)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-27 16:37:38 UTC (rev 910)
@@ -232,7 +232,8 @@
createGetMethod(output,
attrName,
attrNameCapitalized,
- attrType
+ attrType,
+ null
);
createSetMethod(output,
@@ -283,10 +284,16 @@
protected void createGetMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
- String attrType) {
+ String attrType,
+ String methodPrefix) {
+
+ if (methodPrefix == null) {
+ methodPrefix = JavaGeneratorUtil.OPERATION_GETTER_DEFAULT_PREFIX;
+ }
+
ObjectModelOperation getter = addOperation(
output,
- "get" + attrNameCapitalized,
+ methodPrefix + attrNameCapitalized,
attrType,
ObjectModelModifier.PUBLIC
);
@@ -295,6 +302,13 @@
return <%=attrName%>;
}*/
);
+
+ // Create also getter for boolean with 'is' prefix
+ if (attrType.toLowerCase().contains("boolean") &&
+ !methodPrefix.equals(JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX)) {
+ createGetMethod(output, attrName, attrNameCapitalized, attrType,
+ JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX);
+ }
}
protected void createGetChildMethod(ObjectModelClass output,
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-05-20 11:57:15 UTC (rev 909)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-05-27 16:37:38 UTC (rev 910)
@@ -24,12 +24,18 @@
*/
package org.nuiton.eugene.java;
+import org.apache.commons.lang.StringUtils;
import org.nuiton.eugene.GeneratorUtil;
+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.ObjectModelModifier;
import org.nuiton.eugene.models.object.ObjectModelOperation;
import org.nuiton.eugene.models.object.ObjectModelParameter;
+import java.util.Collection;
+import java.util.List;
+
/**
* Utility class for pure java templates.
*
@@ -38,6 +44,10 @@
*/
public class JavaGeneratorUtil extends GeneratorUtil {
+ public static final String OPERATION_GETTER_DEFAULT_PREFIX = "get";
+
+ public static final String OPERATION_GETTER_BOOLEAN_PREFIX = "is";
+
/** Stereotype for JavaBean objects. */
public static final String STEREOTYPE_BEAN = "bean";
1
0
r909 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer
by tchemit@users.nuiton.org 20 May '10
by tchemit@users.nuiton.org 20 May '10
20 May '10
Author: tchemit
Date: 2010-05-20 13:57:15 +0200 (Thu, 20 May 2010)
New Revision: 909
Url: http://nuiton.org/repositories/revision/eugene/909
Log:
fix exclude templates
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-17 16:52:57 UTC (rev 908)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-20 11:57:15 UTC (rev 909)
@@ -53,7 +53,7 @@
public static final String PROP_GENERATED_PACKAGES = "generatedPackages";
- public static final String PROP_EXCLUDE_TEMPLATES = "excludetemplates";
+ public static final String PROP_EXCLUDE_TEMPLATES = "excludeTemplates";
public static final String PROP_TEMPLATES = "templates";
@@ -71,7 +71,7 @@
super(
PROP_TEMPLATES, "templates",
PROP_TEMPLATES_LIST, "templatesList",
- PROP_EXCLUDE_TEMPLATES, "excludetemplates",
+ PROP_EXCLUDE_TEMPLATES, "excludeTemplates",
PROP_READER, "reader",
PROP_MODEL_READER, "modelReader",
PROP_GENERATED_PACKAGES, "generatedPackages",
@@ -207,6 +207,7 @@
templateProperties.put(Template.PROP_VERBOSE, verbose);
templateProperties.put(Template.PROP_OVERWRITE, configuration.isOverwrite());
templateProperties.put(Template.PROP_CLASS_LOADER, configuration.getClassLoader());
+ templateProperties.put(Template.PROP_EXCLUDE_TEMPLATES, configuration.getProperties().get(PROP_EXCLUDE_TEMPLATES));
String generatedPackages = getGeneratedPackages();
if (StringUtils.isEmpty(generatedPackages)) {
@@ -324,8 +325,9 @@
if (configuration.isVerbose()) {
getLog().info(" overwrite = " + template.isOverwrite());
- getLog ().info(" encoding = " + template.getEncoding());
+ getLog().info(" encoding = " + template.getEncoding());
getLog().info(" lastModifiedSource = " + template.getLastModifiedSource());
+ getLog().info(" exclude = " + template.getExcludeTemplates());
}
// apply template
1
0
r908 - trunk/eugene/src/main/java/org/nuiton/eugene/models/object
by fdesbois@users.nuiton.org 17 May '10
by fdesbois@users.nuiton.org 17 May '10
17 May '10
Author: fdesbois
Date: 2010-05-17 18:52:57 +0200 (Mon, 17 May 2010)
New Revision: 908
Url: http://nuiton.org/repositories/revision/eugene/908
Log:
Ano #619 : add association class case for tagvalue attribute on participants
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-16 12:30:04 UTC (rev 907)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-17 16:52:57 UTC (rev 908)
@@ -40,6 +40,7 @@
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet;
+import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelImpl;
@@ -207,9 +208,11 @@
if (CLASS.equals(target)) {
elems.add(omc);
} else if (ATTRIBUTE.equals(target)) {
- ObjectModelClass classmodel = (ObjectModelClass) omc;
- elems.add(classmodel
- .getAttribute(targetName));
+
+ ObjectModelAttribute attr =
+ getAttribute((ObjectModelClass)omc, targetName);
+ elems.add(attr);
+
} else if (OPERATION.equals(target)) {
elems.addAll(omc.getOperations(targetName));
}
@@ -268,4 +271,36 @@
}
}*/
}
+
+ /**
+ * Retrieve an attribute from a {@code clazz} with its {@code name}.
+ * This method manage the association class case to explore participants
+ * attributes if needed.
+ *
+ * @param clazz where the attribute need to be find
+ * @param name attribute name to find
+ * @return the attribute found or null
+ */
+ protected ObjectModelAttribute getAttribute(ObjectModelClass clazz,
+ String name) {
+ ObjectModelAttribute result = clazz.getAttribute(name);
+
+ // Ano #619 : FD-2010-05-17 : Specific case for Association class :
+ // check on participant attributes
+ if (result == null && clazz instanceof ObjectModelAssociationClassImpl) {
+ if (log.isDebugEnabled()) {
+ log.debug("Attribute " + name + " not found from " +
+ clazz.getQualifiedName() +" association class. " +
+ "Will check participants...");
+ }
+ ObjectModelAssociationClass assoc = (ObjectModelAssociationClass)clazz;
+ for (ObjectModelAttribute participant : assoc.getParticipantsAttributes()) {
+ if (participant.getName().equals(name)) {
+ result = participant;
+ break;
+ }
+ }
+ }
+ return result;
+ }
}
1
0
r907 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
by tchemit@users.nuiton.org 16 May '10
by tchemit@users.nuiton.org 16 May '10
16 May '10
Author: tchemit
Date: 2010-05-16 14:30:04 +0200 (Sun, 16 May 2010)
New Revision: 907
Url: http://nuiton.org/repositories/revision/eugene/907
Log:
improve log
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-16 12:19:55 UTC (rev 906)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-16 12:30:04 UTC (rev 907)
@@ -305,8 +305,6 @@
/** fixed classloader */
protected ClassLoader fixedClassLoader;
- private WriterReport writerReport;
-
@Override
protected void init() throws Exception {
@@ -352,7 +350,7 @@
public void addFile(String entry, File file, boolean b) {
super.addFile(entry, file, b);
if (b || isVerbose()) {
- getLog().info(String.format("[%1$s] Will generate %2$s", entry, file));
+ getLog().info("Will generate " + file);
}
if (getLog().isDebugEnabled()) {
getLog().debug(String.format("[%1$s] Will generate %2$s", entry, file));
1
0
Author: tchemit
Date: 2010-05-16 14:19:55 +0200 (Sun, 16 May 2010)
New Revision: 906
Url: http://nuiton.org/repositories/revision/eugene/906
Log:
- Anomalie #613: Files are generated even if they are up to date
- Evolution #614: Improve template configuration design
- Evolution #615: Improve plugin console messages
Added:
trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java
Modified:
trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java
trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java
Modified: trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java
===================================================================
--- trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -274,10 +274,12 @@
for (int i = 0; i < templateGenerators.length; i++) {
String templateName = templateGenerators[i].trim();
try {
- generators[i] = (Template<Model>)Class.forName(templateName).newInstance();
- properties.setProperty(Template.PROP_OVERWRITE, String.valueOf(overwrite));
+ Template<Model> template = (Template<Model>)
+ Class.forName(templateName).newInstance();
+ generators[i] = template;
+ properties.put(Template.PROP_OVERWRITE, overwrite);
properties.setProperty(Template.PROP_ENCODING, encoding);
- generators[i].setProperties(properties);
+ template.getConfiguration().getProperties().putAll(properties);
} catch (ClassCastException e) {
log("Generator don't inherit Template Class", e, Project.MSG_ERR);
@@ -329,7 +331,7 @@
* @param destDir destination directory
* @param generators generators to apply
* @throws BuildException if can't generate
- * @throws IOException
+ * @throws BuildException if io errors while generation
*/
protected void doExecute(List<File> srcFiles, File destDir,
Template<Model>[] generators) throws BuildException {
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -28,12 +28,14 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.Model;
+import org.nuiton.eugene.writer.WriterReport;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
+import java.util.List;
/**
* AbstractGenerator
@@ -76,12 +78,6 @@
return super.getEncoding();
}
- /**
- * Permet de recuperer la proprieté passé en argument
- *
- * @param name le nom de la propriete
- * @return la valeur de la propriété
- */
@Override
public String getProperty(String name) {
if (parent != null) {
@@ -98,6 +94,14 @@
return super.getLastModifiedSource();
}
+ @Override
+ public <V> V getProperty(String key, Class<V> type) {
+ if (parent != null) {
+ return parent.getConfiguration().getProperty(key, type);
+ }
+ return getConfiguration().getProperty(key, type);
+ }
+
/**
* @param file fichier a tester
* @return vrai si le fichier passé en parametre est plus recent que
@@ -131,14 +135,15 @@
return parent.canGeneratePackage(packageName);
}
// if not generation restriction, generate everything
- if (getGeneratedPackages() != null &&
- !getGeneratedPackages().isEmpty()) {
+ List<String> generatedPackages = getGeneratedPackages();
+
+ if (generatedPackages != null && !generatedPackages.isEmpty()) {
canGenerate = false;
// on doit donc tester que le package courant
// soit est egal a un des element de la liste
// soit commence par ca
- for (String generatedPackage : getGeneratedPackages()) {
+ for (String generatedPackage : generatedPackages) {
// cas egalité parfaites
if (packageName != null &&
@@ -182,6 +187,12 @@
}
}
+ WriterReport writerReport = getWriterReport();
+
+ if (writerReport != null) {
+ writerReport.addFile(getClass().getName(), outputFile, false);
+ }
+
Writer output = getWriter(outputFile);
try {
if (log.isDebugEnabled()) {
@@ -201,7 +212,7 @@
}
protected Writer getWriter(File outputFile) throws IOException {
-
+
FileOutputStream stream = new FileOutputStream(outputFile);
Writer output;
String encoding = getEncoding();
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -90,7 +90,9 @@
Template<M> generator;
if (getExcludeTemplates().contains(generatorClass.getName())) {
// exclude generator
- log.info("exclude generator " + generatorClass);
+ if (log.isInfoEnabled()) {
+ log.info("exclude generator " + generatorClass);
+ }
continue;
}
try {
@@ -98,12 +100,14 @@
// init template
+ generator.setConfiguration(getConfiguration());
+
if (generator instanceof AbstractGenerator) {
((AbstractGenerator<M>) generator).setParent(this);
}
- if (generator instanceof Transformer) {
- generator.setProperties(properties);
- }
+// if (generator instanceof Transformer) {
+// generator.setProperties(properties);
+// }
// will use it
result.add(generator);
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -24,6 +24,10 @@
*/
package org.nuiton.eugene;
+import org.nuiton.eugene.writer.WriterReport;
+
+import java.util.Properties;
+
/**
* Default template configuration
*
@@ -32,31 +36,124 @@
*/
public class DefaultTemplateConfiguration implements TemplateConfiguration {
- protected boolean overwrite = true;
+ public static final String DEFAULT_ENCONDING = "UTF-8";
- protected boolean verbose;
+ protected Properties properties;
- protected String encoding = "UTF-8";
+ public DefaultTemplateConfiguration() {
+ }
- protected ClassLoader loader = getClass().getClassLoader();
+ public DefaultTemplateConfiguration(Properties properties) {
+ this.properties = new Properties();
+ this.properties.putAll(properties);
+ }
@Override
public boolean isOverwrite() {
- return overwrite;
+ Boolean value = getProperty(PROP_OVERWRITE, Boolean.class);
+ if (value == null) {
+ value = true;
+ setProperty(PROP_OVERWRITE, value);
+ }
+ return value;
}
@Override
public boolean isVerbose() {
- return verbose;
+ Boolean value = getProperty(PROP_VERBOSE, Boolean.class);
+ if (value == null) {
+ value = false;
+ setProperty(PROP_VERBOSE, value);
+ }
+ return value;
}
@Override
public String getEncoding() {
- return encoding;
+ String value = getProperty(PROP_ENCODING, String.class);
+ if (value == null) {
+ value = DEFAULT_ENCONDING;
+ setProperty(PROP_ENCODING, value);
+ }
+ return value;
}
@Override
public ClassLoader getClassLoader() {
- return loader;
+ ClassLoader value = getProperty(PROP_CLASS_LOADER, ClassLoader.class);
+ if (value == null) {
+ value = getClass().getClassLoader();
+ setProperty(PROP_CLASS_LOADER, value);
+ }
+ return value;
}
+
+ @Override
+ public WriterReport getWriterReport() {
+ WriterReport report =
+ getProperty(PROP_WRITER_REPORT, WriterReport.class);
+ return report;
+ }
+
+ @Override
+ public long getLastModifiedSource() {
+ Long value = getProperty(PROP_LAST_MODIFIED_SOURCE, Long.class);
+ if (value == null) {
+ value = 0l;
+ setProperty(PROP_LAST_MODIFIED_SOURCE, value);
+ }
+ return value;
+ }
+
+ @Override
+ public Properties getProperties() {
+ if (properties == null) {
+ properties = new Properties();
+ }
+ return properties;
+ }
+
+ @Override
+ public String getProperty(String key) {
+ return getProperty(key, String.class);
+ }
+
+ @Override
+ public <V> V getProperty(String key, Class<V> type) {
+ Object o = getProperties().get(key);
+ if (o != null && !type.isAssignableFrom(type)) {
+ throw new IllegalArgumentException("property [" + key + "] is not of type " + type.getName() + ", but : " + o.getClass().getName());
+ }
+ return (V) o;
+ }
+
+ @Override
+ public void setProperty(String key, Object value) {
+ getProperties().put(key, value);
+ }
+
+ public void setOverwrite(boolean overwrite) {
+ setProperty(PROP_OVERWRITE, overwrite);
+ }
+
+ public void setVerbose(boolean verbose) {
+ setProperty(PROP_VERBOSE, verbose);
+ }
+
+ public void setEncoding(String encoding) {
+ setProperty(PROP_ENCODING, encoding);
+ }
+
+ public void setLoader(ClassLoader loader) {
+ setProperty(PROP_CLASS_LOADER, loader);
+ }
+
+ public void setLastModifiedSource(long lastModifiedSource) {
+ setProperty(PROP_LAST_MODIFIED_SOURCE, lastModifiedSource);
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -32,8 +32,8 @@
import java.io.File;
/**
- * FileReader TODO real doc :)
- *
+ * ModelReader TODO real doc :)
+ * <p/>
* Created: 26 oct. 2009
*
* @author fdesbois <fdesbois(a)codelutin.com>
@@ -45,30 +45,35 @@
private static final Log log = LogFactory.getLog(ModelReader.class);
/** date de derniere modification de la source la plus recente */
- protected long lastModifiedSource = 0;
+ protected long lastModifiedSource;
protected void setLastModifiedSource(File... files) {
for (File file : files) {
if (file.lastModified() > getLastModifiedSource()) {
lastModifiedSource = file.lastModified();
- log.debug("source date: " + lastModifiedSource
- + " files[i] date: " + file.lastModified() + "(" + file
- + ")");
+
+ if (log.isDebugEnabled()) {
+ log.debug("source date: " + lastModifiedSource
+ + " files[i] date: " + file.lastModified() +
+ "(" + file + ")");
+ }
}
}
}
+ /**
+ * @return the last modified file source (says the newer incoming file)
+ */
public long getLastModifiedSource() {
return lastModifiedSource;
}
- //TODO-TC : il vaut mieux directement un type dit variable
- // example : public abstract M read(File... file) {}
-
-// public M read(File file) {
-// return read(new File[] { file });
-// }
-
+ /**
+ * Read files to produce a memory model.
+ *
+ * @param file files to read
+ * @return the new model builded from files
+ */
public abstract M read(File... file);
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,6 +27,7 @@
import org.apache.commons.lang.StringUtils;
import org.nuiton.eugene.models.Model;
+import org.nuiton.eugene.writer.WriterReport;
import java.io.File;
import java.io.IOException;
@@ -37,32 +38,21 @@
/**
* Generator. TODO javadoc
- *
+ * <p/>
* Created: 5 août 2004
*
- * @param <M> Model associated to the generator (input model)
- *
* @author Cedric Pineau <pineau(a)codelutin.com>
+ * @param <M> Model associated to the generator (input model)
*/
public abstract class Template<M extends Model> implements TemplateConfiguration {
- public static final String PROP_OVERWRITE = "overwrite";
- public static final String PROP_ENCODING = "encoding";
-
- public static final String PROP_DEFAULT_PACKAGE = "defaultPackage";
- public static final String PROP_LAST_MODIFIED_SOURCE = "lastModifiedSource";
- public static final String PROP_GENERATED_PACKAGES = "generatedPackages";
- public static final String PROP_EXCLUDE_TEMPLATES = "excludeTemplates";
-
protected TemplateConfiguration configuration;
-
- protected Properties properties = new Properties();
protected List<String> excludeTemplates;
- /**
+ /**
* List of package to allow generation.
- *
+ * <p/>
* If {@code null} or empty, generate all packages.
*/
protected List<String> generatedPackages;
@@ -70,17 +60,8 @@
/** Model */
protected M model;
-// /**
-// * Old method from EUGene 1.0.1 used to generate files. Now, you have to
-// * use a Reader instead of directly use a Template.
-// *
-// * @param file list of tiles
-// * @param destDir destination folder
-// * @deprecated since 2.0.0
-// */
-// @Deprecated
-// public abstract void generate(File[] file, File destDir);
+
public abstract void applyTemplate(M model, File destDir) throws IOException;
public TemplateConfiguration getConfiguration() {
@@ -95,7 +76,6 @@
}
/**
- *
* @return {@code true} if must overwrite ouput
* @deprecated since 2.0.2, prefer use the {@link #isOverwrite()} method
*/
@@ -108,8 +88,9 @@
public boolean isOverwrite() {
return getConfiguration().isOverwrite();
}
+
@Override
- public boolean isVerbose() {
+ public boolean isVerbose() {
return getConfiguration().isVerbose();
}
@@ -123,43 +104,51 @@
return getConfiguration().getClassLoader();
}
- /**
- * @param encoding encoding value
- * @deprecated since 2.0.0, use a Properties object to add the
- * {@link Template#PROP_ENCODING} value
- * @see Template#setProperties(Properties)
- */
- @Deprecated
- public void setEncoding(String encoding) {
- //this.encoding = encoding;
- properties.setProperty(PROP_ENCODING, encoding);
+ @Override
+ public long getLastModifiedSource() {
+ return getConfiguration().getLastModifiedSource();
}
- public void setProperties(Properties p) {
- properties = p;
+ @Override
+ public Properties getProperties() {
+ return getConfiguration().getProperties();
}
+ @Override
+ public <V> V getProperty(String key, Class<V> type) {
+ return getConfiguration().getProperty(key, type);
+ }
+
+ public String getProperty(String key) {
+ return getConfiguration().getProperty(key);
+ }
+
+ @Override
+ public WriterReport getWriterReport() {
+ return getConfiguration().getWriterReport();
+ }
+
+ @Override
+ public void setProperty(String key, Object value) {
+ getConfiguration().setProperty(key, value);
+ if (PROP_GENERATED_PACKAGES.equals(key)) {
+ // reset cache value
+ generatedPackages = null;
+ } else if (PROP_EXCLUDE_TEMPLATES.equals(key)) {
+ // reset cache value
+ excludeTemplates = null;
+ }
+ }
+
/**
- * Permet de recuperer la proprieté passé en argument
+ * Set the properties configuration.
*
- * @param name le nom de la propriete
- * @return la valeur de la propriété
+ * @param p the configuration
+ * @deprecated since 2.0.2, prefer use the {@link TemplateConfiguration} api.
*/
- public String getProperty(String name) {
- return properties.getProperty(name);
- }
-
- /**
- * Set list of package to allow generation.
- *
- * If {@code null} or empty, generate all packages.
- *
- * @param generatedPackages list of package to generate
- * @deprecated
- */
@Deprecated
- public void setGeneratedPackages(List<String> generatedPackages) {
- this.generatedPackages = generatedPackages;
+ public void setProperties(Properties p) {
+ getConfiguration().getProperties().putAll(p);
}
protected List<String> getGeneratedPackages() {
@@ -170,27 +159,10 @@
//TC-20091125 avoid manual array copy
generatedPackages.addAll(Arrays.asList(genPackages.split(",")));
}
- }
+ }
return generatedPackages;
}
- /**
- * @param lastModifiedSource lastModifiedSource value
- * @deprecated since 2.0.0, use a Properties object to add the
- * {@link Template#PROP_LAST_MODIFIED_SOURCE} value
- * @see Template#setProperties(Properties)
- */
- @Deprecated
- public void setLastModifiedSource(long lastModifiedSource) {
- properties.setProperty(PROP_LAST_MODIFIED_SOURCE,
- String.valueOf(lastModifiedSource));
- }
-
- public long getLastModifiedSource() {
- return Long.parseLong(
- properties.getProperty(PROP_LAST_MODIFIED_SOURCE, "0"));
- }
-
public List<String> getExcludeTemplates() {
if (excludeTemplates == null) {
excludeTemplates = new ArrayList<String>();
@@ -203,11 +175,6 @@
return excludeTemplates;
}
- @Deprecated
- public void setExcludeTemplates(List<String> excludeTemplates) {
- this.excludeTemplates = excludeTemplates;
- }
-
public M getModel() {
return model;
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -24,6 +24,10 @@
*/
package org.nuiton.eugene;
+import org.nuiton.eugene.writer.WriterReport;
+
+import java.util.Properties;
+
/**
* Contract of a {@link Template} configuration
*
@@ -32,6 +36,24 @@
*/
public interface TemplateConfiguration {
+ String PROP_OVERWRITE = "overwrite";
+
+ String PROP_VERBOSE = "verbose";
+
+ String PROP_ENCODING = "encoding";
+
+ String PROP_CLASS_LOADER = "classLoader";
+
+ String PROP_DEFAULT_PACKAGE = "defaultPackage";
+
+ String PROP_LAST_MODIFIED_SOURCE = "lastModifiedSource";
+
+ String PROP_GENERATED_PACKAGES = "generatedPackages";
+
+ String PROP_EXCLUDE_TEMPLATES = "excludeTemplates";
+
+ String PROP_WRITER_REPORT = "writerReport";
+
/**
* @return {@code true} if must regenerate files even if they are up to
* date
@@ -47,4 +69,17 @@
/** @return the classloader to use to seek for resources */
ClassLoader getClassLoader();
+ WriterReport getWriterReport();
+
+ long getLastModifiedSource();
+
+ Properties getProperties();
+
+ String getProperty(String key);
+
+ <V> V getProperty(String key, Class<V> type);
+
+ void setProperty(String key, Object value);
+
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -82,7 +82,20 @@
this.model = model;
previousTransformer = initPreviousTransformer();
outputTemplate = initOutputTemplate();
- outputTemplate.setProperties(getOutputProperties());
+
+ // build output template configuration
+ // merge input configuration + output properties
+ Properties properties = getConfiguration().getProperties();
+ properties.putAll(getOutputProperties());
+
+ TemplateConfiguration outconfig =
+ new DefaultTemplateConfiguration(properties);
+
+ // push back to outputPropertie the all configuration
+ //FIXME tchemit 20100516 Should rethink this...
+ outputProperties = properties;
+
+ outputTemplate.setConfiguration(outconfig);
outputModel = initOutputModel();
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -102,8 +102,8 @@
public void generateFromClass(Writer output, ObjectModelClass input)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug("Will generate class "+ input.getQualifiedName());
+ if (isVerbose()) {
+ log.info("Will generate class "+ input.getQualifiedName());
}
preparePrefix(input);
@@ -170,8 +170,8 @@
public void generateFromInterface(Writer output,
ObjectModelInterface input)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug(input.getQualifiedName());
+ if (isVerbose()) {
+ log.info("Will generate interface "+ input.getQualifiedName());
}
preparePrefix(input);
@@ -238,8 +238,8 @@
@Override
public void generateFromEnum(Writer output, ObjectModelEnumeration input)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug(input.getQualifiedName());
+ if (isVerbose()) {
+ log.info("Will generate enumeration "+ input.getQualifiedName());
}
preparePrefix(input);
generateHeader(output, input); // Imports, package et documentation
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -187,13 +187,13 @@
File outputFile = getDestinationFile(destDir, filename);
if (!isOverwrite() && isNewerThanSource(outputFile)) {
- if (log.isTraceEnabled()) {
- log.trace("file " + outputFile + " is up-to-date");
+ if (isVerbose()) {
+ log.info("Will not generate " + outputFile + " (up-to-date).");
}
return;
}
- if (!outputFile.exists() && log.isTraceEnabled()) {
- log.trace("not up-to-date " + outputFile.lastModified()
+ if (!outputFile.exists() && log.isDebugEnabled()) {
+ log.debug("not up-to-date " + outputFile.lastModified()
+ " <" + outputFile + ">");
}
try {
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -30,6 +30,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.regex.Matcher;
@@ -38,10 +39,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.ModelReader;
-import org.nuiton.eugene.models.object.ObjectModel;
-import org.nuiton.eugene.models.object.ObjectModelClass;
-import org.nuiton.eugene.models.object.ObjectModelClassifier;
-import org.nuiton.eugene.models.object.ObjectModelElement;
import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet;
import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
@@ -65,7 +62,17 @@
public class ObjectModelReader extends ModelReader<ObjectModel> {
private static final Log log = LogFactory.getLog(ObjectModelReader.class);
-
+
+ public static final String TAGVALUE = "tagvalue";
+
+ public static final String STEREOTYPE = "stereotype";
+
+ public static final String OPERATION = "operation";
+
+ public static final String ATTRIBUTE = "attribute";
+
+ public static final String CLASS = "class";
+
/**
* L'expression réguliere match les chaines de type
* <package.ClassName>.<class|attribute|operation>.[name].<stereotype|tagvalue>.[tag]
@@ -79,6 +86,7 @@
protected Pattern propertiesPattern = Pattern
.compile("((?:[_a-zA-Z0-9]+\\.)+(?:_?[A-Z][_a-zA-Z0-9]*\\.)+)(?:(class|attribute|operation)\\.)(?:([_a-z0-9][_a-zA-Z0-9]*)\\.)?(?:(stereotype|tagvalue)\\.?)([_a-z0-9][_a-zA-Z0-9]*)?");
+ public static final String MODEL = "model";
/**
* @param files les noms des fichiers existant contenant du XML représentant
@@ -89,6 +97,11 @@
@Override
public ObjectModel read(File... files) {
setLastModifiedSource(files);
+ if (log.isDebugEnabled()) {
+ log.debug("LastModifiedSource = " + getLastModifiedSource() +
+ " for files " + Arrays.toString(files));
+ }
+
ObjectModel objectModel = new ObjectModelImpl();
// Digester parser configuration
@@ -122,7 +135,12 @@
+ " associé au model");
}
try {
- prop.load(new FileInputStream(propFile));
+ FileInputStream inStream = new FileInputStream(propFile);
+ try {
+ prop.load(inStream);
+ } finally {
+ inStream.close();
+ }
} catch (IOException eee) {
log.warn("Impossible de lire le fichier de propriete "
+ propFile, eee);
@@ -133,9 +151,11 @@
String key = (String) e.nextElement();
String value = prop.getProperty(key);
- if (key.startsWith("model")) {
+ if (key.startsWith(MODEL)) {
if (!key.startsWith("model.tagvalue.")) {
- log.warn("only tagvalue is allowed on model in properties");
+ if (log.isWarnEnabled()) {
+ log.warn("only tagvalue is allowed on model in properties");
+ }
} else {
String tag = key.substring("model.tagvalue."
.length());
@@ -175,22 +195,27 @@
ObjectModelClassifier omc = objectModel
.getClassifier(fqn);
+ if (omc == null) {
+ log.warn("Could not find classifier for " + fqn+" from tag value " + key);
+ continue;
+ }
+
if (omc instanceof ObjectModelClassifierImpl) {
// on utilise une liste car il peut y avoir plusieur
// operation avec le nom donné
List<ObjectModelElement> elems = new ArrayList<ObjectModelElement>();
- if ("class".equals(target)) {
+ if (CLASS.equals(target)) {
elems.add(omc);
- } else if ("attribute".equals(target)) {
+ } else if (ATTRIBUTE.equals(target)) {
ObjectModelClass classmodel = (ObjectModelClass) omc;
elems.add(classmodel
.getAttribute(targetName));
- } else if ("operation".equals(target)) {
+ } else if (OPERATION.equals(target)) {
elems.addAll(omc.getOperations(targetName));
}
for (Object elem1 : elems) {
ObjectModelElementImpl elem = (ObjectModelElementImpl) elem1;
- if ("stereotype".equals(type)) {
+ if (STEREOTYPE.equals(type)) {
// pour les stereotypes
ObjectModelImplRef stereotype = new ObjectModelImplRef();
stereotype.setName(value);
@@ -198,7 +223,7 @@
continue;
}
- if ("tagvalue".equals(type)) {
+ if (TAGVALUE.equals(type)) {
// pour les tagvalues
ObjectModelImplTagValue tagvalue = new ObjectModelImplTagValue();
tagvalue.setName(tag);
@@ -221,7 +246,7 @@
// TODO il faudra avoir des methodes d'acces en
// Set sur l'interface pour eviter ce message
if (log.isWarnEnabled()) {
- log.warn("Can't add properties to model, it's not an ObjectModelClassifierImpl");
+ log.warn("Can't add properties to model, it's not an ObjectModelClassifierImpl : " + omc.getQualifiedName());
}
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,10 +27,18 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.StringUtil;
import java.io.File;
import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
/**
* Abstract implementation of the {@link ChainedFileWriter}.
@@ -39,25 +47,33 @@
* @since 2.0.0
*/
public abstract class AbstractChainedFileWriter implements ChainedFileWriter {
+
/** Logger */
private static final Log log =
LogFactory.getLog(AbstractChainedFileWriter.class);
+
/** entries to treate with this writer */
protected List<ChainedFileWriterEntry> entries;
+
/** previous writer (can be null) */
protected ChainedFileWriter previousWriter;
+
/** next writer (can be null) */
protected ChainedFileWriter nextWriter;
+
/**
* universe of authorized properties (keys are property names, values are
* property descriptions).
*/
protected final Map<String, String> authorizedPropertyDescriptions;
+
/**
* real properties obtained fro a configuration in {@link
* #initWriter(ChainedFileWriterConfiguration)} method
*/
protected Map<String, Object> properties;
+
+ private WriterReport writerReport;
protected AbstractChainedFileWriter(String... propertyNameAndDescriptions) {
if (propertyNameAndDescriptions.length % 2 != 0) {
@@ -126,10 +142,9 @@
@Override
public void generate(ChainedFileWriterConfiguration configuration)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug("[" + getInputProtocol() +
- "] Start generate with writer " + this);
- }
+
+ long t0 = System.nanoTime();
+
initWriter(configuration);
try {
@@ -150,23 +165,53 @@
}
}
- for (ChainedFileWriterEntry e : entries) {
- if (log.isDebugEnabled()) {
- log.debug("[" + getInputProtocol() +
- "] Will generate entry " + e.getInputDirectory()
- + " : " + e.getIncludePattern());
- }
- generate(configuration,
- outputDir,
- e.getInputDirectory(),
- e.getIncludePattern()
- );
- }
+ Map<File, List<String>> mergeEntries = mergeEntries(entries);
+
+ generateEntries(configuration, outputDir, mergeEntries);
+
} finally {
clear();
}
}
+ protected Map<File, List<String>> mergeEntries(List<ChainedFileWriterEntry> entries) {
+ // merge entries if required
+ Map<File, List<String>> merge = new HashMap<File, List<String>>();
+ for (ChainedFileWriterEntry e : entries) {
+ File input = e.getInputDirectory();
+ List<String> includes = merge.get(input);
+ if (includes == null) {
+ includes = new ArrayList<String>();
+ merge.put(input, includes);
+ }
+ includes.add(e.getIncludePattern());
+ }
+ return merge;
+ }
+
+ protected void generateEntries(ChainedFileWriterConfiguration configuration,
+ File outputDir,
+ Map<File, List<String>> entries) throws IOException {
+
+ // apply from merge entries
+ for (Map.Entry<File, List<String>> e : entries.entrySet()) {
+ File input = e.getKey();
+ List<String> includes = e.getValue();
+ String includePattern = StringUtil.join(includes, ",", true);
+ if (log.isDebugEnabled()) {
+ log.debug("[" + getInputProtocol() +
+ "] Will generate entry " + input
+ + " : " + includePattern);
+ }
+ generate(configuration,
+ outputDir,
+ input,
+ includePattern
+ );
+ }
+ }
+
+
@Override
public String getInputProtocol(String modelType) {
// input protocol is the same for all model
@@ -215,4 +260,14 @@
}
}
}
+
+ @Override
+ public void setWriterReport(WriterReport writerReport) {
+ this.writerReport = writerReport;
+ }
+
+ @Override
+ public WriterReport getWriterReport() {
+ return writerReport;
+ }
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -159,4 +159,11 @@
/** @return the list of all entries registered */
List<ChainedFileWriterEntry> getEntries();
+
+
+ /** @return the writer report (to save generated file to later report) */
+ WriterReport getWriterReport();
+
+ void setWriterReport(WriterReport writerReport);
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,7 +27,6 @@
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
-import org.nuiton.eugene.TemplateConfiguration;
import java.io.File;
import java.util.Map;
@@ -39,7 +38,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.0.0
*/
-public interface ChainedFileWriterConfiguration extends TemplateConfiguration{
+public interface ChainedFileWriterConfiguration {
/** @return the type of model used */
String getModelType();
Added: trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java (rev 0)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -0,0 +1,66 @@
+/*
+ * #%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
+ * 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
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+package org.nuiton.eugene.writer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * A class to save generated files in {@link ChainedFileWriter}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.0.2
+ */
+public class WriterReport {
+
+ protected Map<String, List<File>> datas;
+
+ public Map<String, List<File>> getDatas() {
+ if (datas == null) {
+ datas = new TreeMap<String, List<File>>();
+ }
+ return datas;
+ }
+
+ public void addFile(String entry, File file, boolean verbose) {
+ List<File> files = getDatas().get(entry);
+ if (files == null) {
+ files = new ArrayList<File>();
+ getDatas().put(entry, files);
+ }
+ files.add(file);
+ }
+
+ public int getFilesCount() {
+ int tot = 0;
+ for (List<File> files : getDatas().values()) {
+ tot += files.size();
+ }
+ return tot;
+ }
+}
Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,7 +27,6 @@
package org.nuiton.eugene;
import java.util.Set;
-import org.apache.commons.lang.time.DurationFormatUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
@@ -127,7 +126,7 @@
*/
@Test
public void testGetSimpleName() {
- System.out.println("getSimpleName");
+ log.info("getSimpleName");
String str = "List";
String expResult = "List";
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -31,6 +31,7 @@
import junit.framework.Assert;
import org.junit.Test;
+import org.nuiton.eugene.Template;
import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
@@ -53,15 +54,17 @@
Assert.assertTrue(generator.canGenerateElement(new ObjectModelElementImpl()));
Assert.assertTrue(generator.canGenerateElement(new ObjectModelClassImpl()));
- List<String> generatedPackages = new ArrayList<String>();
- generatedPackages.add("org.nuiton.eugene");
+// List<String> generatedPackages = new ArrayList<String>();
+// generatedPackages.add("org.nuiton.eugene");
- generator.setGeneratedPackages(generatedPackages);
-
+ generator.setProperty(Template.PROP_GENERATED_PACKAGES , "org.nuiton.eugene");
+// generator.setGeneratedPackages(generatedPackages);
+
// Still true
Assert.assertTrue(generator.canGenerateElement(new ObjectModelElementImpl()));
// become false
- Assert.assertFalse(generator.canGenerateElement(new ObjectModelClassImpl()));
+ boolean b = generator.canGenerateElement(new ObjectModelClassImpl());
+ Assert.assertFalse(b);
ObjectModelClassImpl testClass = new ObjectModelClassImpl();
testClass.setPackage("org.nuiton.eugene");
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -115,13 +115,10 @@
* Apply XSL stylesheet on a topcased model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLIsis() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLIsis() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/isis-fish.xmi")
.toURI());
@@ -139,13 +136,10 @@
* Apply XSL stylesheet on a topcased model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLTopia() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLTopia() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/topiatest.xmi")
.toURI());
@@ -183,13 +177,10 @@
* Apply XSL stylesheet on an Argouml model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLDependency() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLDependency() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/dependency.xmi")
.toURI());
@@ -217,13 +208,10 @@
* Apply XSL stylesheet on an Argouml model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLEnumeration() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLEnumeration() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/enumeration.xmi")
.toURI());
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -31,6 +31,7 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
+import org.nuiton.eugene.DefaultTemplateConfiguration;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
import org.nuiton.eugene.models.Model;
@@ -311,7 +312,8 @@
Template<M> template = (Template<M>) Class.forName(templateName,
true, fixedClassLoader).newInstance();
// configuration
- template.setProperties(templateProperties);
+ template.setConfiguration(new DefaultTemplateConfiguration(templateProperties));
+// template.setProperties(templateProperties);
templatesList.add(template);
} catch (InstantiationException e) {
throw new MojoFailureException("Can't instantiate generator : "
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -31,9 +31,9 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
+import org.nuiton.eugene.DefaultTemplateConfiguration;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
-import org.nuiton.eugene.TemplateConfiguration;
import org.nuiton.eugene.models.Model;
import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter;
import org.nuiton.eugene.plugin.writer.ModelChainedFileWriter;
@@ -42,13 +42,21 @@
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
import org.nuiton.eugene.writer.ChainedFileWriterEntry;
import org.nuiton.eugene.writer.ChainedWriterEngine;
+import org.nuiton.eugene.writer.WriterReport;
import org.nuiton.plugin.AbstractPlugin;
+import org.nuiton.util.StringUtil;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Smart file generator.
@@ -92,10 +100,10 @@
* <input>zargo:src/main/xmi:**\/*.zargo2</input>
* </inputs>
* </pre>
- *
+ * <p/>
* <b>Note:</b> If your using a single input, you can just write :
* <pre>
- * <inputs>zargo</inputs>
+ * <inputs>zargo</inputs>
* </pre>
*
* @parameter expression="${eugene.inputs}"
@@ -103,6 +111,7 @@
* @since 2.0.0
*/
protected String[] inputs;
+
/**
* List of input (protocol) not to treate separated by comma.
* <p/>
@@ -116,6 +125,7 @@
* @since 2.0.0
*/
protected String skipInputs;
+
/**
* Where to generate files.
*
@@ -124,6 +134,7 @@
* @since 2.0.0
*/
protected File outputDirectory;
+
/**
* Ecrase les fichiers générés.
*
@@ -131,6 +142,7 @@
* @since 2.0.0
*/
protected boolean overwrite;
+
/**
* Pour activer le mode verbeux.
*
@@ -138,6 +150,7 @@
* @since 2.0.0
*/
protected boolean verbose;
+
/**
* Encoding to be used for generation of files.
*
@@ -145,6 +158,7 @@
* @since 2.0.0
*/
protected String encoding;
+
/**
* A flag to mark the mojo to be used in a test phase. This will permits
* to add generated sources in test compile roots.
@@ -153,6 +167,7 @@
* @since 2.0.0
*/
protected boolean testPhase;
+
/**
* The type of model to be used.
* <p/>
@@ -163,6 +178,7 @@
* @since 2.0.0
*/
protected String modelType;
+
/**
* Properties to pass to writer.
*
@@ -170,6 +186,7 @@
* @since 2.0.0
*/
protected Map<String, Object> properties;
+
/**
* Ne génère rien, analyse juste la configuration.
*
@@ -177,6 +194,7 @@
* @since 2.0.0
*/
protected boolean dryRun;
+
/**
* Nom du paquetage pour les fichiers générés (xmi input sepcific).
*
@@ -184,6 +202,7 @@
* @since 2.0.0
*/
protected String fullPackagePath;
+
/**
* Nom du resolver a utiliser pour les transformations xmi vers model
* (xmi input sepcific).
@@ -192,14 +211,16 @@
* @since 2.0.0
*/
protected String resolver;
+
/**
* Templates à utiliser, séparés par des virgules pour les transformations
- * depuis les models (model input sepcific).
+ * depuis les models (model input sepcific).
*
* @parameter expression="${eugene.templates}"
* @since 0.50
*/
protected String templates;
+
/**
* Templates à ne pas utiliser lors de la transformations des models
* (model input sepcific).
@@ -208,6 +229,7 @@
* @since 0.63
*/
protected String[] excludeTemplates;
+
/**
* Nom par défaut du paquetage généré (model input sepcific).
*
@@ -215,6 +237,7 @@
* @since 0.50
*/
protected String defaultPackage;
+
/**
* List of packages to generate (comma separated). (model input sepcific).
* <p/>
@@ -224,6 +247,7 @@
* @since 1.0.0-rc-8
*/
protected String generatedPackages;
+
/**
* Maven project.
*
@@ -232,6 +256,7 @@
* @since 2.0.0
*/
protected MavenProject project;
+
/**
* Le settings (pour obtenir le mode offline).
*
@@ -248,40 +273,49 @@
* @component role="org.nuiton.eugene.models.Model"
*/
protected Map<String, Model> _models;
+
/**
* All available writers introspects via plexus
*
* @component role="org.nuiton.eugene.writer.ChainedFileWriter"
*/
protected Map<String, ChainedFileWriter> writers;
+
/**
* All available writers introspects via plexus
*
* @component role="org.nuiton.eugene.ModelReader"
*/
protected Map<String, ModelReader<?>> modelReaders;
+
/**
* All available templates introspects via plexus
*
* @component role="org.nuiton.eugene.Template"
*/
protected Map<String, Template<?>> modelTemplates;
+
/**
* The engine to compute {@link ChainedFileWriter} from inputs entries.
*
* @component role="org.nuiton.eugene.writer.ChainedWriterEngine"
*/
protected ChainedWriterEngine engine;
- /**
- * fixed classloader
- */
+
+ /** fixed classloader */
protected ClassLoader fixedClassLoader;
+ private WriterReport writerReport;
+
@Override
protected void init() throws Exception {
+ if (getLog().isDebugEnabled()) {
+ verbose = true;
+ }
+
modelType = modelType.trim().toLowerCase();
-
+
// Check model type is accepted
// pouvoir associé un nom à un type de service).
Model model = _models.get(modelType);
@@ -313,12 +347,26 @@
// add log support
((BaseChainedFileWriter) writer).setLog(getLog());
}
+ writer.setWriterReport(new WriterReport() {
+ @Override
+ public void addFile(String entry, File file, boolean b) {
+ super.addFile(entry, file, b);
+ if (b || isVerbose()) {
+ getLog().info(String.format("[%1$s] Will generate %2$s", entry, file));
+ }
+ if (getLog().isDebugEnabled()) {
+ getLog().debug(String.format("[%1$s] Will generate %2$s", entry, file));
+ }
+ }
+ });
}
// detect top level writers
for (String include : inputs) {
- getLog().info("Register include : " + include);
+ if (isVerbose()) {
+ getLog().info("Register include : " + include);
+ }
engine.registerInclude(include);
}
@@ -351,6 +399,15 @@
properties.put(ModelChainedFileWriter.PROP_TEMPLATES, templates);
properties.put(ModelChainedFileWriter.PROP_EXCLUDE_TEMPLATES,
getExcludeTemplatesAsString());
+
+ DefaultTemplateConfiguration configuration =
+ new DefaultTemplateConfiguration();
+ configuration.setEncoding(getEncoding());
+ configuration.setLoader(getClassLoader());
+ configuration.setOverwrite(isOverwrite());
+ configuration.setVerbose(isVerbose());
+ properties.put(ModelChainedFileWriter.PROP_TEMPLATE_CONFIGURATION,
+ configuration);
}
}
@@ -392,6 +449,7 @@
"] as required in skipInputs configuration.");
continue;
}
+ long t0 = System.nanoTime();
int size = writer.getEntries().size();
if (size == 1) {
getLog().info(
@@ -416,6 +474,8 @@
}
writer.generate(this);
+ String message = reportGeneratedFiles(writer, t0);
+ getLog().info(message);
if ("model".equals(writer.getInputProtocol())) {
@@ -435,9 +495,25 @@
}
}
+
+ public String reportGeneratedFiles(ChainedFileWriter writer, long t0) {
+ WriterReport writerReport = writer.getWriterReport();
+ int nbFiles = writerReport.getFilesCount();
+
+ if (nbFiles == 0) {
+ return "No file generated.";
+ }
+
+ long delay = System.nanoTime() - t0;
+ if (nbFiles == 1) {
+ return "Generate one file in " + StringUtil.convertTime(delay) + ".";
+ }
+ return "Generate " + nbFiles + " files in " + StringUtil.convertTime(delay) + ".";
+ }
+
/**
* Add a single input to the {@link #inputs} property.
- *
+ * <p/>
* <b>Note:</b> This is a convinient way to allow in pom to write
* <pre>
* <inputs>zargo</inputs>
@@ -576,10 +652,10 @@
if (testPhase) {
File extraClassPathDirectory = new File(
getProject().getBuild().getOutputDirectory());
-// if (verbose) {
- getLog().info("Add in generator's classLoader : " +
- extraClassPathDirectory);
-// }
+ if (verbose) {
+ getLog().info("Add in generator's classLoader : " +
+ extraClassPathDirectory);
+ }
addDirectoryToUrlsList(
extraClassPathDirectory,
urls,
@@ -600,7 +676,6 @@
);
}
-
if (project.getProjectReferences() != null) {
// this case is for multi-module when calling from a
// parent module
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -44,9 +44,7 @@
*/
public abstract class BaseChainedFileWriter extends AbstractChainedFileWriter {
- /**
- * Logger
- */
+ /** Logger */
private Log log;
protected BaseChainedFileWriter(String... propertyNameAndDescriptions) {
@@ -69,8 +67,13 @@
protected void initWriter(ChainedFileWriterConfiguration configuration) {
super.initWriter(configuration);
+ if (!configuration.isVerbose()) {
+
+ // nothing else to do
+ return;
+ }
+
// log writer config
-
StringBuilder buffer = new StringBuilder();
Set<Map.Entry<String, String>> set =
getAuthorizedPropertyDescriptions().entrySet();
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -26,8 +26,10 @@
package org.nuiton.eugene.plugin.writer;
import org.apache.commons.lang.StringUtils;
+import org.nuiton.eugene.DefaultTemplateConfiguration;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
+import org.nuiton.eugene.TemplateConfiguration;
import org.nuiton.eugene.models.Model;
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
import org.nuiton.plugin.PluginHelper;
@@ -63,6 +65,8 @@
public static final String PROP_READER = "reader";
+ public static final String PROP_TEMPLATE_CONFIGURATION = "templateConfiguration";
+
public ModelChainedFileWriter() {
super(
PROP_TEMPLATES, "templates",
@@ -71,7 +75,8 @@
PROP_READER, "reader",
PROP_MODEL_READER, "modelReader",
PROP_GENERATED_PACKAGES, "generatedPackages",
- PROP_DEFAULT_PACKAGE, "defaultPackage"
+ PROP_DEFAULT_PACKAGE, "defaultPackage",
+ PROP_TEMPLATE_CONFIGURATION, "templateConfiguration"
);
}
@@ -144,6 +149,10 @@
return getProperty(PROP_TEMPLATES, String.class);
}
+ public TemplateConfiguration getTemplateConfiguration() {
+ return getProperty(PROP_TEMPLATE_CONFIGURATION, TemplateConfiguration.class);
+ }
+
protected ModelReader<?> getModelReader() {
return getProperty(PROP_MODEL_READER, ModelReader.class);
}
@@ -189,24 +198,27 @@
}
}
+ boolean verbose = configuration.isVerbose();
+
Properties templateProperties = new Properties();
- templateProperties.setProperty(Template.PROP_DEFAULT_PACKAGE,
- getDefaultPackage());
- templateProperties.setProperty(
- Template.PROP_OVERWRITE,
- String.valueOf(configuration.isOverwrite()));
- templateProperties.setProperty(Template.PROP_ENCODING,
- configuration.getEncoding());
- templateProperties.setProperty(
- Template.PROP_LAST_MODIFIED_SOURCE,
- String.valueOf(getModelReader().getLastModifiedSource()));
+
+ templateProperties.put(Template.PROP_DEFAULT_PACKAGE, getDefaultPackage());
+ templateProperties.put(Template.PROP_ENCODING, configuration.getEncoding());
+ templateProperties.put(Template.PROP_VERBOSE, verbose);
+ templateProperties.put(Template.PROP_OVERWRITE, configuration.isOverwrite());
+ templateProperties.put(Template.PROP_CLASS_LOADER, configuration.getClassLoader());
+
String generatedPackages = getGeneratedPackages();
if (StringUtils.isEmpty(generatedPackages)) {
- getLog().info(" generating all packages");
+ if (verbose) {
+ getLog().info("generating all packages");
+ }
} else {
templateProperties.put(Template.PROP_GENERATED_PACKAGES,
generatedPackages);
- getLog().info(" generating only for packages " + generatedPackages);
+ if (verbose) {
+ getLog().info("generating only for packages " + generatedPackages);
+ }
}
// init templates
@@ -230,7 +242,9 @@
"Can't obtain template [" + templateName +
"] for reason " + e.getMessage(), e);
}
- } else {
+ }
+
+ if (verbose) {
getLog().info("will use the template [" + templateName + "]");
}
@@ -238,7 +252,8 @@
templatesList.add(template);
// set the properties of the template
- template.setProperties(templateProperties);
+ template.setConfiguration(
+ new DefaultTemplateConfiguration(templateProperties));
}
properties.put(PROP_TEMPLATES_LIST, templatesList);
@@ -260,13 +275,15 @@
List<File> modelFiles = new ArrayList<File>();
String[] includePatterns = includePattern.split(",");
- getLog().info("Generating from " + inputDirectory + " : " +
- includePattern);
+ if (configuration.isVerbose()) {
+ getLog().info("Generating from " + inputDirectory + " : " +
+ includePattern);
+ }
if (configuration.isVerbose()) {
- getLog().info("Will use classLoader "+configuration.getClassLoader());
+ getLog().info("Will use classLoader " + configuration.getClassLoader());
}
-
+
for (File srcDirGen : ioContext.getInputs()) {
if (configuration.isVerbose()) {
@@ -275,28 +292,46 @@
}
List<File> currentFiles = PluginHelper.getIncludedFiles(
srcDirGen, includePatterns, null);
+ if (currentFiles.size() == 1) {
+ getLog().info("Using one model :");
+ } else {
+ getLog().info("Using " + currentFiles.size() + " models :");
+ }
+ for (File currentFile : currentFiles) {
+ getLog().info(" " + currentFile.getAbsolutePath());
+ }
modelFiles.addAll(currentFiles);
}
// read the model
- Model model = getModelReader().read(modelFiles.toArray(
- new File[modelFiles.size()]));
+ File[] filesToRead = modelFiles.toArray(new File[modelFiles.size()]);
+ Model model = getModelReader().read(filesToRead);
+
+ // get the last modified source timestamp from reader
+ long lastModifiedSource = getModelReader().getLastModifiedSource();
+
// apply all templates to the model
for (Template<Model> template : getTemplatesList()) {
- getLog().info("Apply " + template.getClass().getSimpleName() +
- " generator");
+ getLog().info("Apply generator " + template.getClass().getSimpleName());
- template.setConfiguration(configuration);
-
+ // set the lastModified source property
+ template.setProperty(Template.PROP_LAST_MODIFIED_SOURCE, lastModifiedSource);
+
+ template.setProperty(Template.PROP_WRITER_REPORT, getWriterReport());
+
+ if (configuration.isVerbose()) {
+ getLog().info(" overwrite = " + template.isOverwrite());
+ getLog ().info(" encoding = " + template.getEncoding());
+ getLog().info(" lastModifiedSource = " + template.getLastModifiedSource());
+ }
+
// apply template
template.applyTemplate(model, ioContext.getOutput());
-
}
-
}
}
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -28,6 +28,7 @@
import org.nuiton.eugene.models.object.ObjectModel;
import org.nuiton.eugene.models.state.StateModel;
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
+import org.nuiton.eugene.writer.WriterReport;
import org.nuiton.plugin.PluginHelper;
import org.nuiton.plugin.PluginIOContext;
import org.nuiton.util.FasterCachedResourceResolver;
@@ -58,8 +59,8 @@
* vers du model).
*
* @author tchemit
+ * @plexus.component role="org.nuiton.eugene.writer.ChainedFileWriter" role-hint="xmi"
* @since 2.0.0
- * @plexus.component role="org.nuiton.eugene.writer.ChainedFileWriter" role-hint="xmi"
*/
public class XmiChainedFileWriter extends BaseChainedFileWriter {
@@ -144,50 +145,44 @@
File outputDir,
File inputDirectory,
String includePattern) throws IOException {
- long t0 = System.nanoTime();
- boolean overwrite = configuration.isOverwrite();
- try {
- getLog().info("Processing XSL tranformation on " +
- inputDirectory + " for " + includePattern);
+ getLog().info("Processing XSL tranformation on " +
+ inputDirectory + " for " + includePattern);
+ if (configuration.isVerbose()) {
getLog().info(" with fullPackagePath : " + getFullPackagePath());
getLog().info(" with resolver : " + getResolver());
+ }
+ // recuperation des fichiers a traiter
+ List<File> files = PluginHelper.getIncludedFiles(
+ inputDirectory, new String[]{includePattern}, null);
- // recuperation des fichiers a traiter
- List<File> files = PluginHelper.getIncludedFiles(
- inputDirectory, new String[]{includePattern}, null);
+ // lancement des traitements xsl sur les fichiers trouvés
+ // dans le repertoire
+ actionXsl(configuration,
+ outputDir,
+ inputDirectory,
+ files
+ );
- // lancement des traitements xsl sur les fichiers trouvés
- // dans le repertoire
- actionXsl(configuration,
- outputDir,
- inputDirectory,
- files,
- overwrite
- );
- } finally {
- getLog().info("xsl done in " +
- PluginHelper.convertTime(System.nanoTime() - t0));
+ if (configuration.isVerbose()) {
+ getLog().info("Copy resources files.");
}
- getLog().info("Copy resources files");
-
PluginIOContext ioContext = new PluginIOContext();
ioContext.setInput(inputDirectory);
ioContext.setOutput(outputDir);
PluginHelper.copyFiles(ioContext,
null,
new String[]{includePattern},
- overwrite
+ configuration.isOverwrite()
);
}
protected void actionXsl(ChainedFileWriterConfiguration configuration,
- File outputDir,
- File dir,
- List<File> files,
- boolean overwrite) throws IOException {
+ File outputDir,
+ File dir,
+ List<File> files) throws IOException {
for (File file : files) {
try {
@@ -212,21 +207,26 @@
File dstDir = outputDir;
if (!relatifPath.isEmpty()) {
dstDir = new File(dstDir, relatifPath);
- if (!dstDir.exists()) {
- boolean b = dstDir.mkdirs();
- if (!b) {
- throw new IOException(
- "could not create directory " + dstDir);
- }
- }
+ PluginHelper.createDirectoryIfNecessary(dstDir);
}
File result = new File(dstDir, filename);
- if (!overwrite && file.lastModified() < result.lastModified()) {
- getLog().info("file up-to-date : " + result);
+ if (!configuration.isOverwrite() && file.lastModified() < result.lastModified()) {
+
+ if (configuration.isVerbose()) {
+ getLog().info("Will not generate " + result +
+ " (up-to-date).");
+ }
continue;
}
- if (getLog().isDebugEnabled()) {
- getLog().debug("generate " + result);
+
+ WriterReport writerReport = getWriterReport();
+ if (writerReport != null) {
+
+ writerReport.addFile(
+ getClass().getName(),
+ result,
+ true
+ );
}
// Create the xsl transformer and set parameters
@@ -238,11 +238,18 @@
);
transformer.setURIResolver(fileResolver);
- transformer.transform(
- new StreamSource(file),
- new StreamResult(new FileOutputStream(result))
- );
+ FileOutputStream output = new FileOutputStream(result);
+ try {
+ transformer.transform(
+ new StreamSource(file),
+ new StreamResult(output)
+ );
+ } finally {
+ output.close();
+ }
+ } catch (IOException e) {
+ throw e;
} catch (Exception e) {
throw new IOException(e.getMessage(), e);
}
@@ -284,7 +291,9 @@
((ResourceResolver) result).setCl(loader);
if (result instanceof FasterCachedResourceResolver) {
boolean offline = configuration.isOffline();
- getLog().debug("using offline mode ? : " + offline);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("using offline mode ? : " + offline);
+ }
((FasterCachedResourceResolver) result).setOffline(offline);
}
}
@@ -348,9 +357,7 @@
return version;
}
- /**
- * Sax handler to find xmi version into xmi document.
- */
+ /** Sax handler to find xmi version into xmi document. */
protected class XmiVersionHandler extends DefaultHandler {
protected String version;
@@ -370,12 +377,16 @@
if (qName.equals("XMI")) {
version = attributes.getValue("xmi.version");
- getLog().debug("XMI version found : " + version);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("XMI version found : " + version);
+ }
}
if (version == null) {
version = attributes.getValue("xmi:version");
- getLog().debug("XMI version found : " + version);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("XMI version found : " + version);
+ }
}
}
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -25,12 +25,20 @@
package org.nuiton.eugene.plugin.writer;
+import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.IOUtil;
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
+import org.nuiton.eugene.writer.WriterReport;
import org.nuiton.plugin.PluginHelper;
import org.nuiton.plugin.PluginIOContext;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
/**
* To write model files from zargo files.
@@ -107,11 +115,11 @@
getLog().info("Expanding xmi from " + inputDirectory + " : " +
includePattern);
- PluginHelper.expandFiles(ioContext,
- new String[]{includePattern},
- null,
- XMI_FILE_FILTER,
- overwrite
+ expandFiles(ioContext,
+ new String[]{includePattern},
+ null,
+ XMI_FILE_FILTER,
+ configuration
);
getLog().info("Copying resources from " + inputDirectory + " : " +
@@ -123,4 +131,76 @@
overwrite
);
}
+
+ public void expandFiles(PluginIOContext p,
+ String[] includes,
+ String[] excludes,
+ String[] zipIncludes,
+ ChainedFileWriterConfiguration configuration) throws IOException {
+
+ DirectoryScanner ds = new DirectoryScanner();
+
+ for (File input : p.getInputs()) {
+ ds.setBasedir(input);
+ if (includes != null) {
+ ds.setIncludes(includes);
+ }
+ if (excludes != null) {
+
+ ds.setExcludes(excludes);
+ }
+ ds.addDefaultExcludes();
+ ds.scan();
+ for (String file : ds.getIncludedFiles()) {
+ File in = new File(input, file);
+ File out = new File(p.getOutput(), file).getParentFile();
+ expandFile(in, out, zipIncludes, configuration);
+ }
+ }
+ }
+
+ public void expandFile(File src,
+ File dst,
+ String[] includes,
+ ChainedFileWriterConfiguration configuration) throws IOException {
+ ZipFile zipFile = new ZipFile(src);
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+ while (entries.hasMoreElements()) {
+ ZipEntry nextElement = entries.nextElement();
+ String name = nextElement.getName();
+ for (String include : includes) {
+ if (DirectoryScanner.match(include, name)) {
+ if (configuration.isVerbose()) {
+ getLog().info("matching name : " + name +
+ " with pattern " + include);
+ }
+ File dstFile = new File(dst, name);
+ if (configuration.isOverwrite() ||
+ !dstFile.exists() ||
+ nextElement.getTime() > dstFile.lastModified()) {
+
+ if (configuration.isVerbose()) {
+ getLog().info("will expand : " + name + " to " + dstFile);
+ }
+
+ WriterReport writerReport = getWriterReport();
+ if (writerReport != null) {
+ writerReport.addFile(getClass().getName(), dstFile, true);
+ }
+
+ InputStream inputStream =
+ zipFile.getInputStream(nextElement);
+ FileOutputStream outStream =
+ new FileOutputStream(dstFile);
+ try {
+ IOUtil.copy(inputStream, outStream, 2048);
+ } finally {
+ outStream.close();
+ }
+ }
+
+ }
+ }
+ }
+ }
}
1
0