FELIX-3542 - Escape property values used as Metatype default values


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1470946 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/generator/changelog.txt b/scrplugin/generator/changelog.txt
index 65617da..6f0c597 100644
--- a/scrplugin/generator/changelog.txt
+++ b/scrplugin/generator/changelog.txt
@@ -2,6 +2,8 @@
 ---------------------------
 ** Bug
     * [FELIX-4030] - Generated metatype file contains all metatype infos
+    * [FELIX-3542] - Escape property values used as Metatype default values
+
  
 Changes from 1.5.0 to 1.4.0
 ----------------------------
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/MetatypeAttributeDefinition.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/MetatypeAttributeDefinition.java
index 0d096fe..3870141 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/MetatypeAttributeDefinition.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/MetatypeAttributeDefinition.java
@@ -59,7 +59,7 @@
         }
     }
 
-    public Object getDefaultValue() {
+    public String getDefaultValue() {
         return this.defaultValue;
     }
 
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
index cc2a684..9a55c69 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/xml/MetaTypeIO.java
@@ -212,6 +212,21 @@
         IOUtils.newline(contentHandler);
     }
 
+    /**
+     * Escape the value according to 105.13.3.21 (validate method)
+     */
+    private static String escapeDefaultValue(final String value) {
+        if ( value == null ) {
+            return value;
+        }
+
+        String result = value.trim();
+        result = result.replace(" ", "\\ ");
+        result = result.replace(",", "\\,");
+        result = result.replace("\\", "\\\\");
+        return result;
+    }
+
     private static void generateAttributeXML(final MetatypeAttributeDefinition ad, final ContentHandler contentHandler)
             throws SAXException {
         final AttributesImpl ai = new AttributesImpl();
@@ -223,11 +238,11 @@
                 if ( i > 0 ) {
                     buf.append(',');
                 }
-                buf.append(ad.getDefaultMultiValue()[i]);
+                buf.append(escapeDefaultValue(ad.getDefaultMultiValue()[i]));
             }
             IOUtils.addAttribute(ai, "default", buf);
         } else {
-            IOUtils.addAttribute(ai, "default", ad.getDefaultValue());
+            IOUtils.addAttribute(ai, "default", escapeDefaultValue(ad.getDefaultValue()));
         }
         IOUtils.addAttribute(ai, "name", ad.getName());
         IOUtils.addAttribute(ai, "description", ad.getDescription());
diff --git a/scrplugin/maven-scr-plugin/changelog.txt b/scrplugin/maven-scr-plugin/changelog.txt
index 904462f..bcdf87f 100644
--- a/scrplugin/maven-scr-plugin/changelog.txt
+++ b/scrplugin/maven-scr-plugin/changelog.txt
@@ -3,6 +3,7 @@
 ** Bug
     * [FELIX-4030] - Generated metatype file contains all metatype infos
     * [FELIX-4023] - SCR-Plugin not working reliably in m2e 1.3.1 
+    * [FELIX-3542] - Escape property values used as Metatype default values
 
 
 Changes from 1.11.0 to 1.10.0
diff --git a/scrplugin/scrtask/changelog.txt b/scrplugin/scrtask/changelog.txt
index cc440f0..73a1571 100644
--- a/scrplugin/scrtask/changelog.txt
+++ b/scrplugin/scrtask/changelog.txt
@@ -2,6 +2,8 @@
 ---------------------------
 ** Bug
     * [FELIX-4030] - Generated metatype file contains all metatype infos
+    * [FELIX-3542] - Escape property values used as Metatype default values
+
 
 Changes from 1.5.0 to 1.4.0
 ----------------------------