You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/07/02 07:33:28 UTC

svn commit: rev 22445 - avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks

Author: mcconnell
Date: Thu Jul  1 22:33:28 2004
New Revision: 22445

Modified:
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/BlockTask.java
Log:
Add context handling into the block task.

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/BlockTask.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/BlockTask.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/BlockTask.java	Thu Jul  1 22:33:28 2004
@@ -67,6 +67,7 @@
     {
         private String m_classname;
         private String m_profile;
+        private Context m_context;
 
         public void setClass( final String classname )
         {
@@ -87,6 +88,26 @@
         {
             return m_profile;
         }
+
+        public Context createContext()
+        {
+            if( null == m_context )
+            {
+                m_context = new Context();
+                return m_context;
+            }
+            else
+            {
+                final String error = 
+                  "Context entry already defined!";
+                throw new BuildException( error );
+            }
+        }
+
+        public Context getContext()
+        {
+            return m_context;
+        }
     }
 
     public static class Include extends Identifiable
@@ -130,6 +151,92 @@
         }
     }
 
+    public static class Context
+    {
+        private String m_class;
+        private List m_entries = new ArrayList();
+
+        public void setClass( final String classname )
+        {
+            m_class = classname ;
+        }
+
+        public String getClassname()
+        {
+            return m_class;
+        }
+
+        public Entry createEntry()
+        {
+            final Entry entry = new Entry();
+            m_entries.add( entry );
+            return entry;
+        }
+
+        public Entry[] getEntries()
+        {
+            return (Entry[]) m_entries.toArray( new Entry[0] );
+        }
+    }
+
+    public static class Entry extends Constructor
+    {
+        private String m_key;
+
+        public void setKey( final String key )
+        {
+            m_key = key ;
+        }
+
+        public String getKey()
+        {
+            return m_key;
+        }
+    }
+
+    public static class Param
+    {
+        private String m_classname;
+        private String m_value;
+        private List m_params = new ArrayList();
+
+        public void setClass( final String classname )
+        {
+            m_classname = classname;
+        }
+
+        public String getClassname()
+        {
+            return m_classname;
+        }
+
+        public void setValue( final String value )
+        {
+            m_value = value;
+        }
+
+        public String getValue()
+        {
+            return m_value;
+        }
+
+        public Param createParam()
+        {
+            final Param param = new Param();
+            m_params.add( param );
+            return param;
+        }
+
+        public Param[] getParams()
+        {
+            return (Param[]) m_params.toArray( new Param[0] );
+        }
+    }
+
+    public static class Constructor extends Param
+    {
+    }
+
     private String m_target;
     private String m_container;
     private List m_content = new ArrayList();
@@ -276,7 +383,6 @@
         boolean standalone = (null == m_target);
         writeClasspath( writer, def, "    ", standalone );
         writer.write( "\n  </classloader>" );
-        writer.write( "\n" );
 
         Identifiable[] components = 
           (Identifiable[]) m_content.toArray( new Identifiable[0] );
@@ -293,24 +399,86 @@
             }
         }
 
-        writer.write( "\n</container>\n" );
+        writer.write( "\n\n</container>\n" );
     }
 
     private void writeComponent( final Writer writer, final Component component )
         throws IOException
     {
-        if( null == component.getProfile() )
+        writer.write( "\n\n  <component name=\"" + component.getName() 
+          + "\" class=\"" + component.getClassname() + "\"" );
+
+        if( null != component.getProfile() )
+        {
+            writer.write( " profile=\"" + component.getProfile() + "\"" );
+        }
+        if( null != component.getContext() )
+        {
+            writer.write( ">" );
+            writeContext( writer, component.getContext() );
+            writer.write( "\n  </component>" );
+        }
+        else
+        {
+            writer.write( "/>" );
+        }
+    }
+
+    private void writeContext( final Writer writer, final Context context )
+        throws IOException
+    {
+        writer.write( "\n    <context" ); 
+        if( null != context.getClassname() )
+        {
+            writer.write( " class=\"" + context.getClassname() + "\"" );
+        }
+        Entry[] entries = context.getEntries();
+        if( entries.length == 0 )
+        {
+            writer.write( "/>" );
+        }
+        else
+        {
+            writer.write( ">" );
+            for( int i=0; i<entries.length; i++ )
+            {
+                writeEntry( writer, entries[i] );
+            }  
+            writer.write( "\n    </context>" ); 
+        }
+    }
+
+    private void writeEntry( final Writer writer, final Entry entry )
+        throws IOException
+    {
+        writer.write( 
+          "\n      <entry key=\"" + entry.getKey() + "\"" );
+
+        if( null != entry.getClassname() )
+        {
+            writer.write( " class=\"" + entry.getClassname() + "\"" );
+        }
+
+        if( null != entry.getValue() )
         {
-            writer.write( 
-              "\n  <component name=\"" + component.getName() + "\" class=\""
-              + component.getClassname() + "\"/>\n" );
+            writer.write( ">" + entry.getValue() + "</entry>" );
         }
         else
         {
-            writer.write( 
-              "\n  <component name=\"" + component.getName()  + "\" profile=\""
-              + component.getProfile() + "\"\n    class=\""
-              + component.getClassname() + "\"/>\n" );
+            Param[] params = entry.getParams();
+            if( params.length == 0 )
+            {
+                writer.write( "/>" );  // is this legal?
+            }
+            else
+            {
+                writer.write( ">" );
+                for( int i=0; i<params.length; i++ )
+                {
+                    writeParam( writer, params[i] );
+                } 
+                writer.write( "\n      </entry>" ); 
+            }
         }
     }
 
@@ -332,5 +500,41 @@
         writer.write( "\n      <source>" + service.getSource() + "</source>" );
         writer.write( "\n    </service>" );
         writer.write( "\n  </services>" );
+    }
+
+    private void writeParam( final Writer writer, final Param param )
+        throws IOException
+    {
+        if( null == param.getClassname() )
+        {
+            writer.write( "\n        <param>" );
+        }
+        else
+        {
+            writer.write( "\n        <param class=\"" + param.getClassname() + "\">" );
+        }
+
+        String value = param.getValue();
+        if( null != value )
+        {
+            writer.write( value + "</param>" );
+        }
+        else
+        {
+            Param[] parameters = param.getParams();
+            if( parameters.length == 0 )
+            {
+                writer.write( "/>" );  // is this legal?
+            }
+            else
+            {
+                writer.write( ">" );
+                for( int i=0; i<parameters.length; i++ )
+                {
+                    writeParam( writer, parameters[i] );
+                } 
+                writer.write( "\n        </param>" ); 
+            }
+        }
     }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org