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 13:00:56 UTC

svn commit: r669852 - in /geronimo/gshell/trunk: gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/ gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/ src/uml/

Author: jdillon
Date: Fri Jun 20 04:00:56 2008
New Revision: 669852

URL: http://svn.apache.org/viewvc?rev=669852&view=rev
Log:
Install plexus descriptors for action, documenter and completer 

Added:
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandCompletorDescriptor.java   (with props)
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDocumentorDescriptor.java
      - copied, changed from r669210, geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompletor.java   (with props)
    geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumentor.java
      - copied, changed from r669849, geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java
Modified:
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandActionDescriptor.java
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java
    geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/PluginDescriptor.java
    geronimo/gshell/trunk/src/uml/GShell.mdxml

Modified: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandActionDescriptor.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandActionDescriptor.java?rev=669852&r1=669851&r2=669852&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandActionDescriptor.java (original)
+++ geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandActionDescriptor.java Fri Jun 20 04:00:56 2008
@@ -84,8 +84,4 @@
 
         return requirement;
     }
-
-    public String toString() {
-        return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
-    }
 }
\ No newline at end of file

Added: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandCompletorDescriptor.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandCompletorDescriptor.java?rev=669852&view=auto
==============================================================================
--- geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandCompletorDescriptor.java (added)
+++ geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandCompletorDescriptor.java Fri Jun 20 04:00:56 2008
@@ -0,0 +1,58 @@
+/*
+ * 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.plugin.descriptor;
+
+import org.apache.geronimo.gshell.command.CommandCompletor;
+import org.apache.geronimo.gshell.model.command.CommandModel;
+import org.apache.geronimo.gshell.yarn.ReflectionToStringBuilder;
+import org.apache.geronimo.gshell.yarn.ToStringStyle;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+
+/**
+ * ???
+ *
+ * @version $Rev$ $Date$
+ */
+public class CommandCompletorDescriptor
+    extends ComponentDescriptorSupport
+{
+    private final CommandModel model;
+
+    public CommandCompletorDescriptor(final CommandModel model) {
+        assert model != null;
+
+        this.model = model;
+
+        setRole(CommandCompletor.class);
+        setRoleHint(model.getId());
+        setImplementation("org.apache.geronimo.gshell.rapture.DefaultCommandCompletor");
+        setVersion(model.getVersion());
+        setIsolatedRealm(false);
+        setInstantiationStrategy("singleton");
+
+        XmlPlexusConfiguration config = new XmlPlexusConfiguration("configuration");
+        config.addChild(new XmlPlexusConfiguration("commandId", model.getId()));
+        setConfiguration(config);
+    }
+
+    public CommandModel getCommand() {
+        return model;
+    }
+}
\ No newline at end of file

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

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

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

Modified: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java?rev=669852&r1=669851&r2=669852&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java (original)
+++ geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java Fri Jun 20 04:00:56 2008
@@ -55,8 +55,4 @@
     public CommandModel getCommand() {
         return model;
     }
-    
-    public String toString() {
-        return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
-    }
 }
\ No newline at end of file

Copied: geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDocumentorDescriptor.java (from r669210, geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDocumentorDescriptor.java?p2=geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDocumentorDescriptor.java&p1=geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java&r1=669210&r2=669852&rev=669852&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandContainerDescriptor.java (original)
+++ geronimo/gshell/trunk/gshell-plugin/src/main/java/org/apache/geronimo/gshell/plugin/descriptor/CommandDocumentorDescriptor.java Fri Jun 20 04:00:56 2008
@@ -19,10 +19,10 @@
 
 package org.apache.geronimo.gshell.plugin.descriptor;
 
-import org.apache.geronimo.gshell.command.CommandContainer;
+import org.apache.geronimo.gshell.command.CommandDocumentor;
+import org.apache.geronimo.gshell.model.command.CommandModel;
 import org.apache.geronimo.gshell.yarn.ReflectionToStringBuilder;
 import org.apache.geronimo.gshell.yarn.ToStringStyle;
-import org.apache.geronimo.gshell.model.command.CommandModel;
 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 
 /**
@@ -30,19 +30,19 @@
  *
  * @version $Rev$ $Date$
  */
-public class CommandContainerDescriptor
+public class CommandDocumentorDescriptor
     extends ComponentDescriptorSupport
 {
     private final CommandModel model;
 
-    public CommandContainerDescriptor(final CommandModel model) {
+    public CommandDocumentorDescriptor(final CommandModel model) {
         assert model != null;
 
         this.model = model;
 
-        setRole(CommandContainer.class);
+        setRole(CommandDocumentor.class);
         setRoleHint(model.getId());
-        setImplementation("org.apache.geronimo.gshell.rapture.DefaultCommandContainer");
+        setImplementation("org.apache.geronimo.gshell.rapture.DefaultCommandDocumentor");
         setVersion(model.getVersion());
         setIsolatedRealm(false);
         setInstantiationStrategy("singleton");
@@ -55,8 +55,4 @@
     public CommandModel getCommand() {
         return model;
     }
-    
-    public String toString() {
-        return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
-    }
 }
\ No newline at end of file

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=669852&r1=669851&r2=669852&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 04:00:56 2008
@@ -53,6 +53,8 @@
         assert model != null;
 
         addComponentDescriptor(new CommandActionDescriptor(model));
+        addComponentDescriptor(new CommandDocumentorDescriptor(model));
+        addComponentDescriptor(new CommandCompletorDescriptor(model));
         addComponentDescriptor(new CommandContainerDescriptor(model));
     }
 

Added: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompletor.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompletor.java?rev=669852&view=auto
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompletor.java (added)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandCompletor.java Fri Jun 20 04:00:56 2008
@@ -0,0 +1,42 @@
+/*
+ * 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.rapture;
+
+import org.apache.geronimo.gshell.command.CommandCompletor;
+import org.apache.geronimo.gshell.command.CommandDocumentor;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The default {@link CommandCompletor} component.
+ *
+ * @version $Rev$ $Date$
+ */
+@Component(role=CommandDocumentor.class)
+public class DefaultCommandCompletor
+    implements CommandCompletor
+{
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    @Configuration("") // Just to mark what this is used for, since we have to configure a default value
+    private String commandId;
+}
\ No newline at end of file

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

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

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

Copied: geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumentor.java (from r669849, geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumentor.java?p2=geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumentor.java&p1=geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java&r1=669849&r2=669852&rev=669852&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandContainer.java (original)
+++ geronimo/gshell/trunk/gshell-rapture/src/main/java/org/apache/geronimo/gshell/rapture/DefaultCommandDocumentor.java Fri Jun 20 04:00:56 2008
@@ -19,135 +19,23 @@
 
 package org.apache.geronimo.gshell.rapture;
 
-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.CommandAction;
-import org.apache.geronimo.gshell.command.CommandContainer;
-import org.apache.geronimo.gshell.command.CommandContext;
-import org.apache.geronimo.gshell.command.CommandInfo;
-import org.apache.geronimo.gshell.io.IO;
-import org.apache.geronimo.gshell.plexus.GShellPlexusContainer;
-import org.apache.geronimo.gshell.util.Arguments;
-import org.codehaus.plexus.PlexusConstants;
+import org.apache.geronimo.gshell.command.CommandDocumentor;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Configuration;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * The default {@link CommandContainer} component.
+ * The default {@link CommandDocumentor} component.
  *
  * @version $Rev$ $Date$
  */
-@Component(role=CommandContainer.class)
-public class DefaultCommandContainer
-    implements CommandContainer, Contextualizable
+@Component(role=CommandDocumentor.class)
+public class DefaultCommandDocumentor
+    implements CommandDocumentor
 {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private GShellPlexusContainer container;
-
     @Configuration("") // Just to mark what this is used for, since we have to configure a default value
     private String commandId;
-
-    // Contextualizable
-    
-    public void contextualize(final Context context) throws ContextException {
-        assert context != null;
-
-        container = (GShellPlexusContainer) context.get(PlexusConstants.PLEXUS_KEY);
-        assert container != null;
-        
-        log.debug("Container: {}", container);
-    }
-
-    private CommandAction getAction() {
-        assert container != null;
-
-        try {
-            return container.lookupComponent(CommandAction.class, commandId);
-        }
-        catch (ComponentLookupException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    // CommandContainer
-
-    public Object execute(final CommandContext context) throws Exception {
-        assert context != null;
-
-        log.trace("Executing; context={}");
-
-        CommandAction action = getAction();
-
-        // TODO: Handle logging muck
-        // NOTE: For logging, just set the NDC/MDC and let the loggers name be whatever the command set it to be.
-        
-        // TODO: Bind context, io and variables
-        // NOTE: No, no no...
-
-        // Process command line options/arguments, return if we have been asked to display --help
-        if (processArguments(context, action, context.getArguments())) {
-            return CommandAction.Result.SUCCESS;
-        }
-
-        Object result = action.execute(context);
-
-        log.trace("Result: {}", result);
-
-        return result;
-    }
-
-    private boolean processArguments(final CommandContext context, final CommandAction action, final Object[] args) throws ProcessingException {
-        assert context != null;
-        assert args != null;
-
-        CommandLineProcessor clp = new CommandLineProcessor();
-        clp.addBean(action);
-
-        // Attach some help context
-        HelpSupport help = new HelpSupport();
-        clp.addBean(help);
-
-        // Process the arguments
-        clp.process(Arguments.toStringArray(args));
-
-        // Display help if option detected
-        if (help.displayHelp) {
-            help.display(context, clp);
-            return true;
-        }
-
-        return false;
-    }
-
-    private static class HelpSupport
-    {
-        @Option(name="-h", aliases={"--help"}, description="Display this help message", requireOverride=true)
-        public boolean displayHelp;
-
-        protected void display(final CommandContext context, final CommandLineProcessor clp) {
-            assert context != null;
-            assert clp != null;
-
-            // Use the alias if we have one, else use the command name
-            CommandInfo info = context.getInfo();
-            String name = info.getAlias();
-            if (name == null) {
-                name = info.getName();
-            }
-
-            IO io = context.getIo();
-            Printer printer = new Printer(clp);
-            printer.printUsage(io.out, name);
-            io.out.println();
-        }
-    }
 }
\ 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=669852&r1=669851&r2=669852&view=diff
==============================================================================
--- geronimo/gshell/trunk/src/uml/GShell.mdxml (original)
+++ geronimo/gshell/trunk/src/uml/GShell.mdxml Fri Jun 20 04:00:56 2008
@@ -350,6 +350,25 @@
 					<ownedComment xmi:type='uml:Comment' xmi:id='_15_1_640021c_1213268853982_182247_1554' body='Provides &quot;container&quot;-like encapsulation for command execution.'>
 						<annotatedElement xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
 					</ownedComment>
+					<ownedOperation xmi:type='uml:Operation' xmi:id='_15_1_640021c_1213958728367_604928_2520' name='getId' visibility='public'>
+						<ownedParameter xmi:type='uml:Parameter' xmi:id='_15_1_640021c_1213958736066_928628_2524' visibility='public' direction='return'>
+							<type xmi:type='uml:Class' href='Java_5_0_Profile.mdzip#_9_5_f720368_1110473546612_692218_7691'>
+								<xmi:Extension extender='MagicDraw UML 15.1' extenderID='MagicDraw UML 15.1'>
+									<referenceExtension referentPath='JDK 5.0 Classes::java::lang::String' referentType='Class'/>
+								</xmi:Extension>
+							</type>
+						</ownedParameter>
+					</ownedOperation>
+					<ownedOperation xmi:type='uml:Operation' xmi:id='_15_1_640021c_1213958675513_334654_2505' name='getAction' visibility='public'>
+						<ownedParameter xmi:type='uml:Parameter' xmi:id='_15_1_640021c_1213958682644_704570_2509' visibility='public' direction='return' type='_15_1_640021c_1213180578587_641176_364'/>
+					</ownedOperation>
+					<ownedOperation xmi:type='uml:Operation' xmi:id='_15_1_640021c_1213958685135_618110_2510' name='getDocumentor' visibility='public'>
+						<ownedParameter xmi:type='uml:Parameter' xmi:id='_15_1_640021c_1213958705660_138746_2514' visibility='public' direction='return' type='_15_1_640021c_1213180617825_991939_404'/>
+					</ownedOperation>
+					<ownedOperation xmi:type='uml:Operation' xmi:id='_15_1_640021c_1213958712250_79957_2515' name='getCompletor' visibility='public'>
+						<ownedParameter xmi:type='uml:Parameter' xmi:id='_15_1_640021c_1213958725788_508994_2519' visibility='public' direction='return' type='_15_1_640021c_1213180606410_110446_384'/>
+					</ownedOperation>
+					<ownedReception xmi:type='uml:Reception' xmi:id='_15_1_640021c_1213958667307_273321_2501' visibility='public'/>
 				</packagedElement>
 				<packagedElement xmi:type='uml:Interface' xmi:id='_15_1_640021c_1213181386344_882093_527' name='Variables' visibility='public'/>
 				<packagedElement xmi:type='uml:Dependency' xmi:id='_15_1_640021c_1213206688830_377030_6877' visibility='public'>
@@ -1625,7 +1644,14 @@
 											<value xmi:value='-39322'/>
 										</mdElement>
 									</properties>
-									<geometry>868, 434, 92, 60</geometry>
+									<geometry>868, 434, 214, 112</geometry>
+									<receptions>
+										<mdElement elementClass='Reception' xmi:id='_15_1_640021c_1213958669795_190129_2502'>
+											<elementID xmi:idref='_15_1_640021c_1213958667307_273321_2501'/>
+											<editable xmi:value='false'/>
+											<geometry>0, 0, 0, 13</geometry>
+										</mdElement>
+									</receptions>
 								</mdElement>
 								<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213181386345_848152_528'>
 									<elementID xmi:idref='_15_1_640021c_1213181386344_882093_527'/>
@@ -2148,7 +2174,7 @@
 						<mdElement elementClass='NoteAnchor' xmi:id='_15_1_640021c_1213207238659_421665_6932'>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213180637362_392894_425'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213207063799_556173_6892'/>
-							<geometry>960, 489; 1163, 597; </geometry>
+							<geometry>1077, 546; 1167, 597; </geometry>
 						</mdElement>
 						<mdElement elementClass='Dependency' xmi:id='_15_1_640021c_1213207287852_490223_6935'>
 							<elementID xmi:idref='_15_1_640021c_1213207287844_194082_6934'/>
@@ -2241,7 +2267,7 @@
 						<mdElement elementClass='NoteAnchor' xmi:id='_15_1_640021c_1213207217481_855402_6930'>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213180637362_392894_425'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213207195657_613093_6919'/>
-							<geometry>960, 470; 1178, 496; </geometry>
+							<geometry>1082, 494; 1112, 496; </geometry>
 						</mdElement>
 						<mdElement elementClass='Note' xmi:id='_15_1_640021c_1213207195657_613093_6919'>
 							<elementID xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
@@ -2376,7 +2402,7 @@
 									<value xmi:value='false'/>
 								</mdElement>
 							</properties>
-							<geometry>360, 608, 298, 60</geometry>
+							<geometry>329, 660, 298, 60</geometry>
 						</mdElement>
 						<mdElement elementClass='Class' xmi:id='_15_1_640021c_1213806522989_168651_3338'>
 							<elementID xmi:idref='_15_1_640021c_1213181420191_42115_567'/>
@@ -2444,7 +2470,14 @@
 						</mdElement>
 						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213806522989_764546_3342'>
 							<elementID xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
-							<geometry>486, 475, 92, 60</geometry>
+							<geometry>425, 475, 214, 112</geometry>
+							<receptions>
+								<mdElement elementClass='Reception' xmi:id='_15_1_640021c_1213958669798_983135_2503'>
+									<elementID xmi:idref='_15_1_640021c_1213958667307_273321_2501'/>
+									<editable xmi:value='false'/>
+									<geometry>0, 0, 0, 13</geometry>
+								</mdElement>
+							</receptions>
 						</mdElement>
 						<mdElement elementClass='Class' xmi:id='_15_1_640021c_1213806522989_394108_3343'>
 							<elementID xmi:idref='_15_1_640021c_1213181651095_651286_781'/>
@@ -2485,38 +2518,38 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_728883_3336'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_764546_3342'/>
-							<geometry>760, 243; 760, 415; 550, 415; 550, 475; </geometry>
+							<geometry>760, 243; 760, 415; 574, 415; 574, 475; </geometry>
 							<linkNameID xmi:idref='_15_1_640021c_1213806522989_895177_3367'/>
 							<nameVisible xmi:value='true'/>
 							<mdOwnedViews>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_895177_3367'>
-									<geometry>693, 402, 37, 13</geometry>
+									<geometry>705, 402, 37, 13</geometry>
 									<text>creates</text>
 								</mdElement>
 								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213806522989_78036_3385'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>699, 427, 24, 13</geometry>
+									<geometry>711, 427, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_68390_3386'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>699, 440, 24, 12</geometry>
+									<geometry>711, 440, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_678115_3384'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>699, 391, 24, 12</geometry>
+									<geometry>711, 391, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524734_390725_3646'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>748, 316, 24, 12</geometry>
+									<geometry>748, 311, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524734_244324_3648'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>567, 400, 24, 12</geometry>
+									<geometry>586, 400, 24, 12</geometry>
 								</mdElement>
 							</mdOwnedViews>
 							<linkConstraintID xmi:idref='_15_1_640021c_1213806522989_678115_3384'/>
@@ -2538,38 +2571,38 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_855366_3341'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_764546_3342'/>
-							<geometry>876, 61; 876, 445; 568, 445; 568, 475; </geometry>
+							<geometry>876, 61; 876, 445; 617, 445; 617, 475; </geometry>
 							<linkNameID xmi:idref='_15_1_640021c_1213806522989_27061_3387'/>
 							<nameVisible xmi:value='true'/>
 							<mdOwnedViews>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_27061_3387'>
 									<visible xmi:value='false'/>
-									<geometry>864, 409, 24, 13</geometry>
+									<geometry>864, 384, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213806522989_572841_3389'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>864, 434, 24, 13</geometry>
+									<geometry>864, 409, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_100970_3390'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>864, 447, 24, 12</geometry>
+									<geometry>864, 422, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_48561_3388'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>864, 410, 24, 12</geometry>
+									<geometry>864, 385, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524734_187313_3655'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>864, 190, 24, 12</geometry>
+									<geometry>864, 180, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524734_515424_3657'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>671, 430, 24, 12</geometry>
+									<geometry>710, 430, 24, 12</geometry>
 								</mdElement>
 							</mdOwnedViews>
 							<linkConstraintID xmi:idref='_15_1_640021c_1213806522989_48561_3388'/>
@@ -2644,38 +2677,38 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_467701_3334'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_764546_3342'/>
-							<geometry>243, 385; 243, 415; 513, 415; 513, 475; </geometry>
+							<geometry>243, 385; 243, 415; 489, 415; 489, 475; </geometry>
 							<linkNameID xmi:idref='_15_1_640021c_1213806522989_632810_3394'/>
 							<nameVisible xmi:value='true'/>
 							<mdOwnedViews>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_632810_3394'>
 									<visible xmi:value='false'/>
-									<geometry>381, 402, 24, 13</geometry>
+									<geometry>369, 402, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213806522989_369580_3396'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>381, 427, 24, 13</geometry>
+									<geometry>369, 427, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_212816_3397'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>381, 440, 24, 12</geometry>
+									<geometry>369, 440, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_489628_3395'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>381, 403, 24, 12</geometry>
+									<geometry>369, 403, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524734_106231_3673'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>273, 400, 24, 12</geometry>
+									<geometry>268, 400, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524734_35939_3675'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>489, 400, 24, 12</geometry>
+									<geometry>469, 400, 24, 12</geometry>
 								</mdElement>
 							</mdOwnedViews>
 							<linkConstraintID xmi:idref='_15_1_640021c_1213806522989_489628_3395'/>
@@ -2696,7 +2729,7 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_481438_3337'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_639493_3365'/>
-							<geometry>509, 668; 509, 726; </geometry>
+							<geometry>478, 720; 478, 778; </geometry>
 						</mdElement>
 						<mdElement elementClass='NoteAnchor' xmi:id='_15_1_640021c_1213806522989_762552_3354'>
 							<properties>
@@ -2710,7 +2743,7 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_764546_3342'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_630025_3364'/>
-							<geometry>555, 535; 555, 565; 835, 565; 835, 595; </geometry>
+							<geometry>585, 587; 585, 617; 804, 617; 804, 647; </geometry>
 						</mdElement>
 						<mdElement elementClass='Dependency' xmi:id='_15_1_640021c_1213806522989_720749_3355'>
 							<elementID xmi:idref='_15_1_640021c_1213202485116_462135_4158'/>
@@ -2725,38 +2758,38 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_764546_3342'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_481438_3337'/>
-							<geometry>509, 535; 509, 608; </geometry>
+							<geometry>478, 587; 478, 660; </geometry>
 							<linkNameID xmi:idref='_15_1_640021c_1213806522989_392930_3368'/>
 							<nameVisible xmi:value='true'/>
 							<mdOwnedViews>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_392930_3368'>
-									<geometry>491, 558, 37, 13</geometry>
+									<geometry>460, 610, 37, 13</geometry>
 									<text>creates</text>
 								</mdElement>
 								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213806522989_294964_3399'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>497, 583, 24, 13</geometry>
+									<geometry>466, 635, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_449618_3400'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>497, 596, 24, 12</geometry>
+									<geometry>466, 648, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_855130_3398'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>497, 547, 24, 12</geometry>
+									<geometry>466, 599, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524740_487918_3682'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>497, 534, 24, 12</geometry>
+									<geometry>466, 586, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524740_252144_3684'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>497, 578, 24, 12</geometry>
+									<geometry>466, 630, 24, 12</geometry>
 								</mdElement>
 							</mdOwnedViews>
 							<linkConstraintID xmi:idref='_15_1_640021c_1213806522989_855130_3398'/>
@@ -2778,38 +2811,38 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213806522989_806134_3335'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213806522989_764546_3342'/>
-							<geometry>76, 385; 76, 445; 495, 445; 495, 475; </geometry>
+							<geometry>76, 385; 76, 445; 446, 445; 446, 475; </geometry>
 							<linkNameID xmi:idref='_15_1_640021c_1213806522989_470430_3401'/>
 							<nameVisible xmi:value='true'/>
 							<mdOwnedViews>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_470430_3401'>
 									<visible xmi:value='false'/>
-									<geometry>258, 432, 24, 13</geometry>
+									<geometry>234, 432, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213806522989_340520_3403'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>258, 457, 24, 13</geometry>
+									<geometry>234, 457, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_629661_3404'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>258, 470, 24, 12</geometry>
+									<geometry>234, 470, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806522989_842564_3402'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>258, 433, 24, 12</geometry>
+									<geometry>234, 433, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524741_519987_3691'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>105, 430, 24, 12</geometry>
+									<geometry>96, 430, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213806524741_296379_3693'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>411, 430, 24, 12</geometry>
+									<geometry>372, 430, 24, 12</geometry>
 								</mdElement>
 							</mdOwnedViews>
 							<linkConstraintID xmi:idref='_15_1_640021c_1213806522989_842564_3402'/>
@@ -3191,7 +3224,7 @@
 						</mdElement>
 						<mdElement elementClass='Note' xmi:id='_15_1_640021c_1213806522989_630025_3364'>
 							<elementID xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
-							<geometry>688, 595, 294, 73</geometry>
+							<geometry>657, 647, 294, 73</geometry>
 							<text>Normally configured with the glue&#39;s prefered default, but can be changed to provide the users desired behavior to orchastrate copmletion/documentation and execution of the command.</text>
 							<active xmi:idref='_15_1_640021c_1213806522989_762552_3354'/>
 						</mdElement>
@@ -3206,7 +3239,7 @@
 									<index xmi:value='1'/>
 								</mdElement>
 							</properties>
-							<geometry>390, 708, 238, 86</geometry>
+							<geometry>359, 760, 238, 86</geometry>
 							<text>Creates new Command instances.
 
 The implementing glue may create new instances each time, cache them, use prototypes, whatever it likes.</text>
@@ -7047,7 +7080,14 @@
 						</mdElement>
 						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213202327956_431333_3524'>
 							<elementID xmi:idref='_15_1_640021c_1213180637361_354944_424'/>
-							<geometry>463, 226, 92, 60</geometry>
+							<geometry>463, 226, 214, 112</geometry>
+							<receptions>
+								<mdElement elementClass='Reception' xmi:id='_15_1_640021c_1213958669800_450410_2504'>
+									<elementID xmi:idref='_15_1_640021c_1213958667307_273321_2501'/>
+									<editable xmi:value='false'/>
+									<geometry>0, 0, 0, 0</geometry>
+								</mdElement>
+							</receptions>
 						</mdElement>
 						<mdElement elementClass='Interface' xmi:id='_15_1_640021c_1213202327956_459502_3515'>
 							<elementID xmi:idref='_15_1_640021c_1213182347581_431001_933'/>
@@ -7662,38 +7702,38 @@
 							</properties>
 							<linkFirstEndID xmi:idref='_15_1_640021c_1213202327956_431333_3524'/>
 							<linkSecondEndID xmi:idref='_15_1_640021c_1213202327955_30531_3510'/>
-							<geometry>509, 286; 509, 346; 401, 346; 401, 376; </geometry>
+							<geometry>509, 338; 509, 346; 401, 346; 401, 376; </geometry>
 							<linkNameID xmi:idref='_15_1_640021c_1213203521990_26759_4899'/>
 							<nameVisible xmi:value='true'/>
 							<mdOwnedViews>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213203521990_26759_4899'>
-									<geometry>448, 333, 45, 13</geometry>
+									<geometry>422, 333, 45, 13</geometry>
 									<text>executes</text>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213203521990_391011_4901'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>458, 322, 24, 12</geometry>
+									<geometry>432, 323, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBoxWithIcon' xmi:id='_15_1_640021c_1213203521990_52692_4903'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>458, 358, 24, 13</geometry>
+									<geometry>432, 357, 24, 13</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213203521990_381950_4906'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>458, 371, 24, 12</geometry>
+									<geometry>432, 370, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213203521990_596231_4908'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>497, 310, 24, 12</geometry>
+									<geometry>483, 340, 24, 12</geometry>
 								</mdElement>
 								<mdElement elementClass='TextBox' xmi:id='_15_1_640021c_1213203521990_510427_4910'>
 									<editable xmi:value='false'/>
 									<visible xmi:value='false'/>
-									<geometry>399, 331, 24, 12</geometry>
+									<geometry>380, 342, 24, 12</geometry>
 								</mdElement>
 							</mdOwnedViews>
 							<linkConstraintID xmi:idref='_15_1_640021c_1213203521990_391011_4901'/>
@@ -9595,6 +9635,7 @@
 						<packagedElement xmi:type='uml:Class' xmi:id='_9_5_f720368_1110473546706_441504_8903' name='Properties' visibility='public'/>
 					</packagedElement>
 					<packagedElement xmi:type='uml:Package' xmi:id='_9_5_f720368_1110473547503_52464_17780' name='lang' visibility='public'>
+						<packagedElement xmi:type='uml:Class' xmi:id='_9_5_f720368_1110473546612_692218_7691' name='String' visibility='public'/>
 						<packagedElement xmi:type='uml:Class' xmi:id='_9_5_f720368_1110473546612_117118_7661' name='Object' visibility='public'/>
 					</packagedElement>
 					<packagedElement xmi:type='uml:Package' xmi:id='_9_5_f720368_1110473547471_831617_17570' name='io' visibility='public'>
@@ -9969,7 +10010,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 94 44 5a aa ad ed d1 f0 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 94 44 5a ab aa ed d5 f7 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'>