You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/08/07 13:31:48 UTC

svn commit: rev 36059 - in avalon/trunk/planet/facilities/console: blocks/default commands/src/main/org/apache/avalon/facilities/console/commands

Author: niclas
Date: Sat Aug  7 04:31:47 2004
New Revision: 36059

Added:
   avalon/trunk/planet/facilities/console/commands/src/main/org/apache/avalon/facilities/console/commands/ViewModelCmd.java   (contents, props changed)
Modified:
   avalon/trunk/planet/facilities/console/blocks/default/build.xml
Log:
Added a 'viewmodel' command to the console.

Modified: avalon/trunk/planet/facilities/console/blocks/default/build.xml
==============================================================================
--- avalon/trunk/planet/facilities/console/blocks/default/build.xml	(original)
+++ avalon/trunk/planet/facilities/console/blocks/default/build.xml	Sat Aug  7 04:31:47 2004
@@ -40,6 +40,9 @@
                    
       <x:component name="help" 
                    class="org.apache.avalon.facilities.console.commands.HelpCmd"/>
+                   
+      <x:component name="viewmodel" 
+                   class="org.apache.avalon.facilities.console.commands.ViewModelCmd"/>
     </x:block>
   </target>
 

Added: avalon/trunk/planet/facilities/console/commands/src/main/org/apache/avalon/facilities/console/commands/ViewModelCmd.java
==============================================================================
--- (empty file)
+++ avalon/trunk/planet/facilities/console/commands/src/main/org/apache/avalon/facilities/console/commands/ViewModelCmd.java	Sat Aug  7 04:31:47 2004
@@ -0,0 +1,198 @@
+/*
+ * Copyright 1997-2004 Apache Software Foundation
+ * 
+ * Licensed 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.
+ */
+package org.apache.avalon.facilities.console.commands;
+
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+
+import org.apache.avalon.composition.model.ComponentModel;
+import org.apache.avalon.composition.model.ContainmentModel;
+import org.apache.avalon.composition.model.DeploymentModel;
+
+import org.apache.avalon.facilities.console.Console;
+import org.apache.avalon.facilities.console.ConsoleCommand;
+
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Contextualizable;
+
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+
+/**
+ * @avalon.component name="console-dummy" lifestyle="singleton"
+ * @avalon.service type="org.apache.avalon.facilities.console.ConsoleCommand"
+ */
+public class ViewModelCmd
+    implements ConsoleCommand, Serviceable, Contextualizable
+{
+    private ContainmentModel m_RootModel;
+    
+    public String getName()
+    {
+        return "viewmodel";
+    }
+    
+    public String getDescription()
+    {
+        String str = "usage: viewmodel (path)\n\nDisplays the composition model.";
+        return str;
+    }
+    
+    /**
+     * Contextulaization of the listener by the container during 
+     * which we are supplied with the root composition model for 
+     * the application.
+     *
+     * @param ctx the supplied listener context
+     *
+     * @exception ContextException if a contextualization error occurs
+     *
+     * @avalon.entry key="urn:composition:containment.model" 
+     *               type="org.apache.avalon.composition.model.ContainmentModel" 
+     *
+     */
+    public void contextualize( Context ctx ) 
+        throws ContextException
+    {
+        m_RootModel = (ContainmentModel) ctx.get( "urn:composition:containment.model" );
+    }
+    
+    /**
+     * @avalon.dependency type="org.apache.avalon.facilities.console.Console"
+     *                    key="console"
+     */
+    public void service( ServiceManager man )
+        throws ServiceException
+    {
+        Console console = (Console) man.lookup( "console" );
+        console.addCommand( this );
+    }
+    
+    public void execute( BufferedReader input, BufferedWriter output, String[] arguments )
+        throws Exception
+    {
+        output.newLine();
+        String path;
+        if( arguments.length == 0 )
+            path = "/";
+        else
+            path = arguments[0];
+        DeploymentModel model = m_RootModel.getModel( path );
+        
+        printModel( output, "", model );
+        output.newLine();
+        output.flush();
+    }
+
+    public void printModel( BufferedWriter output, String lead, DeploymentModel model )
+        throws IOException
+    {
+        if( model instanceof ContainmentModel )
+        {
+            printContainmentModel( output, lead, (ContainmentModel) model );
+        }
+        else if( model instanceof ComponentModel ) 
+        {
+            printComponentModel( output, lead, (ComponentModel) model );
+        }
+    }
+
+    public void printContainmentModel( BufferedWriter output, String lead, ContainmentModel model )
+        throws IOException
+    {
+        printDeploymentModel( output, lead, model );
+        DeploymentModel[] models = model.getModels();
+        if( models.length > 0 )
+        {
+            output.write( lead + "  children:" );
+            output.newLine();
+            for( int i=0; i<models.length; i++ )
+            {
+                DeploymentModel m = models[i];
+                printModel( output, "    " + lead, m );
+            }
+        }
+        models = model.getStartupGraph();
+        if( models.length > 0 )
+        {
+            output.write( lead + "  startup:" );
+            output.newLine();
+            for( int i=0; i<models.length; i++ )
+            {
+                DeploymentModel m = models[i];
+                output.write( "    " + lead + (i+1) + ": " + m );
+                output.newLine();
+            }
+        }
+        models = ((ContainmentModel)model).getShutdownGraph();
+        if( models.length > 0 )
+        {
+            output.write( lead + "  shutdown:" );
+            output.newLine();
+            for( int i=0; i<models.length; i++ )
+            {
+                DeploymentModel m = models[i];
+                output.write( "    " + lead + (i+1) + ": " + m );
+                output.newLine();
+            }
+        }
+    }
+
+    public void printComponentModel( BufferedWriter output, String lead, ComponentModel model )
+        throws IOException
+    {
+        printDeploymentModel( output, lead, model );
+    }
+
+    public void printDeploymentModel( BufferedWriter output, String lead, DeploymentModel model )
+        throws IOException
+    {
+        output.write( 
+          lead 
+          + "model:" 
+          + model + "(" 
+          + model.getDeploymentTimeout() 
+          + ")" );
+
+        output.newLine();
+        DeploymentModel[] providers = model.getProviderGraph();
+        DeploymentModel[] consumers = model.getConsumerGraph();
+
+        if(( providers.length == 0 ) && ( consumers.length == 0 ))
+        {
+            return;
+        }
+
+        if( providers.length > 0 ) for( int i=0; i<providers.length; i++ )
+        {
+            DeploymentModel m = providers[i];
+            output.write( lead + "  <-- " + m );
+            output.newLine();
+        }
+
+        if( consumers.length > 0 ) for( int i=0; i<consumers.length; i++ )
+        {
+            DeploymentModel m = consumers[i];
+            output.write( lead + "  --> " + m );
+            output.newLine();
+        }
+    }
+
+}
+ 

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