You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2008/06/20 19:48:19 UTC

svn commit: r670007 - in /geronimo/gshell/trunk: gshell-api/src/main/java/org/apache/geronimo/gshell/command/ gshell-commands/gshell-builtins/src/main/java/org/apache/geronimo/gshell/commands/builtins/ gshell-plugin/src/main/java/org/apache/geronimo/gs...

Author: jdillon
Date: Fri Jun 20 10:48:19 2008
New Revision: 670007

URL: http://svn.apache.org/viewvc?rev=670007&view=rev
Log:
Add CommandResolver component

Added:
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainer.java
      - copied, changed from r669893, geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java   (contents, props changed)
      - copied, changed from r669893, geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandFactory.java
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java   (with props)
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandNotFoundException.java
      - copied, changed from r669867, geronimo/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/NotFoundException.java
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandResolver.java
      - copied, changed from r669893, geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java   (contents, props changed)
      - copied, changed from r669956, geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDescriptor.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java   (contents, props changed)
      - copied, changed from r669926, geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommand.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandResolver.java
      - copied, changed from r669926, geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompleter.java
Removed:
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandFactory.java
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDescriptor.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommand.java
Modified:
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContext.java
    geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandInfo.java
    geronimo/gshell/trunk/gshell-commands/gshell-builtins/src/main/java/org/apache/geronimo/gshell/commands/builtins/HelpCommand.java
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/PluginDescriptor.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumenter.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandFactory.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandLineExecutor.java
    geronimo/gshell/trunk/src/uml/GShell.mdxml

Modified: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java Fri Jun 20 10:48:19 2008
@@ -20,45 +20,12 @@
 package org.apache.geronimo.gshell.command;
 
 /**
- * Containment for an installed command and its related components.
+ * ???
  *
  * @version $Rev$ $Date$
  */
 public interface Command
+    extends CommandContainer
 {
-    /**
-     * Returns the configured identifier of the command.
-     *
-     * @return  The command identifier; never null;
-     */
-    String getId();
-
-    /**
-     * Returns the action of the command.
-     *
-     * @return  The command action; never null;
-     */
-    CommandAction getAction();
-
-    /**
-     * Returns the documenter for the command.
-     *
-     * @return  The command documenter; never null;
-     */
-    CommandDocumenter getDocumenter();
-
-    /**
-     * Returns the completer for the command.
-     *
-     * @return  The command completer; never null;
-     */
-    CommandCompleter getCompleter();
-
-    /**
-     * Execute the command action.
-     *
-     * @param context   The execution context.
-     * @return          The result of the action execution.
-     */
-    CommandResult execute(CommandContext context);
+    CommandInfo getInfo();
 }
\ No newline at end of file

Copied: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainer.java (from r669893, geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainer.java?p2=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainer.java&p1=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java&r1=669893&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainer.java Fri Jun 20 10:48:19 2008
@@ -20,11 +20,11 @@
 package org.apache.geronimo.gshell.command;
 
 /**
- * Containment for an installed command and its related components.
+ * ???
  *
  * @version $Rev$ $Date$
  */
-public interface Command
+public interface CommandContainer
 {
     /**
      * Returns the configured identifier of the command.
@@ -32,7 +32,7 @@
      * @return  The command identifier; never null;
      */
     String getId();
-
+    
     /**
      * Returns the action of the command.
      *

Copied: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java (from r669893, geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandFactory.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java?p2=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java&p1=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandFactory.java&r1=669893&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandFactory.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java Fri Jun 20 10:48:19 2008
@@ -20,19 +20,19 @@
 package org.apache.geronimo.gshell.command;
 
 /**
- * Provides access to {@link Command} instances.
+ * Provides access to {@link CommandContainer} instances.
  *
  * @version $Rev$ $Date$
  */
-public interface CommandFactory
+public interface CommandContainerFactory
 {
     /**
      * Create a command instance for the given identifier.
      *
-     * @param id    The identifier of the command to create.
-     * @return      A new command instance; never null.
+     * @param id    The identifier of the command container to create.
+     * @return      A new command container instance; never null.
      *
-     * @throws Exception    Failed to create command instance.
+     * @throws Exception    Failed to create command container instance.
      */
-    Command create(String id) throws Exception;
+    CommandContainer create(String id) throws Exception;
 }
\ No newline at end of file

Propchange: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContainerFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContext.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContext.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContext.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandContext.java Fri Jun 20 10:48:19 2008
@@ -20,6 +20,7 @@
 package org.apache.geronimo.gshell.command;
 
 import org.apache.geronimo.gshell.io.IO;
+import org.apache.geronimo.gshell.shell.ShellContext;
 
 /**
  * Provides commands with the context of its execution.
@@ -55,4 +56,6 @@
      * @return Command runtime information; never null.
      */
     CommandInfo getInfo();
+
+    ShellContext getShellContext();
 }
\ No newline at end of file

Added: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java?rev=670007&view=auto
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java (added)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java Fri Jun 20 10:48:19 2008
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+package org.apache.geronimo.gshell.command;
+
+/**
+ * Thrown to indicate a command/path was not able to be resolved.
+ *
+ * @version $Rev$ $Date$
+ */
+public class CommandCreationException
+    extends CommandException
+{
+    public CommandCreationException(final String msg) {
+        super(msg);
+    }
+
+    public CommandCreationException(final String msg, final Throwable cause) {
+        super(msg, cause);
+    }
+
+    public CommandCreationException(final Throwable cause) {
+        super(cause);
+    }
+
+    public CommandCreationException() {
+        super();
+    }
+}
\ No newline at end of file

Propchange: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandCreationException.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandInfo.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandInfo.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandInfo.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandInfo.java Fri Jun 20 10:48:19 2008
@@ -20,7 +20,7 @@
 package org.apache.geronimo.gshell.command;
 
 /**
- * Details about the runtime configuraiton of a command.
+ * Details about the runtime configuration of a command.
  *
  * @version $Rev$ $Date$
  */

Copied: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandNotFoundException.java (from r669867, geronimo/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/NotFoundException.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandNotFoundException.java?p2=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandNotFoundException.java&p1=geronimo/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/NotFoundException.java&r1=669867&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/NotFoundException.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandNotFoundException.java Fri Jun 20 10:48:19 2008
@@ -17,19 +17,29 @@
  * under the License.
  */
 
-package org.apache.geronimo.gshell.layout;
+package org.apache.geronimo.gshell.command;
 
 /**
- * Thrown to indicate a missing node in the layout tree.
+ * Thrown to indicate a command/path was not able to be resolved.
  *
  * @version $Rev$ $Date$
  */
-public class NotFoundException
-    extends LayoutException
+public class CommandNotFoundException
+    extends CommandException
 {
-    ///CLOVER:OFF
-
-    public NotFoundException(final String msg) {
+    public CommandNotFoundException(final String msg) {
         super(msg);
     }
+
+    public CommandNotFoundException(final String msg, final Throwable cause) {
+        super(msg, cause);
+    }
+
+    public CommandNotFoundException(final Throwable cause) {
+        super(cause);
+    }
+
+    public CommandNotFoundException() {
+        super();
+    }
 }
\ No newline at end of file

Copied: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandResolver.java (from r669893, geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandResolver.java?p2=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandResolver.java&p1=geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java&r1=669893&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Command.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandResolver.java Fri Jun 20 10:48:19 2008
@@ -19,46 +19,23 @@
 
 package org.apache.geronimo.gshell.command;
 
+import org.apache.geronimo.gshell.shell.ShellContext;
+
 /**
- * Containment for an installed command and its related components.
+ * Provides support to resolve a path-name to a command instance.
  *
  * @version $Rev$ $Date$
  */
-public interface Command
+public interface CommandResolver
 {
     /**
-     * Returns the configured identifier of the command.
-     *
-     * @return  The command identifier; never null;
-     */
-    String getId();
-
-    /**
-     * Returns the action of the command.
-     *
-     * @return  The command action; never null;
-     */
-    CommandAction getAction();
-
-    /**
-     * Returns the documenter for the command.
-     *
-     * @return  The command documenter; never null;
-     */
-    CommandDocumenter getDocumenter();
-
-    /**
-     * Returns the completer for the command.
+     * Resolve the given path to a command instance.
      *
-     * @return  The command completer; never null;
-     */
-    CommandCompleter getCompleter();
-
-    /**
-     * Execute the command action.
+     * @param context   The current shell context.
+     * @param path      The path of the command to resolve.
+     * @return          The resolved command instance; never null.
      *
-     * @param context   The execution context.
-     * @return          The result of the action execution.
+     * @throws CommandException     Failed to resolve command.
      */
-    CommandResult execute(CommandContext context);
+    Command resolve(ShellContext context, String path) throws CommandException;
 }
\ No newline at end of file

Modified: geronimo/gshell/trunk/gshell-commands/gshell-builtins/src/main/java/org/apache/geronimo/gshell/commands/builtins/HelpCommand.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-commands/gshell-builtins/src/main/java/org/apache/geronimo/gshell/commands/builtins/HelpCommand.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-commands/gshell-builtins/src/main/java/org/apache/geronimo/gshell/commands/builtins/HelpCommand.java (original)
+++ geronimo/gshell/trunk/gshell-commands/gshell-builtins/src/main/java/org/apache/geronimo/gshell/commands/builtins/HelpCommand.java Fri Jun 20 10:48:19 2008
@@ -23,11 +23,11 @@
 import org.apache.geronimo.gshell.ansi.Renderer;
 import org.apache.geronimo.gshell.application.ApplicationManager;
 import org.apache.geronimo.gshell.clp.Argument;
-import org.apache.geronimo.gshell.command.Command;
 import org.apache.geronimo.gshell.command.CommandAction;
+import org.apache.geronimo.gshell.command.CommandContainer;
+import org.apache.geronimo.gshell.command.CommandContainerFactory;
 import org.apache.geronimo.gshell.command.CommandContext;
-import org.apache.geronimo.gshell.command.CommandFactory;
-import org.apache.geronimo.gshell.command.CommandDocumenter;
+import org.apache.geronimo.gshell.command.CommandResolver;
 import org.apache.geronimo.gshell.command.annotation.CommandComponent;
 import org.apache.geronimo.gshell.command.annotation.Requirement;
 import org.apache.geronimo.gshell.io.IO;
@@ -36,6 +36,7 @@
 import org.apache.geronimo.gshell.model.layout.CommandNode;
 import org.apache.geronimo.gshell.model.layout.GroupNode;
 import org.apache.geronimo.gshell.model.layout.Node;
+import org.apache.geronimo.gshell.shell.ShellContext;
 import org.codehaus.plexus.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,7 +56,10 @@
     private ApplicationManager applicationManager;
 
     @Requirement
-    private CommandFactory commandFactory;
+    private CommandResolver commandResolver;
+
+    @Requirement
+    private CommandContainerFactory commandContainerFactory;
 
     @Requirement
     private LayoutManager layoutManager;
@@ -67,26 +71,31 @@
 
     public HelpCommand() {}
 
-    public HelpCommand(final CommandFactory commandFactory, final LayoutManager layoutManager) {
-        assert commandFactory != null;
+    public HelpCommand(final CommandResolver commandResolver, final LayoutManager layoutManager) {
+        assert commandResolver != null;
         assert layoutManager != null;
 
-        this.commandFactory = commandFactory;
+        this.commandResolver = commandResolver;
         this.layoutManager = layoutManager;
     }
 
     public Object execute(final CommandContext context) throws Exception {
         assert context != null;
 
-        IO io = context.getIo();
-        
-        displayAvailableCommands(io);
+        if (command == null) {
+            displayAvailableCommands(context);
+        }
+        else {
+            displayCommandManual(command, context.getShellContext());
+        }
 
         return Result.SUCCESS;
     }
 
-    private void displayAvailableCommands(final IO io) throws Exception {
-        assert io != null;
+    private void displayAvailableCommands(final CommandContext context) throws Exception {
+        assert context != null;
+
+        IO io = context.getIo();
         String about = applicationManager.getContext().getApplication().getBranding().getAboutMessage();
 
         if (about != null) {
@@ -112,7 +121,7 @@
                     CommandNode node = (CommandNode) child;
                     String name = StringUtils.rightPad(node.getName(), maxNameLen);
 
-                    Command command = commandFactory.create(node.getId());
+                    CommandContainer command = commandContainerFactory.create(node.getId());
 
                     // FIXME:
                     String desc = command.toString(); // command.getDescription();
@@ -171,4 +180,11 @@
             }
         }
     }
+
+    private void displayCommandManual(final String command, final ShellContext context) {
+        assert command != null;
+        assert context != null;
+
+        // CommandContainer command = commandResolver.resolve(context, command);
+    }
 }

Copied: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java (from r669956, geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDescriptor.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java?p2=geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java&p1=geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDescriptor.java&r1=669956&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDescriptor.java (original)
+++ geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java Fri Jun 20 10:48:19 2008
@@ -21,6 +21,7 @@
 
 import org.apache.geronimo.gshell.model.command.CommandModel;
 import org.apache.geronimo.gshell.command.Command;
+import org.apache.geronimo.gshell.command.CommandContainer;
 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 
 /**
@@ -28,19 +29,19 @@
  *
  * @version $Rev$ $Date$
  */
-public class CommandDescriptor
+public class CommandContainerDescriptor
     extends ComponentDescriptorSupport
 {
     private final CommandModel model;
 
-    public CommandDescriptor(final CommandModel model) {
+    public CommandContainerDescriptor(final CommandModel model) {
         assert model != null;
 
         this.model = model;
 
-        setRole(Command.class);
+        setRole(CommandContainer.class);
         setRoleHint(model.getId());
-        setImplementation("org.apache.geronimo.gshell.rapture.DefaultCommand");
+        setImplementation("org.apache.geronimo.gshell.rapture.DefaultCommandContainer");
         setVersion(model.getVersion());
         setIsolatedRealm(false);
         setInstantiationStrategy("singleton");

Propchange: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/PluginDescriptor.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/PluginDescriptor.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/PluginDescriptor.java (original)
+++ geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/PluginDescriptor.java Fri Jun 20 10:48:19 2008
@@ -55,7 +55,7 @@
         addComponentDescriptor(new CommandActionDescriptor(model));
         addComponentDescriptor(new CommandDocumenterDescriptor(model));
         addComponentDescriptor(new CommandCompleterDescriptor(model));
-        addComponentDescriptor(new CommandDescriptor(model));
+        addComponentDescriptor(new CommandContainerDescriptor(model));
     }
 
     public void addComponentDescriptor(final ComponentDescriptor descriptor) {

Copied: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java (from r669926, geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommand.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java?p2=geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java&p1=geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommand.java&r1=669926&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommand.java (original)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java Fri Jun 20 10:48:19 2008
@@ -21,16 +21,14 @@
 
 import org.apache.geronimo.gshell.clp.CommandLineProcessor;
 import org.apache.geronimo.gshell.clp.Option;
-import org.apache.geronimo.gshell.clp.Printer;
 import org.apache.geronimo.gshell.clp.ProcessingException;
 import org.apache.geronimo.gshell.command.Command;
 import org.apache.geronimo.gshell.command.CommandAction;
 import org.apache.geronimo.gshell.command.CommandCompleter;
+import org.apache.geronimo.gshell.command.CommandContainer;
 import org.apache.geronimo.gshell.command.CommandContext;
 import org.apache.geronimo.gshell.command.CommandDocumenter;
-import org.apache.geronimo.gshell.command.CommandInfo;
 import org.apache.geronimo.gshell.command.CommandResult;
-import org.apache.geronimo.gshell.io.IO;
 import org.apache.geronimo.gshell.notification.Notification;
 import org.apache.geronimo.gshell.plexus.GShellPlexusContainer;
 import org.apache.geronimo.gshell.util.Arguments;
@@ -46,13 +44,13 @@
 import org.slf4j.MDC;
 
 /**
- * The default {@link Command} component.
+ * The default {@link CommandContainer} component.
  *
  * @version $Rev$ $Date$
  */
 @Component(role=Command.class)
-public class DefaultCommand
-    implements Command, Contextualizable
+public class DefaultCommandContainer
+    implements CommandContainer, Contextualizable
 {
     private final Logger log = LoggerFactory.getLogger(getClass());
 

Propchange: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumenter.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumenter.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumenter.java (original)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumenter.java Fri Jun 20 10:48:19 2008
@@ -106,6 +106,10 @@
         }
     }
 
+    //
+    // TODO: Add some nice ANSI muck
+    //
+    
     public void renderUsage(final CommandInfo info, final PrintWriter out) {
         assert info != null;
         assert out != null;
@@ -113,7 +117,7 @@
         CommandLineProcessor clp = new CommandLineProcessor();
 
         // Attach our helper to inject --help
-        DefaultCommand.HelpSupport help = new DefaultCommand.HelpSupport();
+        DefaultCommandContainer.HelpSupport help = new DefaultCommandContainer.HelpSupport();
         clp.addBean(help);
 
         // And then the beans options

Modified: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandFactory.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandFactory.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandFactory.java (original)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandFactory.java Fri Jun 20 10:48:19 2008
@@ -19,9 +19,9 @@
 
 package org.apache.geronimo.gshell.rapture;
 
+import org.apache.geronimo.gshell.command.CommandContainer;
+import org.apache.geronimo.gshell.command.CommandContainerFactory;
 import org.apache.geronimo.gshell.plexus.GShellPlexusContainer;
-import org.apache.geronimo.gshell.command.CommandFactory;
-import org.apache.geronimo.gshell.command.Command;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.repository.ComponentDescriptor;
@@ -33,13 +33,13 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Default implementation of a {@link CommandFactory} component.
+ * Default implementation of a {@link CommandContainerFactory} component.
  *
  * @version $Rev$ $Date$
  */
-@Component(role=CommandFactory.class)
+@Component(role= CommandContainerFactory.class)
 public class DefaultCommandFactory
-    implements CommandFactory, Contextualizable
+    implements CommandContainerFactory, Contextualizable
 {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -54,20 +54,20 @@
         log.debug("Container: {}", container);
     }
 
-    public Command create(final String id) throws Exception {
+    public CommandContainer create(final String id) throws Exception {
         assert id != null;
 
         log.debug("Locating container for ID: {}", id);
 
-        ComponentDescriptor descriptor = container.getComponentDescriptor(Command.class, id);
+        ComponentDescriptor descriptor = container.getComponentDescriptor(CommandContainer.class, id);
         if (descriptor == null) {
             // TODO: Throw typed exception
             throw new Exception("Command container not found for ID: " + id);
         }
 
-        Command command;
+        CommandContainer command;
         try {
-            command = container.lookupComponent(Command.class, id);
+            command = container.lookupComponent(CommandContainer.class, id);
         }
         catch (ComponentLookupException e) {
             // TODO: Throw typed exception

Modified: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandLineExecutor.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandLineExecutor.java?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandLineExecutor.java (original)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandLineExecutor.java Fri Jun 20 10:48:19 2008
@@ -22,23 +22,18 @@
 import org.apache.geronimo.gshell.application.ApplicationManager;
 import org.apache.geronimo.gshell.application.DefaultVariables;
 import org.apache.geronimo.gshell.chronos.StopWatch;
+import org.apache.geronimo.gshell.command.Command;
 import org.apache.geronimo.gshell.command.CommandContext;
 import org.apache.geronimo.gshell.command.CommandInfo;
-import org.apache.geronimo.gshell.command.Variables;
-import org.apache.geronimo.gshell.command.CommandFactory;
-import org.apache.geronimo.gshell.command.Command;
+import org.apache.geronimo.gshell.command.CommandResolver;
 import org.apache.geronimo.gshell.command.CommandResult;
-import org.apache.geronimo.gshell.commandline.CommandLineExecutionFailied;
+import org.apache.geronimo.gshell.command.Variables;
 import org.apache.geronimo.gshell.commandline.CommandLine;
 import org.apache.geronimo.gshell.commandline.CommandLineBuilder;
+import org.apache.geronimo.gshell.commandline.CommandLineExecutionFailied;
 import org.apache.geronimo.gshell.commandline.CommandLineExecutor;
 import org.apache.geronimo.gshell.io.IO;
 import org.apache.geronimo.gshell.io.SystemOutputHijacker;
-import org.apache.geronimo.gshell.layout.LayoutManager;
-import org.apache.geronimo.gshell.layout.NotFoundException;
-import org.apache.geronimo.gshell.model.layout.AliasNode;
-import org.apache.geronimo.gshell.model.layout.CommandNode;
-import org.apache.geronimo.gshell.model.layout.Node;
 import org.apache.geronimo.gshell.notification.ErrorNotification;
 import org.apache.geronimo.gshell.notification.Notification;
 import org.apache.geronimo.gshell.shell.ShellContext;
@@ -75,10 +70,7 @@
     private ApplicationManager applicationManager;
 
     @Requirement
-    private LayoutManager layoutManager;
-
-    @Requirement
-    private CommandFactory commandFactory;
+    private CommandResolver commandResolver;
 
     @Requirement
     private CommandLineBuilder commandLineBuilder;
@@ -87,15 +79,11 @@
 
     public DefaultCommandLineExecutor() {}
     
-    public DefaultCommandLineExecutor(final ApplicationManager applicationManager, final LayoutManager layoutManager, final CommandFactory commandFactory, final CommandLineBuilder commandLineBuilder) {
+    public DefaultCommandLineExecutor(final ApplicationManager applicationManager, final CommandLineBuilder commandLineBuilder) {
         assert applicationManager != null;
-        assert layoutManager != null;
-        assert commandFactory != null;
         assert commandLineBuilder != null;
 
         this.applicationManager = applicationManager;
-        this.layoutManager = layoutManager;
-        this.commandFactory = commandFactory;
         this.commandLineBuilder = commandLineBuilder;
     }
 
@@ -227,33 +215,21 @@
         return new Thread(run);
     }
 
+    //
+    // TODO: Let the CommandContext creation happen in the child, pass in the ShellContext here...
+    //
+
     protected Object execute(final String path, final Object[] args, final IO io) throws Exception {
         log.debug("Executing");
 
-        final String searchPath = (String) shellContext.getVariables().get(LayoutManager.COMMAND_PATH);
-        log.debug("Search path: {}", searchPath);
-
-        final Node node = layoutManager.findNode(path, searchPath);
-        log.debug("Layout node: {}", node);
-
-        final String id = findCommandId(node);
-        log.debug("Command ID: {}", id);
-        
-        final Command command;
-        try {
-            command = commandFactory.create(id);
-        }
-        catch (Exception e) {
-            throw new NotFoundException(e.getMessage());
-        }
+        final Command command = commandResolver.resolve(shellContext, path);
 
         // Setup the command context and pass it to the command instance
-        CommandContext context = new CommandContext() {
+        CommandContext context = new CommandContext()
+        {
             // Command instances get their own namespace with defaults from the current
             final Variables vars = new DefaultVariables(shellContext.getVariables());
 
-            CommandInfo info;
-
             public Object[] getArguments() {
                 return args;
             }
@@ -267,14 +243,14 @@
             }
 
             public CommandInfo getInfo() {
-                if (info == null) {
-                    info = new DefaultCommandInfo(node);
-                }
+                return command.getInfo();
+            }
 
-                return info;
+            public ShellContext getShellContext() {
+                return shellContext;
             }
         };
-
+        
         // Setup command timings
         StopWatch watch = new StopWatch(true);
 
@@ -309,23 +285,4 @@
             return result.getValue();
         }
     }
-
-    protected String findCommandId(final Node node) throws NotFoundException {
-        assert node != null;
-
-        if (node instanceof AliasNode) {
-            AliasNode aliasNode = (AliasNode) node;
-            String targetPath = aliasNode.getCommand();
-            Node target = layoutManager.findNode(layoutManager.getLayout(), targetPath);
-
-            return findCommandId(target);
-        }
-        else if (node instanceof CommandNode) {
-            CommandNode commandNode = (CommandNode) node;
-
-            return commandNode.getId();
-        }
-
-        throw new NotFoundException("Unable to get command id for: " + node);
-    }
 }
\ No newline at end of file

Copied: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandResolver.java (from r669926, geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompleter.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandResolver.java?p2=geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandResolver.java&p1=geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompleter.java&r1=669926&r2=670007&rev=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompleter.java (original)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandResolver.java Fri Jun 20 10:48:19 2008
@@ -19,30 +19,141 @@
 
 package org.apache.geronimo.gshell.rapture;
 
-import jline.Completor;
+import org.apache.geronimo.gshell.command.Command;
+import org.apache.geronimo.gshell.command.CommandAction;
 import org.apache.geronimo.gshell.command.CommandCompleter;
+import org.apache.geronimo.gshell.command.CommandContainer;
+import org.apache.geronimo.gshell.command.CommandContainerFactory;
+import org.apache.geronimo.gshell.command.CommandContext;
 import org.apache.geronimo.gshell.command.CommandDocumenter;
 import org.apache.geronimo.gshell.command.CommandInfo;
+import org.apache.geronimo.gshell.command.CommandNotFoundException;
+import org.apache.geronimo.gshell.command.CommandResolver;
+import org.apache.geronimo.gshell.command.CommandResult;
+import org.apache.geronimo.gshell.layout.LayoutManager;
+import org.apache.geronimo.gshell.layout.NotFoundException;
+import org.apache.geronimo.gshell.model.layout.AliasNode;
+import org.apache.geronimo.gshell.model.layout.CommandNode;
+import org.apache.geronimo.gshell.model.layout.Node;
+import org.apache.geronimo.gshell.shell.ShellContext;
 import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * The default {@link CommandCompleter} component.
+ * The default {@link CommandResolver} component.
  *
  * @version $Rev$ $Date$
  */
-@Component(role=CommandDocumenter.class)
-public class DefaultCommandCompleter
-    implements CommandCompleter
+@Component(role=CommandResolver.class)
+public class DefaultCommandResolver
+    implements CommandResolver
 {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    public Completor createCompletor(final CommandInfo info) {
-        assert info != null;
+    @Requirement
+    private LayoutManager layoutManager;
 
-        // TODO:
+    @Requirement
+    private CommandContainerFactory containerFactory;
 
-        throw new Error();
+    public DefaultCommandResolver() {}
+    
+    public DefaultCommandResolver(final LayoutManager layoutManager, final CommandContainerFactory containerFactory) {
+        assert layoutManager != null;
+        assert containerFactory != null;
+
+        this.layoutManager = layoutManager;
+        this.containerFactory = containerFactory;
+    }
+    
+    public Command resolve(final ShellContext context, final String path) throws CommandNotFoundException {
+        assert context != null;
+        assert path != null;
+
+        assert layoutManager != null;
+
+        log.debug("Resolving command for path: {}", path);
+        
+        String searchPath = (String) context.getVariables().get(LayoutManager.COMMAND_PATH);
+        final Node node;
+
+        try {
+            node = layoutManager.findNode(path, searchPath);
+        }
+        catch (NotFoundException e) {
+            throw new CommandNotFoundException(e);
+        }
+
+        String id = findCommandId(node);
+
+        assert containerFactory != null;
+        
+        final CommandContainer command;
+        try {
+            command = containerFactory.create(id);
+        }
+        catch (Exception e) {
+            throw new CommandNotFoundException(e);
+        }
+
+        // Return a new command-instance with details about it layout configuration
+        return new Command()
+        {
+            public CommandInfo getInfo() {
+                return new DefaultCommandInfo(node);
+            }
+
+            // Proxy everything else...
+            
+            public String getId() {
+                return command.getId();
+            }
+
+            public CommandAction getAction() {
+                return command.getAction();
+            }
+
+            public CommandDocumenter getDocumenter() {
+                return command.getDocumenter();
+            }
+
+            public CommandCompleter getCompleter() {
+                return command.getCompleter();
+            }
+
+            public CommandResult execute(CommandContext context) {
+                return command.execute(context);
+            }
+        };
+    }
+
+    private String findCommandId(final Node node) throws CommandNotFoundException {
+        assert node != null;
+
+        assert layoutManager != null;
+        
+        if (node instanceof AliasNode) {
+            AliasNode aliasNode = (AliasNode) node;
+            String targetPath = aliasNode.getCommand();
+
+            Node target;
+            try {
+                target = layoutManager.findNode(layoutManager.getLayout(), targetPath);
+            }
+            catch (NotFoundException e) {
+                throw new CommandNotFoundException(e);
+            }
+
+            return findCommandId(target);
+        }
+        else if (node instanceof CommandNode) {
+            CommandNode commandNode = (CommandNode) node;
+
+            return commandNode.getId();
+        }
+
+        throw new CommandNotFoundException("Unable to get command id for: " + node);
     }
 }
\ No newline at end of file

Modified: geronimo/gshell/trunk/src/uml/GShell.mdxml
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/src/uml/GShell.mdxml?rev=670007&r1=670006&r2=670007&view=diff
==============================================================================
--- geronimo/gshell/trunk/src/uml/GShell.mdxml (original)
+++ geronimo/gshell/trunk/src/uml/GShell.mdxml Fri Jun 20 10:48:19 2008
@@ -334,6 +334,7 @@
 					<ownedComment xmi:type='uml:Comment' xmi:id='_15_1_640021c_1213269063977_425850_1566' body='Creates new Command instances.&#10;&#10;The implementing glue may create new instances each time, cache them, use prototypes, whatever it likes.'>
 						<annotatedElement xmi:idref='_15_1_640021c_1213180648464_630720_444'/>
 					</ownedComment>
+					<ownedAttribute xmi:type='uml:Property' xmi:id='_15_1_640021c_1213975987416_769599_2873' visibility='private' type='_15_1_640021c_1213975925710_671214_2752' association='_15_1_640021c_1213975987415_342165_2871'/>
 					<ownedOperation xmi:type='uml:Operation' xmi:id='_15_1_640021c_1213957399520_527396_2473' name='create' visibility='public'>
 						<ownedParameter xmi:type='uml:Parameter' xmi:id='_15_1_640021c_1213957409062_179124_2476' visibility='public' direction='return' type='_15_1_640021c_1213180637361_354944_424'/>
 						<ownedParameter xmi:type='uml:Parameter' xmi:id='_15_1_640021c_1213957414804_529779_2477' name='id' visibility='public' direction='in'>
@@ -672,7 +673,9 @@
 				<packagedElement xmi:type='uml:Interface' xmi:id='_15_1_640021c_1213181381231_691996_507' name='IO' visibility='public'/>
 			</packagedElement>
 			<packagedElement xmi:type='uml:Package' xmi:id='_15_1_640021c_1213183330550_518575_1266' name='layout' visibility='public'>
-				<packagedElement xmi:type='uml:Interface' xmi:id='_15_1_640021c_1213182347581_431001_933' name='LayoutManager' visibility='public'/>
+				<packagedElement xmi:type='uml:Interface' xmi:id='_15_1_640021c_1213182347581_431001_933' name='LayoutManager' visibility='public'>
+					<ownedAttribute xmi:type='uml:Property' xmi:id='_15_1_640021c_1213976009609_626743_2944' visibility='private' type='_15_1_640021c_1213975925710_671214_2752' association='_15_1_640021c_1213976009609_158679_2942'/>
+				</packagedElement>
 				<packagedElement xmi:type='uml:Class' xmi:id='_15_1_640021c_1213183005339_563000_1245' name='LayoutException' visibility='public'/>
 				<packagedElement xmi:type='uml:Class' xmi:id='_15_1_640021c_1213182355654_933822_953' name='LayoutModel' visibility='public'>
 					<generalization xmi:type='uml:Generalization' xmi:id='_15_1_640021c_1213296916540_202170_4106' general='_15_1_640021c_1213296814403_838764_4024'/>
@@ -917,6 +920,26 @@
 				</packagedElement>
 				<packagedElement xmi:type='uml:Class' xmi:id='_15_1_640021c_1213297808129_456016_4805' name='Branding' visibility='public'/>
 			</packagedElement>
+			<packagedElement xmi:type='uml:Package' xmi:id='_15_1_640021c_1213975889006_844298_2726' name='commands' visibility='public'>
+				<packagedElement xmi:type='uml:Package' xmi:id='_15_1_640021c_1213975894915_9548_2730' name='builtins' visibility='public'>
+					<packagedElement xmi:type='uml:Class' xmi:id='_15_1_640021c_1213975925710_671214_2752' name='HelpCommand' visibility='public'>
+						<ownedAttribute xmi:type='uml:Property' xmi:id='_15_1_640021c_1213975987415_809287_2872' visibility='private' type='_15_1_640021c_1213180648464_630720_444' association='_15_1_640021c_1213975987415_342165_2871'/>
+						<ownedAttribute xmi:type='uml:Property' xmi:id='_15_1_640021c_1213976009609_539565_2943' visibility='private' type='_15_1_640021c_1213182347581_431001_933' association='_15_1_640021c_1213976009609_158679_2942'/>
+						<interfaceRealization xmi:type='uml:InterfaceRealization' xmi:id='_15_1_640021c_1213975954216_470537_2834' visibility='public' contract='_15_1_640021c_1213180578587_641176_364'>
+							<supplier xmi:idref='_15_1_640021c_1213180578587_641176_364'/>
+							<client xmi:idref='_15_1_640021c_1213975925710_671214_2752'/>
+						</interfaceRealization>
+					</packagedElement>
+					<packagedElement xmi:type='uml:Association' xmi:id='_15_1_640021c_1213975987415_342165_2871' visibility='public'>
+						<memberEnd xmi:idref='_15_1_640021c_1213975987415_809287_2872'/>
+						<memberEnd xmi:idref='_15_1_640021c_1213975987416_769599_2873'/>
+					</packagedElement>
+					<packagedElement xmi:type='uml:Association' xmi:id='_15_1_640021c_1213976009609_158679_2942' visibility='public'>
+						<memberEnd xmi:idref='_15_1_640021c_1213976009609_539565_2943'/>
+						<memberEnd xmi:idref='_15_1_640021c_1213976009609_626743_2944'/>
+					</packagedElement>
+				</packagedElement>
+			</packagedElement>
 		</packagedElement>
 		<packagedElement xmi:type='uml:Dependency' xmi:id='_15_1_640021c_1213202485116_462135_4158' name='creates' visibility='public'>
 			<supplier xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
@@ -1304,6 +1327,18 @@
 			<supplier xmi:idref='_15_1_640021c_1213968981104_573215_2567'/>
 			<client xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
 		</packagedElement>
+		<packagedElement xmi:type='uml:Dependency' xmi:id='_15_1_640021c_1213977078470_786846_3015' visibility='public'>
+			<supplier xmi:idref='_15_1_640021c_1213180617825_991939_404'/>
+			<client xmi:idref='_15_1_640021c_1213975925710_671214_2752'/>
+		</packagedElement>
+		<packagedElement xmi:type='uml:Dependency' xmi:id='_15_1_640021c_1213977129842_392398_3053' visibility='public'>
+			<supplier xmi:idref='_15_1_640021c_1213181404400_206433_547'/>
+			<client xmi:idref='_15_1_640021c_1213180617825_991939_404'/>
+		</packagedElement>
+		<packagedElement xmi:type='uml:Dependency' xmi:id='_15_1_640021c_1213977154043_530016_3069' visibility='public'>
+			<supplier xmi:idref='_15_1_640021c_1213181404400_206433_547'/>
+			<client xmi:idref='_15_1_640021c_1213975925710_671214_2752'/>
+		</packagedElement>
 	</uml:Model>
 	<xmi:Extension extender='MagicDraw UML 15.1'>
 		<mdOwnedDiagrams>
@@ -3656,14 +3691,14 @@
 					</properties>
 					<type>Class Diagram</type>
 					<umlType>Class Diagram</umlType>
-					<zoomFactor xmi:value='1.1379614'/>
+					<zoomFactor xmi:value='1.0'/>
 					<diagramOpened xmi:value='true'/>
 					<diagramFrameInitialSizeSet xmi:value='false'/>
 					<diagramWindowBounds>2, 24, 1967, 1305</diagramWindowBounds>
 					<diagramScrollPositionX xmi:value='0'/>
 					<diagramScrollPositionY xmi:value='0'/>
 					<maximized xmi:value='false'/>
-					<active xmi:value='true'/>
+					<active xmi:value='false'/>
 					<mdOwnedViews>
 						<mdElement elementClass='DiagramFrame' xmi:id='_15_1_640021c_1213180231987_314992_268'>
 							<elementID xmi:idref='_15_1_640021c_1213180231986_792359_255'/>
@@ -8866,6 +8901,556 @@
 					</mdOwnedViews>
 				</mdElement>
 			</mdElement>
+			<mdElement elementClass='Diagram' xmi:id='_15_1_640021c_1213975914932_881655_2731' name='Help Command' visibility='public' ownerOfDiagram='eee_1045467100313_135436_1'>
+				<mdElement elementClass='DiagramPresentationElement' xmi:id='_15_1_640021c_1213975914933_807620_2732'>
+					<elementID xmi:idref='_15_1_640021c_1213975914932_881655_2731'/>
+					<properties>
+						<mdElement elementClass='BooleanProperty'>
+							<propertyID>SHOW_DIAGRAM_FRAME</propertyID>
+							<propertyGroup>DIAGRAM_FRAME</propertyGroup>
+							<propertyDescriptionID>SHOW_DIAGRAM_FRAME_DESCRIPTION</propertyDescriptionID>
+							<value xmi:value='false'/>
+						</mdElement>
+					</properties>
+					<type>Class Diagram</type>
+					<umlType>Class Diagram</umlType>
+					<zoomFactor xmi:value='1.0'/>
+					<diagramOpened xmi:value='true'/>
+					<diagramFrameInitialSizeSet xmi:value='true'/>
+					<diagramWindowBounds>2, 24, 1967, 1305</diagramWindowBounds>
+					<diagramScrollPositionX xmi:value='0'/>
+					<diagramScrollPositionY xmi:value='0'/>
+					<maximized xmi:value='false'/>
+					<active xmi:value='true'/>
+					<mdOwnedViews>
+						<mdElement elementClass='DiagramFrame' xmi:id='_15_1_640021c_1213975914935_916003_2744'>
+							<elementID xmi:idref='_15_1_640021c_1213975914932_881655_2731'/>
+							<visible xmi:value='false'/>
+							<geometry>5, 5, 1829, 1261</geometry>
+						</mdElement>
+						<mdElement elementClass='Class' xmi:id='_15_1_640021c_1213975925712_87602_2753'>
+							<elementID xmi:idref='_15_1_640021c_1213975925710_671214_2752'/>
+							<properties>
+								<mdElement elementClass='BooleanProperty'>
+									<propertyID>SUPPRESS_CLASS_ATTRIBUTES</propertyID>
+									<propertyGroup>ATTRIBUTES</propertyGroup>
+									<propertyDescriptionID>SUPPRESS_CLASS_ATTRIBUTES_DESCRIPTION</propertyDescriptionID>
+									<value xmi:value='true'/>
+								</mdElement>
+								<mdElement elementClass='BooleanProperty'>
+									<propertyID>SUPPRESS_CLASS_OPERATIONS</propertyID>
+									<propertyGroup>OPERATIONS</propertyGroup>
+									<propertyDescriptionID>SUPPRESS_CLASS_OPERATIONS_DESCRIPTION</propertyDescriptionID>
+									<value xmi:value='true'/>
+								</mdElement>
+							</properties>
+							<geometry>262, 375, 85, 24</geometry>
+						</mdElement>
+						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213975940218_665630_2773'>
+							<elementID xmi:idref='_15_1_640021c_1213180578587_641176_364'/>
+							<properties>
+								<mdElement elementClass='BooleanProperty'>
+									<propertyID>SUPPRESS_CLASS_OPERATIONS</propertyID>
+									<propertyGroup>OPERATIONS</propertyGroup>
+									<propertyDescriptionID>SUPPRESS_CLASS_OPERATIONS_DESCRIPTION</propertyDescriptionID>
+									<value xmi:value='true'/>
+								</mdElement>
+							</properties>
+							<geometry>128, 222, 96, 63</geometry>
+						</mdElement>
+						<mdElement elementClass='InterfaceRealization' xmi:id='_15_1_640021c_1213975954222_797753_2835'>
+							<elementID xmi:idref='_15_1_640021c_1213975954216_470537_2834'/>
+							<properties>
+								<mdElement elementClass='ChoiceProperty'>
+									<propertyID>LINK_LINE_STYLE</propertyID>
+									<propertyDescriptionID>LINK_LINE_STYLE_DESCRIPTION</propertyDescriptionID>
+									<value>RECTILINEAR</value>
+									<choice xmi:value='RECTILINEAR^OBLIQUE^BEZIER'/>
+									<index xmi:value='0'/>
+								</mdElement>
+							</properties>
+							<linkFirstEndID xmi:idref='_15_1_640021c_1213975940218_665630_2773'/>
+							<linkSecondEndID xmi:idref='_15_1_640021c_1213975925712_87602_2753'/>
+							<geometry>176, 239; 176, 315; 287, 315; 287, 375; </geometry>
+							<linkNameID xmi:idref='_15_1_640021c_1213975954222_524548_2836'/>
+							<nameVisible xmi:value='true'/>
+							<mdOwnedViews>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975954222_524548_2836'>
+									<visible xmi:value='false'/>
+									<geometry>211, 302, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975954222_434828_2838'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>211, 303, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213975954222_122672_2840'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>211, 327, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975954222_118317_2843'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>211, 340, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975954222_431350_2845'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>164, 273, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975954222_616519_2847'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>275, 310, 24, 12</geometry>
+								</mdElement>
+							</mdOwnedViews>
+							<linkConstraintID xmi:idref='_15_1_640021c_1213975954222_434828_2838'/>
+							<linkStereotypeID xmi:idref='_15_1_640021c_1213975954222_122672_2840'/>
+							<linkTaggedValuesID xmi:idref='_15_1_640021c_1213975954222_118317_2843'/>
+							<linkConveyedAID xmi:idref='_15_1_640021c_1213975954222_431350_2845'/>
+							<linkConveyedBID xmi:idref='_15_1_640021c_1213975954222_616519_2847'/>
+						</mdElement>
+						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213975980197_140391_2850'>
+							<elementID xmi:idref='_15_1_640021c_1213180648464_630720_444'/>
+							<properties>
+								<mdElement elementClass='BooleanProperty'>
+									<propertyID>SUPPRESS_CLASS_OPERATIONS</propertyID>
+									<propertyGroup>OPERATIONS</propertyGroup>
+									<propertyDescriptionID>SUPPRESS_CLASS_OPERATIONS_DESCRIPTION</propertyDescriptionID>
+									<value xmi:value='true'/>
+								</mdElement>
+							</properties>
+							<geometry>254, 235, 101, 50</geometry>
+						</mdElement>
+						<mdElement elementClass='Association' xmi:id='_15_1_640021c_1213975987436_260852_2876'>
+							<elementID xmi:idref='_15_1_640021c_1213975987415_342165_2871'/>
+							<linkFirstEndID xmi:idref='_15_1_640021c_1213975980197_140391_2850'/>
+							<linkSecondEndID xmi:idref='_15_1_640021c_1213975925712_87602_2753'/>
+							<geometry>304, 252; 304, 375; </geometry>
+							<linkNameID xmi:idref='_15_1_640021c_1213975987436_679870_2918'/>
+							<nameVisible xmi:value='true'/>
+							<mdOwnedViews>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_80025_2877'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>292, 301, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213975987436_585646_2879'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>292, 325, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_765137_2882'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>292, 338, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_285182_2884'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>292, 261, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_376863_2886'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>292, 335, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='Role' xmi:id='_15_1_640021c_1213975987416_727402_2875'>
+									<elementID xmi:idref='_15_1_640021c_1213975987415_809287_2872'/>
+									<geometry>299, 252, 10, 10</geometry>
+									<mdOwnedViews>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_155741_2888'>
+											<visible xmi:value='false'/>
+											<geometry>299, 252, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_13391_2890'>
+											<visible xmi:value='false'/>
+											<geometry>299, 252, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_474241_2892'>
+											<visible xmi:value='false'/>
+											<geometry>299, 252, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213975987436_848512_2894'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>299, 269, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_355855_2897'>
+											<visible xmi:value='false'/>
+											<geometry>299, 252, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_256350_2899'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>299, 252, 24, 13</geometry>
+										</mdElement>
+									</mdOwnedViews>
+									<roleNameID xmi:idref='_15_1_640021c_1213975987436_155741_2888'/>
+									<roleMultiplicityID xmi:idref='_15_1_640021c_1213975987436_13391_2890'/>
+									<roleConstraintsID xmi:idref='_15_1_640021c_1213975987436_474241_2892'/>
+									<roleStereotypeID xmi:idref='_15_1_640021c_1213975987436_848512_2894'/>
+									<roleTaggedValuesID xmi:idref='_15_1_640021c_1213975987436_355855_2897'/>
+									<rolePropertyStringID xmi:idref='_15_1_640021c_1213975987436_256350_2899'/>
+								</mdElement>
+								<mdElement elementClass='Role' xmi:id='_15_1_640021c_1213975987416_509289_2874'>
+									<elementID xmi:idref='_15_1_640021c_1213975987416_769599_2873'/>
+									<geometry>299, 365, 10, 10</geometry>
+									<mdOwnedViews>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_397331_2903'>
+											<visible xmi:value='false'/>
+											<geometry>299, 365, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_126383_2905'>
+											<visible xmi:value='false'/>
+											<geometry>299, 365, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_979386_2907'>
+											<visible xmi:value='false'/>
+											<geometry>299, 365, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213975987436_481623_2909'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>299, 382, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_783881_2912'>
+											<visible xmi:value='false'/>
+											<geometry>299, 365, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213975987436_17513_2914'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>299, 365, 24, 13</geometry>
+										</mdElement>
+									</mdOwnedViews>
+									<roleNameID xmi:idref='_15_1_640021c_1213975987436_397331_2903'/>
+									<roleMultiplicityID xmi:idref='_15_1_640021c_1213975987436_126383_2905'/>
+									<roleConstraintsID xmi:idref='_15_1_640021c_1213975987436_979386_2907'/>
+									<roleStereotypeID xmi:idref='_15_1_640021c_1213975987436_481623_2909'/>
+									<roleTaggedValuesID xmi:idref='_15_1_640021c_1213975987436_783881_2912'/>
+									<rolePropertyStringID xmi:idref='_15_1_640021c_1213975987436_17513_2914'/>
+								</mdElement>
+								<mdElement elementClass='AssociationTextBox' xmi:id='_15_1_640021c_1213975987436_679870_2918'>
+									<visible xmi:value='false'/>
+									<geometry>286, 300, 36, 13</geometry>
+									<reverseIcon xmi:value='true'/>
+								</mdElement>
+							</mdOwnedViews>
+							<linkConstraintID xmi:idref='_15_1_640021c_1213975987436_80025_2877'/>
+							<linkStereotypeID xmi:idref='_15_1_640021c_1213975987436_585646_2879'/>
+							<linkTaggedValuesID xmi:idref='_15_1_640021c_1213975987436_765137_2882'/>
+							<linkConveyedAID xmi:idref='_15_1_640021c_1213975987436_285182_2884'/>
+							<linkConveyedBID xmi:idref='_15_1_640021c_1213975987436_376863_2886'/>
+							<associationFirstEndID xmi:idref='_15_1_640021c_1213975987416_727402_2875'/>
+							<associationSecondEndID xmi:idref='_15_1_640021c_1213975987416_509289_2874'/>
+						</mdElement>
+						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213976005964_124582_2921'>
+							<elementID xmi:idref='_15_1_640021c_1213182347581_431001_933'/>
+							<properties>
+								<mdElement elementClass='BooleanProperty'>
+									<propertyID>SUPPRESS_CLASS_OPERATIONS</propertyID>
+									<propertyGroup>OPERATIONS</propertyGroup>
+									<propertyDescriptionID>SUPPRESS_CLASS_OPERATIONS_DESCRIPTION</propertyDescriptionID>
+									<value xmi:value='true'/>
+								</mdElement>
+							</properties>
+							<geometry>10, 235, 88, 50</geometry>
+						</mdElement>
+						<mdElement elementClass='Association' xmi:id='_15_1_640021c_1213976009625_771441_2947'>
+							<elementID xmi:idref='_15_1_640021c_1213976009609_158679_2942'/>
+							<linkFirstEndID xmi:idref='_15_1_640021c_1213976005964_124582_2921'/>
+							<linkSecondEndID xmi:idref='_15_1_640021c_1213975925712_87602_2753'/>
+							<geometry>54, 252; 54, 345; 270, 345; 270, 375; </geometry>
+							<linkNameID xmi:idref='_15_1_640021c_1213976009625_471905_2989'/>
+							<nameVisible xmi:value='true'/>
+							<mdOwnedViews>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_588021_2948'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>118, 333, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213976009625_773534_2950'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>118, 357, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_246772_2953'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>118, 370, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_537808_2955'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>42, 304, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_163359_2957'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>220, 330, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='Role' xmi:id='_15_1_640021c_1213976009610_909423_2946'>
+									<elementID xmi:idref='_15_1_640021c_1213976009609_539565_2943'/>
+									<geometry>49, 252, 10, 10</geometry>
+									<mdOwnedViews>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_896158_2959'>
+											<visible xmi:value='false'/>
+											<geometry>49, 252, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_452109_2961'>
+											<visible xmi:value='false'/>
+											<geometry>49, 252, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_476685_2963'>
+											<visible xmi:value='false'/>
+											<geometry>49, 252, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213976009625_995725_2965'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>49, 252, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_131789_2968'>
+											<visible xmi:value='false'/>
+											<geometry>49, 252, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_451593_2970'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>49, 252, 24, 13</geometry>
+										</mdElement>
+									</mdOwnedViews>
+									<roleNameID xmi:idref='_15_1_640021c_1213976009625_896158_2959'/>
+									<roleMultiplicityID xmi:idref='_15_1_640021c_1213976009625_452109_2961'/>
+									<roleConstraintsID xmi:idref='_15_1_640021c_1213976009625_476685_2963'/>
+									<roleStereotypeID xmi:idref='_15_1_640021c_1213976009625_995725_2965'/>
+									<roleTaggedValuesID xmi:idref='_15_1_640021c_1213976009625_131789_2968'/>
+									<rolePropertyStringID xmi:idref='_15_1_640021c_1213976009625_451593_2970'/>
+								</mdElement>
+								<mdElement elementClass='Role' xmi:id='_15_1_640021c_1213976009610_27745_2945'>
+									<elementID xmi:idref='_15_1_640021c_1213976009609_626743_2944'/>
+									<geometry>265, 365, 10, 10</geometry>
+									<mdOwnedViews>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_153800_2974'>
+											<visible xmi:value='false'/>
+											<geometry>265, 365, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_351106_2976'>
+											<visible xmi:value='false'/>
+											<geometry>265, 365, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_386307_2978'>
+											<visible xmi:value='false'/>
+											<geometry>265, 365, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213976009625_468289_2980'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>265, 382, 24, 13</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_456214_2983'>
+											<visible xmi:value='false'/>
+											<geometry>265, 365, 24, 12</geometry>
+										</mdElement>
+										<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213976009625_780660_2985'>
+											<editable xmi:value='false'/>
+											<visible xmi:value='false'/>
+											<geometry>265, 365, 24, 13</geometry>
+										</mdElement>
+									</mdOwnedViews>
+									<roleNameID xmi:idref='_15_1_640021c_1213976009625_153800_2974'/>
+									<roleMultiplicityID xmi:idref='_15_1_640021c_1213976009625_351106_2976'/>
+									<roleConstraintsID xmi:idref='_15_1_640021c_1213976009625_386307_2978'/>
+									<roleStereotypeID xmi:idref='_15_1_640021c_1213976009625_468289_2980'/>
+									<roleTaggedValuesID xmi:idref='_15_1_640021c_1213976009625_456214_2983'/>
+									<rolePropertyStringID xmi:idref='_15_1_640021c_1213976009625_780660_2985'/>
+								</mdElement>
+								<mdElement elementClass='AssociationTextBox' xmi:id='_15_1_640021c_1213976009625_471905_2989'>
+									<visible xmi:value='false'/>
+									<geometry>112, 332, 36, 13</geometry>
+									<reverseIcon xmi:value='true'/>
+								</mdElement>
+							</mdOwnedViews>
+							<linkConstraintID xmi:idref='_15_1_640021c_1213976009625_588021_2948'/>
+							<linkStereotypeID xmi:idref='_15_1_640021c_1213976009625_773534_2950'/>
+							<linkTaggedValuesID xmi:idref='_15_1_640021c_1213976009625_246772_2953'/>
+							<linkConveyedAID xmi:idref='_15_1_640021c_1213976009625_537808_2955'/>
+							<linkConveyedBID xmi:idref='_15_1_640021c_1213976009625_163359_2957'/>
+							<associationFirstEndID xmi:idref='_15_1_640021c_1213976009610_909423_2946'/>
+							<associationSecondEndID xmi:idref='_15_1_640021c_1213976009610_27745_2945'/>
+						</mdElement>
+						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213977071070_836442_2996'>
+							<elementID xmi:idref='_15_1_640021c_1213180617825_991939_404'/>
+							<geometry>385, 173, 197, 112</geometry>
+						</mdElement>
+						<mdElement elementClass='Dependency' xmi:id='_15_1_640021c_1213977078479_896992_3016'>
+							<elementID xmi:idref='_15_1_640021c_1213977078470_786846_3015'/>
+							<properties>
+								<mdElement elementClass='ChoiceProperty'>
+									<propertyID>LINK_LINE_STYLE</propertyID>
+									<propertyDescriptionID>LINK_LINE_STYLE_DESCRIPTION</propertyDescriptionID>
+									<value>RECTILINEAR</value>
+									<choice xmi:value='RECTILINEAR^OBLIQUE^BEZIER'/>
+									<index xmi:value='0'/>
+								</mdElement>
+							</properties>
+							<linkFirstEndID xmi:idref='_15_1_640021c_1213977071070_836442_2996'/>
+							<linkSecondEndID xmi:idref='_15_1_640021c_1213975925712_87602_2753'/>
+							<geometry>483, 285; 483, 315; 321, 315; 321, 375; </geometry>
+							<linkNameID xmi:idref='_15_1_640021c_1213977078479_148147_3017'/>
+							<nameVisible xmi:value='true'/>
+							<mdOwnedViews>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977078479_148147_3017'>
+									<visible xmi:value='false'/>
+									<geometry>375, 302, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977078479_189826_3019'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>375, 303, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213977078479_759815_3021'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>375, 327, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977078479_566973_3024'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>375, 340, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977078479_247746_3026'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>451, 300, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977078479_730708_3028'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>309, 309, 24, 12</geometry>
+								</mdElement>
+							</mdOwnedViews>
+							<linkConstraintID xmi:idref='_15_1_640021c_1213977078479_189826_3019'/>
+							<linkStereotypeID xmi:idref='_15_1_640021c_1213977078479_759815_3021'/>
+							<linkTaggedValuesID xmi:idref='_15_1_640021c_1213977078479_566973_3024'/>
+							<linkConveyedAID xmi:idref='_15_1_640021c_1213977078479_247746_3026'/>
+							<linkConveyedBID xmi:idref='_15_1_640021c_1213977078479_730708_3028'/>
+						</mdElement>
+						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213977126107_720228_3034'>
+							<elementID xmi:idref='_15_1_640021c_1213181404400_206433_547'/>
+							<geometry>458, 30, 101, 83</geometry>
+						</mdElement>
+						<mdElement elementClass='Dependency' xmi:id='_15_1_640021c_1213977129852_729510_3054'>
+							<elementID xmi:idref='_15_1_640021c_1213977129842_392398_3053'/>
+							<properties>
+								<mdElement elementClass='ChoiceProperty'>
+									<propertyID>LINK_LINE_STYLE</propertyID>
+									<propertyDescriptionID>LINK_LINE_STYLE_DESCRIPTION</propertyDescriptionID>
+									<value>RECTILINEAR</value>
+									<choice xmi:value='RECTILINEAR^OBLIQUE^BEZIER'/>
+									<index xmi:value='0'/>
+								</mdElement>
+							</properties>
+							<linkFirstEndID xmi:idref='_15_1_640021c_1213977126107_720228_3034'/>
+							<linkSecondEndID xmi:idref='_15_1_640021c_1213977071070_836442_2996'/>
+							<geometry>483, 113; 483, 173; </geometry>
+							<linkNameID xmi:idref='_15_1_640021c_1213977129852_781848_3055'/>
+							<nameVisible xmi:value='true'/>
+							<mdOwnedViews>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977129852_781848_3055'>
+									<visible xmi:value='false'/>
+									<geometry>471, 130, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977129852_755695_3057'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>471, 131, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213977129852_934080_3059'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>471, 155, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977129852_908813_3062'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>471, 168, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977129852_591906_3064'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>471, 110, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977129852_714596_3066'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>471, 146, 24, 12</geometry>
+								</mdElement>
+							</mdOwnedViews>
+							<linkConstraintID xmi:idref='_15_1_640021c_1213977129852_755695_3057'/>
+							<linkStereotypeID xmi:idref='_15_1_640021c_1213977129852_934080_3059'/>
+							<linkTaggedValuesID xmi:idref='_15_1_640021c_1213977129852_908813_3062'/>
+							<linkConveyedAID xmi:idref='_15_1_640021c_1213977129852_591906_3064'/>
+							<linkConveyedBID xmi:idref='_15_1_640021c_1213977129852_714596_3066'/>
+						</mdElement>
+						<mdElement elementClass='Dependency' xmi:id='_15_1_640021c_1213977154053_29808_3070'>
+							<elementID xmi:idref='_15_1_640021c_1213977154043_530016_3069'/>
+							<properties>
+								<mdElement elementClass='ChoiceProperty'>
+									<propertyID>LINK_LINE_STYLE</propertyID>
+									<propertyDescriptionID>LINK_LINE_STYLE_DESCRIPTION</propertyDescriptionID>
+									<value>RECTILINEAR</value>
+									<choice xmi:value='RECTILINEAR^OBLIQUE^BEZIER'/>
+									<index xmi:value='0'/>
+								</mdElement>
+							</properties>
+							<linkFirstEndID xmi:idref='_15_1_640021c_1213977126107_720228_3034'/>
+							<linkSecondEndID xmi:idref='_15_1_640021c_1213975925712_87602_2753'/>
+							<geometry>534, 113; 534, 143; 612, 143; 612, 345; 338, 345; 338, 375; </geometry>
+							<linkNameID xmi:idref='_15_1_640021c_1213977154053_487754_3071'/>
+							<nameVisible xmi:value='true'/>
+							<mdOwnedViews>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977154053_487754_3071'>
+									<visible xmi:value='false'/>
+									<geometry>600, 329, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977154053_931271_3073'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>600, 330, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213977154053_887616_3075'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>600, 354, 24, 13</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977154053_185221_3078'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>600, 367, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977154053_66939_3080'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>600, 142, 24, 12</geometry>
+								</mdElement>
+								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213977154053_199716_3082'>
+									<editable xmi:value='false'/>
+									<visible xmi:value='false'/>
+									<geometry>419, 330, 24, 12</geometry>
+								</mdElement>
+							</mdOwnedViews>
+							<linkConstraintID xmi:idref='_15_1_640021c_1213977154053_931271_3073'/>
+							<linkStereotypeID xmi:idref='_15_1_640021c_1213977154053_887616_3075'/>
+							<linkTaggedValuesID xmi:idref='_15_1_640021c_1213977154053_185221_3078'/>
+							<linkConveyedAID xmi:idref='_15_1_640021c_1213977154053_66939_3080'/>
+							<linkConveyedBID xmi:idref='_15_1_640021c_1213977154053_199716_3082'/>
+						</mdElement>
+					</mdOwnedViews>
+				</mdElement>
+			</mdElement>
 			<mdElement elementClass='Diagram' xmi:id='_15_1_640021c_1213278864045_430247_2030' name='Builder Components' visibility='public' ownerOfDiagram='_15_1_640021c_1213182661932_862778_1119'>
 				<mdElement elementClass='DiagramPresentationElement' xmi:id='_15_1_640021c_1213278864046_126220_2031'>
 					<elementID xmi:idref='_15_1_640021c_1213278864045_430247_2030'/>
@@ -10497,7 +11082,7 @@
 						<mdElement elementClass='StringProperty'>
 							<propertyID>DIAGRAMS_LAYOUT</propertyID>
 							<propertyDescriptionID>DIAGRAMS_LAYOUT_DESCRIPTION</propertyDescriptionID>
-							<value>0 0 0 14 0 0 0 1 0 0 0 26 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 31 0 38 0 30 0 32 0 33 0 31 0 39 0 38 0 36 0 5f 0 37 0 39 0 32 0 33 0 35 0 39 0 5f 0 32 0 35 0 35 0 0 0 1 0 0 0 cc 0 0 0 e2 0 0 0 2 0 0 0 6 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 38 0 30 0 36 0 34 0 39 0 31 0 31 0 30 0 39 0 5f 0 36 0 34 0 31 0 38 0 38 0 38 0 5f 0 31 0 36 0 35 0 35 0 0 0 26 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 32 0 30 0 32 0 33 0 30 0 37 0 35 0 35 0 34 0 5f 0 38 0 36 0 32 0 32 0 39 0 39 0 5f 0 38 0 34 0 37 0 0 0 26 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 31 0 38 0 30 0 32 0 33 0 31 0 39 0 38 0 36 0 5f 0 37 0 39 0 32 0 33 0 35 0 39 0 5f 0 32 0 35 0 35 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 32 0 30 0 34 0
  33 0 37 0 35 0 31 0 33 0 31 0 5f 0 34 0 36 0 36 0 34 0 31 0 35 0 5f 0 35 0 32 0 39 0 38 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 32 0 39 0 36 0 35 0 34 0 36 0 31 0 30 0 31 0 5f 0 32 0 37 0 34 0 37 0 36 0 36 0 5f 0 33 0 38 0 31 0 39 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 31 0 38 0 39 0 35 0 38 0 32 0 34 0 37 0 39 0 5f 0 33 0 36 0 37 0 37 0 33 0 35 0 5f 0 31 0 35 0 33 0 32 </value>
+							<value>0 0 0 14 0 0 0 1 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 39 0 37 0 35 0 39 0 31 0 34 0 39 0 33 0 32 0 5f 0 38 0 38 0 31 0 36 0 35 0 35 0 5f 0 32 0 37 0 33 0 31 0 0 0 1 0 0 0 cc 0 0 0 e2 0 0 0 6 0 0 0 7 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 38 0 30 0 36 0 34 0 39 0 31 0 31 0 30 0 39 0 5f 0 36 0 34 0 31 0 38 0 38 0 38 0 5f 0 31 0 36 0 35 0 35 0 0 0 26 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 32 0 30 0 32 0 33 0 30 0 37 0 35 0 35 0 34 0 5f 0 38 0 36 0 32 0 32 0 39 0 39 0 5f 0 38 0 34 0 37 0 0 0 26 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 31 0 38 0 30 0 32 0 33 0 31 0 39 0 38 0 36 0 5f 0 37 0 39 0 32 0 33 0 35 0 39 0 5f 0 32 0 35 0 35 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 32 0 30 0
  34 0 33 0 37 0 35 0 31 0 33 0 31 0 5f 0 34 0 36 0 36 0 34 0 31 0 35 0 5f 0 35 0 32 0 39 0 38 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 32 0 39 0 36 0 35 0 34 0 36 0 31 0 30 0 31 0 5f 0 32 0 37 0 34 0 37 0 36 0 36 0 5f 0 33 0 38 0 31 0 39 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 31 0 38 0 39 0 35 0 38 0 32 0 34 0 37 0 39 0 5f 0 33 0 36 0 37 0 37 0 33 0 35 0 5f 0 31 0 35 0 33 0 32 0 0 0 27 0 5f 0 31 0 35 0 5f 0 31 0 5f 0 36 0 34 0 30 0 30 0 32 0 31 0 63 0 5f 0 31 0 32 0 31 0 33 0 39 0 37 0 35 0 39 0 31 0 34 0 39 0 33 0 32 0 5f 0 38 0 38 0 31 0 36 0 35 0 35 0 5f 0 32 0 37 0 33 0 31 </value>
 							<multiline xmi:value='false'/>
 						</mdElement>
 						<mdElement elementClass='StringProperty'>
@@ -10575,7 +11160,7 @@
 						<mdElement elementClass='StringProperty'>
 							<propertyID>INFO_PROPERTY</propertyID>
 							<propertyDescriptionID>INFO_PROPERTY_DESCRIPTION</propertyDescriptionID>
-							<value>20 29 56 59 34 d 32 35 53 4d 98 ab b5 a7 ee c b0 6 da d9 1e 78 97 41 5a ae af ed d1 f6 0 d7 f3 2e 89 a a4 4e e5 6 c6 20 71 c1 e9 15 5e a4 c5 db fc 4c aa 7e 36 67 15 41 3b c4 a8 36 10 fa 87 80 dc 7 2c </value>
+							<value>20 29 56 59 34 d 32 35 53 4d 98 ab b5 a7 ee c b0 6 da d9 1e 78 97 41 5a ab ab ed d3 fd 0 d7 f3 2e 89 a a4 4e e5 6 c6 20 71 c1 e9 15 5e a4 c5 db fc 4c aa 7e 36 67 15 41 3b c4 a8 36 10 fa 87 80 dc 7 2c </value>
 							<multiline xmi:value='false'/>
 						</mdElement>
 						<mdElement elementClass='LIST_PROPERTY'>
@@ -18299,6 +18884,7 @@
 	<Data:throwable xmi:id='_15_1_640021c_1213268301339_401759_1516' base_Class='_15_1_640021c_1213181651095_651286_781'/>
 	<MagicDraw_Profile:DiagramInfo xmi:id='_15_1_640021c_1213278864047_224956_2042' base_Diagram='_15_1_640021c_1213278864045_430247_2030' Author='jason' Modification_date='6/12/08 8:54 PM' Creation_date='6/12/08 8:54 PM'/>
 	<UML_Profile_for_Java:JavaOperation xmi:id='_15_1_640021c_1213954775975_882512_2406' base_Operation='_15_1_640021c_1213954704770_623532_2401' JavaThrows='Exception,Notification&#9;'/>
+	<MagicDraw_Profile:DiagramInfo xmi:id='_15_1_640021c_1213975914935_734594_2743' base_Diagram='_15_1_640021c_1213975914932_881655_2731' Author='jason' Modification_date='6/20/08 10:31 PM' Creation_date='6/20/08 10:31 PM'/>
 	<MagicDraw_Profile:DiagramInfo xmi:id='_15_1_640021c_1213296546103_22118_3831' base_Diagram='_15_1_640021c_1213296546101_274766_3819' Author='jason' Modification_date='6/13/08 1:49 AM' Creation_date='6/13/08 1:49 AM'/>
 	<Data:throwable xmi:id='_15_1_640021c_1213268301341_965541_1522' base_Class='_15_1_640021c_1213183005339_563000_1245'/>
 	<Data:service xmi:id='_15_1_640021c_1213267437531_951859_1133' base_Interface='_15_1_640021c_1213180648464_630720_444'/>