You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2009/07/10 08:56:48 UTC
svn commit: r792818 - in /felix/trunk/karaf: ./ assembly/
assembly/src/main/descriptors/ assembly/src/main/filtered-resources/etc/
client/
gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/
gshell/gshell-console/ gshell/gshell...
Author: gnodet
Date: Fri Jul 10 06:56:47 2009
New Revision: 792818
URL: http://svn.apache.org/viewvc?rev=792818&view=rev
Log:
Fix ansi on windows
Added:
felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/MoreAction.java
Removed:
felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/ansi/AnsiCode.java
felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/ansi/AnsiOutputStream.java
Modified:
felix/trunk/karaf/assembly/pom.xml
felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml
felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml
felix/trunk/karaf/assembly/src/main/filtered-resources/etc/startup.properties
felix/trunk/karaf/client/pom.xml
felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/EchoCommand.java
felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/InfoAction.java
felix/trunk/karaf/gshell/gshell-console/pom.xml
felix/trunk/karaf/gshell/gshell-console/src/main/filtered-resources/org/apache/felix/karaf/gshell/console/branding.properties
felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/Console.java
felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/ConsoleFactory.java
felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/TerminalFactory.java
felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshAction.java
felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshTerminal.java
felix/trunk/karaf/gshell/gshell-ssh/src/main/resources/OSGI-INF/blueprint/gshell-ssh.xml
felix/trunk/karaf/pom.xml
Modified: felix/trunk/karaf/assembly/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/pom.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/pom.xml (original)
+++ felix/trunk/karaf/assembly/pom.xml Fri Jul 10 06:56:47 2009
@@ -155,8 +155,8 @@
<artifactId>org.apache.servicemix.bundles.cglib</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.jline</artifactId>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
Modified: felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml (original)
+++ felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml Fri Jul 10 06:56:47 2009
@@ -133,7 +133,6 @@
<outputFileNameMapping>org/apache/felix/gogo/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.gogo:org.apache.felix.gogo.runtime</include>
- <include>org.apache.felix.gogo:org.apache.felix.gogo.commands</include>
</includes>
</dependencySet>
<dependencySet>
@@ -160,15 +159,6 @@
<outputDirectory>/system</outputDirectory>
<unpack>false</unpack>
<useProjectArtifact>false</useProjectArtifact>
- <outputFileNameMapping>org/apache/servicemix/bundles/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
- <includes>
- <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.jline</include>
- </includes>
- </dependencySet>
- <dependencySet>
- <outputDirectory>/system</outputDirectory>
- <unpack>false</unpack>
- <useProjectArtifact>false</useProjectArtifact>
<outputFileNameMapping>org/apache/felix/karaf/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.karaf:org.apache.felix.karaf.management</include>
Modified: felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml (original)
+++ felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml Fri Jul 10 06:56:47 2009
@@ -125,7 +125,6 @@
<outputFileNameMapping>org/apache/felix/gogo/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.gogo:org.apache.felix.gogo.runtime</include>
- <include>org.apache.felix.gogo:org.apache.felix.gogo.commands</include>
</includes>
</dependencySet>
<dependencySet>
@@ -152,15 +151,6 @@
<outputDirectory>/system</outputDirectory>
<unpack>false</unpack>
<useProjectArtifact>false</useProjectArtifact>
- <outputFileNameMapping>org/apache/servicemix/bundles/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
- <includes>
- <include>org.apache.servicemix.bundles:org.apache.servicemix.bundles.jline</include>
- </includes>
- </dependencySet>
- <dependencySet>
- <outputDirectory>/system</outputDirectory>
- <unpack>false</unpack>
- <useProjectArtifact>false</useProjectArtifact>
<outputFileNameMapping>org/apache/felix/karaf/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<includes>
<include>org.apache.felix.karaf:org.apache.felix.karaf.management</include>
Modified: felix/trunk/karaf/assembly/src/main/filtered-resources/etc/startup.properties
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/filtered-resources/etc/startup.properties?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/filtered-resources/etc/startup.properties (original)
+++ felix/trunk/karaf/assembly/src/main/filtered-resources/etc/startup.properties Fri Jul 10 06:56:47 2009
@@ -36,9 +36,7 @@
#
org/apache/geronimo/blueprint-bundle/${geronimo.blueprint.version}/blueprint-bundle-${geronimo.blueprint.version}.jar=20
-org/apache/servicemix/bundles/org.apache.servicemix.bundles.jline/${jline.version}/org.apache.servicemix.bundles.jline-${jline.version}.jar=30
org/apache/felix/gogo/org.apache.felix.gogo.runtime/${felix.gogo.version}/org.apache.felix.gogo.runtime-${felix.gogo.version}.jar=30
-org/apache/felix/gogo/org.apache.felix.gogo.commands/${felix.gogo.version}/org.apache.felix.gogo.commands-${felix.gogo.version}.jar=30
org/apache/felix/karaf/gshell/org.apache.felix.karaf.gshell.console/${pom.version}/org.apache.felix.karaf.gshell.console-${pom.version}.jar=30
org/apache/felix/karaf/deployer/org.apache.felix.karaf.deployer.spring/${pom.version}/org.apache.felix.karaf.deployer.spring-${pom.version}.jar=30
org/apache/felix/karaf/deployer/org.apache.felix.karaf.deployer.blueprint/${pom.version}/org.apache.felix.karaf.deployer.blueprint-${pom.version}.jar=30
Modified: felix/trunk/karaf/client/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/client/pom.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/client/pom.xml (original)
+++ felix/trunk/karaf/client/pom.xml Fri Jul 10 06:56:47 2009
@@ -35,8 +35,8 @@
<dependencies>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.jline</artifactId>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
</dependency>
<dependency>
<groupId>org.apache.sshd</groupId>
@@ -63,7 +63,7 @@
<Class-Path>
../system/org/apache/sshd/sshd-core/${sshd.version}/sshd-core-${sshd.version}.jar
../system/org/apache/mina/mina-core/${mina.version}/mina-core-${mina.version}.jar
- ../system/org/apache/servicemix/bundles/org.apache.servicemix.bundles.jline/${jline.version}/org.apache.servicemix.bundles.jline-${jline.version}.jar
+ ../system/org/apache/felix/karaf/gshell/org.apache.felix.karaf.gshell.console/${pom.version}/org.apache.felix.karaf.gshell.console-${pom.version}.jar
</Class-Path>
<Bundle-Name>Apache Felix Karaf Shell Client</Bundle-Name>
<Bundle-Description>Shell client bundle for Apache Felix Karaf.</Bundle-Description>
Modified: felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/EchoCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/EchoCommand.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/EchoCommand.java (original)
+++ felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/EchoCommand.java Fri Jul 10 06:56:47 2009
@@ -1,11 +1,37 @@
package org.apache.felix.karaf.gshell.commands;
-/**
- * Created by IntelliJ IDEA.
- * User: gnodet
- * Date: Jul 9, 2009
- * Time: 1:06:45 AM
- * To change this template use File | Settings | File Templates.
- */
-public class EchoCommand {
-}
+import java.util.List;
+
+import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.karaf.gshell.console.OsgiCommandSupport;
+
+@Command(scope = "shell", name = "echo", description="Echo or print arguments to STDOUT")
+public class EchoCommand extends OsgiCommandSupport
+{
+ @Option(name="-n", description="Do not print the trailing newline character")
+ private boolean trailingNewline = true;
+
+ @Argument(description="Arguments")
+ private List<String> args;
+
+ protected Object doExecute() throws Exception {
+ if (args != null) {
+ int c=0;
+
+ for (String arg : args) {
+ System.out.print(arg);
+ if (++c + 1 < args.size()) {
+ System.out.print(" ");
+ }
+ }
+ }
+
+ if (trailingNewline) {
+ System.out.println();
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
Modified: felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/InfoAction.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/InfoAction.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/InfoAction.java (original)
+++ felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/InfoAction.java Fri Jul 10 06:56:47 2009
@@ -16,8 +16,150 @@
*/
package org.apache.felix.karaf.gshell.commands;
-/**
- * TODO
- */
-public class InfoAction {
+import java.util.Locale;
+import java.text.DecimalFormatSymbols;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.lang.management.OperatingSystemMXBean;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ClassLoadingMXBean;
+import java.lang.management.MemoryMXBean;
+import java.lang.management.ThreadMXBean;
+import java.lang.management.RuntimeMXBean;
+import java.lang.management.GarbageCollectorMXBean;
+import java.lang.reflect.Method;
+
+import org.apache.felix.karaf.gshell.console.OsgiCommandSupport;
+import org.apache.felix.gogo.commands.Command;
+
+@Command(scope = "shell", name = "info", description = "Print Karaf informations")
+public class InfoAction extends OsgiCommandSupport {
+
+ private NumberFormat fmtI = new DecimalFormat("###,###", new DecimalFormatSymbols(Locale.ENGLISH));
+ private NumberFormat fmtD = new DecimalFormat("###,##0.000", new DecimalFormatSymbols(Locale.ENGLISH));
+
+
+ protected Object doExecute() throws Exception {
+ int maxNameLen;
+
+ RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
+ OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
+ ThreadMXBean threads = ManagementFactory.getThreadMXBean();
+ MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
+ ClassLoadingMXBean cl = ManagementFactory.getClassLoadingMXBean();
+
+ //
+ // print ServiceMix informations
+ //
+ maxNameLen = 25;
+ System.out.println("Karaf");
+ printValue("Karaf home", maxNameLen, System.getProperty("karaf.home"));
+ printValue("Karaf base", maxNameLen, System.getProperty("karaf.base"));
+ System.out.println();
+
+ System.out.println("JVM");
+ printValue("Java Virtual Machine", maxNameLen, runtime.getVmName() + " version " + runtime.getVmVersion());
+ printValue("Vendor", maxNameLen, runtime.getVmVendor());
+ printValue("Uptime", maxNameLen, printDuration(runtime.getUptime()));
+ try {
+ printValue("Process CPU time", maxNameLen, printDuration(getSunOsValueAsLong(os, "getProcessCpuTime") / 1000000));
+ } catch (Throwable t) {}
+ printValue("Total compile time", maxNameLen, printDuration(ManagementFactory.getCompilationMXBean().getTotalCompilationTime()));
+
+ System.out.println("Threads");
+ printValue("Live threads", maxNameLen, Integer.toString(threads.getThreadCount()));
+ printValue("Daemon threads", maxNameLen, Integer.toString(threads.getDaemonThreadCount()));
+ printValue("Peak", maxNameLen, Integer.toString(threads.getPeakThreadCount()));
+ printValue("Total started", maxNameLen, Long.toString(threads.getTotalStartedThreadCount()));
+
+ System.out.println("Memory");
+ printValue("Current heap size", maxNameLen, printSizeInKb(mem.getHeapMemoryUsage().getUsed()));
+ printValue("Maximum heap size", maxNameLen, printSizeInKb(mem.getHeapMemoryUsage().getMax()));
+ printValue("Committed heap size", maxNameLen, printSizeInKb(mem.getHeapMemoryUsage().getCommitted()));
+ printValue("Pending objects", maxNameLen, Integer.toString(mem.getObjectPendingFinalizationCount()));
+ for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) {
+ String val = "Name = '" + gc.getName() + "', Collections = " + gc.getCollectionCount() + ", Time = " + printDuration(gc.getCollectionTime());
+ printValue("Garbage collector", maxNameLen, val);
+ }
+
+ System.out.println("Classes");
+ printValue("Current classes loaded", maxNameLen, printLong(cl.getLoadedClassCount()));
+ printValue("Total classes loaded", maxNameLen, printLong(cl.getTotalLoadedClassCount()));
+ printValue("Total classes unloaded", maxNameLen, printLong(cl.getUnloadedClassCount()));
+
+ System.out.println("Operating system");
+ printValue("Name", maxNameLen, os.getName() + " version " + os.getVersion());
+ printValue("Architecture", maxNameLen, os.getArch());
+ printValue("Processors", maxNameLen, Integer.toString(os.getAvailableProcessors()));
+ try {
+ printValue("Total physical memory", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getTotalPhysicalMemorySize")));
+ printValue("Free physical memory", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getFreePhysicalMemorySize")));
+ printValue("Committed virtual memory", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getCommittedVirtualMemorySize")));
+ printValue("Total swap space", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getTotalSwapSpaceSize")));
+ printValue("Free swap space", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getFreeSwapSpaceSize")));
+ } catch (Throwable t) {}
+
+ return null;
+ }
+
+ private long getSunOsValueAsLong(OperatingSystemMXBean os, String name) throws Exception {
+ Method mth = os.getClass().getMethod(name);
+ return (Long) mth.invoke(os);
+ }
+
+ private String printLong(long i) {
+ return fmtI.format(i);
+ }
+
+ private String printSizeInKb(double size) {
+ return fmtI.format((long) (size / 1024)) + " kbytes";
+ }
+
+ private String printDuration(double uptime) {
+ uptime /= 1000;
+ if (uptime < 60) {
+ return fmtD.format(uptime) + " seconds";
+ }
+ uptime /= 60;
+ if (uptime < 60) {
+ long minutes = (long) uptime;
+ String s = fmtI.format(minutes) + (minutes > 1 ? " minutes" : " minute");
+ return s;
+ }
+ uptime /= 60;
+ if (uptime < 24) {
+ long hours = (long) uptime;
+ long minutes = (long) ((uptime - hours) * 60);
+ String s = fmtI.format(hours) + (hours > 1 ? " hours" : " hour");
+ if (minutes != 0) {
+ s += " " + fmtI.format(minutes) + (minutes > 1 ? " minutes" : "minute");
+ }
+ return s;
+ }
+ uptime /= 24;
+ long days = (long) uptime;
+ long hours = (long) ((uptime - days) * 60);
+ String s = fmtI.format(days) + (days > 1 ? " days" : " day");
+ if (hours != 0) {
+ s += " " + fmtI.format(hours) + (hours > 1 ? " hours" : "hour");
+ }
+ return s;
+ }
+
+ void printSysValue(String prop, int pad) {
+ printValue(prop, pad, System.getProperty(prop));
+ }
+
+ void printValue(String name, int pad, String value) {
+ System.out.println(" @|bold " + name + spaces(pad - name.length()) + "| " + value);
+ }
+
+ String spaces(int nb) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < nb; i++) {
+ sb.append(' ');
+ }
+ return sb.toString();
+ }
+
}
Added: felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/MoreAction.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/MoreAction.java?rev=792818&view=auto
==============================================================================
--- felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/MoreAction.java (added)
+++ felix/trunk/karaf/gshell/gshell-commands/src/main/java/org/apache/felix/karaf/gshell/commands/MoreAction.java Fri Jul 10 06:56:47 2009
@@ -0,0 +1,7 @@
+package org.apache.felix.karaf.gshell.commands;
+
+import org.apache.felix.gogo.commands.Command;
+
+@Command(scope = "shell", name = "more", description = "")
+public class MoreAction {
+}
Modified: felix/trunk/karaf/gshell/gshell-console/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-console/pom.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-console/pom.xml (original)
+++ felix/trunk/karaf/gshell/gshell-console/pom.xml Fri Jul 10 06:56:47 2009
@@ -39,8 +39,12 @@
<dependencies>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.jline</artifactId>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
@@ -98,11 +102,23 @@
<Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
<Import-Package>
!javax.swing,
+ !org.apache.felix.karaf.gshell.console*,
+ !org.fusesource.jansi*,
+ !org.apache.felix.gogo.commands*,
+ !jline,
+ com.sun.jna*;resolution:=optional,
*
</Import-Package>
<Export-Package>
- org.apache.felix.karaf.gshell.console*;version=${pom.version}
+ org.apache.felix.gogo.commands*;version=${felix.gogo.version},
+ org.apache.felix.karaf.gshell.console*;version=${pom.version},
+ org.fusesource.jansi;version=${jansi.version},
+ jline;version=${jline.version},
+
</Export-Package>
+ <Private-Package>
+ org.fusesource.jansi.internal
+ </Private-Package>
<_versionpolicy>${bnd.version.policy}</_versionpolicy>
</instructions>
<unpackBundle>true</unpackBundle>
Modified: felix/trunk/karaf/gshell/gshell-console/src/main/filtered-resources/org/apache/felix/karaf/gshell/console/branding.properties
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-console/src/main/filtered-resources/org/apache/felix/karaf/gshell/console/branding.properties?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-console/src/main/filtered-resources/org/apache/felix/karaf/gshell/console/branding.properties (original)
+++ felix/trunk/karaf/gshell/gshell-console/src/main/filtered-resources/org/apache/felix/karaf/gshell/console/branding.properties Fri Jul 10 06:56:47 2009
@@ -18,15 +18,15 @@
##
welcome = \
-@|cyan __ __ ____ |\n\
-@|cyan / //_/____ __________ _/ __/ |\n\
-@|cyan / ,< / __ `/ ___/ __ `/ /_ |\n\
-@|cyan / /\\| \\|/ /_/ / / / /_/ / __/ |\n\
-@|cyan /_/ \\|_\\|\\__,_/_/ \\__,_/_/ |\n\
+\u001B[36m __ __ ____ \u001B[0m\n\
+\u001B[36m / //_/____ __________ _/ __/ \u001B[0m\n\
+\u001B[36m / ,< / __ `/ ___/ __ `/ /_ \u001B[0m\n\
+\u001B[36m / /| |/ /_/ / / / /_/ / __/ \u001B[0m\n\
+\u001B[36m /_/ |_|\\__,_/_/ \\__,_/_/ \u001B[0m\n\
\n\
- @|bold Apache Felix Karaf| (${pom.version})\n\
+\u001B[1m Apache Felix Karaf\u001B[0m (${pom.version})\n\
\n\
-Type '@|bold help|' for more information.\n
+Type '\u001B[1mhelp\u001B[0m' for more information.\n
Modified: felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/Console.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/Console.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/Console.java (original)
+++ felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/Console.java Fri Jul 10 06:56:47 2009
@@ -22,15 +22,14 @@
import org.osgi.service.command.CommandSession;
import org.osgi.service.command.Converter;
import org.osgi.service.command.CommandProcessor;
-import org.apache.felix.karaf.gshell.console.ansi.AnsiOutputStream;
import org.apache.felix.karaf.gshell.console.Completer;
+import org.fusesource.jansi.Ansi;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.io.PrintWriter;
import java.io.PrintStream;
-import java.lang.reflect.Method;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.Properties;
@@ -39,7 +38,8 @@
{
public static final String PROMPT = "PROMPT";
- public static final String DEFAULT_PROMPT = "\"@|bold ${USER}|@${APPLICATION}:@|bold ${SCOPE}|> \"";
+ public static final String DEFAULT_PROMPT =
+ "\"\u001B\\[1m${USER}\u001B\\[0m@${APPLICATION}> \"";
private CommandSession session;
private ConsoleReader reader;
@@ -99,8 +99,7 @@
welcome();
while (running) {
try {
- String prompt = AnsiOutputStream.decode(getPrompt());
- String line = reader.readLine(prompt);
+ String line = reader.readLine(getPrompt());
if (line == null)
{
break;
@@ -136,11 +135,7 @@
loadProps(props, "/org/apache/felix/karaf/branding/branding.properties");
String welcome = props.getProperty("welcome");
if (welcome != null && welcome.length() > 0) {
- try {
- session.getConsole().println(AnsiOutputStream.decode(welcome));
- } catch (IOException e) {
- //
- }
+ session.getConsole().println(welcome);
}
}
@@ -192,7 +187,6 @@
private void interrupt() {
interrupt = true;
- //System.err.println("Interrupt ^C");
}
private class ConsoleInputStream extends InputStream
Modified: felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/ConsoleFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/ConsoleFactory.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/ConsoleFactory.java (original)
+++ felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/ConsoleFactory.java Fri Jul 10 06:56:47 2009
@@ -20,15 +20,16 @@
import java.io.InputStream;
import java.io.PrintStream;
+import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.List;
-import org.apache.felix.karaf.gshell.console.ansi.AnsiOutputStream;
import org.apache.felix.karaf.gshell.console.Completer;
import org.apache.felix.karaf.gshell.console.completer.AggregateCompleter;
import org.osgi.framework.BundleContext;
import org.osgi.service.command.CommandProcessor;
import org.osgi.service.command.CommandSession;
+import org.fusesource.jansi.AnsiConsole;
import jline.Terminal;
public class ConsoleFactory {
@@ -80,7 +81,13 @@
}
}
};
- this.console = new Console(commandProcessor, in, out, err, terminal, new AggregateCompleter(completers), callback);
+ this.console = new Console(commandProcessor,
+ in,
+ wrap(out),
+ wrap(err),
+ terminal,
+ new AggregateCompleter(completers),
+ callback);
CommandSession session = console.getSession();
session.put("USER", "karaf");
session.put("APPLICATION", System.getProperty("karaf.name", "root"));
@@ -94,6 +101,15 @@
}
}
+ private static PrintStream wrap(PrintStream stream) {
+ OutputStream o = AnsiConsole.wrapOutputStream(stream);
+ if (o instanceof PrintStream) {
+ return ((PrintStream) o);
+ } else {
+ return new PrintStream(o);
+ }
+ }
+
private static <T> T unwrap(T stream) {
try {
Method mth = stream.getClass().getMethod("getRoot");
Modified: felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/TerminalFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/TerminalFactory.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/TerminalFactory.java (original)
+++ felix/trunk/karaf/gshell/gshell-console/src/main/java/org/apache/felix/karaf/gshell/console/jline/TerminalFactory.java Fri Jul 10 06:56:47 2009
@@ -12,7 +12,6 @@
public class TerminalFactory {
private Terminal term;
- private Thread hook;
public Terminal getTerminal() throws Exception {
if (term == null) {
@@ -25,7 +24,7 @@
boolean windows = System.getProperty("os.name").toLowerCase().contains("windows");
try {
if (windows) {
- WindowsTerminal t = new WindowsTerminal();
+ AnsiWindowsTerminal t = new AnsiWindowsTerminal();
t.setDirectConsole(true);
t.initializeTerminal();
term = t;
@@ -40,12 +39,17 @@
}
public synchronized void destroy() throws Exception {
- if (term instanceof UnixTerminal) {
- ((UnixTerminal) term).restoreTerminal();
- }
+ term.restoreTerminal();
term = null;
}
+ public static class AnsiWindowsTerminal extends WindowsTerminal {
+ @Override
+ public boolean isANSISupported() {
+ return true;
+ }
+ }
+
public static class NoInterruptUnixTerminal extends UnixTerminal {
@Override
public void initializeTerminal() throws IOException, InterruptedException {
@@ -59,23 +63,6 @@
super.restoreTerminal();
}
- protected static String stty(final String args) throws IOException, InterruptedException {
- try {
- try {
- Method mth = UnixTerminal.class.getDeclaredMethod("stty", String.class);
- mth.setAccessible(true);
- return (String) mth.invoke(null, args);
- } catch (InvocationTargetException e) {
- throw e.getTargetException();
- }
- } catch (IOException e) {
- throw e;
- } catch (InterruptedException e) {
- throw e;
- } catch (Throwable e) {
- throw new RuntimeException(e);
- }
- }
}
}
Modified: felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshAction.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshAction.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshAction.java (original)
+++ felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshAction.java Fri Jul 10 06:56:47 2009
@@ -1,156 +1,142 @@
-///*
-// * 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.felix.karaf.gshell.ssh;
-//
-//import org.apache.sshd.ClientChannel;
-//import org.apache.sshd.ClientSession;
-//import org.apache.sshd.SshClient;
-//import org.apache.sshd.client.future.ConnectFuture;
-//import org.apache.sshd.common.util.NoCloseInputStream;
-//import org.apache.sshd.common.util.NoCloseOutputStream;
-//import org.apache.felix.karaf.gshell.console.OsgiCommandSupport;
-//import org.apache.felix.karaf.gshell.console.BlueprintContainerAware;
-//import org.apache.felix.gogo.commands.Option;
-//import org.apache.felix.gogo.commands.Argument;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.osgi.service.blueprint.container.BlueprintContainer;
-//
-///**
-// * Connect to a SSH server.
-// *
-// * @version $Rev: 721244 $ $Date: 2008-11-27 18:19:56 +0100 (Thu, 27 Nov 2008) $
-// */
-//public class SshAction
-// extends OsgiCommandSupport implements BlueprintContainerAware
-//{
-// private final Logger log = LoggerFactory.getLogger(getClass());
-//
-// @Option(name="-l", aliases={"--username"}, description = "Username")
-// private String username;
-//
-// @Option(name="-P", aliases={"--password"}, description = "Password")
-// private String password;
-//
-// @Argument(required=true, description = "Host")
-// private String hostname;
-//
-// @Option(name="-p", aliases={"--port"}, description = "Port")
-// private int port = 22;
-//
-// private BlueprintContainer container;
-//
-// private ClientSession session;
-//
-// public void setBlueprintContainer(final BlueprintContainer container) {
-// assert container != null;
-// this.container = container;
-// }
-//
-// /**
-// * Helper to validate that prompted username or password is not null or empty.
-// */
-// private class UsernamePasswordValidator
-// implements PromptReader.Validator
-// {
-// private String type;
-//
-// private int count = 0;
-//
-// private int max = 3;
-//
-// public UsernamePasswordValidator(final String type) {
-// assert type != null;
-//
-// this.type = type;
-// }
-//
-// public boolean isValid(final String value) {
-// count++;
-//
-// if (value != null && value.trim().length() > 0) {
-// return true;
-// }
-//
-// if (count >= max) {
-// throw new RuntimeException("Too many attempts; failed to prompt user for " + type + " after " + max + " tries");
-// }
-//
-// return false;
-// }
-// }
-//
-// @Override
-// protected Object doExecute() throws Exception {
-//
-// //
-// // TODO: Parse hostname for <username>@<hostname>
-// //
-//
-// System.out.println("Connecting to host " + hostname + " on port " + port);
-//
-// // If the username/password was not configured via cli, then prompt the user for the values
-// if (username == null || password == null) {
-// PromptReader prompter = new PromptReader(io);
-// log.debug("Prompting user for credentials");
-// if (username == null) {
-// username = prompter.readLine("Login: ", new UsernamePasswordValidator("login"));
-// }
-// if (password == null) {
-// text = messages.getMessage("prompt.password");
-// password = prompter.readPassword("Password: ", new UsernamePasswordValidator("password"));
-// }
-// }
-//
-// // Create the client from prototype
-// SshClient client = (SshClient) container.getComponentInstance(SshClient.class.getName());
-// log.debug("Created client: {}", client);
-// client.start();;
-//
-// try {
-// ConnectFuture future = client.connect(hostname, port);
-// future.await();
-// session = future.getSession();
-// try {
-// System.out.println("Connected");
-//
-// session.authPassword(username, password);
-// int ret = session.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
-// if ((ret & ClientSession.AUTHED) == 0) {
-// System.err.println("Authentication failed");
-// return null;
-// }
-//
-// ClientChannel channel = session.createChannel("shell");
-// channel.setIn(new NoCloseInputStream(System.in));
-// channel.setOut(new NoCloseOutputStream(System.out));
-// channel.setErr(new NoCloseOutputStream(System.err));
-// channel.open();
-// channel.waitFor(ClientChannel.CLOSED, 0);
-// } finally {
-// session.close(false);
-// }
-// } finally {
-// client.stop();
-// }
-//
-// return null;
-// }
-//}
+/*
+ * 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.felix.karaf.gshell.ssh;
+
+import java.io.IOException;
+
+import org.apache.sshd.ClientChannel;
+import org.apache.sshd.ClientSession;
+import org.apache.sshd.SshClient;
+import org.apache.sshd.client.future.ConnectFuture;
+import org.apache.sshd.common.util.NoCloseInputStream;
+import org.apache.sshd.common.util.NoCloseOutputStream;
+import org.apache.felix.karaf.gshell.console.OsgiCommandSupport;
+import org.apache.felix.karaf.gshell.console.BlueprintContainerAware;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.felix.gogo.commands.Argument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+
+/**
+ * Connect to a SSH server.
+ *
+ * @version $Rev: 721244 $ $Date: 2008-11-27 18:19:56 +0100 (Thu, 27 Nov 2008) $
+ */
+public class SshAction
+ extends OsgiCommandSupport implements BlueprintContainerAware
+{
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Option(name="-l", aliases={"--username"}, description = "Username")
+ private String username;
+
+ @Option(name="-P", aliases={"--password"}, description = "Password")
+ private String password;
+
+ @Argument(required=true, description = "Host")
+ private String hostname;
+
+ @Option(name="-p", aliases={"--port"}, description = "Port")
+ private int port = 22;
+
+ private BlueprintContainer container;
+
+ private ClientSession session;
+
+ public void setBlueprintContainer(final BlueprintContainer container) {
+ assert container != null;
+ this.container = container;
+ }
+
+ @Override
+ protected Object doExecute() throws Exception {
+
+ //
+ // TODO: Parse hostname for <username>@<hostname>
+ //
+
+ System.out.println("Connecting to host " + hostname + " on port " + port);
+
+ // If the username/password was not configured via cli, then prompt the user for the values
+ if (username == null || password == null) {
+ log.debug("Prompting user for credentials");
+ if (username == null) {
+ username = readLine("Login: ");
+ }
+ if (password == null) {
+ password = readLine("Password: ");
+ }
+ }
+
+ // Create the client from prototype
+ SshClient client = (SshClient) container.getComponentInstance(SshClient.class.getName());
+ log.debug("Created client: {}", client);
+ client.start();;
+
+ try {
+ ConnectFuture future = client.connect(hostname, port);
+ future.await();
+ session = future.getSession();
+ try {
+ System.out.println("Connected");
+
+ session.authPassword(username, password);
+ int ret = session.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
+ if ((ret & ClientSession.AUTHED) == 0) {
+ System.err.println("Authentication failed");
+ return null;
+ }
+
+ ClientChannel channel = session.createChannel("shell");
+ channel.setIn(new NoCloseInputStream(System.in));
+ channel.setOut(new NoCloseOutputStream(System.out));
+ channel.setErr(new NoCloseOutputStream(System.err));
+ channel.open();
+ channel.waitFor(ClientChannel.CLOSED, 0);
+ } finally {
+ session.close(false);
+ }
+ } finally {
+ client.stop();
+ }
+
+ return null;
+ }
+
+ public String readLine(String msg) throws IOException {
+ StringBuffer sb = new StringBuffer();
+ System.err.print(msg);
+ System.err.flush();
+ for (;;) {
+ int c = super.session.getKeyboard().read();
+ if (c < 0) {
+ return null;
+ }
+ System.err.print((char) c);
+ if (c == '\r' || c == '\n') {
+ break;
+ }
+ sb.append((char) c);
+ }
+ return sb.toString();
+ }
+
+}
Modified: felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshTerminal.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshTerminal.java?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshTerminal.java (original)
+++ felix/trunk/karaf/gshell/gshell-ssh/src/main/java/org/apache/felix/karaf/gshell/ssh/SshTerminal.java Fri Jul 10 06:56:47 2009
@@ -33,6 +33,9 @@
public void initializeTerminal() throws Exception {
}
+ public void restoreTerminal() throws Exception {
+ }
+
public int getTerminalWidth() {
return Integer.valueOf(this.environment.getEnv().get("COLUMNS"));
}
Modified: felix/trunk/karaf/gshell/gshell-ssh/src/main/resources/OSGI-INF/blueprint/gshell-ssh.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-ssh/src/main/resources/OSGI-INF/blueprint/gshell-ssh.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-ssh/src/main/resources/OSGI-INF/blueprint/gshell-ssh.xml (original)
+++ felix/trunk/karaf/gshell/gshell-ssh/src/main/resources/OSGI-INF/blueprint/gshell-ssh.xml Fri Jul 10 06:56:47 2009
@@ -33,12 +33,10 @@
</cm:property-placeholder>
<command-bundle xmlns="http://felix.apache.org/karaf/xmlns/gshell/v1.0.0">
- <!--
<command name="ssh/ssh">
<action class="org.apache.felix.karaf.gshell.ssh.SshAction">
</action>
</command>
- -->
<command name="ssh/sshd">
<action class="org.apache.felix.karaf.gshell.ssh.SshServerAction">
<property name="sshServerId">
Modified: felix/trunk/karaf/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/pom.xml?rev=792818&r1=792817&r2=792818&view=diff
==============================================================================
--- felix/trunk/karaf/pom.xml (original)
+++ felix/trunk/karaf/pom.xml Fri Jul 10 06:56:47 2009
@@ -18,7 +18,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
- Æ
+
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -67,12 +67,11 @@
<properties>
<aopalliance.version>1.0_1</aopalliance.version>
- <asm.version>2.2.3_1</asm.version>
<cglib.version>2.1_3_2-SNAPSHOT</cglib.version>
<commons.logging.version>1.1.1</commons.logging.version>
<depends.maven.plugin.version>1.0</depends.maven.plugin.version>
<easymock.version>2.4</easymock.version>
- <equinox.version> 3.5.0.v20090520</equinox.version>
+ <equinox.version>3.5.0.v20090520</equinox.version>
<felix.bundlerepository.version>1.4.0</felix.bundlerepository.version>
<felix.compendium.version>1.2.0</felix.compendium.version>
<felix.configadmin.version>1.0.4</felix.configadmin.version>
@@ -85,13 +84,13 @@
<felix.metatype.version>1.0.2</felix.metatype.version>
<geronimo.blueprint.version>1.0.0-SNAPSHOT</geronimo.blueprint.version>
<geronimo.servlet.version>1.1.2</geronimo.servlet.version>
+ <jansi.version>1.0-SNAPSHOT</jansi.version>
<jetty.bundle.version>6.1.14_1</jetty.bundle.version>
<junit.version>3.8.2_1</junit.version>
- <jline.version>0.9.94_1</jline.version>
+ <jline.version>0.9.95-SNAPSHOT</jline.version>
<log4j.version>1.2.14</log4j.version>
<maven.version>2.0.9</maven.version>
<mina.version>2.0.0-M6</mina.version>
- <oro.version>2.0.8_1</oro.version>
<pax.exam.version>0.5.0</pax.exam.version>
<pax.logging.version>1.3.1-SNAPSHOT</pax.logging.version>
<pax.url.version>0.3.3</pax.url.version>
@@ -101,8 +100,7 @@
<servlet.api.version>2.5</servlet.api.version>
<spring.osgi.version>1.2.0</spring.osgi.version>
<spring.version>2.5.6.SEC01</spring.version>
- <sshd.version>0.1.0</sshd.version>
- <woodstox.version>3.2.7_1</woodstox.version>
+ <sshd.version>1.0-SNAPSHOT</sshd.version>
<osgi.jmx.version>4.2.0.200907080519</osgi.jmx.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -173,6 +171,17 @@
<enabled>false</enabled>
</snapshots>
</repository>
+
+ <repository>
+ <id>gnodet.snapshots</id>
+ <url>http://people.apache.org/~gnodet/snapshots</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
</repositories>
<pluginRepositories>
@@ -545,15 +554,14 @@
<version>${log4j.version}</version>
</dependency>
<dependency>
- <groupId>org.apache.servicemix.bundles</groupId>
- <artifactId>org.apache.servicemix.bundles.jline</artifactId>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
<version>${jline.version}</version>
- <exclusions>
- <exclusion>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- </exclusion>
- </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.fusesource.jansi</groupId>
+ <artifactId>jansi</artifactId>
+ <version>${jansi.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>