Hey, what exactly does this remote-server-control command intend to
solve?  This got committed at the same time as your aliasing work...
which sorry to say I'm about to nuke.

I wish you had mentioned you wanted to work on alias stuff and I would
have given you a nudge on how I was planning on implementing it.  The
idea was to follow how the alias stuff works for the Groovy Shell
(aka. groovysh), which closely resembles how aliasing works for
/bin/bash.  To do so means adding a few hooks into the GShell core and
adding alias, unalias commands to builtins.

 * * *

Anyways, I comprehend what the alias bits are intended for, but I'm
lost for what the remote-server-control bits are for completely.

I'm a bit weary about adding some of these commands to the
distribution w/o adequate testing and documentation... or use-cases.

Perhaps if you want to keep this around we can move it to a sandbox
module, where we can test out new commands, then once they are
rocksolid move them over?

--jason


On Tue, Dec 4, 2007 at 5:46 PM,  <[EMAIL PROTECTED]> wrote:
> Author: gdamour
>  Date: Tue Dec  4 02:46:27 2007
>  New Revision: 600872
>
>  URL: http://svn.apache.org/viewvc?rev=600872&view=rev
>  Log:
>  Add a couple of gshell commands to simplify the remote control of servers.
>  The commands being added are:
>  * alias: used to alias a commond along with some options and arguments.
>  etc/layout.xml provides a first aliasing mechanism: a hierarchical name is
>  mapped to a command. alias suplements this first aliasing mechanism with the
>  ability to alias a command along with its typical options and arguments.
>  * unalias: to remove an alias
>  * execute-alias: to execute an alias
>  * remote/rsh to start an rsh client
>  * remote/rsh-server to start an rsh-server
>  * remote-control/server-control to control a server
>
>  Samples for the aliasing commands:
>  // create the alias 'st' for the quoted command
>  > alias st 'geronimo/start-server -G server.name=yellow -D property=value'
>  // execute the alias 'st'. This executes the command in quote above
>  > excute-alias st
>  // display defined aliases
>  > alias
>  // remove the alias 'st'
>  > unalias st
>
>  Samples for the remote server control commands:
>  // start an rsh-server:
>  > remote/rsh-server tcp://localhost:9999
>  // remote 'start' the server 'defaultServer'
>  > remote-control/server-control start defaultServer
>  // remote 'stop' the server 'defaultServer'
>  > remote-control/server-control stop defaultServer
>
>  All the commands are implemented in Groovy. XML manipulations are done via
>  XmlSlurpers.
>
>  Aliases are stored in a configuration file located by default in
>     etc/aliases.xml
>
>  Server configurations, used by the remote control command, are stored in a
>  configuration file located by default in
>     etc/server-configuration.xml
>
>  New JARs are being added to lib/gshell for the support of the rsh bits.
>
>  Added:
>     
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/aliases.xml
>     
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/server-configuration.xml
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AbstractAliasCommand.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AliasCommand.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ExecuteAliasCommand.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/RemoteServerControlCommand.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/UnaliasCommand.groovy
>     geronimo/server/trunk/framework/modules/geronimo-commands/src/test/
>     geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/AliasCommandTest.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/ExecuteAliasCommandTest.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/GroovyTestSupport.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/RemoteServerControlCommandTest.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/UnaliasCommandTest.groovy
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/aliases.xml
>     
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/server-configuration.xml
>  Modified:
>     geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/pom.xml
>     
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/assembly/boilerplate.xml
>     
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/layout.xml
>     geronimo/server/trunk/framework/modules/geronimo-commands/pom.xml
>     geronimo/server/trunk/pom.xml
>
>  Modified: 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/pom.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/pom.xml?rev=600872&r1=600871&r2=600872&view=diff
>  
> ==============================================================================
>  --- geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/pom.xml 
> (original)
>  +++ geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/pom.xml 
> Tue Dec  4 02:46:27 2007
>  @@ -65,6 +65,36 @@
>          </dependency>
>
>          <dependency>
>  +            <groupId>org.apache.geronimo.gshell</groupId>
>  +            <artifactId>gshell-whisper</artifactId>
>  +        </dependency>
>  +
>  +        <dependency>
>  +            <groupId>org.apache.geronimo.gshell.remote</groupId>
>  +            <artifactId>gshell-remote-client</artifactId>
>  +        </dependency>
>  +
>  +        <dependency>
>  +            <groupId>org.apache.geronimo.gshell.remote</groupId>
>  +            <artifactId>gshell-remote-common</artifactId>
>  +        </dependency>
>  +
>  +        <dependency>
>  +            <groupId>org.apache.geronimo.gshell.remote</groupId>
>  +            <artifactId>gshell-remote-server</artifactId>
>  +        </dependency>
>  +
>  +        <dependency>
>  +            <groupId>org.apache.mina</groupId>
>  +            <artifactId>mina-core</artifactId>
>  +        </dependency>
>  +
>  +        <dependency>
>  +            <groupId>org.apache.mina</groupId>
>  +            <artifactId>mina-filter-ssl</artifactId>
>  +        </dependency>
>  +
>  +        <dependency>
>              <groupId>org.slf4j</groupId>
>              <artifactId>slf4j-log4j12</artifactId>
>          </dependency>
>
>  Modified: 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/assembly/boilerplate.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/assembly/boilerplate.xml?rev=600872&r1=600871&r2=600872&view=diff
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/assembly/boilerplate.xml
>  (original)
>  +++ 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/assembly/boilerplate.xml
>  Tue Dec  4 02:46:27 2007
>  @@ -36,6 +36,15 @@
>                  
> <include>org.apache.geronimo.modules:geronimo-commands</include>
>                  
> <include>org.apache.geronimo.gshell:gshell-embeddable</include>
>                  <include>org.apache.geronimo.gshell:gshell-cli</include>
>  +
>  +                <!-- rsh related commands -->
>  +                <include>org.apache.geronimo.gshell:gshell-whisper</include>
>  +                
> <include>org.apache.geronimo.gshell.remote:gshell-remote-client</include>
>  +                
> <include>org.apache.geronimo.gshell.remote:gshell-remote-common</include>
>  +                
> <include>org.apache.geronimo.gshell.remote:gshell-remote-server</include>
>  +                <include>org.apache.mina:mina-core</include>
>  +                <include>org.apache.mina:mina-filter-ssl</include>
>  +
>                  <include>org.codehaus.groovy:groovy-all</include>
>                  <include>org.apache.ant:ant</include>
>                  <include>org.apache.ant:ant-launcher</include>
>
>  Added: 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/aliases.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/aliases.xml?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/aliases.xml
>  (added)
>  +++ 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/aliases.xml
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,30 @@
>  +<?xml version="1.0" encoding="UTF-8"?>
>  +<!--
>  +    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.
>  +-->
>  +
>  +<!-- $Rev: 597481 $ $Date: 2007-11-23 06:25:03 +1100 (Fri, 23 Nov 2007) $ 
> -->
>  +
>  +<aliases>
>  +  <alias id='start_DEFAULT_SERVER'>
>  +    <cli>geronimo/start-server -b</cli>
>  +  </alias>
>  +  <alias id='stop_DEFAULT_SERVER'>
>  +    <cli>geronimo/stop-server</cli>
>  +  </alias>
>  +</aliases>
>  \ No newline at end of file
>
>  Modified: 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/layout.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/layout.xml?rev=600872&r1=600871&r2=600872&view=diff
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/layout.xml
>  (original)
>  +++ 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/layout.xml
>  Tue Dec  4 02:46:27 2007
>  @@ -80,6 +80,21 @@
>              <id>gshell-builtins:unset</id>
>          </command>
>
>  +        <command>
>  +            <name>alias</name>
>  +            <id>geronimo-commands:alias</id>
>  +        </command>
>  +
>  +        <command>
>  +            <name>unalias</name>
>  +            <id>geronimo-commands:unalias</id>
>  +        </command>
>  +
>  +        <command>
>  +            <name>execute-alias</name>
>  +            <id>geronimo-commands:execute-alias</id>
>  +        </command>
>  +
>          <!-- Geronimo -->
>
>          <group>
>  @@ -94,6 +109,30 @@
>                  <command>
>                      <name>stop-server</name>
>                      <id>geronimo-commands:stop-server</id>
>  +                </command>
>  +            </nodes>
>  +        </group>
>  +
>  +        <group>
>  +            <name>remote</name>
>  +            <nodes>
>  +                <command>
>  +                    <name>rsh</name>
>  +                    <id>gshell-remote:rsh</id>
>  +                </command>
>  +                <command>
>  +                    <name>rsh-server</name>
>  +                    <id>gshell-remote:rsh-server</id>
>  +                </command>
>  +            </nodes>
>  +        </group>
>  +
>  +        <group>
>  +            <name>remote-control</name>
>  +            <nodes>
>  +                <command>
>  +                    <name>server-control</name>
>  +                    <id>geronimo-commands:remote-server-control</id>
>                  </command>
>              </nodes>
>          </group>
>
>  Added: 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/server-configuration.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/server-configuration.xml?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/server-configuration.xml
>  (added)
>  +++ 
> geronimo/server/trunk/assemblies/geronimo-boilerplate-minimal/src/main/underlay/etc/server-configuration.xml
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,40 @@
>  +<?xml version="1.0" encoding="UTF-8"?>
>  +<!--
>  +    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.
>  +-->
>  +
>  +<!-- $Rev: 597481 $ $Date: 2007-11-23 06:25:03 +1100 (Fri, 23 Nov 2007) $ 
> -->
>  +
>  +<configuration>
>  +  <hosts>
>  +    <host name="localhost">
>  +      <gshell>
>  +        <remote-login-cmd>remote/rsh -u NOT_USED -p NOT_USED 
> tcp://localhost:9999</remote-login-cmd>
>  +      </gshell>
>  +    </host>
>  +  </hosts>
>  +  <servers>
>  +    <server name="defaultServer">
>  +      <host name="localhost" />
>  +      <controls>
>  +        <start>execute-alias start_DEFAULT_SERVER</start>
>  +        <stop>execute-alias stop_DEFAULT_SERVER</stop>
>  +      </controls>
>  +    </server>
>  +  </servers>
>  +</configuration>
>
>  Modified: geronimo/server/trunk/framework/modules/geronimo-commands/pom.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/pom.xml?rev=600872&r1=600871&r2=600872&view=diff
>  
> ==============================================================================
>  --- geronimo/server/trunk/framework/modules/geronimo-commands/pom.xml 
> (original)
>  +++ geronimo/server/trunk/framework/modules/geronimo-commands/pom.xml Tue 
> Dec  4 02:46:27 2007
>  @@ -49,7 +49,13 @@
>              <groupId>org.slf4j</groupId>
>              <artifactId>slf4j-api</artifactId>
>          </dependency>
>  -
>  +
>  +        <dependency>
>  +            <groupId>org.slf4j</groupId>
>  +            <artifactId>slf4j-simple</artifactId>
>  +            <scope>test</scope>
>  +        </dependency>
>  +
>          <dependency>
>              <groupId>org.apache.geronimo.gshell</groupId>
>              <artifactId>gshell-command-api</artifactId>
>  @@ -133,6 +139,7 @@
>                      <execution>
>                          <goals>
>                              <goal>compile</goal>
>  +                            <goal>testCompile</goal>
>                          </goals>
>                      </execution>
>                  </executions>
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AbstractAliasCommand.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AbstractAliasCommand.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AbstractAliasCommand.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AbstractAliasCommand.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,76 @@
>  +/*
>  + * 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.commands
>  +
>  +import groovy.xml.StreamingMarkupBuilder
>  +
>  +import org.apache.geronimo.gshell.clp.Argument;
>  +import org.apache.geronimo.gshell.clp.Option
>  +import org.apache.geronimo.gshell.command.annotation.CommandComponent
>  +import org.apache.geronimo.gshell.command.annotation.Requirement
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.CommandSupport
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  +abstract class AbstractAliasCommand extends CommandSupport {
>  +
>  +    @Option(name='-c', aliases=['--alias-configuration'], 
> description='Alias configuration file')
>  +    String aliasFileName = 'etc/aliases.xml'
>  +
>  +    @Argument(index=0, description="alias")
>  +    String aliasName
>  +
>  +    def buildAvailableAliases = { aliases ->
>  +        def availables = '\nAvailable aliases:\n'
>  +        aliases.alias.list().sort{ [EMAIL PROTECTED]() }.each {
>  +            availables += "    [EMAIL PROTECTED]()} '${it.'*'.text()}'\n"
>  +        }
>  +        availables
>  +    }
>  +
>  +    def checkAliasFile = {
>  +        def aliasFile = new File(aliasFileName)
>  +        if (!aliasFile.exists()) {
>  +            throw new IllegalStateException("Alias file 
> ${aliasFile.absolutePath} does not exist")
>  +        }
>  +        aliasFile
>  +    }
>  +
>  +    def serializeToXML = { aliases ->
>  +           def outputBuilder = new StreamingMarkupBuilder()
>  +           outputBuilder.bind { mkp.yield aliases }
>  +    }
>  +
>  +    def createNewAliasFile = { aliasFile, aliasFileName, xml ->
>  +        aliasFile.renameTo(new File(aliasFileName + ".bak"))
>  +
>  +        aliasFile = new File(aliasFileName)
>  +        aliasFile.createNewFile()
>  +        aliasFile.withPrintWriter {
>  +            it.write(xml)
>  +        }
>  +    }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AliasCommand.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AliasCommand.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AliasCommand.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/AliasCommand.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,79 @@
>  +/*
>  + * 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.commands
>  +
>  +import groovy.xml.StreamingMarkupBuilder
>  +
>  +import org.apache.geronimo.gshell.clp.Argument;
>  +import org.apache.geronimo.gshell.clp.Option
>  +import org.apache.geronimo.gshell.command.annotation.CommandComponent
>  +import org.apache.geronimo.gshell.command.annotation.Requirement
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.CommandSupport
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  [EMAIL PROTECTED](id='geronimo-commands:alias', description="Create an 
> alias")
>  +class AliasCommand extends AbstractAliasCommand {
>  +
>  +    @Argument(index=1, description="Command")
>  +    String command
>  +
>  +    protected Object doExecute() throws Exception {
>  +        def aliasFile = checkAliasFile()
>  +
>  +        def xml
>  +        aliasFile.withInputStream {
>  +                   def aliases = new XmlSlurper().parse(it)
>  +
>  +                   if (!aliasName) {
>  +                       io.out.println(buildAvailableAliases(aliases))
>  +                       return
>  +                   }
>  +
>  +                   if (!aliases.alias.find { [EMAIL 
> PROTECTED]().equals(aliasName) }.isEmpty()) {
>  +                       throw new IllegalArgumentException("${aliasName} is 
> already defined")
>  +                   } else if (!command) {
>  +                       throw new IllegalArgumentException("command is 
> required")
>  +                   }
>  +
>  +                   aliases.appendNode {
>  +                       alias(id: aliasName) {
>  +                           cli(command)
>  +                       }
>  +                   }
>  +
>  +                   xml = serializeToXML(aliases)
>  +        }
>  +
>  +        if (!xml) {
>  +            return false
>  +        }
>  +
>  +        createNewAliasFile(aliasFile, aliasFileName, xml)
>  +
>  +        true
>  +    }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ExecuteAliasCommand.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ExecuteAliasCommand.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ExecuteAliasCommand.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ExecuteAliasCommand.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,64 @@
>  +/*
>  + * 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.commands
>  +
>  +import org.apache.geronimo.gshell.clp.Argument;
>  +import org.apache.geronimo.gshell.clp.Option
>  +import org.apache.geronimo.gshell.command.annotation.CommandComponent
>  +import org.apache.geronimo.gshell.command.annotation.Requirement
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.CommandSupport
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  [EMAIL PROTECTED](id='geronimo-commands:execute-alias', description="Execute 
> an alias")
>  +class ExecuteAliasCommand extends AbstractAliasCommand {
>  +
>  +    @Requirement
>  +    CommandExecutor executor
>  +
>  +    protected Object doExecute() throws Exception {
>  +        def aliasFile = checkAliasFile()
>  +
>  +        def result
>  +        aliasFile.withInputStream({
>  +            def aliases = new XmlSlurper().parse(it)
>  +
>  +            def alias = aliases.alias.find { [EMAIL 
> PROTECTED]().equals(aliasName) }
>  +            if (alias.isEmpty()) {
>  +                def availables = buildAvailableAliases(aliases)
>  +                throw new IllegalArgumentException("${aliasName} does not 
> exist.${availables}")
>  +            }
>  +
>  +            def cli = alias.cli.text()
>  +            if ('' == cli) {
>  +                throw new UnsupportedOperationException("alias.cli is not 
> defined by alias ${aliasName}")
>  +            }
>  +
>  +            result = executor.execute(cli)
>  +        })
>  +
>  +        result
>  +    }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/RemoteServerControlCommand.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/RemoteServerControlCommand.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/RemoteServerControlCommand.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/RemoteServerControlCommand.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,92 @@
>  +/*
>  + * 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.commands
>  +
>  +import org.apache.geronimo.gshell.clp.Argument;
>  +import org.apache.geronimo.gshell.clp.Option
>  +import org.apache.geronimo.gshell.command.annotation.CommandComponent
>  +import org.apache.geronimo.gshell.command.annotation.Requirement
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.CommandSupport
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  [EMAIL PROTECTED](id='geronimo-commands:remote-server-control', 
> description="Remote server control")
>  +class RemoteServerControlCommand extends CommandSupport {
>  +
>  +    @Requirement
>  +    CommandExecutor executor
>  +
>  +    @Option(name='-c', aliases=['--server-configuration'], 
> description='Server configuration file')
>  +    String configurationFileName = 'etc/server-configuration.xml'
>  +
>  +    @Argument(metaVar="CONTROL", required=true, index=0, 
> description="Control")
>  +    String control
>  +
>  +    @Argument(metaVar="SERVER", required=true, index=1, 
> description="Server")
>  +    String serverName
>  +
>  +    protected Object doExecute() throws Exception {
>  +        def configurationFile = new File(configurationFileName)
>  +        if (!configurationFile.exists()) {
>  +            throw new IllegalStateException("File 
> ${configurationFile.absolutePath} does not exist")
>  +        }
>  +
>  +        def result
>  +        configurationFile.withInputStream {
>  +            result = executeRshCommand(it)
>  +        }
>  +        result
>  +    }
>  +
>  +       protected executeRshCommand(is) {
>  +        def configuration = new XmlSlurper().parse(is)
>  +
>  +        def retrieveByNameAttribute = { baseNode, name ->
>  +               def node = baseNode.find { [EMAIL PROTECTED]().equals(name) }
>  +               if (node.isEmpty()) {
>  +                   def availableNames = baseNode.list().sort{ [EMAIL 
> PROTECTED]() }.'@name'*.text()
>  +                   throw new IllegalArgumentException("${name} does not 
> exist. Available: ${availableNames}")
>  +               }
>  +               node
>  +        }
>  +
>  +        def server = retrieveByNameAttribute(configuration.servers.server, 
> serverName)
>  +        def host = retrieveByNameAttribute(configuration.hosts.host, [EMAIL 
> PROTECTED]())
>  +
>  +        def rshCmd = host.gshell.'remote-login-cmd'.text()
>  +        if ('' == rshCmd) {
>  +            throw new IllegalStateException("gshell.remote-login-cmd is not 
> defined by host [EMAIL PROTECTED]()}")
>  +        }
>  +
>  +           def command = server.controls."${control}".text()
>  +           if ('' == command) {
>  +            def controls = server.controls.'*'.list().sort{ it.name() 
> }*.name()
>  +               throw new IllegalStateException("server.controls.${control} 
> is not defined by server "
>  +                   + "[EMAIL PROTECTED]()}.\nAvailable controls: 
> ${controls}")
>  +           }
>  +
>  +        executor.execute("${rshCmd} ${command}")
>  +       }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/UnaliasCommand.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/UnaliasCommand.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/UnaliasCommand.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/UnaliasCommand.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,70 @@
>  +/*
>  + * 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.commands
>  +
>  +import groovy.xml.StreamingMarkupBuilder
>  +
>  +import org.apache.geronimo.gshell.clp.Argument;
>  +import org.apache.geronimo.gshell.clp.Option
>  +import org.apache.geronimo.gshell.command.annotation.CommandComponent
>  +import org.apache.geronimo.gshell.command.annotation.Requirement
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.CommandSupport
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  [EMAIL PROTECTED](id='geronimo-commands:unalias', description="Remove an 
> alias")
>  +class UnaliasCommand extends AbstractAliasCommand {
>  +
>  +    protected Object doExecute() throws Exception {
>  +           def aliasFile = checkAliasFile()
>  +
>  +           if (!aliasName) {
>  +               throw new IllegalArgumentException("an alias must be 
> specified")
>  +           }
>  +
>  +        def xml
>  +        aliasFile.withInputStream {
>  +                   def aliases = new XmlSlurper().parse(it)
>  +
>  +                   def alias = aliases.alias.find { [EMAIL 
> PROTECTED]().equals(aliasName) }
>  +                   if ('' == alias.text()) {
>  +                       return
>  +                   }
>  +
>  +                   alias.replaceNode {}
>  +
>  +                   xml = serializeToXML(aliases)
>  +        }
>  +
>  +        if (!xml) {
>  +            return false
>  +        }
>  +
>  +        createNewAliasFile(aliasFile, aliasFileName, xml)
>  +
>  +        true
>  +    }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/AliasCommandTest.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/AliasCommandTest.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/AliasCommandTest.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/AliasCommandTest.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,86 @@
>  +/*
>  + * 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.commands;
>  +
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +import org.apache.geronimo.testsupport.TestSupport
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  +class AliasCommandTest extends GroovyTestCase {
>  +
>  +    def command
>  +
>  +    protected void setUp() {
>  +               def testSupport = new GroovyTestSupport()
>  +
>  +        File baseFile = 
> testSupport.resolveFile('src/test/resources/etc/aliases.xml')
>  +        def lines = baseFile.readLines()
>  +
>  +        def workingFile = testSupport.resolveFile('build/etc/aliases.xml')
>  +        workingFile.parentFile.mkdirs()
>  +        workingFile.createNewFile()
>  +        workingFile.withPrintWriter { pw ->
>  +            lines.each { pw.println(it) }
>  +        }
>  +
>  +        command = new AliasCommand([io: new IO(), aliasFileName: 
> workingFile.absolutePath])
>  +    }
>  +
>  +       void testAliasFileDoesNotExistThrowsISE() {
>  +           shouldFail(IllegalStateException.class) {
>  +               command.aliasFileName = 'doesNotExist'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testNoAliasArgumentDisplaysAvailableAliases() {
>  +        command.doExecute()
>  +       }
>  +
>  +       void testAliasWithoutCommandThrowsIAE() {
>  +           shouldFail(IllegalArgumentException.class) {
>  +               command.aliasName = 'anNewAlias'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testAliasAnExistingAliasThrowsIAE() {
>  +           shouldFail(IllegalArgumentException.class) {
>  +               command.aliasName = 'start_DEFAULT_SERVER'
>  +               command.command = 'test'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testAlias() {
>  +        command.aliasName = 'start_DEFAULT_SERVER_TWO'
>  +        command.command = 'test'
>  +        command.doExecute()
>  +
>  +           shouldFail(IllegalArgumentException.class) {
>  +            command.doExecute()
>  +           }
>  +       }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/ExecuteAliasCommandTest.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/ExecuteAliasCommandTest.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/ExecuteAliasCommandTest.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/ExecuteAliasCommandTest.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,73 @@
>  +/*
>  + * 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.commands;
>  +
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +import org.apache.geronimo.testsupport.TestSupport
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  +class ExecuteAliasCommandTest extends GroovyTestCase {
>  +
>  +    def command
>  +    def executedCommand
>  +
>  +    protected void setUp() {
>  +               def testSupport = new GroovyTestSupport()
>  +
>  +        File aliasFile = 
> testSupport.resolveFile('src/test/resources/etc/aliases.xml')
>  +
>  +        command = new ExecuteAliasCommand([io: new IO(), aliasFileName: 
> aliasFile.absolutePath])
>  +        command.executor = { executedCommand = it } as CommandExecutor
>  +    }
>  +
>  +       void testAliasFileDoesNotExistThrowsISE() {
>  +           shouldFail(IllegalStateException.class) {
>  +               command.aliasFileName = 'doesNotExist'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testExecuteUndefinedAliasThrowsIAE() {
>  +           shouldFail(IllegalArgumentException.class) {
>  +               command.aliasName = 'undefined'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testExecuteAliasWithoutCLIThrowsUOE() {
>  +           shouldFail(UnsupportedOperationException.class) {
>  +               command.aliasName = 'alias_without_cli'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testExecuteAlias() {
>  +        command.aliasName = 'start_DEFAULT_SERVER'
>  +        command.doExecute()
>  +
>  +        assert 'start-server -d' == executedCommand
>  +       }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/GroovyTestSupport.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/GroovyTestSupport.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/GroovyTestSupport.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/GroovyTestSupport.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,29 @@
>  +/*
>  + * 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.commands;
>  +
>  +import org.apache.geronimo.testsupport.TestSupport
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  +class GroovyTestSupport extends TestSupport {
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/RemoteServerControlCommandTest.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/RemoteServerControlCommandTest.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/RemoteServerControlCommandTest.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/RemoteServerControlCommandTest.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,89 @@
>  +/*
>  + * 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.commands;
>  +
>  +import org.apache.geronimo.gshell.command.CommandExecutor
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +import org.apache.geronimo.testsupport.TestSupport
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  +class RemoteServerControlCommandTest extends GroovyTestCase {
>  +
>  +    def command
>  +    def executedCommand
>  +
>  +    protected void setUp() {
>  +               def testSupport = new GroovyTestSupport()
>  +
>  +        File configurationFile = 
> testSupport.resolveFile('src/test/resources/etc/server-configuration.xml')
>  +
>  +        command = new RemoteServerControlCommand([io: new IO(), 
> configurationFileName: configurationFile.absolutePath])
>  +        command.executor = { executedCommand = it } as CommandExecutor
>  +    }
>  +
>  +       void testConfigurationFileDoesNotExistThrowsISE() {
>  +           shouldFail(IllegalStateException.class) {
>  +               command.configurationFileName = 'doesNotExist'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testServerIsUndefinedThrowsIAE() {
>  +           shouldFail(IllegalArgumentException.class) {
>  +               command.serverName = 'undefined'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testServerIsDefinedWithUndefinedHostThrowsIAE() {
>  +           shouldFail(IllegalArgumentException.class) {
>  +               command.serverName = 'serverWithUndefinedHost'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testControlIsUndefinedThrowsISE() {
>  +           shouldFail(IllegalStateException.class) {
>  +               command.serverName = 'defaultServer'
>  +               command.control = 'undefined'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testRemoteLoginCmdIsUndefinedThrowsISE() {
>  +           shouldFail(IllegalStateException.class) {
>  +               command.serverName = 'serverWithUndefinedRemoteLoginCmd'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testRemoteControlOK() {
>  +        command.serverName = 'defaultServer'
>  +        command.control = 'start'
>  +        command.doExecute()
>  +
>  +        assert 'rshCommand start-server' == executedCommand
>  +       }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/UnaliasCommandTest.groovy
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/UnaliasCommandTest.groovy?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/UnaliasCommandTest.groovy
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/groovy/org/apache/geronimo/commands/UnaliasCommandTest.groovy
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,71 @@
>  +/*
>  + * 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.commands;
>  +
>  +import org.apache.geronimo.gshell.command.IO
>  +
>  +import org.apache.geronimo.testsupport.TestSupport
>  +
>  +/**
>  + *
>  + * @version $Rev: 580864 $ $Date: 2007-09-30 23:47:39 -0700 (Sun, 30 Sep 
> 2007) $
>  + */
>  +class UnaliasCommandTest extends GroovyTestCase {
>  +
>  +    def command
>  +
>  +    protected void setUp() {
>  +               def testSupport = new GroovyTestSupport()
>  +
>  +        File baseFile = 
> testSupport.resolveFile('src/test/resources/etc/aliases.xml')
>  +        def lines = baseFile.readLines()
>  +
>  +        def workingFile = testSupport.resolveFile('build/etc/aliases.xml')
>  +        workingFile.delete()
>  +        workingFile.parentFile.mkdirs()
>  +        workingFile.createNewFile()
>  +        workingFile.withPrintWriter { pw ->
>  +            lines.each { pw.println(it) }
>  +        }
>  +
>  +        command = new UnaliasCommand([io: new IO(), aliasFileName: 
> workingFile.absolutePath])
>  +    }
>  +
>  +       void testAliasFileDoesNotExistThrowsISE() {
>  +           shouldFail(IllegalStateException.class) {
>  +               command.aliasFileName = 'doesNotExist'
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testNoAliasArgumentThrowsIAE() {
>  +           shouldFail(IllegalArgumentException.class) {
>  +               command.doExecute()
>  +           }
>  +       }
>  +
>  +       void testUnalias() {
>  +        command.aliasName = 'start_DEFAULT_SERVER'
>  +        assertTrue(command.doExecute())
>  +
>  +//        assertFalse(command.doExecute())
>  +       }
>  +
>  +}
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/aliases.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/aliases.xml?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/aliases.xml
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/aliases.xml
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,11 @@
>  +<aliases>
>  +  <alias id='start_DEFAULT_SERVER'>
>  +    <cli>start-server -d</cli>
>  +  </alias>
>  +  <alias id='stop_DEFAULT_SERVER'>
>  +    <cli>stop-server</cli>
>  +  </alias>
>  +  <alias id='alias_without_cli'>
>  +    <inline-script>a script</inline-script>
>  +  </alias>
>  +</aliases>
>  \ No newline at end of file
>
>  Added: 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/server-configuration.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/server-configuration.xml?rev=600872&view=auto
>  
> ==============================================================================
>  --- 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/server-configuration.xml
>  (added)
>  +++ 
> geronimo/server/trunk/framework/modules/geronimo-commands/src/test/resources/etc/server-configuration.xml
>  Tue Dec  4 02:46:27 2007
>  @@ -0,0 +1,30 @@
>  +<?xml version="1.0" encoding="UTF-8"?>
>  +<configuration>
>  +  <hosts>
>  +    <host name="localhost">
>  +      <gshell>
>  +        <remote-login-cmd>rshCommand</remote-login-cmd>
>  +      </gshell>
>  +    </host>
>  +    <host name="hostWithUndefinedRemoteLoginCmd">
>  +      <gshell>
>  +        <remote-login-cmd2>rshCommand</remote-login-cmd2>
>  +      </gshell>
>  +    </host>
>  +  </hosts>
>  +  <servers>
>  +    <server name="defaultServer">
>  +      <host name="localhost" />
>  +      <controls>
>  +        <start>start-server</start>
>  +        <stop>stop-server</stop>
>  +      </controls>
>  +    </server>
>  +    <server name="serverWithUndefinedRemoteLoginCmd">
>  +      <host name="hostWithUndefinedRemoteLoginCmd" />
>  +    </server>
>  +    <server name="serverWithUndefinedHost">
>  +      <host name="undefinedHost" />
>  +    </server>
>  +  </servers>
>  +</configuration>
>
>  Modified: geronimo/server/trunk/pom.xml
>  URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/pom.xml?rev=600872&r1=600871&r2=600872&view=diff
>  
> ==============================================================================
>  --- geronimo/server/trunk/pom.xml (original)
>  +++ geronimo/server/trunk/pom.xml Tue Dec  4 02:46:27 2007
>  @@ -1575,13 +1575,49 @@
>                  <artifactId>gshell-cli</artifactId>
>                  <version>1.0-alpha-1-SNAPSHOT</version>
>              </dependency>
>  -
>  +
>  +            <dependency>
>  +                <groupId>org.apache.geronimo.gshell</groupId>
>  +                <artifactId>gshell-whisper</artifactId>
>  +                <version>1.0-alpha-1-SNAPSHOT</version>
>  +            </dependency>
>  +
>              <dependency>
>                  <groupId>org.apache.geronimo.gshell.commands</groupId>
>                  <artifactId>gshell-builtins</artifactId>
>                  <version>1.0-alpha-1-SNAPSHOT</version>
>              </dependency>
>
>  +            <dependency>
>  +                <groupId>org.apache.geronimo.gshell.remote</groupId>
>  +                <artifactId>gshell-remote-client</artifactId>
>  +                <version>1.0-alpha-1-SNAPSHOT</version>
>  +            </dependency>
>  +
>  +            <dependency>
>  +                <groupId>org.apache.geronimo.gshell.remote</groupId>
>  +                <artifactId>gshell-remote-common</artifactId>
>  +                <version>1.0-alpha-1-SNAPSHOT</version>
>  +            </dependency>
>  +
>  +            <dependency>
>  +                <groupId>org.apache.geronimo.gshell.remote</groupId>
>  +                <artifactId>gshell-remote-server</artifactId>
>  +                <version>1.0-alpha-1-SNAPSHOT</version>
>  +            </dependency>
>  +
>  +            <dependency>
>  +                <groupId>org.apache.mina</groupId>
>  +                <artifactId>mina-core</artifactId>
>  +                <version>1.1.2</version>
>  +            </dependency>
>  +
>  +            <dependency>
>  +                <groupId>org.apache.mina</groupId>
>  +                <artifactId>mina-filter-ssl</artifactId>
>  +                <version>1.1.2</version>
>  +            </dependency>
>  +
>              <dependency>
>                  <groupId>org.codehaus.groovy</groupId>
>                  <artifactId>groovy-all</artifactId>
>
>
>

Reply via email to