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. 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	'/>
+ <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'/>