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 2006/06/26 03:40:40 UTC
svn commit: r417102 - in /geronimo/sandbox/gshell/trunk:
gshell-api/src/main/java/org/apache/geronimo/gshell/
gshell-api/src/main/java/org/apache/geronimo/gshell/command/
gshell-core/src/main/java/org/apache/geronimo/gshell/
gshell-core/src/main/java/o...
Author: jdillon
Date: Sun Jun 25 18:40:39 2006
New Revision: 417102
URL: http://svn.apache.org/viewvc?rev=417102&view=rev
Log:
Added Notification, which is a generalized support for non-error states thrown as Error's (like ExitNotification)
Added ExitNotification and ErrorNotification which are used to pass state from command to the interp via throwing
Added:
geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java (with props)
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java (with props)
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java (with props)
Removed:
geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/ExitNotification.java
geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/package.html
Modified:
geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandSupport.java
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/InteractiveShell.java
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/CommandLineBuilder.java
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/ExecutingVisitor.java
Modified: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandSupport.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandSupport.java?rev=417102&r1=417101&r2=417102&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandSupport.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/CommandSupport.java Sun Jun 25 18:40:39 2006
@@ -27,7 +27,6 @@
import org.apache.commons.cli.CommandLine;
import org.apache.geronimo.gshell.console.IO;
import org.apache.geronimo.gshell.util.Arguments;
-import org.apache.geronimo.gshell.ExitNotification;
import java.util.Iterator;
@@ -116,7 +115,7 @@
log.error("Initialization failed", e);
//
- // HACK:
+ // HACK: Need to handle or descide to ignore this exception
//
throw new RuntimeException("Command initialization failed", e);
@@ -153,7 +152,7 @@
log.error("Destruction failed", e);
//
- // HACK:
+ // HACK: Need to handle or descide to ignore this exception
//
throw new RuntimeException("Command destruction failed", e);
@@ -241,15 +240,15 @@
result = Command.FAILURE;
}
- catch (ExitNotification n) {
+ catch (Notification n) {
//
- // HACK: Propagate the notifciation
+ // Always rethrow notifications
//
-
throw n;
}
catch (Error e) {
log.error(e.getMessage());
+
if (log.isDebugEnabled()) {
log.debug("Error details", e);
}
Added: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java?rev=417102&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java Sun Jun 25 18:40:39 2006
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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;
+
+//
+// TODO: May want to move to util, not command-specific
+//
+
+/**
+ * Thrown to indicate a notification state.
+ *
+ * @version $Id$
+ */
+public abstract class Notification
+ extends Error
+{
+ ///CLOVER:OFF
+
+ public Notification(String msg) {
+ super(msg);
+ }
+
+ public Notification(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+
+ public Notification(Throwable cause) {
+ super(cause);
+ }
+
+ public Notification() {
+ super();
+ }
+}
Propchange: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/command/Notification.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java?rev=417102&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java Sun Jun 25 18:40:39 2006
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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;
+
+import org.apache.geronimo.gshell.command.Notification;
+
+/**
+ * Thrown to indicate an error notification state.
+ *
+ * @version $Id$
+ */
+public class ErrorNotification
+ extends Notification
+{
+ ///CLOVER:OFF
+
+ public ErrorNotification(String msg) {
+ super(msg);
+ }
+
+ public ErrorNotification(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+
+ public ErrorNotification(Throwable cause) {
+ super(cause);
+ }
+
+ public ErrorNotification() {
+ super();
+ }
+}
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ErrorNotification.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java?rev=417102&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java Sun Jun 25 18:40:39 2006
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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;
+
+import org.apache.geronimo.gshell.command.Notification;
+
+/**
+ * Thrown to indicate that the current shell should exit.
+ *
+ * <p>
+ * Commands should use this instead of {@link System#exit}.
+ *
+ * @version $Id$
+ */
+public class ExitNotification
+ extends Notification
+{
+ ///CLOVER:OFF
+
+ private final int code;
+
+ public ExitNotification(final int code) {
+ this.code = code;
+ }
+
+ public ExitNotification() {
+ this(0);
+ }
+
+ public int getCode() {
+ return code;
+ }
+}
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/ExitNotification.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/InteractiveShell.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/InteractiveShell.java?rev=417102&r1=417101&r2=417102&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/InteractiveShell.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/InteractiveShell.java Sun Jun 25 18:40:39 2006
@@ -55,6 +55,10 @@
shell.execute(line);
}
catch (ExitNotification n) {
+ //
+ // TODO: Propagate the exit status ?
+ //
+
return Result.STOP;
}
}
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/CommandLineBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/CommandLineBuilder.java?rev=417102&r1=417101&r2=417102&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/CommandLineBuilder.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/CommandLineBuilder.java Sun Jun 25 18:40:39 2006
@@ -54,7 +54,6 @@
assert input != null;
Reader reader = new StringReader(input);
- CommandLineParser parser = new CommandLineParser();
ASTCommandLine cl = parser.parse(reader);
// If debug is enabled, the log the parse tree
@@ -79,6 +78,11 @@
return new CommandLine() {
public void execute() throws Exception {
+
+ //
+ // TODO: Handle ErrorNotification
+ //
+
root.jjtAccept(visitor, null);
}
};
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/ExecutingVisitor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/ExecutingVisitor.java?rev=417102&r1=417101&r2=417102&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/ExecutingVisitor.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/commandline/ExecutingVisitor.java Sun Jun 25 18:40:39 2006
@@ -25,6 +25,7 @@
import org.apache.geronimo.gshell.commandline.parser.ASTPlainString;
import org.apache.geronimo.gshell.util.Arguments;
import org.apache.geronimo.gshell.Shell;
+import org.apache.geronimo.gshell.ErrorNotification;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -55,20 +56,16 @@
public Object visit(final SimpleNode node, final Object data) {
assert node != null;
- // assert data != null;
-
- log.error("Unhandled node type: " + node.getClass().getName());
//
- // TODO: Exception? Means impl node does not accept
+ // It is an error if we forgot to implement a node handler
//
- return null;
+ throw new Error("Unhandled node type: " + node.getClass().getName());
}
public Object visit(final ASTCommandLine node, final Object data) {
assert node != null;
- // assert data != null;
//
// NOTE: Visiting children will execute seperate commands in serial
@@ -79,7 +76,6 @@
public Object visit(final ASTExpression node, final Object data) {
assert node != null;
- // assert data != null;
// Create the argument list (cmd name + args)
List<Object> list = new ArrayList<Object>(node.jjtGetNumChildren());
@@ -97,13 +93,7 @@
result = shell.execute(commandName, args);
}
catch (Exception e) {
- //
- // FIXME: Need to resolve how to pass back this exception to the calling code
- // Maybe a custom RuntimeException or Error that can be caust by upper layer
- // and then decoded and rethrown?
- //
-
- throw new RuntimeException(e);
+ throw new ErrorNotification(e);
}
return result;