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 2007/09/04 07:35:40 UTC
svn commit: r572529 - in /geronimo/sandbox/gshell/trunk:
gshell-api/src/main/java/org/apache/geronimo/gshell/
gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/
gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/ gshell-cli/src/m...
Author: jdillon
Date: Mon Sep 3 22:35:38 2007
New Revision: 572529
URL: http://svn.apache.org/viewvc?rev=572529&view=rev
Log:
(GSHELL-32) Hooking up an adapter to bridge plexus logging into slf4j
Introduce the Environment interface which will hold the basic execution state
Added:
geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java (with props)
geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java (with props)
geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java (with props)
Modified:
geronimo/sandbox/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java
geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
geronimo/sandbox/gshell/trunk/gshell-cli/src/main/resources/META-INF/plexus/plexus.xml
geronimo/sandbox/gshell/trunk/gshell-core/src/main/resources/META-INF/plexus/components.xml
geronimo/sandbox/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/LayoutManagerImpl.java
geronimo/sandbox/gshell/trunk/gshell-layout/src/main/resources/META-INF/plexus/components.xml
Added: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java?rev=572529&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java Mon Sep 3 22:35:38 2007
@@ -0,0 +1,32 @@
+/*
+ * 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;
+
+import java.io.File;
+
+/**
+ * Provides a general abstraction of the shell's current executing environment.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface Environment
+{
+ File getHomeDir();
+}
Propchange: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-api/src/main/java/org/apache/geronimo/gshell/Environment.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java?rev=572529&r1=572528&r2=572529&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java Mon Sep 3 22:35:38 2007
@@ -38,6 +38,11 @@
public static void main(final String[] args) throws Exception {
assert args != null;
+ //
+ // FIXME: Maybe want to add some kinda of support to allow these "gshell.*" bits to be named
+ // for custom branding?
+ //
+
programName = getProgramName();
setProperty("program.name", programName);
Modified: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java?rev=572529&r1=572528&r2=572529&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/Main.java Mon Sep 3 22:35:38 2007
@@ -33,13 +33,12 @@
import org.apache.geronimo.gshell.common.StopWatch;
import org.apache.geronimo.gshell.console.Console;
import org.apache.geronimo.gshell.console.IO;
-import org.apache.geronimo.gshell.cli.Banner;
-import org.apache.geronimo.gshell.cli.Version;
import org.codehaus.plexus.ContainerConfiguration;
import org.codehaus.plexus.DefaultContainerConfiguration;
import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.classworlds.ClassWorld;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -191,6 +190,8 @@
config.setClassWorld(classWorld);
PlexusContainer container = new DefaultPlexusContainer(config);
+
+ System.err.println("Logger manager: " + container.getLoggerManager());
//
// TODO: We need to pass in our I/O context to the container directly
Added: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java?rev=572529&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java Mon Sep 3 22:35:38 2007
@@ -0,0 +1,90 @@
+/*
+ * 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.cli;
+
+import org.codehaus.plexus.logging.AbstractLogger;
+import org.codehaus.plexus.logging.BaseLoggerManager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//
+// TODO: Move me some place more approrpiate?
+//
+
+/**
+ * Adapts the Plexus logging system to GShell.
+ *
+ * @version $Rev$ $Date$
+ */
+public class PlexusLoggingAdapter
+{
+ /**
+ * Adapts the Plexus {@link org.codehaus.plexus.logging.LoggerManager} interface to the GShell interface.
+ */
+ public static class LoggerManagerImpl
+ extends BaseLoggerManager
+ {
+ protected org.codehaus.plexus.logging.Logger createLogger(final String key) {
+ return new LoggerImpl(getThreshold(), LoggerFactory.getLogger(key));
+ }
+ }
+
+ /**
+ * Adapts the Plexus {@link org.codehaus.plexus.logging.Logger} interface to the GShell interface.
+ */
+ public static class LoggerImpl
+ extends AbstractLogger
+ {
+ private final Logger log;
+
+ public LoggerImpl(final int threshold, final Logger logger) {
+ super(threshold, logger.getName());
+
+ this.log = logger;
+ }
+
+ public void debug(final String message, final Throwable throwable) {
+ log.debug( message, throwable );
+ }
+
+ public void error(final String message, final Throwable throwable) {
+ log.error(message, throwable);
+ }
+
+ public void fatalError(final String message, final Throwable throwable) {
+ log.error(message, throwable);
+ }
+
+ public org.codehaus.plexus.logging.Logger getChildLogger(final String name) {
+ String childName = log.getName() + "." + name;
+
+ return new LoggerImpl(getThreshold(), LoggerFactory.getLogger(childName));
+ }
+
+ public void info(String message, final Throwable throwable) {
+ log.info(message, throwable);
+ }
+
+ public void warn(String message, final Throwable throwable) {
+ log.warn(message, throwable);
+ }
+ }
+}
\ No newline at end of file
Propchange: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/java/org/apache/geronimo/gshell/cli/PlexusLoggingAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/gshell/trunk/gshell-cli/src/main/resources/META-INF/plexus/plexus.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-cli/src/main/resources/META-INF/plexus/plexus.xml?rev=572529&r1=572528&r2=572529&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-cli/src/main/resources/META-INF/plexus/plexus.xml (original)
+++ geronimo/sandbox/gshell/trunk/gshell-cli/src/main/resources/META-INF/plexus/plexus.xml Mon Sep 3 22:35:38 2007
@@ -35,6 +35,16 @@
<components>
<component>
+ <role>org.codehaus.plexus.logging.LoggerManager</role>
+ <implementation>org.apache.geronimo.gshell.cli.PlexusLoggingAdapter$LoggerManagerImpl</implementation>
+ </component>
+
+ <component>
+ <role>org.apache.geronimo.gshell.GShellPluginCollector</role>
+ <implementation>org.apache.geronimo.gshell.GShellPluginCollector</implementation>
+ </component>
+
+ <component>
<role>org.apache.geronimo.gshell.GShellPluginCollector</role>
<implementation>org.apache.geronimo.gshell.GShellPluginCollector</implementation>
</component>
Added: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java?rev=572529&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java Mon Sep 3 22:35:38 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.gshell;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The default/standard/whatever implementation of {@link Environment}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class EnvironmentImpl
+ implements Environment, Initializable
+{
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ private File homeDir;
+
+ public File getHomeDir() {
+ if (homeDir == null) {
+ throw new IllegalStateException();
+ }
+
+ return homeDir;
+ }
+
+ public void initialize() throws InitializationException {
+ homeDir = detectHomeDir();
+ log.debug("Using home directory: {}", homeDir);
+ }
+
+ private File detectHomeDir() throws InitializationException {
+ // For right now we require that a "gshell.home" property be set, which should have been set by the Bootstrapper.
+ // Will eventually allow this to be changed for shell branding mucko
+
+ String homePath = System.getProperty("gshell.home");
+
+ if (homePath == null) {
+ throw new InitializationException("The 'gsell.home' property must be set for the shell to function correctly");
+ }
+
+ // And now lets resolve this sucker
+ File dir;
+ try {
+ dir = new File(homePath).getCanonicalFile();
+ }
+ catch (IOException e) {
+ throw new InitializationException("Failed to resolve home directory: " + homePath, e);
+ }
+
+ // And some basic sanity too
+ if (!dir.exists() || !dir.isDirectory()) {
+ throw new InitializationException("Home directory configured but is not a valid directory: " + dir);
+ }
+
+ return dir;
+ }
+
+ //
+ // TODO: Merge in the other command-context and variable access muck here. The Environment for the shell should be the one place
+ // were all state is stored, so we can use this to multiplex shells and provide commands with a simple/single interface
+ // for interacting with the user.
+ //
+ // IO
+ // Variables
+ // Shell information
+ // Current command descriptor
+ //
+}
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/sandbox/gshell/trunk/gshell-core/src/main/java/org/apache/geronimo/gshell/EnvironmentImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/gshell/trunk/gshell-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-core/src/main/resources/META-INF/plexus/components.xml?rev=572529&r1=572528&r2=572529&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ geronimo/sandbox/gshell/trunk/gshell-core/src/main/resources/META-INF/plexus/components.xml Mon Sep 3 22:35:38 2007
@@ -115,5 +115,16 @@
<instantiation-strategy>singleton</instantiation-strategy>
<lifecycle-handler>plexus</lifecycle-handler>
</component>
+
+ <!--
+ FIXME: Probably need to use a component factory and a thread-local here to properly keep track of the shell's environment
+ -->
+ <component>
+ <role>org.apache.geronimo.gshell.Environment</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.geronimo.gshell.EnvironmentImpl</implementation>
+ <instantiation-strategy>singleton</instantiation-strategy>
+ <lifecycle-handler>plexus</lifecycle-handler>
+ </component>
</components>
</component-set>
Modified: geronimo/sandbox/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/LayoutManagerImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/LayoutManagerImpl.java?rev=572529&r1=572528&r2=572529&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/LayoutManagerImpl.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-layout/src/main/java/org/apache/geronimo/gshell/layout/LayoutManagerImpl.java Mon Sep 3 22:35:38 2007
@@ -28,10 +28,11 @@
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.Annotations;
import com.thoughtworks.xstream.io.xml.DomDriver;
+import org.apache.geronimo.gshell.Environment;
import org.apache.geronimo.gshell.layout.model.Alias;
import org.apache.geronimo.gshell.layout.model.Command;
import org.apache.geronimo.gshell.layout.model.Layout;
-import org.codehaus.plexus.PlexusContainer;
+
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.slf4j.Logger;
@@ -47,26 +48,18 @@
implements LayoutManager, Initializable
{
private final Logger log = LoggerFactory.getLogger(getClass());
-
+
// @Requirement
- private PlexusContainer container;
+ private Environment env;
private Layout layout;
public void initialize() throws InitializationException {
- //
- // HACK: For now just hard code it... Really need to expose a helper object to find the Shell's basic directory config muck
- //
-
- String homePath = System.getProperty("gshell.home");
- if (homePath == null) {
- throw new InitializationException("The 'gsell.home' property must be set for the shell to function correctly");
- }
+ assert env != null;
- File homeDir = new File(homePath);
URL url = null;
try {
- url = new File(homeDir, "etc/layout.xml").toURI().toURL();
+ url = new File(env.getHomeDir(), "etc/layout.xml").toURI().toURL();
} catch (MalformedURLException e) {
throw new InitializationException("Invalid URL for layout configuration", e);
}
Modified: geronimo/sandbox/gshell/trunk/gshell-layout/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-layout/src/main/resources/META-INF/plexus/components.xml?rev=572529&r1=572528&r2=572529&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-layout/src/main/resources/META-INF/plexus/components.xml (original)
+++ geronimo/sandbox/gshell/trunk/gshell-layout/src/main/resources/META-INF/plexus/components.xml Mon Sep 3 22:35:38 2007
@@ -30,8 +30,8 @@
<lifecycle-handler>plexus</lifecycle-handler>
<requirements>
<requirement>
- <role>org.codehaus.plexus.PlexusContainer</role>
- <field-name>container</field-name>
+ <role>org.apache.geronimo.gshell.Environment</role>
+ <field-name>env</field-name>
</requirement>
</requirements>
</component>