Author: nicolas
Date: Thu Feb 28 07:48:18 2008
New Revision: 632030

URL: http://svn.apache.org/viewvc?rev=632030&view=rev
Log:
add support for Properties as plexus <configuration>

Added:
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
   (with props)
    
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
   (with props)
    
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
   (with props)
Modified:
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusNamespaceHandler.java
    
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContextTest.java

Modified: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java?rev=632030&r1=632029&r2=632030&view=diff
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
 (original)
+++ 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
 Thu Feb 28 07:48:18 2008
@@ -80,6 +80,7 @@
         // Register a PorpertyEditor to support plexus XML <configuration> set 
as CDATA in
         // a spring context XML file.
         beanFactory.addPropertyEditorRegistrar( new 
PlexusConfigurationPropertyEditor() );
+        beanFactory.addPropertyEditorRegistrar( new PropertiesPropertyEditor() 
);
     }
 
     /**

Modified: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusNamespaceHandler.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusNamespaceHandler.java?rev=632030&r1=632029&r2=632030&view=diff
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusNamespaceHandler.java
 (original)
+++ 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusNamespaceHandler.java
 Thu Feb 28 07:48:18 2008
@@ -170,7 +170,11 @@
         for ( int i = 0; i < childNodes.getLength(); i++ )
         {
             Node node = childNodes.item( i );
-            if (node.getNodeType() == Node.ELEMENT_NODE )
+            if (node.getNodeType() == Node.TEXT_NODE )
+            {
+                out.print( node.getTextContent() );
+            }
+            else if (node.getNodeType() == Node.ELEMENT_NODE )
             {
                 flatten( (Element) node, out );
             }

Added: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java?rev=632030&view=auto
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
 (added)
+++ 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
 Thu Feb 28 07:48:18 2008
@@ -0,0 +1,94 @@
+package org.codehaus.plexus.spring;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.beans.PropertyEditorSupport;
+import java.io.StringReader;
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.apache.commons.lang.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.springframework.beans.PropertyEditorRegistrar;
+import org.springframework.beans.PropertyEditorRegistry;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class PropertiesPropertyEditor
+    extends PropertyEditorSupport
+    implements PropertyEditorRegistrar
+{
+
+    /**
+     * [EMAIL PROTECTED]
+     *
+     * @see 
org.springframework.beans.PropertyEditorRegistrar#registerCustomEditors(org.springframework.beans.PropertyEditorRegistry)
+     */
+    public void registerCustomEditors( PropertyEditorRegistry registry )
+    {
+        registry.registerCustomEditor( Properties.class, this );
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     * <p>
+     * Support for plexus properties injection
+     * <pre>
+     * &lt;fieldName>
+     *     &lt;property&gt;
+     *       &lt;name&gt;key&lt;/name&gt;
+     *       &lt;value&gt;true&lt;/value&gt;
+     *     &lt;/property&gt;
+     * ...
+     * </pre>
+     *
+     * @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
+     */
+    public void setAsText( String text )
+        throws IllegalArgumentException
+    {
+        if ( StringUtils.isBlank( text ) )
+        {
+            setValue( null );
+            return;
+        }
+        Properties properties = new Properties();
+        try
+        {
+            SAXReader reader = new SAXReader();
+            Document doc = reader.read( new StringReader( text ) );
+            Element root = doc.getRootElement();
+            for ( Iterator i = root.elementIterator(); i.hasNext(); )
+            {
+                Element element = (Element) i.next();
+                properties.setProperty( element.element( "name" ).getText(), 
element.element( "value" ).getText() );
+            }
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalArgumentException( "Failed to convert to 
Properties", e );
+        }
+        setValue( properties );
+    }
+
+}

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PropertiesPropertyEditor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContextTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContextTest.java?rev=632030&r1=632029&r2=632030&view=diff
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContextTest.java
 (original)
+++ 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContextTest.java
 Thu Feb 28 07:48:18 2008
@@ -98,4 +98,14 @@
         assertEquals( "expected", plexusBean.getConfig().getChild( "xml" 
).getAttribute( "test" ) );
     }
 
+    public void testInjectProperties()
+        throws Exception
+    {
+        ConfigurableApplicationContext applicationContext =
+            new PlexusClassPathXmlApplicationContext( new String[] {
+                "testInjectProperties.xml" } );
+        PropertiesPlexusBean plexusBean = (PropertiesPlexusBean) 
applicationContext.getBean( "plexusBean" );
+        assertEquals( "expected", plexusBean.getProperties().getProperty( 
"test" ) );
+    }
+
 }

Added: 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java?rev=632030&view=auto
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
 (added)
+++ 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
 Thu Feb 28 07:48:18 2008
@@ -0,0 +1,40 @@
+package org.codehaus.plexus.spring;
+
+import java.util.Properties;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A typical plexus component implementation
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class PropertiesPlexusBean
+{
+    private Properties properties;
+
+    public Properties getProperties()
+    {
+        return properties;
+    }
+
+
+
+}

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/test/java/org/codehaus/plexus/spring/PropertiesPlexusBean.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml?rev=632030&view=auto
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
 (added)
+++ 
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
 Thu Feb 28 07:48:18 2008
@@ -0,0 +1,20 @@
+<component-set>
+  <components>
+    <component>
+      <role>org.codehaus.plexus.spring.PlexusBean</role>
+      
<implementation>org.codehaus.plexus.spring.PropertiesPlexusBean</implementation>
+      <configuration>
+        <properties>
+            <property>
+                <name>test</name>
+                <value>expected</value>
+            </property>
+            <property>
+                <name>other</name>
+                <value>value</value>
+            </property>
+        </properties>
+      </configuration>
+    </component>
+  </components>
+</component-set>

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectProperties.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml


Reply via email to