Author: nicolas
Date: Wed Feb 27 23:57:43 2008
New Revision: 631880

URL: http://svn.apache.org/viewvc?rev=631880&view=rev
Log:
incomplete support for PlexusConfiguration based on spring-context nodes

Added:
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusConfigurationPropertyEditor.java
   (with props)
Modified:
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/DomPlexusConfiguration.java
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
    
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusNamespaceHandler.java

Modified: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/DomPlexusConfiguration.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/DomPlexusConfiguration.java?rev=631880&r1=631879&r2=631880&view=diff
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/DomPlexusConfiguration.java
 (original)
+++ 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/DomPlexusConfiguration.java
 Wed Feb 27 23:57:43 2008
@@ -19,9 +19,19 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.smartcardio.ATR;
+
 import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.springframework.util.xml.DomUtils;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
@@ -31,14 +41,11 @@
 {
     private Element root;
 
-    private String name;
-
     /**
      *
      */
-    public DomPlexusConfiguration( String name, Element root )
+    public DomPlexusConfiguration( Element root )
     {
-        this.name = name;
         this.root = root;
     }
 
@@ -59,8 +66,7 @@
     public String getAttribute( String paramName )
         throws PlexusConfigurationException
     {
-        // TODO Auto-generated method stub
-        return null;
+        return root.getAttribute( paramName );
     }
 
     /**
@@ -69,8 +75,12 @@
      */
     public String getAttribute( String name, String defaultValue )
     {
-        // TODO Auto-generated method stub
-        return null;
+        String attribute = root.getAttribute( name );
+        if ( attribute == null )
+        {
+            attribute = defaultValue;
+        }
+        return attribute;
     }
 
     /**
@@ -79,8 +89,13 @@
      */
     public String[] getAttributeNames()
     {
-        // TODO Auto-generated method stub
-        return null;
+        NamedNodeMap attributes = root.getAttributes();
+        String[] names = new String[attributes.getLength()];
+        for ( int i = 0; i < names.length; i++ )
+        {
+            names[i] = attributes.item( i ).getLocalName();
+        }
+        return names;
     }
 
     /**
@@ -89,7 +104,11 @@
      */
     public PlexusConfiguration getChild( String child )
     {
-        // TODO Auto-generated method stub
+        Element e = DomUtils.getChildElementByTagName( root, child );
+        if (e != null)
+        {
+            return new DomPlexusConfiguration( e );
+        }
         return null;
     }
 
@@ -99,7 +118,18 @@
      */
     public PlexusConfiguration getChild( int i )
     {
-        // TODO Auto-generated method stub
+        NodeList childs = root.getChildNodes();
+        for ( int j = 0; j < childs.getLength(); j++ )
+        {
+            Node child = childs.item( j );
+            if ( child.getNodeType() == Node.ELEMENT_NODE )
+            {
+                if (i-- == 0)
+                {
+                    return new DomPlexusConfiguration( (Element) child );
+                }
+            }
+        }
         return null;
     }
 
@@ -109,8 +139,13 @@
      */
     public PlexusConfiguration getChild( String child, boolean createChild )
     {
-        // TODO Auto-generated method stub
-        return null;
+        PlexusConfiguration config = getChild( child );
+        if (config == null && createChild )
+        {
+            // Creating a new child requires a Document
+            throw new UnsupportedOperationException( "Not implemented" );
+        }
+        return config;
     }
 
     /**
@@ -119,8 +154,17 @@
      */
     public int getChildCount()
     {
-        // TODO Auto-generated method stub
-        return 0;
+        int count = 0;
+        NodeList childs = root.getChildNodes();
+        for ( int i = 0; i < childs.getLength(); i++ )
+        {
+            Node child = childs.item( i );
+            if ( child.getNodeType() == Node.ELEMENT_NODE )
+            {
+                count++;
+            }
+        }
+        return count;
     }
 
     /**
@@ -129,8 +173,13 @@
      */
     public PlexusConfiguration[] getChildren()
     {
-        // TODO Auto-generated method stub
-        return null;
+        int count = getChildCount();
+        PlexusConfiguration[] children = new PlexusConfiguration[count];
+        for ( int i = 0; i < children.length; i++ )
+        {
+            children[i] = getChild( i );
+        }
+        return children;
     }
 
     /**
@@ -139,8 +188,7 @@
      */
     public PlexusConfiguration[] getChildren( String name )
     {
-        // TODO Auto-generated method stub
-        return null;
+        throw new UnsupportedOperationException( "Not implemented" );
     }
 
     /**
@@ -149,8 +197,7 @@
      */
     public String getName()
     {
-        // TODO Auto-generated method stub
-        return null;
+        return root.getNodeName();
     }
 
     /**
@@ -160,8 +207,7 @@
     public String getValue()
         throws PlexusConfigurationException
     {
-        // TODO Auto-generated method stub
-        return null;
+        return root.getNodeValue();
     }
 
     /**
@@ -170,7 +216,11 @@
      */
     public String getValue( String defaultValue )
     {
-        // TODO Auto-generated method stub
-        return null;
+        String value = root.getTextContent();
+        if ( value == null )
+        {
+            value = defaultValue;
+        }
+        return value;
     }
 }

Modified: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java?rev=631880&r1=631879&r2=631880&view=diff
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
 (original)
+++ 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
 Wed Feb 27 23:57:43 2008
@@ -111,13 +111,19 @@
      */
     protected void postProcessBeanFactory( ConfigurableListableBeanFactory 
beanFactory )
     {
+        // Register a PlexusContainerAdapter bean to allow context lookups 
using plexus API
         PlexusContainerAdapter plexus = new PlexusContainerAdapter();
         plexus.setApplicationContext( this );
         beanFactory.registerSingleton( "plexusContainer", plexus );
 
+        // Register a beanPostProcessor to handle plexus interface-based 
lifecycle management
         lifecycleBeanPostProcessor = new PlexusLifecycleBeanPostProcessor();
         lifecycleBeanPostProcessor.setBeanFactory( this );
         beanFactory.addBeanPostProcessor( lifecycleBeanPostProcessor );
+
+        // Register a PorpertyEditor to support plexus XML <configuration> set 
as CDATA in
+        // a spring context XML file.
+        beanFactory.addPropertyEditorRegistrar( new 
PlexusConfigurationPropertyEditor() );
     }
 
     /**

Added: 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusConfigurationPropertyEditor.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusConfigurationPropertyEditor.java?rev=631880&view=auto
==============================================================================
--- 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusConfigurationPropertyEditor.java
 (added)
+++ 
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusConfigurationPropertyEditor.java
 Wed Feb 27 23:57:43 2008
@@ -0,0 +1,80 @@
+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.IOException;
+import java.io.StringReader;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.lang.StringUtils;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.springframework.beans.PropertyEditorRegistrar;
+import org.springframework.beans.PropertyEditorRegistry;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class PlexusConfigurationPropertyEditor
+    extends PropertyEditorSupport
+    implements PropertyEditorRegistrar
+{
+
+    /**
+     * [EMAIL PROTECTED]
+     *
+     * @see 
org.springframework.beans.PropertyEditorRegistrar#registerCustomEditors(org.springframework.beans.PropertyEditorRegistry)
+     */
+    public void registerCustomEditors( PropertyEditorRegistry registry )
+    {
+        registry.registerCustomEditor( PlexusConfiguration.class, this );
+    }
+
+    /**
+     * [EMAIL PROTECTED]
+     *
+     * @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
+     */
+    public void setAsText( String text )
+        throws IllegalArgumentException
+    {
+        if (StringUtils.isBlank( text ))
+        {
+            setValue( null );
+            return;
+        }
+        try
+        {
+            Xpp3Dom dom = Xpp3DomBuilder.build( new StringReader( text ) );
+            XmlPlexusConfiguration configuration = new XmlPlexusConfiguration( 
dom );
+            setValue( configuration );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalArgumentException( "Failed to convert to Plexus 
XML configuration", e );
+        }
+    }
+
+}

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

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

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

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=631880&r1=631879&r2=631880&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
 Wed Feb 27 23:57:43 2008
@@ -127,7 +127,7 @@
                 }
                 else
                 {
-                    dependencies.put( name, new DomPlexusConfiguration( name, 
child ) );
+                    dependencies.put( name, new DomPlexusConfiguration( child 
) );
                 }
             }
 


Reply via email to