Author: cschneider
Date: Mon Aug  6 10:03:50 2012
New Revision: 1369765

URL: http://svn.apache.org/viewvc?rev=1369765&view=rev
Log:
KARAF-1640: Moving the inner classes out to make it easier to port to trunk. 
Adding some documentation

Added:
    
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
    
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
Modified:
    
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
    
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java

Modified: 
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java?rev=1369765&r1=1369764&r2=1369765&view=diff
==============================================================================
--- 
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java 
(original)
+++ 
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java 
Mon Aug  6 10:03:50 2012
@@ -48,16 +48,12 @@ import java.util.regex.Pattern;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
 import org.osgi.framework.ServiceReference;
-import org.osgi.framework.SynchronousBundleListener;
 import org.osgi.framework.launch.Framework;
 import org.osgi.framework.launch.FrameworkFactory;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
 import org.osgi.service.startlevel.StartLevel;
 
 /**
@@ -300,61 +296,6 @@ public class Main {
         }.start();
     }
 
-    private static class StartupListener implements FrameworkListener, 
SynchronousBundleListener {
-        private final BundleContext context;
-        private StartupListener(BundleContext context) {
-            this.context = context;
-            context.addBundleListener(this);
-            context.addFrameworkListener(this);
-        }
-        public synchronized void bundleChanged(BundleEvent bundleEvent) {
-            Bundle[] bundles = context.getBundles();
-            int numActive = 0;
-            int numBundles = bundles.length;
-            for (Bundle bundle : bundles) {
-                if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) {
-                    numBundles--;
-                } else if (bundle.getState() == Bundle.ACTIVE) {
-                    numActive ++;
-                }
-            }
-            boolean started = 
Boolean.parseBoolean(System.getProperty("karaf.console.started", "false"));
-            if (!started) {
-                update(numActive, numBundles);
-            }
-        }
-        public synchronized void frameworkEvent(FrameworkEvent frameworkEvent) 
{
-            if (frameworkEvent.getType() == FrameworkEvent.STARTLEVEL_CHANGED) 
{
-                int defStartLevel = 
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
-                int startLevel = 
context.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
-                if (startLevel >= defStartLevel) {
-                    context.removeBundleListener(this);
-                    context.removeFrameworkListener(this);
-                }
-            }
-        }
-        public void update(int done, int total) {
-            int percent = (done * 100) / total;
-            StringBuilder sb = new StringBuilder();
-            sb.append(String.format("\r%3d%% [", percent));
-            for (int i = 0; i < 100; i++) {
-                if (i < percent) {
-                    sb.append('=');
-                } else if (i == percent) {
-                    sb.append('>');
-                } else {
-                    sb.append(' ');
-                }
-            }
-            sb.append(']');
-            System.out.print(sb.toString());
-            System.out.flush();
-            if (done == total) {
-                System.out.println();
-            }
-        }
-    }
-
     private void startKarafActivators(ClassLoader classLoader) throws 
IOException {
         Enumeration<URL> urls = 
classLoader.getResources("META-INF/MANIFEST.MF");
         while (urls != null && urls.hasMoreElements()) {

Added: 
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java?rev=1369765&view=auto
==============================================================================
--- 
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
 (added)
+++ 
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
 Mon Aug  6 10:03:50 2012
@@ -0,0 +1,72 @@
+package org.apache.karaf.main;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.SynchronousBundleListener;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
+
+/**
+ * Watches the startup of the framework and displays a progress bar of the 
number of bundles started / total.
+ * The listener will remove itself after the desired start level is reached or 
the system property karaf.console.started is set to 
+ * true. 
+ */
+class StartupListener implements FrameworkListener, SynchronousBundleListener {
+    private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED = 
"karaf.console.started";
+
+       private final BundleContext context;
+    StartupListener(BundleContext context) {
+        this.context = context;
+        context.addBundleListener(this);
+        context.addFrameworkListener(this);
+    }
+    public synchronized void bundleChanged(BundleEvent bundleEvent) {
+        Bundle[] bundles = context.getBundles();
+        int numActive = 0;
+        int numBundles = bundles.length;
+        for (Bundle bundle : bundles) {
+            if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) {
+                numBundles--;
+            } else if (bundle.getState() == Bundle.ACTIVE) {
+                numActive ++;
+            }
+        }
+        boolean started = 
Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, 
"false"));
+        if (!started) {
+            showProgressBar(numActive, numBundles);
+        }
+    }
+    public synchronized void frameworkEvent(FrameworkEvent frameworkEvent) {
+        if (frameworkEvent.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
+            int defStartLevel = 
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+            int startLevel = 
context.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
+            if (startLevel >= defStartLevel) {
+                context.removeBundleListener(this);
+                context.removeFrameworkListener(this);
+            }
+        }
+    }
+    public void showProgressBar(int done, int total) {
+        int percent = (done * 100) / total;
+        StringBuilder sb = new StringBuilder();
+        sb.append(String.format("\r%3d%% [", percent));
+        for (int i = 0; i < 100; i++) {
+            if (i < percent) {
+                sb.append('=');
+            } else if (i == percent) {
+                sb.append('>');
+            } else {
+                sb.append(' ');
+            }
+        }
+        sb.append(']');
+        System.out.print(sb.toString());
+        System.out.flush();
+        if (done == total) {
+            System.out.println();
+        }
+    }
+}
\ No newline at end of file

Modified: 
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1369765&r1=1369764&r2=1369765&view=diff
==============================================================================
--- 
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
 (original)
+++ 
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
 Mon Aug  6 10:03:50 2012
@@ -28,7 +28,6 @@ import java.security.KeyPair;
 import java.security.PrivilegedExceptionAction;
 import java.util.Hashtable;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
 import javax.security.auth.Subject;
 
 import jline.Terminal;
@@ -40,11 +39,7 @@ import org.apache.sshd.agent.SshAgent;
 import org.apache.sshd.agent.local.AgentImpl;
 import org.fusesource.jansi.AnsiConsole;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
 import org.osgi.framework.ServiceRegistration;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,10 +47,10 @@ public class ConsoleFactory {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ConsoleFactory.class);
 
-    private BundleContext bundleContext;
+    BundleContext bundleContext;
     private CommandProcessor commandProcessor;
     private TerminalFactory terminalFactory;
-    private Console console;
+    Console console;
     private boolean start;
     private ServiceRegistration registration;
     private SshAgent local;
@@ -156,56 +151,7 @@ public class ConsoleFactory {
         session.put(".jline.terminal", terminal);
         session.put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
 
-        new DelayedStarted(unwrappedIn).start();
-    }
-
-    class DelayedStarted extends Thread implements FrameworkListener {
-        final AtomicBoolean started = new AtomicBoolean(false);
-        final InputStream in;
-        DelayedStarted(InputStream in) {
-            super("Karaf Shell Console Thread");
-            this.in = in;
-            int defaultStartLevel = 
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
-            int startLevel = 
bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
-            if (startLevel >= defaultStartLevel) {
-                started.set(true);
-            } else {
-                bundleContext.addFrameworkListener(this);
-                frameworkEvent(new 
FrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, bundleContext.getBundle(), 
null));
-            }
-        }
-
-        public void run() {
-            try {
-                while (!started.get()) {
-                    if (in.available() == 0) {
-                        Thread.sleep(10);
-                    }
-                    while (in.available() > 0) {
-                        char ch = (char) in.read();
-                        if (ch == '\r' || ch == '\n') {
-                            started.set(true);
-                            break;
-                        }
-                    }
-                }
-            } catch (Throwable t) {
-                // Ignore
-            }
-            System.setProperty("karaf.console.started", "true");
-            System.out.println();
-            bundleContext.removeFrameworkListener(this);
-            console.run();
-        }
-        public void frameworkEvent(FrameworkEvent event) {
-            if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
-                int defaultStartLevel = 
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
-                int startLevel = 
bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
-                if (startLevel >= defaultStartLevel) {
-                    started.set(true);
-                }
-            }
-        }
+        new DelayedStarted(this.console, bundleContext, unwrappedIn).start();
     }
 
     protected String startAgent(String user) {

Added: 
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java?rev=1369765&view=auto
==============================================================================
--- 
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
 (added)
+++ 
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
 Mon Aug  6 10:03:50 2012
@@ -0,0 +1,73 @@
+package org.apache.karaf.shell.console.jline;
+
+import java.io.InputStream;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
+
+/**
+ * Delay the start of the console until the desired start level is reached or 
enter is pressed
+ */
+class DelayedStarted extends Thread implements FrameworkListener {
+    private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED = 
"karaf.console.started";
+
+       private final AtomicBoolean started = new AtomicBoolean(false);
+    private final InputStream in;
+       private final Runnable console;
+       private final BundleContext bundleContext;
+
+    DelayedStarted(Runnable console, BundleContext bundleContext, InputStream 
in) {
+        super("Karaf Shell Console Thread");
+               this.console = console;
+               this.bundleContext = bundleContext;
+        this.in = in;
+        int defaultStartLevel = 
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+        int startLevel = 
bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
+        if (startLevel >= defaultStartLevel) {
+            started.set(true);
+        } else {
+            bundleContext.addFrameworkListener(this);
+            frameworkEvent(new 
FrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, bundleContext.getBundle(), 
null));
+        }
+    }
+
+    public void run() {
+        try {
+            while (!started.get()) {
+                if (in.available() == 0) {
+                    Thread.sleep(10);
+                }
+                while (in.available() > 0) {
+                    char ch = (char) in.read();
+                    if (ch == '\r' || ch == '\n') {
+                        started.set(true);
+                        break;
+                    }
+                }
+            }
+        } catch (Throwable t) {
+            // Ignore
+        }
+
+        // Signal to the main module that it can stop displaying the startup 
progress
+        System.setProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, "true");
+
+        System.out.println();
+        this.bundleContext.removeFrameworkListener(this);
+        console.run();
+    }
+
+    public void frameworkEvent(FrameworkEvent event) {
+        if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
+            int defaultStartLevel = 
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+            int startLevel = 
this.bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
+            if (startLevel >= defaultStartLevel) {
+                started.set(true);
+            }
+        }
+    }
+}


Reply via email to