You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/04/17 12:59:42 UTC

svn commit: r649052 - in /ant/ivy/core/trunk/src/java/org/apache/ivy: core/settings/ plugins/parser/ plugins/parser/xml/ util/extendable/

Author: xavier
Date: Thu Apr 17 03:59:41 2008
New Revision: 649052

URL: http://svn.apache.org/viewvc?rev=649052&view=rev
Log:
add variable expansion in extra attributes (IVY-798)

Modified:
    ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/ParserSettings.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
    ant/ivy/core/trunk/src/java/org/apache/ivy/util/extendable/ExtendableItemHelper.java

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java?rev=649052&r1=649051&r2=649052&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java Thu Apr 17 03:59:41 2008
@@ -31,6 +31,7 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -575,6 +576,24 @@
      */
     public String substitute(String str) {
         return IvyPatternHelper.substituteVariables(str, variableContainer);
+    }
+
+    /**
+     * Substitute variables in the given map values by their value found in the current set of
+     * variables
+     * 
+     * @param strings
+     *            the map of strings in which substitution should be made
+     * @return a new map of strings in which all current ivy variables in values have been
+     *         substituted by their value
+     */
+    public Map/*<String, String>*/ substitute(Map/*<String, String>*/ strings) {
+        Map substituted = new LinkedHashMap();
+        for (Iterator it = strings.entrySet().iterator(); it.hasNext();) {
+            Map.Entry entry = (Map.Entry) it.next();
+            substituted.put(entry.getKey(), substitute((String) entry.getValue()));
+        }
+        return substituted;
     }
 
     /**

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/ParserSettings.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/ParserSettings.java?rev=649052&r1=649051&r2=649052&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/ParserSettings.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/ParserSettings.java Thu Apr 17 03:59:41 2008
@@ -17,6 +17,8 @@
  */
 package org.apache.ivy.plugins.parser;
 
+import java.util.Map;
+
 import org.apache.ivy.core.RelativeUrlResolver;
 import org.apache.ivy.core.cache.ResolutionCacheManager;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
@@ -29,6 +31,8 @@
 public interface ParserSettings {
 
     String substitute(String value);
+    
+    Map/*<String, String>*/ substitute(Map/*<String, String>*/ strings);
     
     ResolutionCacheManager getResolutionCacheManager();
 

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java?rev=649052&r1=649051&r2=649052&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java Thu Apr 17 03:59:41 2008
@@ -450,7 +450,7 @@
                                             : visibility), ivy.substitute(attributes
                                     .getValue("description")), ext == null ? null : ext
                                     .split(","), transitive, deprecated);
-                    ExtendableItemHelper.fillExtraAttributes(configuration, attributes,
+                    ExtendableItemHelper.fillExtraAttributes(ivy, configuration, attributes,
                         new String[] {"name", "visibility", "extends", "transitive",
                                 "description", "deprecated"});
                     getMd().addConfiguration(configuration);
@@ -511,7 +511,7 @@
             String revConstraint = ivy.substitute(attributes.getValue("revConstraint"));
             revConstraint = revConstraint == null ? rev : revConstraint;
             Map extraAttributes = ExtendableItemHelper.getExtraAttributes(
-                attributes, DEPENDENCY_REGULAR_ATTRIBUTES);
+                ivy, attributes, DEPENDENCY_REGULAR_ATTRIBUTES);
             dd = new DefaultDependencyDescriptor(
                 getMd(), 
                 ModuleRevisionId.newInstance(org, name, branch, rev, extraAttributes), 
@@ -536,7 +536,7 @@
                 ext = ext != null ? ext : type;
                 String url = ivy.substitute(attributes.getValue("url"));
                 artifact = new MDArtifact(getMd(), artName, type, ext, url == null ? null
-                        : new URL(url), ExtendableItemHelper.getExtraAttributes(attributes,
+                        : new URL(url), ExtendableItemHelper.getExtraAttributes(ivy, attributes,
                     new String[] {"ext", "type", "name", "conf"}));
                 String confs = ivy.substitute(attributes.getValue("conf"));
                 // only add confs if they are specified. if they aren't, endElement will
@@ -597,7 +597,7 @@
             String revision = ivy.substitute(attributes.getValue("revision"));
             String branch = ivy.substitute(attributes.getValue("branch"));
             getMd().setModuleRevisionId(ModuleRevisionId.newInstance(org, module, branch,
-                revision, ExtendableItemHelper.getExtraAttributes(attributes, new String[] {
+                revision, ExtendableItemHelper.getExtraAttributes(ivy, attributes, new String[] {
                         "organisation", "module", "revision", "status", "publication",
                         "branch", "namespace", "default", "resolver"})));
 
@@ -691,8 +691,8 @@
             ext = ext != null ? ext : type;
             if (state == DEP_ARTIFACT) {
                 String url = ivy.substitute(attributes.getValue("url"));
-                Map extraAtt = ExtendableItemHelper.getExtraAttributes(attributes, new String[] {
-                        "name", "type", "ext", "url", "conf"});
+                Map extraAtt = ExtendableItemHelper.getExtraAttributes(ivy, attributes, 
+                    new String[] {"name", "type", "ext", "url", "conf"});
                 confAware = new DefaultDependencyArtifactDescriptor(dd, name, type, ext,
                         url == null ? null : new URL(url), extraAtt);
             } else if (state == ARTIFACT_INCLUDE) {
@@ -702,8 +702,8 @@
                 String module = ivy.substitute(attributes.getValue("module"));
                 module = module == null ? PatternMatcher.ANY_EXPRESSION : module;
                 ArtifactId aid = new ArtifactId(new ModuleId(org, module), name, type, ext);
-                Map extraAtt = ExtendableItemHelper.getExtraAttributes(attributes, new String[] {
-                        "org", "module", "name", "type", "ext", "matcher", "conf"});
+                Map extraAtt = ExtendableItemHelper.getExtraAttributes(ivy, attributes, 
+                    new String[] {"org", "module", "name", "type", "ext", "matcher", "conf"});
                 confAware = new DefaultIncludeRule(aid, matcher, extraAtt);
             } else { // _state == ARTIFACT_EXCLUDE || EXCLUDE
                 PatternMatcher matcher = getPatternMatcher(attributes.getValue("matcher"));
@@ -712,8 +712,8 @@
                 String module = ivy.substitute(attributes.getValue("module"));
                 module = module == null ? PatternMatcher.ANY_EXPRESSION : module;
                 ArtifactId aid = new ArtifactId(new ModuleId(org, module), name, type, ext);
-                Map extraAtt = ExtendableItemHelper.getExtraAttributes(attributes, new String[] {
-                        "org", "module", "name", "type", "ext", "matcher", "conf"});
+                Map extraAtt = ExtendableItemHelper.getExtraAttributes(ivy, attributes, 
+                    new String[] {"org", "module", "name", "type", "ext", "matcher", "conf"});
                 confAware = new DefaultExcludeRule(aid, matcher, extraAtt);
             }
             String confs = ivy.substitute(attributes.getValue("conf"));

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java?rev=649052&r1=649051&r2=649052&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java Thu Apr 17 03:59:41 2008
@@ -367,7 +367,7 @@
             
             String revision = substitute(settings, attributes.getValue("rev"));
             String revisionConstraint = substitute(settings, attributes.getValue("revConstraint"));
-            Map extraAttributes = ExtendableItemHelper.getExtraAttributes(attributes,
+            Map extraAttributes = ExtendableItemHelper.getExtraAttributes(settings, attributes,
                 XmlModuleDescriptorParser.DEPENDENCY_REGULAR_ATTRIBUTES);
             ModuleRevisionId localMrid = ModuleRevisionId.newInstance(org, module, branch,
                 revision, extraAttributes);
@@ -513,7 +513,7 @@
                 rev = substitute(settings, attributes.getValue("revision"));
             }
             ModuleRevisionId localMid = ModuleRevisionId.newInstance(organisation, module, null,
-                rev, ExtendableItemHelper.getExtraAttributes(attributes,
+                rev, ExtendableItemHelper.getExtraAttributes(settings, attributes,
                     new String[] {"organisation", "module", "revision", "status", "publication",
                         "namespace"}));
             ModuleRevisionId systemMid = ns == null ? localMid : ns.getToSystemTransformer()

Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/util/extendable/ExtendableItemHelper.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/util/extendable/ExtendableItemHelper.java?rev=649052&r1=649051&r2=649052&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/util/extendable/ExtendableItemHelper.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/util/extendable/ExtendableItemHelper.java Thu Apr 17 03:59:41 2008
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.ivy.plugins.parser.ParserSettings;
 import org.xml.sax.Attributes;
 
 public final class ExtendableItemHelper {
@@ -39,20 +40,21 @@
         return ret;
     }
 
-    public static Map getExtraAttributes(Attributes attributes, String[] ignoredAttNames) {
+    public static Map getExtraAttributes(
+            ParserSettings settings, Attributes attributes, String[] ignoredAttNames) {
         Map ret = new HashMap();
         Collection ignored = Arrays.asList(ignoredAttNames);
         for (int i = 0; i < attributes.getLength(); i++) {
             if (!ignored.contains(attributes.getQName(i))) {
-                ret.put(attributes.getQName(i), attributes.getValue(i));
+                ret.put(attributes.getQName(i), settings.substitute(attributes.getValue(i)));
             }
         }
         return ret;
     }
 
-    public static void fillExtraAttributes(DefaultExtendableItem item, Attributes attributes,
-            String[] ignoredAttNames) {
-        Map att = getExtraAttributes(attributes, ignoredAttNames);
+    public static void fillExtraAttributes(ParserSettings settings, DefaultExtendableItem item, 
+            Attributes attributes,  String[] ignoredAttNames) {
+        Map att = getExtraAttributes(settings, attributes, ignoredAttNames);
         for (Iterator iter = att.keySet().iterator(); iter.hasNext();) {
             String attName = (String) iter.next();
             String attValue = (String) att.get(attName);