Author: maartenc
Date: Fri Dec  7 15:25:36 2007
New Revision: 602266

URL: http://svn.apache.org/viewvc?rev=602266&view=rev
Log:
FIX: XMLModuleDescriptorWriter does not write extra attributes (IVY-471) 
(thanks to Mikkel Bjerg)

Modified:
    ant/ivy/core/trunk/CHANGES.txt
    
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
    
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
    
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-write-full.xml
    ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml

Modified: ant/ivy/core/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=602266&r1=602265&r2=602266&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Fri Dec  7 15:25:36 2007
@@ -61,6 +61,7 @@
 
 - IMPROVEMENT: Decrease memory footprint (IVY-662)
 
+- FIX: XMLModuleDescriptorWriter does not write extra attributes (IVY-471) 
(thanks to Mikkel Bjerg)
 - FIX: latest compatible conflict manager fails with circular dependencies and 
dynamic revision (IVY-663)
 - FIX: Strict conflictmanager seems to not support dynamic revisions (IVY-474)
 - FIX: NPE in namespace transformation during the ivy:findrevision and 
ivy:resolve task execution (IVY-659) (thanks to Andrea Bernardo Ciddio)

Modified: 
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java?rev=602266&r1=602265&r2=602266&view=diff
==============================================================================
--- 
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
 (original)
+++ 
ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ArtifactRevisionId.java
 Fri Dec  7 15:25:36 2007
@@ -17,7 +17,6 @@
  */
 package org.apache.ivy.core.module.id;
 
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ivy.core.IvyPatternHelper;
@@ -34,15 +33,8 @@
 
     public static ArtifactRevisionId newInstance(ModuleRevisionId mrid, String 
name, String type,
             String ext, Map extraAttributes) {
-        // we inject module extra attributes as extra attributes for the 
artifacts too
-        if (extraAttributes == null) {
-            extraAttributes = mrid.getExtraAttributes();
-        } else {
-            extraAttributes = new HashMap(extraAttributes);
-            extraAttributes.putAll(mrid.getExtraAttributes());
-        }
         return new ArtifactRevisionId(new ArtifactId(mrid.getModuleId(), name, 
type, ext), mrid,
-                extraAttributes);
+            extraAttributes);
     }
 
     private ArtifactId artifactId;

Modified: 
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java?rev=602266&r1=602265&r2=602266&view=diff
==============================================================================
--- 
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
 (original)
+++ 
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
 Fri Dec  7 15:25:36 2007
@@ -109,6 +109,8 @@
                 }
                 out.print("\"");
                 
+                printExtraAttributes(dds[i].getExtraAttributes(), out, " ");
+                
                 DependencyArtifactDescriptor[] depArtifacts = 
dds[i].getAllDependencyArtifacts();
                 if (depArtifacts.length > 0) {
                     out.println(">");
@@ -243,16 +245,33 @@
                     }
                     out.print("\"");
                 }
-                Map extra = depArtifacts[j].getExtraAttributes();
-                for (Iterator iter = extra.entrySet().iterator(); 
iter.hasNext();) {
-                    Map.Entry entry = (Map.Entry) iter.next();
-                    out.print(" " + entry.getKey() + "=\"" + 
XMLHelper.escape(entry.getValue().toString()) + "\"");
-                }
+                printExtraAttributes(depArtifacts[j].getExtraAttributes(), 
out, " ");
                 out.println("/>");
             }
         }
     }
 
+    /**
+     * Writes the specified <tt>Map</tt> containing the extra attributes to the
+     * given <tt>PrintWriter</tt>.
+     * 
+     * @param extra the extra attributes, can be <tt>null</tt>
+     * @param out the writer to use
+     * @param indent the string to write before writing the attributes (if any)
+     */
+    private static void printExtraAttributes(Map extra, PrintWriter out, 
String prefix) {
+        if (extra == null) {
+            return;
+        }
+        
+        String delim = prefix;
+        for (Iterator iter = extra.entrySet().iterator(); iter.hasNext();) {
+            Map.Entry entry = (Map.Entry) iter.next();
+            out.print(delim + entry.getKey() + "=\"" + 
XMLHelper.escape(entry.getValue().toString()) + "\"");
+            delim = " ";
+        }
+    }
+
     private static void printPublications(ModuleDescriptor md, PrintWriter 
out) {
         out.println("\t<publications>");
         Artifact[] artifacts = md.getAllArtifacts();
@@ -262,6 +281,7 @@
             out.print(" type=\"" + XMLHelper.escape(artifacts[i].getType()) + 
"\"");
             out.print(" ext=\"" + XMLHelper.escape(artifacts[i].getExt()) + 
"\"");
             out.print(" conf=\"" + XMLHelper.escape(getConfs(md, 
artifacts[i])) + "\"");
+            printExtraAttributes(artifacts[i].getExtraAttributes(), out, " ");
             out.println("/>");
         }
         out.println("\t</publications>");
@@ -289,6 +309,7 @@
                     }
                     out.print("\"");
                 }
+                printExtraAttributes(confs[i].getExtraAttributes(), out, " ");
                 out.println("/>");
             }
             out.println("\t</configurations>");
@@ -318,6 +339,11 @@
             if (dmd.getNamespace() != null && 
!dmd.getNamespace().getName().equals("system")) {
                 out.println("\t\tnamespace=\"" + 
XMLHelper.escape(dmd.getNamespace().getName()) + "\"");
             }
+        }
+        if (!md.getExtraAttributes().isEmpty()) {
+            out.print("\t\t");
+            printExtraAttributes(md.getExtraAttributes(), out, "");
+            out.println();
         }
         out.println("\t/>");
     }

Modified: 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-write-full.xml
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-write-full.xml?rev=602266&r1=602265&r2=602266&view=diff
==============================================================================
--- 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-write-full.xml
 (original)
+++ 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test-write-full.xml
 Fri Dec  7 15:25:36 2007
@@ -23,22 +23,23 @@
                revision="myrev"
                status="integration"
                publication="20041101110000"
+               attr1="value1"
        />
        <configurations>
-               <conf name="myconf1" visibility="public" description="desc 1"/>
+               <conf name="myconf1" visibility="public" description="desc 1" 
attr2="value2"/>
                <conf name="myconf2" visibility="public" description="desc 2"/>
                <conf name="myconf3" visibility="private" description="desc 3"/>
                <conf name="myconf4" visibility="public" description="desc 4" 
extends="myconf1,myconf2"/>
-               <conf name="myoldconf" visibility="public" description="my old 
desc"/>
+               <conf name="myoldconf" visibility="public" description="my old 
desc" deprecated="20050115"/>
        </configurations>
        <publications>
-               <artifact name="myartifact1" type="jar" ext="jar" 
conf="myconf1,myconf2,myconf3,myconf4,myoldconf"/>
+               <artifact name="myartifact1" type="jar" ext="jar" 
conf="myconf1,myconf2,myconf3,myconf4,myoldconf" attr3="value3"/>
                <artifact name="myartifact2" type="jar" ext="jar" 
conf="myconf1"/>
                <artifact name="myartifact3" type="jar" ext="jar" 
conf="myconf1,myconf2,myconf3"/>
                <artifact name="myartifact4" type="jar" ext="jar" 
conf="myconf1,myconf3"/>
        </publications>
        <dependencies>
-               <dependency org="myorg" name="mymodule2" rev="2.0" conf="*->*"/>
+               <dependency org="myorg" name="mymodule2" rev="2.0" conf="*->*" 
attr4="value4"/>
                <dependency org="myorg" name="mymodule3" rev="2.0" 
changing="true" transitive="false" conf="*->*"/>
                <dependency org="yourorg" name="yourmodule1" rev="1.1" 
conf="myconf1->myconf1"/>
                <dependency org="yourorg" name="yourmodule2" rev="2+" 
conf="myconf1->yourconf1"/>
@@ -48,7 +49,7 @@
                <dependency org="yourorg" name="yourmodule6" 
rev="latest.integration" 
conf="myconf1->yourconf1;myconf2->yourconf1,yourconf2"/>
                <dependency org="yourorg" name="yourmodule7" rev="7.1" 
conf="myconf1->yourconf1;myconf2->yourconf1,yourconf2"/>
                <dependency org="yourorg" name="yourmodule8" rev="8.1" 
conf="*->*">
-                       <artifact name="yourartifact8-1" type="jar" ext="jar"/>
+                       <artifact name="yourartifact8-1" type="jar" ext="jar" 
attr5="value5"/>
                        <artifact name="yourartifact8-2" type="jar" ext="jar"/>
                </dependency>
                <dependency org="yourorg" name="yourmodule9" rev="9.1" 
conf="myconf1->default;myconf2->default;myconf3->default">

Modified: 
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml
URL: 
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml?rev=602266&r1=602265&r2=602266&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml 
(original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml Fri 
Dec  7 15:25:36 2007
@@ -17,12 +17,13 @@
    specific language governing permissions and limitations
    under the License.    
 -->
-<ivy-module version="2.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd";>
+<ivy-module version="2.0">
        <info organisation="myorg"
               module="mymodule"
               revision="myrev"
               status="integration"
-              publication="20041101110000">
+              publication="20041101110000"
+              attr1="value1">
               
                <license name="MyLicense" 
url="http://www.my.org/mymodule/mylicense.html"/>
                
@@ -37,14 +38,14 @@
                </description>
        </info>
        <configurations>
-               <conf name="myconf1" description="desc 1"/>
+               <conf name="myconf1" description="desc 1" attr2="value2"/>
                <conf name="myconf2" description="desc 2" visibility="public"/>
                <conf name="myconf3" description="desc 3" visibility="private"/>
                <conf name="myconf4" description="desc 4" extends="myconf1, 
myconf2"/>          
                <conf name="myoldconf" description="my old desc" 
deprecated="20050115"/>
        </configurations>
        <publications>
-               <artifact name="myartifact1" type="jar"/>
+               <artifact name="myartifact1" type="jar" attr3="value3"/>
                <artifact name="myartifact2" type="jar" conf="myconf1"/>
                <artifact name="myartifact3" type="jar" conf="myconf1, myconf2, 
myconf3"/>
                <artifact name="myartifact4" type="jar">
@@ -53,7 +54,7 @@
                </artifact>
        </publications>
        <dependencies>
-               <dependency name="mymodule2" rev="2.0"/>
+               <dependency name="mymodule2" rev="2.0" attr4="value4"/>
                <dependency name="mymodule3" rev="2.0" changing="true" 
transitive="false"/>
                <dependency org="yourorg" name="yourmodule1" rev="1.1" 
conf="myconf1"/>
                <dependency org="yourorg" name="yourmodule2" rev="2+" 
conf="myconf1->yourconf1"/>
@@ -77,7 +78,7 @@
                </dependency>
 
                <dependency org="yourorg" name="yourmodule8" rev="8.1">
-                       <artifact name="yourartifact8-1" type="jar"/>
+                       <artifact name="yourartifact8-1" type="jar" 
attr5="value5"/>
                        <artifact name="yourartifact8-2" type="jar"/>
                </dependency>           
 


Reply via email to