You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2008/10/17 10:22:12 UTC
svn commit: r705507 - in /geronimo/gshell/trunk:
gshell-api/src/main/java/org/apache/geronimo/gshell/command/
gshell-api/src/main/java/org/apache/geronimo/gshell/registry/
gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom...
Author: gnodet
Date: Fri Oct 17 01:22:12 2008
New Revision: 705507
URL: http://svn.apache.org/viewvc?rev=705507&view=rev
Log:
Remove the setLocation method from the Command interface. It is now set by the plugin parser
Added:
geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandLocationImpl.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/CommandLocation.java
geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/registry/CommandRegistry.java
geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/AliasCommand.java
geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/GroupCommand.java
geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/config/PluginParser.java
geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/plugin/bundle/CommandBundle.java
geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandRegistryImpl.java
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=705507&r1=705506&r2=705507&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 Oct 17 01:22:12 2008
@@ -29,10 +29,13 @@
*/
public interface Command
{
+ /**
+ * Returns the location of the command
+ *
+ * @return The command location; never null
+ */
CommandLocation getLocation();
- void setLocation(CommandLocation location);
-
/**
* Returns the action of the command.
*
Modified: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandLocation.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandLocation.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandLocation.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandLocation.java Fri Oct 17 01:22:12 2008
@@ -32,4 +32,6 @@
String getName();
String getPath();
+
+ String getFullPath();
}
\ No newline at end of file
Modified: geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/registry/CommandRegistry.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/registry/CommandRegistry.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/registry/CommandRegistry.java (original)
+++ geronimo/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/registry/CommandRegistry.java Fri Oct 17 01:22:12 2008
@@ -30,9 +30,9 @@
*/
public interface CommandRegistry
{
- void registerCommand(String name, Command command) throws DuplicateCommandException;
+ void registerCommand(Command command) throws DuplicateCommandException;
- void removeCommand(String name) throws NoSuchCommandException;
+ void removeCommand(Command command) throws NoSuchCommandException;
Command getCommand(String name) throws NoSuchCommandException;
Modified: geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/AliasCommand.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/AliasCommand.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/AliasCommand.java (original)
+++ geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/AliasCommand.java Fri Oct 17 01:22:12 2008
@@ -29,6 +29,7 @@
import org.apache.geronimo.gshell.i18n.ResourceBundleMessageSource;
import org.apache.geronimo.gshell.io.IO;
import org.apache.geronimo.gshell.shell.ShellContext;
+import org.apache.geronimo.gshell.wisdom.registry.CommandLocationImpl;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Iterator;
@@ -53,22 +54,13 @@
// name could be null
// alias could be null
- this.name = name;
this.alias = alias;
+ setName(name);
setAction(new AliasCommandAction());
setDocumenter(new AliasCommandDocumenter());
setCompleter(new NullCommandCompleter());
setMessages(new AliasCommandMessageSource());
- setLocation(new CommandLocation() {
- public String getName() {
- return name;
- }
-
- public String getPath() {
- return null;
- }
- });
}
public AliasCommand() {
@@ -84,6 +76,9 @@
public void setName(final String name) {
this.name = name;
+ if (name != null) {
+ setLocation(new CommandLocationImpl(name));
+ }
}
public String getAlias() {
Modified: geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/GroupCommand.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/GroupCommand.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/GroupCommand.java (original)
+++ geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/command/GroupCommand.java Fri Oct 17 01:22:12 2008
@@ -26,6 +26,7 @@
import org.apache.geronimo.gshell.i18n.MessageSource;
import org.apache.geronimo.gshell.i18n.ResourceBundleMessageSource;
import org.apache.geronimo.gshell.registry.CommandResolver;
+import org.apache.geronimo.gshell.wisdom.registry.CommandLocationImpl;
/**
* Group {@link org.apache.geronimo.gshell.command.Command} component.
@@ -39,23 +40,11 @@
public GroupCommand(final FileObject file) {
// file could be null
-
- this.file = file;
-
+ setFile(file);
setAction(new GroupCommandAction());
setDocumenter(new GroupCommandDocumenter());
setCompleter(new NullCommandCompleter());
setMessages(new GroupCommandMessageSource());
- setLocation(new CommandLocation() {
- public String getName() {
- return getFile().getName().getBaseName();
- }
-
- public String getPath() {
- // FIXME: This isn't going to be correct, need to strip off the /commands stuff.
- return getFile().getName().getPath();
- }
- });
}
public GroupCommand() {
@@ -71,6 +60,14 @@
public void setFile(final FileObject file) {
this.file = file;
+ if (file != null) {
+ // FIXME: This isn't going to be correct, need to strip off the /commands stuff.
+ String location = file.getName().getPath();
+ if (location.startsWith("/commands")) {
+ location = location.substring("/commands".length());
+ }
+ setLocation(new CommandLocationImpl(location));
+ }
}
/**
Modified: geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/config/PluginParser.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/config/PluginParser.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/config/PluginParser.java (original)
+++ geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/config/PluginParser.java Fri Oct 17 01:22:12 2008
@@ -22,6 +22,8 @@
import org.apache.geronimo.gshell.wisdom.command.ConfigurableCommandCompleter;
import org.apache.geronimo.gshell.wisdom.command.LinkCommand;
import org.apache.geronimo.gshell.wisdom.plugin.bundle.CommandBundle;
+import org.apache.geronimo.gshell.wisdom.registry.CommandLocationImpl;
+import org.apache.geronimo.gshell.command.CommandLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanDefinitionStoreException;
@@ -32,6 +34,7 @@
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
import org.springframework.beans.factory.xml.ParserContext;
@@ -42,6 +45,7 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.ArrayList;
/**
* Parser for the <gshell:plugin/> element.
@@ -65,6 +69,8 @@
private static final String NAME = "name";
+ private static final String LOCATION = "location";
+
private static final String COMMANDS = "commands";
private static final String COMMAND = "command";
@@ -342,11 +348,11 @@
// TODO: Figure out how we can save the order of <gshell:command> and <gshell:link> so that 'help' displays them in the order they are defined
//
- ManagedMap commands = new ManagedMap();
+ ManagedList commands = new ManagedList();
// noinspection unchecked
- commands.putAll(parseCommands(element));
+ commands.addAll(parseCommands(element));
// noinspection unchecked
- commands.putAll(parseLinks(element));
+ commands.addAll(parseLinks(element));
bundle.addPropertyValue(COMMANDS, commands);
ManagedMap aliases = new ManagedMap();
@@ -361,19 +367,18 @@
// <gshell:command>
//
- private Map<String,BeanDefinition> parseCommands(final Element element) {
+ private List<BeanDefinition> parseCommands(final Element element) {
assert element != null;
log.trace("Parse commands; element; {}", element);
- Map<String,BeanDefinition> commands = new LinkedHashMap<String,BeanDefinition>();
+ List<BeanDefinition> commands = new ArrayList<BeanDefinition>();
List<Element> children = getChildElements(element, COMMAND);
for (Element child : children) {
- String name = child.getAttribute(NAME);
BeanDefinitionBuilder command = parseCommand(child);
- commands.put(name, command.getBeanDefinition());
+ commands.add(command.getBeanDefinition());
}
return commands;
@@ -392,6 +397,12 @@
// Required children elements
+ String name = element.getAttribute(NAME);
+ BeanDefinition def = new GenericBeanDefinition();
+ def.setBeanClassName(CommandLocationImpl.class.getName());
+ def.getConstructorArgumentValues().addGenericArgumentValue(name);
+ command.addPropertyValue(LOCATION, def);
+
child = getChildElement(element, ACTION);
BeanDefinitionHolder action = parseCommandAction(child);
type.wire(command, action);
@@ -485,12 +496,12 @@
// <gshell:link>
//
- private Map<String,BeanDefinition> parseLinks(final Element element) {
+ private List<BeanDefinition> parseLinks(final Element element) {
assert element != null;
log.trace("Parse links; element; {}", element);
- Map<String,BeanDefinition> links = new LinkedHashMap<String,BeanDefinition>();
+ List<BeanDefinition> links = new ArrayList<BeanDefinition>();
List<Element> children = getChildElements(element, LINK);
@@ -499,7 +510,12 @@
link.addConstructorArgValue(child.getAttribute(TARGET));
String name = child.getAttribute(NAME);
- links.put(name, link.getBeanDefinition());
+ BeanDefinition def = new GenericBeanDefinition();
+ def.setBeanClassName(CommandLocationImpl.class.getName());
+ def.getConstructorArgumentValues().addGenericArgumentValue(name);
+ link.addPropertyValue(LOCATION, def);
+
+ links.add(link.getBeanDefinition());
}
return links;
Modified: geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/plugin/bundle/CommandBundle.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/plugin/bundle/CommandBundle.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/plugin/bundle/CommandBundle.java (original)
+++ geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/plugin/bundle/CommandBundle.java Fri Oct 17 01:22:12 2008
@@ -25,6 +25,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Map;
+import java.util.List;
/**
* A bundle of {@link Command} instances.
@@ -40,7 +41,7 @@
@Autowired
private AliasRegistry aliasRegistry;
- private Map<String,Command> commands;
+ private List<Command> commands;
private Map<String,String> aliases;
@@ -48,11 +49,11 @@
super(name);
}
- public Map<String, Command> getCommands() {
+ public List<Command> getCommands() {
return commands;
}
- public void setCommands(final Map<String, Command> commands) {
+ public void setCommands(final List<Command> commands) {
assert commands != null;
this.commands = commands;
@@ -70,8 +71,8 @@
protected void doEnable() throws Exception {
assert commandRegistry != null;
- for (String name : commands.keySet()) {
- commandRegistry.registerCommand(name, commands.get(name));
+ for (Command command : commands) {
+ commandRegistry.registerCommand(command);
}
assert aliasRegistry != null;
@@ -82,8 +83,8 @@
protected void doDisable() throws Exception {
assert commandRegistry != null;
- for (String name : commands.keySet()) {
- commandRegistry.removeCommand(name);
+ for (Command command : commands) {
+ commandRegistry.removeCommand(command);
}
assert aliasRegistry != null;
Added: geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandLocationImpl.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandLocationImpl.java?rev=705507&view=auto
==============================================================================
--- geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandLocationImpl.java (added)
+++ geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandLocationImpl.java Fri Oct 17 01:22:12 2008
@@ -0,0 +1,62 @@
+/*
+ * 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.wisdom.registry;
+
+import org.apache.geronimo.gshell.command.CommandLocation;
+
+public class CommandLocationImpl
+ implements CommandLocation
+{
+ private final String name;
+
+ private final String path;
+
+ public CommandLocationImpl(final String name) {
+ assert name != null;
+
+ int i = name.lastIndexOf("/");
+ if (i != -1) {
+ this.name = name.substring(i + 1, name.length());
+ this.path = name.substring(0, i);
+ }
+ else {
+ this.name = name;
+ this.path = null;
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public String getFullPath() {
+ if (path != null) {
+ return path + "/" + name;
+ }
+ return name;
+ }
+
+ public String toString() {
+ return getFullPath();
+ }
+}
Modified: geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandRegistryImpl.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandRegistryImpl.java?rev=705507&r1=705506&r2=705507&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandRegistryImpl.java (original)
+++ geronimo/gshell/trunk/gshell-wisdom/gshell-wisdom-core/src/main/java/org/apache/geronimo/gshell/wisdom/registry/CommandRegistryImpl.java Fri Oct 17 01:22:12 2008
@@ -50,25 +50,28 @@
private final Map<String,Command> commands = new LinkedHashMap<String,Command>();
- public void registerCommand(final String name, final Command command) throws DuplicateCommandException {
- assert name != null;
+ public void registerCommand(final Command command) throws DuplicateCommandException {
assert command != null;
+ // TODO: add a method on the CommandLocation to avoid using toString()
+ String name = command.getLocation().getFullPath();
+
log.debug("Registering command: {} -> {}", name, command);
if (containsCommand(name)) {
throw new DuplicateCommandException(name);
}
- command.setLocation(new CommandLocationImpl(name));
-
commands.put(name, command);
eventPublisher.publish(new CommandRegisteredEvent(name, command));
}
- public void removeCommand(final String name) throws NoSuchCommandException {
- assert name != null;
+ public void removeCommand(final Command command) throws NoSuchCommandException {
+ assert command != null;
+
+ // TODO: add a method on the CommandLocation to avoid using toString()
+ String name = command.getLocation().getFullPath();
log.debug("Removing command: {}", name);
@@ -105,40 +108,4 @@
// CommandLocationImpl
//
- private class CommandLocationImpl
- implements CommandLocation
- {
- private final String name;
-
- private final String path;
-
- public CommandLocationImpl(final String name) {
- assert name != null;
-
- int i = name.lastIndexOf("/");
- if (i != -1) {
- this.name = name.substring(i + 1, name.length());
- this.path = name.substring(0, i);
- }
- else {
- this.name = name;
- this.path = null;
- }
- }
-
- public String getName() {
- return name;
- }
-
- public String getPath() {
- return path;
- }
-
- public String toString() {
- if (path != null) {
- return path + "/" + name;
- }
- return name;
- }
- }
}
\ No newline at end of file