diff options
author | Thomas Watson | 2012-06-12 21:29:15 +0000 |
---|---|---|
committer | Thomas Watson | 2012-07-16 20:45:33 +0000 |
commit | f843e83246bb55c8e035fb0fa3e5515516070cd2 (patch) | |
tree | 313b00cc0fbefbf1c6faa92f3a622fb615ca395d /bundles/org.eclipse.osgi/console/src/org | |
parent | 43ba9615791ef5653de5728bc916f0519811306e (diff) | |
download | rt.equinox.framework-f843e83246bb55c8e035fb0fa3e5515516070cd2.tar.gz rt.equinox.framework-f843e83246bb55c8e035fb0fa3e5515516070cd2.tar.xz rt.equinox.framework-f843e83246bb55c8e035fb0fa3e5515516070cd2.zip |
remove internal console implementation
Diffstat (limited to 'bundles/org.eclipse.osgi/console/src/org')
7 files changed, 8 insertions, 3357 deletions
diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java index ecb88c91d..14b3f8f3a 100644 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java +++ b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java @@ -10,114 +10,31 @@ *******************************************************************************/ package org.eclipse.osgi.framework.internal.core; -import java.io.*; -import java.lang.reflect.Method; -import java.net.*; -import java.util.Dictionary; -import java.util.Hashtable; -import org.eclipse.osgi.framework.console.CommandProvider; -import org.eclipse.osgi.framework.console.ConsoleSession; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.*; -import org.osgi.util.tracker.ServiceTracker; -import org.osgi.util.tracker.ServiceTrackerCustomizer; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleException; -public class ConsoleManager implements ServiceTrackerCustomizer<ConsoleSession, FrameworkConsole> { - /** - * ConsoleSocketGetter - provides a Thread that listens on the port - * for FrameworkConsole. - */ - class ConsoleSocketGetter implements Runnable { - - /** The ServerSocket to accept connections from */ - private final ServerSocket server; - private volatile boolean shutdown = false; - - /** - * Constructor - sets the server and starts the thread to - * listen for connections. - * - * @param server a ServerSocket to accept connections from - */ - ConsoleSocketGetter(ServerSocket server) { - this.server = server; - try { - Method reuseAddress = server.getClass().getMethod("setReuseAddress", new Class[] {boolean.class}); //$NON-NLS-1$ - reuseAddress.invoke(server, new Object[] {Boolean.TRUE}); - } catch (Exception ex) { - // try to set the socket re-use property, it isn't a problem if it can't be set - } - Thread t = new Thread(this, "ConsoleSocketGetter"); //$NON-NLS-1$ - t.setDaemon(false); - t.start(); - } - - public void run() { - // Print message containing port console actually bound to.. - System.out.println(NLS.bind(ConsoleMsg.CONSOLE_LISTENING_ON_PORT, server.getInetAddress().toString() + ':' + Integer.toString(server.getLocalPort()))); - while (!shutdown) { - try { - Socket socket = server.accept(); - if (socket == null) - throw new IOException("No socket available. Probably caused by a shutdown."); //$NON-NLS-1$ - FrameworkConsoleSession session = new FrameworkConsoleSession(socket.getInputStream(), socket.getOutputStream(), socket); - framework.getSystemBundleContext().registerService(ConsoleSession.class.getName(), session, null); - } catch (Exception e) { - if (!shutdown) - e.printStackTrace(); - } - - } - } - - public void shutdown() { - if (shutdown) - return; - shutdown = true; - try { - server.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } +public class ConsoleManager { public static final String PROP_CONSOLE = "osgi.console"; //$NON-NLS-1$ private static final String PROP_SYSTEM_IN_OUT = "console.systemInOut"; //$NON-NLS-1$ private static final String CONSOLE_NAME = "OSGi Console"; //$NON-NLS-1$ public static final String CONSOLE_BUNDLE = "org.eclipse.equinox.console"; //$NON-NLS-1$ public static final String PROP_CONSOLE_ENABLED = "osgi.console.enable.builtin"; //$NON-NLS-1$ - final Framework framework; - private final ServiceTracker<CommandProvider, CommandProvider> cpTracker; - private final ServiceTracker<ConsoleSession, FrameworkConsole> sessions; - private final String consolePort; - // Allow for specifying the particular local host address on which the framework to listen for connections. Currently it listens on - // all network interfaces of the host and restricting this is desirable from security point of view. See bug 322917. - private final String consoleHost; - private FrameworkCommandProvider fwkCommands; - private ServiceRegistration<?> builtinSession; - private ConsoleSocketGetter socketGetter; - private final boolean isEnabled; + + private final Framework framework; private final String consoleBundle; + private final String consolePort; public ConsoleManager(Framework framework, String consolePropValue) { String port = null; - String host = null; if (consolePropValue != null) { int index = consolePropValue.lastIndexOf(":"); //$NON-NLS-1$ - if (index > -1) { - host = consolePropValue.substring(0, index); - } port = consolePropValue.substring(index + 1); } - this.framework = framework; - this.consoleHost = host != null ? host.trim() : host; this.consolePort = port != null ? port.trim() : port; String enabled = FrameworkProperties.getProperty(PROP_CONSOLE_ENABLED, CONSOLE_BUNDLE); - if (!"true".equals(enabled) || "none".equals(port)) { //$NON-NLS-1$ //$NON-NLS-2$ - isEnabled = false; - this.cpTracker = null; - this.sessions = null; + this.framework = framework; + if (!"true".equals(enabled) || "none".equals(consolePort)) { //$NON-NLS-1$ //$NON-NLS-2$ this.consoleBundle = "false".equals(enabled) ? CONSOLE_BUNDLE : enabled; //$NON-NLS-1$ if (consolePort == null || consolePort.length() > 0) { // no -console was specified or it has specified none or a port for telnet; @@ -129,79 +46,15 @@ public class ConsoleManager implements ServiceTrackerCustomizer<ConsoleSession, } return; } - this.isEnabled = true; - this.cpTracker = new ServiceTracker<CommandProvider, CommandProvider>(framework.getSystemBundleContext(), CommandProvider.class.getName(), null); - this.sessions = new ServiceTracker<ConsoleSession, FrameworkConsole>(framework.getSystemBundleContext(), ConsoleSession.class.getName(), this); this.consoleBundle = "unknown"; //$NON-NLS-1$ } public static ConsoleManager startConsole(Framework framework) { ConsoleManager consoleManager = new ConsoleManager(framework, FrameworkProperties.getProperty(PROP_CONSOLE)); - consoleManager.startConsole(); return consoleManager; } - private void startConsole() { - if (!isEnabled) { - return; - } - - this.cpTracker.open(); - this.sessions.open(); - fwkCommands = new FrameworkCommandProvider(framework); - fwkCommands.start(); - if (consolePort == null) - return; - int port = -1; - try { - if (consolePort.length() > 0) - port = Integer.parseInt(consolePort); - } catch (NumberFormatException e) { - // do nothing; - } - if (port < 0) { - InputStream in = new FilterInputStream(System.in) { - /** - * @throws IOException - */ - public void close() throws IOException { - // We don't want to close System.in - } - }; - OutputStream out = new FilterOutputStream(System.out) { - /** - * @throws IOException - */ - public void close() throws IOException { - // We don't want to close System.out - } - - public void write(byte[] var0, int var1, int var2) throws IOException { - this.out.write(var0, var1, var2); - } - - }; - FrameworkConsoleSession session = new FrameworkConsoleSession(in, out, null); - Dictionary<String, Object> props = null; - props = new Hashtable<String, Object>(1); - props.put(PROP_SYSTEM_IN_OUT, Boolean.TRUE); - builtinSession = framework.getSystemBundleContext().registerService(ConsoleSession.class.getName(), session, props); - } else { - try { - if (consoleHost != null) { - socketGetter = new ConsoleSocketGetter(new ServerSocket(port, 0, InetAddress.getByName(consoleHost))); - } else { - socketGetter = new ConsoleManager.ConsoleSocketGetter(new ServerSocket(port)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - public void checkForConsoleBundle() throws BundleException { - if (isEnabled) - return; if ("none".equals(consolePort)) //$NON-NLS-1$ return; // otherwise we need to check for the equinox console bundle and start it @@ -223,44 +76,7 @@ public class ConsoleManager implements ServiceTrackerCustomizer<ConsoleSession, * */ public void stopConsole() { - if (!isEnabled) { - return; - } - if (builtinSession != null) - try { - builtinSession.unregister(); - } catch (IllegalStateException e) { - // ignore; this can happen if the session was closed manually (bug 314343) - } - sessions.close(); - cpTracker.close(); - if (socketGetter != null) - socketGetter.shutdown(); - if (fwkCommands != null) - fwkCommands.stop(); - } - - public FrameworkConsole addingService(ServiceReference<ConsoleSession> reference) { - FrameworkConsole console = null; - - Boolean isSystemInOut = (Boolean) reference.getProperty(PROP_SYSTEM_IN_OUT); - if (isSystemInOut == null) - isSystemInOut = Boolean.FALSE; - - ConsoleSession session = framework.getSystemBundleContext().getService(reference); - console = new FrameworkConsole(framework.getSystemBundleContext(), session, isSystemInOut.booleanValue(), cpTracker); - - Thread t = new Thread(console, CONSOLE_NAME); - t.setDaemon(false); - t.start(); - return console; - } - - public void modifiedService(ServiceReference<ConsoleSession> reference, FrameworkConsole service) { // nothing } - public void removedService(ServiceReference<ConsoleSession> reference, FrameworkConsole service) { - service.shutdown(); - } } diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties deleted file mode 100644 index fc686ad45..000000000 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties +++ /dev/null @@ -1,143 +0,0 @@ -############################################################################### -# Copyright (c) 2003, 2011 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -#External Messages for EN locale -CONSOLE_PROMPT=osgi> -CONSOLE_ID=id -CONSOLE_MORE=-- More...Press Enter to Continue... -CONSOLE_HELP_CONTROLLING_CONSOLE_HEADING=---Controlling the Console--- -CONSOLE_HELP_MORE=More prompt for console output -CONSOLE_HELP_DISCONNECT=Disconnects from telnet session -CONSOLE_CONFIRM_MORE=Use 'more' prompt? -CONSOLE_MORE_ENTER_LINES=Enter maximum number of lines to scroll: -CONSOLE_CONFIRM_DISCONNECT=Disconnect from console? -CONSOLE_CONFIRM=Confirm -CONSOLE_CONFIRM_VALUES=y/n; default= -CONSOLE_Y=y -CONSOLE_N=n -CONSOLE_ERROR_READING_RESOURCE=Error reading {0} -CONSOLE_RESOURCE_NOT_IN_BUNDLE={0} not found in {1} -CONSOLE_NESTED_EXCEPTION=Nested Exception: -CONSOLE_PROMPT_DEFAULT=default -CONSOLE_INVALID_INPUT=Invalid input. -CONSOLE_TOO_MUCH_INVALID_INPUT=Too much invalid input. -CONSOLE_LINES_TO_SCROLL_NEGATIVE_ERROR=Lines to scroll is set to a negative number -CONSOLE_HELP_CONTROLLING_FRAMEWORK_HEADER=Controlling the OSGi framework -CONSOLE_HELP_LAUNCH_COMMAND_DESCRIPTION=start the OSGi Framework -CONSOLE_HELP_SHUTDOWN_COMMAND_DESCRIPTION=shutdown the OSGi Framework -CONSOLE_HELP_CLOSE_COMMAND_DESCRIPTION=shutdown and exit -CONSOLE_HELP_EXIT_COMMAND_DESCRIPTION=exit immediately (System.exit) -CONSOLE_HELP_GC_COMMAND_DESCRIPTION=perform a garbage collection -CONSOLE_HELP_INIT_COMMAND_DESCRIPTION=uninstall all bundles -CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION=set the OSGi property -CONSOLE_HELP_CONTROLLING_BUNDLES_HEADER=Controlling Bundles -CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION=install and optionally start bundle from the given URL -CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION=uninstall the specified bundle(s) -CONSOLE_HELP_START_COMMAND_DESCRIPTION=start the specified bundle(s) -CONSOLE_HELP_STOP_COMMAND_DESCRIPTION=stop the specified bundle(s) -CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION=refresh the packages of the specified bundles -CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION=update the specified bundle(s) -CONSOLE_HELP_DISPLAYING_STATUS_HEADER=Displaying Status -CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION=display installed bundles and registered services -CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION=[-s [<comma separated list of bundle states>] [<segment of bsn>]] -CONSOLE_HELP_SS_COMMAND_DESCRIPTION=display installed bundles (short status) -CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION=display registered service details. Examples for [filter]: (objectClass=com.xyz.Person); (&(objectClass=com.xyz.Person)(|(sn=Jensen)(cn=Babs J*))); passing only com.xyz.Person is a shortcut for (objectClass=com.xyz.Person). The filter syntax specification is available at http://www.ietf.org/rfc/rfc1960.txt -CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION=display imported/exported package details -CONSOLE_HELP_BUNDLES_COMMAND_DESCRIPTION=display details for all installed bundles -CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION=display details for the specified bundle(s) -CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION=print bundle headers -CONSOLE_HELP_EXTRAS_HEADER=Extras -CONSOLE_HELP_EXEC_COMMAND_DESCRIPTION=execute a command in a separate process and wait -CONSOLE_HELP_FORK_COMMAND_DESCRIPTION=execute a command in a separate process -CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION=<key>=<value> -CONSOLE_HELP_FILTER_ARGUMENT_DESCRIPTION=[filter] -CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION=[<pkgname>|<id>|<location>] -CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION=(<id>|<location>) -CONSOLE_HELP_OPTIONAL_IDLOCATION_ARGUMENT_DESCRIPTION=[<id>|<location>] -CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION=<command> -CONSOLE_HELP_GETPROP_COMMAND_DESCRIPTION=displays the system properties with the given name, or all of them. -CONSOLE_HELP_GETPROP_ARGUMENT_DESCRIPTION=[ name ] -CONSOLE_NO_BUNDLE_SPECIFIED_ERROR=No bundle(s) specified! -CONSOLE_NOTHING_TO_INSTALL_ERROR=Nothing to install! -CONSOLE_NO_INSTALLED_BUNDLES_ERROR=No installed bundles. -CONSOLE_BUNDLE_ID_MESSAGE=Bundle id is -CONSOLE_FRAMEWORK_IS_LAUNCHED_MESSAGE=Framework is launched. -CONSOLE_FRAMEWORK_IS_SHUTDOWN_MESSAGE=Framework is shutdown. -CONSOLE_ID_MESSAGE=Id={0} -CONSOLE_BUNDLE_LOCATION_MESSAGE=Bundle Location -CONSOLE_STATE_BUNDLE_FILE_NAME_HEADER=State Bundle File Name -CONSOLE_REGISTERED_SERVICES_MESSAGE=Registered Services -CONSOLE_REGISTERED_BY_BUNDLE_MESSAGE=Registered by bundle: -CONSOLE_BUNDLES_USING_SERVICE_MESSAGE=Bundles using service: -CONSOLE_NO_BUNDLES_USING_SERVICE_MESSAGE=No bundles using service. -CONSOLE_NO_REGISTERED_SERVICES_MESSAGE=No registered services. -CONSOLE_NO_EXPORTED_PACKAGES_MESSAGE=No exported packages -CONSOLE_NO_IMPORTED_PACKAGES_MESSAGE=No imported packages -CONSOLE_REMOVAL_PENDING_MESSAGE=removal pending -CONSOLE_IMPORTS_MESSAGE=imports -CONSOLE_STALE_MESSAGE=stale -CONSOLE_NO_EXPORTED_PACKAGES_NO_PACKAGE_ADMIN_MESSAGE=No exported packages [PackageAdmin service is not registered] -CONSOLE_SERVICES_IN_USE_MESSAGE=Services in use: -CONSOLE_NO_SERVICES_IN_USE_MESSAGE=No services in use. -CONSOLE_STATUS_MESSAGE=Status={0} -CONSOLE_DATA_ROOT_MESSAGE=Data Root={0} -CONSOLE_EXPORTED_PACKAGES_MESSAGE=Exported packages -CONSOLE_IMPORTED_PACKAGES_MESSAGE=Imported packages -CONSOLE_EXPORTED_REMOVAL_PENDING_MESSAGE=[exported(removal pending)] -CONSOLE_EXPORTED_MESSAGE=[exported] -CONSOLE_TOTAL_MEMORY_MESSAGE=Total memory: -CONSOLE_FREE_MEMORY_BEFORE_GARBAGE_COLLECTION_MESSAGE=Free memory before GC: -CONSOLE_FREE_MEMORY_AFTER_GARBAGE_COLLECTION_MESSAGE=Free memory after GC: -CONSOLE_MEMORY_GAINED_WITH_GARBAGE_COLLECTION_MESSAGE=Memory gained with GC: -CONSOLE_FRAMEWORK_LAUNCHED_PLEASE_SHUTDOWN_MESSAGE=Framework is launched. Please shutdown framework first. -CONSOLE_INVALID_BUNDLE_SPECIFICATION_ERROR=Invalid bundle specification. -CONSOLE_CAN_NOT_REFRESH_NO_PACKAGE_ADMIN_ERROR=Cannot refresh [PackageAdmin service is not registered] -CONSOLE_CAN_NOT_USE_STARTLEVEL_NO_STARTLEVEL_SVC_ERROR=Cannot use Startlevel commands [Startlevel service is not registered] -CONSOLE_NO_COMMAND_SPECIFIED_ERROR=No command specified -CONSOLE_EXECUTED_RESULT_CODE_MESSAGE=Executed ({0}); result code = {1} -CONSOLE_STARTED_IN_MESSAGE=Started({0}) in {1} -CONSOLE_BUNDLE_HEADERS_TITLE=Bundle headers: -CONSOLE_SYSTEM_PROPERTIES_TITLE=System properties: -CONSOLE_NO_PARAMETERS_SPECIFIED_TITLE=No parameters specified: -CONSOLE_SETTING_PROPERTIES_TITLE=Setting Properties: -CONSOLE_STATE_BUNDLE_TITLE=State Bundle -CONSOLE_THREADGROUP_TITLE=ThreadGroupType: Name: ParentGroup: MaxP: Threads: -CONSOLE_THREADTYPE_TITLE=ThreadType: Name: ThreadGroup: Prio: -CONSOLE_CANNOT_FIND_BUNDLE_ERROR=Cannot find bundle {0} -CONSOLE_LISTENING_ON_PORT=Listening on port {0} ... -STARTLEVEL_HELP_HEADING=Controlling Start Level -STARTLEVEL_HELP_SL=display the start level for the specified bundle, or for the framework if no bundle specified -STARTLEVEL_HELP_SETFWSL=set the framework start level -STARTLEVEL_HELP_SETBSL=set the start level for the bundle(s) -STARTLEVEL_HELP_SETIBSL=set the initial bundle start level -STARTLEVEL_FRAMEWORK_ACTIVE_STARTLEVEL=Framework Active Start Level = {0} -STARTLEVEL_NO_STARTLEVEL_GIVEN=No Start Level given. -STARTLEVEL_NO_STARTLEVEL_OR_BUNDLE_GIVEN=No Bundle or Start Level given. -STARTLEVEL_INITIAL_BUNDLE_STARTLEVEL=Initial Bundle Start Level = {0} -STARTLEVEL_BUNDLE_STARTLEVEL=Bundle {0} Start Level = {1} -STARTLEVEL_ARGUMENT_DESCRIPTION = <start level> -STARTLEVEL_IDLOCATION_ARGUMENT_DESCRIPTION = <start level> (<id>|<location>) -STARTLEVEL_POSITIVE_INTEGER=Startlevel must be a positive integer. -CONSOLE_NAMED_CLASS_SPACE_MESSAGE=Named class space -CONSOLE_PROVIDED_MESSAGE=[provided] -CONSOLE_HOST_MESSAGE=Host bundles -CONSOLE_NO_HOST_MESSAGE=No host bundles -CONSOLE_FRAGMENT_MESSAGE=Fragment bundles -CONSOLE_NO_FRAGMENT_MESSAGE=No fragment bundles -CONSOLE_NO_NAMED_CLASS_SPACES_MESSAGE=No named class spaces -CONSOLE_REQUIRED_BUNDLES_MESSAGE=Required bundles -CONSOLE_NO_REQUIRED_BUNDLES_MESSAGE=No required bundles -CONSOLE_REQUIRES_MESSAGE=[requires] -CONSOLE_HELP_PROFILE_HEADING=Controlling the Profiling -CONSOLE_HELP_PROFILELOG_DESCRIPTION=Display & flush the profile log messages -CONSOLE_HELP_HELP_COMMAND_DESCRIPTION=Display help for the specified command -CONSOLE_PROPS_COMMAND_DESCRIPTION=Display system properties -CONSOLE_THREADS_COMMAND_DESCRIPTION=Display threads and thread groups diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java deleted file mode 100644 index ac72bc22c..000000000 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2011 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.osgi.framework.internal.core; - -import org.eclipse.osgi.util.NLS; - -public class ConsoleMsg extends NLS { - private static final String BUNDLE_NAME = "org.eclipse.osgi.framework.internal.core.ConsoleMessages"; //$NON-NLS-1$ - - public static String CONSOLE_LINES_TO_SCROLL_NEGATIVE_ERROR; - public static String CONSOLE_NESTED_EXCEPTION; - public static String CONSOLE_ERROR_READING_RESOURCE; - public static String CONSOLE_RESOURCE_NOT_IN_BUNDLE; - public static String CONSOLE_MORE; - public static String CONSOLE_HELP_CONTROLLING_CONSOLE_HEADING; - public static String CONSOLE_HELP_MORE; - public static String CONSOLE_HELP_DISCONNECT; - public static String CONSOLE_CONFIRM_MORE; - public static String CONSOLE_CONFIRM_DISCONNECT; - public static String CONSOLE_CONFIRM; - public static String CONSOLE_CONFIRM_VALUES; - public static String CONSOLE_Y; - public static String CONSOLE_N; - public static String CONSOLE_PROMPT_DEFAULT; - public static String CONSOLE_INVALID_INPUT; - public static String CONSOLE_TOO_MUCH_INVALID_INPUT; - public static String CONSOLE_MORE_ENTER_LINES; - - public static String CONSOLE_LISTENING_ON_PORT; - public static String CONSOLE_PROMPT; - - public static String CONSOLE_HELP_CONTROLLING_FRAMEWORK_HEADER; - public static String CONSOLE_HELP_LAUNCH_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_SHUTDOWN_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_CLOSE_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_EXIT_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_GC_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_INIT_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_CONTROLLING_BUNDLES_HEADER; - public static String CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_START_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_STOP_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_DISPLAYING_STATUS_HEADER; - public static String CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_SS_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_FILTER_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_BUNDLES_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_EXTRAS_HEADER; - public static String CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_GETPROP_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_GETPROP_ARGUMENT_DESCRIPTION; - public static String CONSOLE_HELP_EXEC_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_FORK_COMMAND_DESCRIPTION; - public static String STARTLEVEL_HELP_HEADING; - public static String CONSOLE_HELP_OPTIONAL_IDLOCATION_ARGUMENT_DESCRIPTION; - public static String STARTLEVEL_HELP_SL; - public static String STARTLEVEL_ARGUMENT_DESCRIPTION; - public static String STARTLEVEL_HELP_SETFWSL; - public static String STARTLEVEL_IDLOCATION_ARGUMENT_DESCRIPTION; - public static String STARTLEVEL_HELP_SETBSL; - public static String STARTLEVEL_HELP_SETIBSL; - public static String CONSOLE_HELP_PROFILE_HEADING; - public static String CONSOLE_HELP_PROFILELOG_DESCRIPTION; - public static String CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION; - public static String CONSOLE_HELP_HELP_COMMAND_DESCRIPTION; - - public static String CONSOLE_NO_BUNDLE_SPECIFIED_ERROR; - public static String CONSOLE_NOTHING_TO_INSTALL_ERROR; - public static String CONSOLE_BUNDLE_ID_MESSAGE; - public static String CONSOLE_NO_INSTALLED_BUNDLES_ERROR; - public static String CONSOLE_REGISTERED_SERVICES_MESSAGE; - public static String CONSOLE_FRAMEWORK_IS_LAUNCHED_MESSAGE; - public static String CONSOLE_FRAMEWORK_IS_SHUTDOWN_MESSAGE; - public static String CONSOLE_ID; - public static String CONSOLE_BUNDLE_LOCATION_MESSAGE; - public static String CONSOLE_STATE_BUNDLE_FILE_NAME_HEADER; - public static String CONSOLE_BUNDLES_USING_SERVICE_MESSAGE; - public static String CONSOLE_NO_REGISTERED_SERVICES_MESSAGE; - public static String CONSOLE_NO_BUNDLES_USING_SERVICE_MESSAGE; - public static String CONSOLE_REGISTERED_BY_BUNDLE_MESSAGE; - public static String CONSOLE_IMPORTS_MESSAGE; - public static String CONSOLE_STALE_MESSAGE; - public static String CONSOLE_NO_EXPORTED_PACKAGES_NO_PACKAGE_ADMIN_MESSAGE; - public static String CONSOLE_NO_EXPORTED_PACKAGES_MESSAGE; - public static String CONSOLE_REMOVAL_PENDING_MESSAGE; - public static String CONSOLE_SERVICES_IN_USE_MESSAGE; - public static String CONSOLE_NO_SERVICES_IN_USE_MESSAGE; - public static String CONSOLE_ID_MESSAGE; - public static String CONSOLE_STATUS_MESSAGE; - public static String CONSOLE_DATA_ROOT_MESSAGE; - - public static String CONSOLE_IMPORTED_PACKAGES_MESSAGE; - public static String CONSOLE_NO_IMPORTED_PACKAGES_MESSAGE; - public static String CONSOLE_HOST_MESSAGE; - public static String CONSOLE_EXPORTED_PACKAGES_MESSAGE; - public static String CONSOLE_EXPORTED_REMOVAL_PENDING_MESSAGE; - public static String CONSOLE_EXPORTED_MESSAGE; - public static String CONSOLE_NO_HOST_MESSAGE; - public static String CONSOLE_FRAGMENT_MESSAGE; - public static String CONSOLE_NO_FRAGMENT_MESSAGE; - public static String CONSOLE_NO_NAMED_CLASS_SPACES_MESSAGE; - public static String CONSOLE_NAMED_CLASS_SPACE_MESSAGE; - public static String CONSOLE_PROVIDED_MESSAGE; - public static String CONSOLE_REQUIRED_BUNDLES_MESSAGE; - public static String CONSOLE_NO_REQUIRED_BUNDLES_MESSAGE; - public static String CONSOLE_TOTAL_MEMORY_MESSAGE; - public static String CONSOLE_FREE_MEMORY_BEFORE_GARBAGE_COLLECTION_MESSAGE; - public static String CONSOLE_FREE_MEMORY_AFTER_GARBAGE_COLLECTION_MESSAGE; - public static String CONSOLE_MEMORY_GAINED_WITH_GARBAGE_COLLECTION_MESSAGE; - public static String CONSOLE_FRAMEWORK_LAUNCHED_PLEASE_SHUTDOWN_MESSAGE; - public static String CONSOLE_INVALID_BUNDLE_SPECIFICATION_ERROR; - public static String CONSOLE_CAN_NOT_REFRESH_NO_PACKAGE_ADMIN_ERROR; - public static String CONSOLE_NO_COMMAND_SPECIFIED_ERROR; - public static String CONSOLE_STARTED_IN_MESSAGE; - public static String CONSOLE_EXECUTED_RESULT_CODE_MESSAGE; - public static String CONSOLE_BUNDLE_HEADERS_TITLE; - public static String CONSOLE_SYSTEM_PROPERTIES_TITLE; - public static String CONSOLE_NO_PARAMETERS_SPECIFIED_TITLE; - public static String CONSOLE_SETTING_PROPERTIES_TITLE; - public static String CONSOLE_STATE_BUNDLE_TITLE; - public static String CONSOLE_THREADGROUP_TITLE; - public static String CONSOLE_THREADTYPE_TITLE; - public static String CONSOLE_REQUIRES_MESSAGE; - public static String CONSOLE_CAN_NOT_USE_STARTLEVEL_NO_STARTLEVEL_SVC_ERROR; - public static String CONSOLE_CANNOT_FIND_BUNDLE_ERROR; - public static String CONSOLE_PROPS_COMMAND_DESCRIPTION; - public static String CONSOLE_THREADS_COMMAND_DESCRIPTION; - - public static String STARTLEVEL_FRAMEWORK_ACTIVE_STARTLEVEL; - public static String STARTLEVEL_BUNDLE_STARTLEVEL; - public static String STARTLEVEL_NO_STARTLEVEL_GIVEN; - public static String STARTLEVEL_NO_STARTLEVEL_OR_BUNDLE_GIVEN; - public static String STARTLEVEL_INITIAL_BUNDLE_STARTLEVEL; - public static String STARTLEVEL_POSITIVE_INTEGER; - - static { - // initialize resource bundles - NLS.initializeMessages(BUNDLE_NAME, ConsoleMsg.class); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java deleted file mode 100644 index c23e1feac..000000000 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java +++ /dev/null @@ -1,599 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2011 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.osgi.framework.internal.core; - -import java.io.*; -import java.lang.reflect.*; -import java.net.URL; -import java.util.*; -import org.eclipse.osgi.framework.console.CommandInterpreter; -import org.eclipse.osgi.framework.console.CommandProvider; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.Bundle; - -/** - * This class knows how to parse and execute the command line arguments to the FrameworkConsole. - * It attempts to pass the command to each registered CommandProvider until it finds one - * that knows what to do with it. - * - * FrameworkCommandInterpreter provides support for the "More" command which allows the operator to configure - * the number of lines to display before being prompted to continue. - * - * FrameworkCommandInterpreter provides several print methods which handle the "More" command. - */ -public class FrameworkCommandInterpreter implements CommandInterpreter { - private static final String WS_DELIM = " \t\n\r\f"; //$NON-NLS-1$ - - /** The command line in StringTokenizer form */ - private StringTokenizer tok; - /** The active CommandProviders */ - private CommandProvider[] commandProviders; - /** The FrameworkConsole */ - private FrameworkConsole con; - /** The stream to send output to */ - private PrintWriter out; - - /** Strings used to format other strings */ - private String tab = "\t"; //$NON-NLS-1$ - private String newline = "\r\n"; //$NON-NLS-1$ - private boolean firstCommand = true; - - /** - * The maximum number of lines to print without user prompt. - * 0 means no user prompt is required, the window is scrollable. - */ - protected static int maxLineCount; - - /** The number of lines printed without user prompt.*/ - protected int currentLineCount; - - /** - * The constructor. It turns the cmdline string into a StringTokenizer and remembers - * the input parms. - */ - public FrameworkCommandInterpreter(String cmdline, CommandProvider[] commandProviders, FrameworkConsole con) { - tok = new StringTokenizer(cmdline); - this.commandProviders = commandProviders; - this.con = con; - this.out = con.getWriter(); - } - - /** - Get the next argument in the input. - - E.g. if the commandline is hello world, the _hello method - will get "world" as the first argument. - - @return A string containing the next argument on the command line - */ - public String nextArgument() { - if (tok == null || !tok.hasMoreElements()) - return null; - return consumeQuotes(tok.nextToken()); - } - - private String consumeQuotes(String arg) { - if (!(arg.startsWith("\"") || arg.startsWith("'"))) //$NON-NLS-1$//$NON-NLS-2$ - return arg; - String quote = arg.substring(0, 1); - if (arg.endsWith(quote)) { - if (arg.length() >= 2) - // strip the beginning and ending quotes - return arg.substring(1, arg.length() - 1); - // single quote case; return empty string - return ""; //$NON-NLS-1$ - } - - try { - arg = arg.substring(1) + tok.nextToken(quote); - } catch (NoSuchElementException e) { - // should not happen - printStackTrace(e); - return ""; //$NON-NLS-1$ - } - try { - // skip to next whitespace separated token - tok.nextToken(WS_DELIM); - } catch (NoSuchElementException e) { - // this is ok we are at the end - } - return arg; - } - - /** - Execute a command line as if it came from the end user. - - Searches the list of command providers using introspection until - it finds one that contains a matching method. It searches for a method - with the name "_cmd" where cmd is the command to execute. For example, - for a command of "launch" execute searches for a method called "_launch". - - @param cmd The name of the command to execute. - @return The object returned by the method executed. - */ - public Object execute(String cmd) { - if (!firstCommand) - return innerExecute(cmd); - firstCommand = false; - resetLineCount(); - Object retval = null; - // handle "more" command here - if (cmd.equalsIgnoreCase("more")) { //$NON-NLS-1$ - try { - _more(); - } catch (Exception e) { - printStackTrace(e); - } - return retval; - } - // handle "disconnect" command here - if (cmd.equalsIgnoreCase("disconnect")) { //$NON-NLS-1$ - try { - _disconnect(); - } catch (Exception e) { - printStackTrace(e); - } - return retval; - } - - // handle "help" command here - if (cmd.equalsIgnoreCase("help") && !tok.hasMoreElements()) { //$NON-NLS-1$ - displayAllHelp(); - return retval; - } - - Class<?>[] parameterTypes = new Class[] {CommandInterpreter.class}; - Object[] parameters = new Object[] {this}; - boolean executed = false; - int size = commandProviders.length; - - if (cmd.equalsIgnoreCase("help") && tok.hasMoreElements()) { //$NON-NLS-1$ - String commandName = nextArgument(); - - String builtinHelp = getHelp(commandName); - if (builtinHelp != null) { - print(builtinHelp); - return builtinHelp; - } - for (int i = 0; i < size; i++) { - // re-create the StringTokenizer for the call of each CommandProvider - there may be help commands in more than one CommandProvider - tok = new StringTokenizer(commandName); - boolean isException = false; - Object target = commandProviders[i]; - Method method = null; - try { - method = target.getClass().getMethod("_" + cmd, parameterTypes); //$NON-NLS-1$ - retval = method.invoke(target, parameters); - } catch (NoSuchMethodException e) { - // keep going - maybe another command provider will provide help <command> method - isException = true; - } catch (InvocationTargetException e) { - // keep going - maybe another command provider will provide help <command> method - printStackTrace(e.getTargetException()); - isException = true; - } catch (Exception ee) { - printStackTrace(ee); - } - - if (retval != null) { - if (retval instanceof Boolean) { - executed = executed || ((Boolean) retval).booleanValue(); - } else if (retval instanceof String) { - print(retval); - return retval; - } else { - // this could happen if a CommandProvider provides an arbitrary help command; - // since there is no way to determine if this CommandProvider provides the search command, - // we should continue with the other CommandProvider - executed = true; - } - } else { - // if the return value is null, but there was no exception assume that a help method was called - executed = executed || !isException; - } - } - } else { - for (int i = 0; !executed && (i < size); i++) { - try { - Object target = commandProviders[i]; - Method method = target.getClass().getMethod("_" + cmd, parameterTypes); //$NON-NLS-1$ - retval = method.invoke(target, parameters); - executed = true; // stop after the command has been found - } catch (NoSuchMethodException ite) { - // keep going - maybe another command provider will be able to execute this command - } catch (InvocationTargetException ite) { - executed = true; // don't want to keep trying - we found the method but got an error - printStackTrace(ite.getTargetException()); - } catch (Exception ee) { - executed = true; // don't want to keep trying - we got an error we don't understand - printStackTrace(ee); - } - } - } - - // if no command was found to execute, display help for all registered command providers - if (!executed) { - displayAllHelp(); - } - return retval; - } - - private void displayAllHelp() { - int size = commandProviders.length; - for (int i = 0; i < size; i++) { - try { - CommandProvider commandProvider = commandProviders[i]; - out.print(commandProvider.getHelp()); - out.flush(); - } catch (Exception ee) { - printStackTrace(ee); - } - } - // call help for the more command provided by this class - out.print(getHelp(null)); - out.flush(); - } - - private Object innerExecute(String cmd) { - if (cmd != null && cmd.length() > 0) { - CommandInterpreter intcp = new FrameworkCommandInterpreter(cmd, commandProviders, con); - String command = intcp.nextArgument(); - if (command != null) - return intcp.execute(command); - } - return null; - } - - /** - * Answers the number of lines output to the console - * window should scroll without user interaction. - * - * @return The number of lines to scroll. - */ - private int getMaximumLinesToScroll() { - return maxLineCount; - } - - /** - * Sets the number of lines output to the console - * window will scroll without user interaction. - * <p> - * Note that this number does not include the line - * for the 'more' prompt itself. - * <p> - * If the number of lines is 0 then no 'more' prompt - * is disabled. - * - * @param lines the number of lines to scroll - */ - private void setMaximumLinesToScroll(int lines) { - if (lines < 0) { - throw new IllegalArgumentException(ConsoleMsg.CONSOLE_LINES_TO_SCROLL_NEGATIVE_ERROR); - } - - maxLineCount = lines; - } - - /** - * Resets the line counter for the 'more' prompt. - */ - private void resetLineCount() { - currentLineCount = 0; - } - - /** - * Prints a string to the output medium (appended with newline character). - * <p> - * This method does not increment the line counter for the 'more' prompt. - * - * @param o the string to be printed - */ - private void printline(Object o) { - print(o + newline); - } - - /** - * Prints an object to the outputstream - * - * @param o the object to be printed - */ - public void print(Object o) { - synchronized (out) { - check4More(); - out.print(o); - out.flush(); - } - } - - /** - * Prints a empty line to the outputstream - */ - public void println() { - println(""); //$NON-NLS-1$ - } - - /** - * Print a stack trace including nested exceptions. - * @param t The offending exception - */ - public void printStackTrace(Throwable t) { - t.printStackTrace(out); - - Method[] methods = t.getClass().getMethods(); - - int size = methods.length; - Class<Throwable> throwable = Throwable.class; - - for (int i = 0; i < size; i++) { - Method method = methods[i]; - - if (Modifier.isPublic(method.getModifiers()) && method.getName().startsWith("get") && throwable.isAssignableFrom(method.getReturnType()) && (method.getParameterTypes().length == 0)) { //$NON-NLS-1$ - try { - Throwable nested = (Throwable) method.invoke(t, (Object[]) null); - - if ((nested != null) && (nested != t)) { - out.println(ConsoleMsg.CONSOLE_NESTED_EXCEPTION); - printStackTrace(nested); - } - } catch (IllegalAccessException e) { - // nothing - } catch (InvocationTargetException e) { - // nothing - } - } - } - } - - /** - * Prints an object to the output medium (appended with newline character). - * <p> - * If running on the target environment, the user is prompted with '--more' - * if more than the configured number of lines have been printed without user prompt. - * This enables the user of the program to have control over scrolling. - * <p> - * For this to work properly you should not embed "\n" etc. into the string. - * - * @param o the object to be printed - */ - public void println(Object o) { - if (o == null) { - return; - } - synchronized (out) { - check4More(); - printline(o); - currentLineCount++; - currentLineCount += o.toString().length() / 80; - } - } - - /** - * Prints the given dictionary sorted by keys. - * - * @param dic the dictionary to print - * @param title the header to print above the key/value pairs - */ - public void printDictionary(Dictionary<?, ?> dic, String title) { - if (dic == null) - return; - - int count = dic.size(); - String[] keys = new String[count]; - Enumeration<?> keysEnum = dic.keys(); - int i = 0; - while (keysEnum.hasMoreElements()) { - keys[i++] = (String) keysEnum.nextElement(); - } - Util.sortByString(keys); - - if (title != null) { - println(title); - } - for (i = 0; i < count; i++) { - println(" " + keys[i] + " = " + dic.get(keys[i])); //$NON-NLS-1$//$NON-NLS-2$ - } - println(); - } - - /** - * Prints the given bundle resource if it exists - * - * @param bundle the bundle containing the resource - * @param resource the resource to print - */ - public void printBundleResource(Bundle bundle, String resource) { - URL entry = null; - entry = bundle.getEntry(resource); - if (entry != null) { - try { - println(resource); - InputStream in = entry.openStream(); - byte[] buffer = new byte[1024]; - int read = 0; - try { - while ((read = in.read(buffer)) != -1) - print(new String(buffer, 0, read)); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // nothing - } - } - } - } catch (Exception e) { - System.err.println(NLS.bind(ConsoleMsg.CONSOLE_ERROR_READING_RESOURCE, resource)); - } - } else { - println(NLS.bind(ConsoleMsg.CONSOLE_RESOURCE_NOT_IN_BUNDLE, resource, bundle.toString())); - } - } - - /** - * Displays the more... prompt if the max line count has been reached - * and waits for the operator to hit enter. - * - */ - private void check4More() { - int max = getMaximumLinesToScroll(); - if (max > 0) { - if (currentLineCount >= max) { - out.print(ConsoleMsg.CONSOLE_MORE); - out.flush(); - con.getInput(); // wait for user entry - resetLineCount(); //Reset the line counter for the 'more' prompt - } - } - } - - /** - Answer a string (may be as many lines as you like) with help - texts that explain the command. - */ - public String getHelp(String commandName) { - boolean all = commandName == null; - StringBuffer help = new StringBuffer(256); - if (all) { - help.append(ConsoleMsg.CONSOLE_HELP_CONTROLLING_CONSOLE_HEADING); - help.append(newline); - } - if (all || "more".equals(commandName)) { //$NON-NLS-1$ - help.append(tab); - help.append("more - "); //$NON-NLS-1$ - help.append(ConsoleMsg.CONSOLE_HELP_MORE); - help.append(newline); - } - if (all || "disconnect".equals(commandName)) { //$NON-NLS-1$ - help.append(tab); - help.append("disconnect - "); //$NON-NLS-1$ - help.append(ConsoleMsg.CONSOLE_HELP_DISCONNECT); - help.append(newline); - } - if (all || "help".equals(commandName)) { //$NON-NLS-1$ - help.append(tab); - help.append("help <commmand> - "); //$NON-NLS-1$ - help.append(ConsoleMsg.CONSOLE_HELP_HELP_COMMAND_DESCRIPTION); - help.append(newline); - } - return help.length() == 0 ? null : help.toString(); - } - - /** - * Toggles the use of the more prompt for displayed output. - * - */ - public void _more() throws Exception { - if (confirm(ConsoleMsg.CONSOLE_CONFIRM_MORE, true)) { - int lines = prompt(newline + ConsoleMsg.CONSOLE_MORE_ENTER_LINES, 24); - setMaximumLinesToScroll(lines); - } else { - setMaximumLinesToScroll(0); - } - } - - private void _disconnect() throws Exception { - if (confirm(ConsoleMsg.CONSOLE_CONFIRM_DISCONNECT, true)) { - con.shutdown(); - } - } - - /** - * Prompts the user for confirmation. - * - * @param string the message to present to the user to confirm - * @param defaultAnswer the default result - * - * @return <code>true</code> if the user confirms; <code>false</code> otherwise. - */ - protected boolean confirm(String string, boolean defaultAnswer) { - synchronized (out) { - if (string.length() > 0) { - print(string); - } else { - print(ConsoleMsg.CONSOLE_CONFIRM); - } - print(" (" + ConsoleMsg.CONSOLE_CONFIRM_VALUES); //$NON-NLS-1$ - if (defaultAnswer) { - print(ConsoleMsg.CONSOLE_Y + ") "); //$NON-NLS-1$ - } else { - print(ConsoleMsg.CONSOLE_N + ") "); //$NON-NLS-1$ - } - } - String input = con.getInput(); - resetLineCount(); - if (input.length() == 0) { - return defaultAnswer; - } - return input.toLowerCase().charAt(0) == ConsoleMsg.CONSOLE_Y.charAt(0); - } - - /** - * Prompts the user for input from the input medium providing a default value. - * - * @param string the message to present to the user - * @param defaultAnswer the string to use as a default return value - * - * @return The user provided string or the defaultAnswer, - * if user provided string was empty. - */ - protected String prompt(String string, String defaultAnswer) { - if (string.length() > 0) { - if (defaultAnswer.length() > 0) { - StringBuffer buf = new StringBuffer(256); - buf.append(string); - buf.append(" "); //$NON-NLS-1$ - buf.append(ConsoleMsg.CONSOLE_PROMPT_DEFAULT); - buf.append("="); //$NON-NLS-1$ - buf.append(defaultAnswer); - buf.append(") "); //$NON-NLS-1$ - print(buf.toString()); - } else { - print(string); - } - } - String input = con.getInput(); - resetLineCount(); - if (input.length() > 0) { - return input; - } - return defaultAnswer; - } - - /** - * Prompts the user for input of a positive integer. - * - * @param string the message to present to the user - * @param defaultAnswer the integer to use as a default return value - * - * @return The user provided integer or the defaultAnswer, - * if user provided an empty input. - */ - protected int prompt(String string, int defaultAnswer) { - Integer i = new Integer(defaultAnswer); - int answer; - for (int j = 0; j < 3; j++) { - String s = prompt(string, i.toString()); - try { - answer = Integer.parseInt(s); - if (answer >= 0) { - return answer; - } - } catch (NumberFormatException e) { - // nothing - } - println(ConsoleMsg.CONSOLE_INVALID_INPUT); - } - println(ConsoleMsg.CONSOLE_TOO_MUCH_INVALID_INPUT); - return defaultAnswer; - } -} diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java deleted file mode 100644 index 20036db97..000000000 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java +++ /dev/null @@ -1,1997 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2011 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.osgi.framework.internal.core; - -import java.io.*; -import java.lang.reflect.Field; -import java.net.URL; -import java.security.ProtectionDomain; -import java.util.*; -import java.util.Map.Entry; -import org.eclipse.osgi.framework.console.CommandInterpreter; -import org.eclipse.osgi.framework.console.CommandProvider; -import org.eclipse.osgi.internal.permadmin.SecurityAdmin; -import org.eclipse.osgi.internal.profile.Profile; -import org.eclipse.osgi.service.resolver.*; -import org.eclipse.osgi.util.NLS; -import org.osgi.framework.*; -import org.osgi.service.condpermadmin.ConditionalPermissionInfo; -import org.osgi.service.condpermadmin.ConditionalPermissionUpdate; -import org.osgi.service.packageadmin.PackageAdmin; -import org.osgi.service.packageadmin.RequiredBundle; -import org.osgi.service.startlevel.StartLevel; - -/** - * This class provides methods to execute commands from the command line. It registers - * itself as a CommandProvider so it can be invoked by a CommandInterpreter. The - * FrameworkCommandProvider registers itself with the highest ranking (Integer.MAXVALUE) so it will always be - * called first. Other CommandProviders should register with lower rankings. - * - * The commands provided by this class are: - ---Controlling the OSGi framework--- - close - shutdown and exit - exit - exit immediately (System.exit) - gc - perform a garbage collection - init - uninstall all bundles - launch - start the Service Management Framework - setprop <key>=<value> - set the OSGI property - shutdown - shutdown the Service Management Framework - ---Controlliing Bundles--- - install <url> {s[tart]} - install and optionally start bundle from the given URL - refresh (<id>|<location>) - refresh the packages of the specified bundles - start (<id>|<location>) - start the specified bundle(s) - stop (<id>|<location>) - stop the specified bundle(s) - uninstall (<id>|<location>) - uninstall the specified bundle(s) - update (<id>|<location>|<*>) - update the specified bundle(s) - ---Displaying Status--- - bundle (<id>|<location>) - display details for the specified bundle(s) - bundles - display details for all installed bundles - headers (<id>|<location>) - print bundle headers - packages {<pkgname>|<id>|<location>} - display imported/exported package details - props - display System properties - services {filter} - display registered service details. Examples for [filter]: (objectClass=com.xyz.Person); (&(objectClass=com.xyz.Person)(sn=Jensen)); passing only com.xyz.Person is a shortcut for (objectClass=com.xyz.Person). The filter syntax specification is available at http://www.ietf.org/rfc/rfc1960.txt - ss - display installed bundles (short status) - status - display installed bundles and registered services - threads - display threads and thread groups - ---Extras--- - exec <command> - execute a command in a separate process and wait - fork <command> - execute a command in a separate process - getprop <name> - Displays the system properties with the given name, or all of them. - ---Controlling StartLevel--- - sl {(<id>|<location>)} - display the start level for the specified bundle, or for the framework if no bundle specified - setfwsl <start level> - set the framework start level - setbsl <start level> (<id>|<location>) - set the start level for the bundle(s) - setibsl <start level> - set the initial bundle start level - ---Getting Help--- - help <command> - Display help for the specified command - - * - * There is a method for each command which is named '_'+method. The methods are - * invoked by a CommandInterpreter's execute method. - */ -public class FrameworkCommandProvider implements CommandProvider, SynchronousBundleListener { - - /** An instance of the OSGi framework */ - private final Framework framework; - /** The system bundle context */ - private final BundleContext context; - /** The start level implementation */ - private final StartLevelManager slImpl; - private final SecurityAdmin securityAdmin; - private ServiceRegistration<?> providerReg; - - /** Strings used to format other strings */ - private final static String tab = "\t"; //$NON-NLS-1$ - private final static String newline = "\r\n"; //$NON-NLS-1$ - - /** this list contains the bundles known to be lazily awaiting activation */ - private final List<Bundle> lazyActivation = new ArrayList<Bundle>(); - - /** this map contains the mapping between the command name and its description and eventually arguments.*/ - private Map<String, String[]> commandsHelp = null; - /** this map contains the mapping between the command groups and the names of the commands in each group*/ - private Map<String, String[]> commandGroups = null; - - /** - * Constructor. - * - * initialize must be called after creating this object. - * - * @param framework The current instance of the framework - */ - public FrameworkCommandProvider(Framework framework) { - this.framework = framework; - context = framework.systemBundle.getContext(); - slImpl = framework.startLevelManager; - securityAdmin = framework.securityAdmin; - } - - /** - * Starts this CommandProvider. - * - * Registers this object as a CommandProvider with the highest ranking possible. - * Adds this object as a SynchronousBundleListener. - */ - void start() { - Dictionary<String, Object> props = new Hashtable<String, Object>(); - props.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE)); - providerReg = context.registerService(CommandProvider.class.getName(), this, props); - context.addBundleListener(this); - } - - void stop() { - context.removeBundleListener(this); - if (providerReg != null) - providerReg.unregister(); - } - - /** - Answer a string (may be as many lines as you like) with help - texts that explain the command. This getHelp() method uses the - ConsoleMsg class to obtain the correct NLS data to display to the user. - - @return The help string - */ - public String getHelp() { - return getHelp(null); - } - - /* This method either returns the help message for a particular command, - * or returns the help messages for all commands (if commandName is not specified)*/ - private String getHelp(String commandName) { - StringBuffer help = new StringBuffer(1024); - - if (commandsHelp == null) { - initializeCommandsHelp(); - } - - if (commandGroups == null) { - initializeCommandGroups(); - } - - if (commandName != null) { - if (commandsHelp.containsKey(commandName)) { - addCommand(commandName, commandsHelp.get(commandName), help); - } - return help.toString(); - } - - for (Entry<String, String[]> groupEntry : commandGroups.entrySet()) { - addHeader(groupEntry.getKey(), help); - for (String command : groupEntry.getValue()) { - addCommand(command, commandsHelp.get(command), help); - } - } - - return help.toString(); - } - - private void initializeCommandsHelp() { - commandsHelp = new HashMap<String, String[]>(); - // add help for commands for controlling the framework - commandsHelp.put("launch", new String[] {ConsoleMsg.CONSOLE_HELP_LAUNCH_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("shutdown", new String[] {ConsoleMsg.CONSOLE_HELP_SHUTDOWN_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("close", new String[] {ConsoleMsg.CONSOLE_HELP_CLOSE_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("exit", new String[] {ConsoleMsg.CONSOLE_HELP_EXIT_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("init", new String[] {ConsoleMsg.CONSOLE_HELP_INIT_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("setprop", new String[] {ConsoleMsg.CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("setp", new String[] {ConsoleMsg.CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - - // add help for commands for controlling bundles - commandsHelp.put("install", new String[] {ConsoleMsg.CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("i", new String[] {ConsoleMsg.CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("uninstall", new String[] {ConsoleMsg.CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("un", new String[] {ConsoleMsg.CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("start", new String[] {ConsoleMsg.CONSOLE_HELP_START_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("sta", new String[] {ConsoleMsg.CONSOLE_HELP_START_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("stop", new String[] {ConsoleMsg.CONSOLE_HELP_STOP_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("sto", new String[] {ConsoleMsg.CONSOLE_HELP_STOP_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("refresh", new String[] {ConsoleMsg.CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("r", new String[] {ConsoleMsg.CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("update", new String[] {ConsoleMsg.CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("up", new String[] {ConsoleMsg.CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - - // add help for commands for displaying status - commandsHelp.put("status", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("s", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("ss", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("services", new String[] {ConsoleMsg.CONSOLE_HELP_FILTER_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("packages", new String[] {ConsoleMsg.CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("p", new String[] {ConsoleMsg.CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("bundles", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLES_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("bundle", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("b", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("headers", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("h", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - - // add help for extra commands - commandsHelp.put("exec", new String[] {ConsoleMsg.CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_EXEC_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("fork", new String[] {ConsoleMsg.CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_FORK_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("gc", new String[] {ConsoleMsg.CONSOLE_HELP_GC_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("getprop", new String[] {ConsoleMsg.CONSOLE_HELP_GETPROP_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_GETPROP_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("props", new String[] {ConsoleMsg.CONSOLE_PROPS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("pr", new String[] {ConsoleMsg.CONSOLE_PROPS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("threads", new String[] {ConsoleMsg.CONSOLE_THREADS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - commandsHelp.put("t", new String[] {ConsoleMsg.CONSOLE_THREADS_COMMAND_DESCRIPTION}); //$NON-NLS-1$ - - // add help for startlevel commands - commandsHelp.put("sl", new String[] {ConsoleMsg.CONSOLE_HELP_OPTIONAL_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SL}); //$NON-NLS-1$ - commandsHelp.put("setfwsl", new String[] {ConsoleMsg.STARTLEVEL_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETFWSL}); //$NON-NLS-1$ - commandsHelp.put("setbsl", new String[] {ConsoleMsg.STARTLEVEL_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETBSL}); //$NON-NLS-1$ - commandsHelp.put("setibsl", new String[] {ConsoleMsg.STARTLEVEL_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETIBSL}); //$NON-NLS-1$ - - // add help for profilelog command - commandsHelp.put("profilelog", new String[] {ConsoleMsg.CONSOLE_HELP_PROFILELOG_DESCRIPTION}); //$NON-NLS-1$ - } - - private void initializeCommandGroups() { - commandGroups = new LinkedHashMap<String, String[]>(); - commandGroups.put(ConsoleMsg.CONSOLE_HELP_CONTROLLING_FRAMEWORK_HEADER, new String[] {"launch", "shutdown", "close", "exit", "init", "setprop"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ - commandGroups.put(ConsoleMsg.CONSOLE_HELP_CONTROLLING_BUNDLES_HEADER, new String[] {"install", "uninstall", "start", "stop", "refresh", "update"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ - commandGroups.put(ConsoleMsg.CONSOLE_HELP_DISPLAYING_STATUS_HEADER, new String[] {"status", "ss", "services", "packages", "bundles", "bundle", "headers"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ - commandGroups.put(ConsoleMsg.CONSOLE_HELP_EXTRAS_HEADER, new String[] {"exec", "fork", "gc", "getprop", "props", "threads"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ - commandGroups.put(ConsoleMsg.STARTLEVEL_HELP_HEADING, new String[] {"sl", "setfwsl", "setbsl", "setibsl"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - commandGroups.put(ConsoleMsg.CONSOLE_HELP_PROFILE_HEADING, new String[] {"profilelog"}); //$NON-NLS-1$ - } - - /** Private helper method for getHelp. Formats the help headers. */ - private void addHeader(String header, StringBuffer help) { - help.append("---"); //$NON-NLS-1$ - help.append(header); - help.append("---"); //$NON-NLS-1$ - help.append(newline); - } - - /** Private helper method for getHelp. Formats the command descriptions. */ - private void addCommand(String command, String description, StringBuffer help) { - help.append(tab); - help.append(command); - help.append(" - "); //$NON-NLS-1$ - help.append(description); - help.append(newline); - } - - /** Private helper method for getHelp. Formats the command descriptions with command arguments. */ - private void addCommand(String command, String parameters, String description, StringBuffer help) { - help.append(tab); - help.append(command); - help.append(" "); //$NON-NLS-1$ - help.append(parameters); - help.append(" - "); //$NON-NLS-1$ - help.append(description); - help.append(newline); - } - - /** Private helper method for getHelp. According to its arguments chooses which one of the above addCommand methods to use. */ - private void addCommand(String command, String[] attributes, StringBuffer help) { - if (attributes.length == 1) { - addCommand(command, attributes[0], help); - } else if (attributes.length == 2) { - addCommand(command, attributes[0], attributes[1], help); - } - } - - /** - * Handle the exit command. Exit immediately (System.exit) - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _exit(CommandInterpreter intp) throws Exception { - intp.println(); - System.exit(0); - } - - /** - * Handle the launch command. Start the OSGi framework. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _launch(CommandInterpreter intp) throws Exception { - framework.launch(); - } - - /** - * Handle the shutdown command. Shutdown the OSGi framework. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _shutdown(CommandInterpreter intp) throws Exception { - framework.shutdown(FrameworkEvent.STOPPED); - } - - /** - * Handle the start command's abbreviation. Invoke _start() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _sta(CommandInterpreter intp) throws Exception { - _start(intp); - } - - /** - * Handle the start command. Start the specified bundle(s). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _start(CommandInterpreter intp) throws Exception { - String nextArg = intp.nextArgument(); - if (nextArg == null) { - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR); - } - while (nextArg != null) { - AbstractBundle bundle = getBundleFromToken(intp, nextArg, true); - if (bundle != null) { - bundle.start(); - } - nextArg = intp.nextArgument(); - } - } - - /** - * Handle the stop command's abbreviation. Invoke _stop() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _sto(CommandInterpreter intp) throws Exception { - _stop(intp); - } - - /** - * Handle the stop command. Stop the specified bundle(s). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _stop(CommandInterpreter intp) throws Exception { - String nextArg = intp.nextArgument(); - if (nextArg == null) { - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR); - } - while (nextArg != null) { - AbstractBundle bundle = getBundleFromToken(intp, nextArg, true); - if (bundle != null) { - bundle.stop(); - } - nextArg = intp.nextArgument(); - } - } - - /** - * Handle the install command's abbreviation. Invoke _install() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _i(CommandInterpreter intp) throws Exception { - _install(intp); - } - - /** - * Handle the install command. Install and optionally start bundle from the given URL\r\n" - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _install(CommandInterpreter intp) throws Exception { - String url = intp.nextArgument(); - if (url == null) { - intp.println(ConsoleMsg.CONSOLE_NOTHING_TO_INSTALL_ERROR); - } else { - AbstractBundle bundle = (AbstractBundle) context.installBundle(url); - intp.print(ConsoleMsg.CONSOLE_BUNDLE_ID_MESSAGE); - intp.println(new Long(bundle.getBundleId())); - - String nextArg = intp.nextArgument(); - if (nextArg != null) { - String start = nextArg.toLowerCase(); - - if (matchCommand("start", start, 1)) { //$NON-NLS-1$ - bundle.start(); - } - } - } - - } - - private static boolean matchCommand(String command, String input, int minLength) { - if (minLength <= 0) - minLength = command.length(); - int length = input.length(); - if (minLength > length) - length = minLength; - return (command.regionMatches(0, input, 0, length)); - } - - /** - * Handle the update command's abbreviation. Invoke _update() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _up(CommandInterpreter intp) throws Exception { - _update(intp); - } - - /** - * Handle the update command. Update the specified bundle(s). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _update(CommandInterpreter intp) throws Exception { - String token = intp.nextArgument(); - if (token == null) { - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR); - } - while (token != null) { - - if ("*".equals(token)) { //$NON-NLS-1$ - AbstractBundle[] bundles = (AbstractBundle[]) context.getBundles(); - - int size = bundles.length; - - if (size > 0) { - for (int i = 0; i < size; i++) { - AbstractBundle bundle = bundles[i]; - - if (bundle.getBundleId() != 0) { - try { - bundle.update(); - } catch (BundleException e) { - intp.printStackTrace(e); - } - } - } - } else { - intp.println(ConsoleMsg.CONSOLE_NO_INSTALLED_BUNDLES_ERROR); - } - } else { - AbstractBundle bundle = getBundleFromToken(intp, token, true); - if (bundle != null) { - String source = intp.nextArgument(); - try { - if (source != null) { - bundle.update(new URL(source).openStream()); - } else { - bundle.update(); - } - } catch (BundleException e) { - intp.printStackTrace(e); - } - } - } - token = intp.nextArgument(); - } - } - - /** - * Handle the uninstall command's abbreviation. Invoke _uninstall() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _un(CommandInterpreter intp) throws Exception { - _uninstall(intp); - } - - /** - * Handle the uninstall command. Uninstall the specified bundle(s). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _uninstall(CommandInterpreter intp) throws Exception { - String nextArg = intp.nextArgument(); - if (nextArg == null) { - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR); - } - while (nextArg != null) { - AbstractBundle bundle = getBundleFromToken(intp, nextArg, true); - if (bundle != null) { - bundle.uninstall(); - } - nextArg = intp.nextArgument(); - } - } - - /** - * Handle the status command's abbreviation. Invoke _status() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _s(CommandInterpreter intp) throws Exception { - _status(intp); - } - - private Object[] processOption(CommandInterpreter intp) { - String option = intp.nextArgument(); - String filteredName = null; - int stateFilter = -1; - if (option != null && option.equals("-s")) { //$NON-NLS-1$ - String searchedState = intp.nextArgument(); - if (searchedState == null) - searchedState = ""; //$NON-NLS-1$ - StringTokenizer tokens = new StringTokenizer(searchedState, ","); //$NON-NLS-1$ - while (tokens.hasMoreElements()) { - String desiredState = (String) tokens.nextElement(); - Field match = null; - try { - match = Bundle.class.getField(desiredState.toUpperCase()); - if (stateFilter == -1) - stateFilter = 0; - stateFilter |= match.getInt(match); - } catch (NoSuchFieldException e) { - intp.println(ConsoleMsg.CONSOLE_INVALID_INPUT + ": " + desiredState); //$NON-NLS-1$ - return null; - } catch (IllegalAccessException e) { - intp.println(ConsoleMsg.CONSOLE_INVALID_INPUT + ": " + desiredState); //$NON-NLS-1$ - return null; - } - } - } else { - filteredName = option; - } - String tmp = intp.nextArgument(); - if (tmp != null) - filteredName = tmp; - return new Object[] {filteredName, new Integer(stateFilter)}; - } - - /** - * Handle the status command. Display installed bundles and registered services. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _status(CommandInterpreter intp) throws Exception { - if (framework.isActive()) { - intp.println(ConsoleMsg.CONSOLE_FRAMEWORK_IS_LAUNCHED_MESSAGE); - } else { - intp.println(ConsoleMsg.CONSOLE_FRAMEWORK_IS_SHUTDOWN_MESSAGE); - } - intp.println(); - - Object[] options = processOption(intp); - if (options == null) - return; - - AbstractBundle[] bundles = (AbstractBundle[]) context.getBundles(); - int size = bundles.length; - - if (size == 0) { - intp.println(ConsoleMsg.CONSOLE_NO_INSTALLED_BUNDLES_ERROR); - return; - } - intp.print(ConsoleMsg.CONSOLE_ID); - intp.print(tab); - intp.println(ConsoleMsg.CONSOLE_BUNDLE_LOCATION_MESSAGE); - intp.println(ConsoleMsg.CONSOLE_STATE_BUNDLE_FILE_NAME_HEADER); - for (int i = 0; i < size; i++) { - AbstractBundle bundle = bundles[i]; - if (!match(bundle, (String) options[0], ((Integer) options[1]).intValue())) - continue; - intp.print(new Long(bundle.getBundleId())); - intp.print(tab); - intp.println(bundle.getLocation()); - intp.print(" "); //$NON-NLS-1$ - intp.print(getStateName(bundle)); - intp.println(bundle.bundledata); - } - - ServiceReference<?>[] services = context.getServiceReferences((String) null, (String) null); - if (services != null) { - intp.println(ConsoleMsg.CONSOLE_REGISTERED_SERVICES_MESSAGE); - size = services.length; - for (int i = 0; i < size; i++) { - intp.println(services[i]); - } - } - } - - /** - * Handle the services command's abbreviation. Invoke _services() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _se(CommandInterpreter intp) throws Exception { - _services(intp); - } - - /** - * Handle the services command. Display registered service details. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _services(CommandInterpreter intp) throws Exception { - String filter = null; - - String nextArg = intp.nextArgument(); - if (nextArg != null) { - StringBuffer buf = new StringBuffer(); - while (nextArg != null) { - buf.append(' '); - buf.append(nextArg); - nextArg = intp.nextArgument(); - } - filter = buf.toString(); - } - - InvalidSyntaxException originalException = null; - ServiceReference<?>[] services = null; - - try { - services = context.getServiceReferences((String) null, filter); - } catch (InvalidSyntaxException e) { - originalException = e; - } - - if (filter != null) { - filter = filter.trim(); - } - // If the filter is invalid and does not start with a bracket, probably the argument was the name of an interface. - // Try to construct an object class filter with this argument, and if still invalid - throw the original InvalidSyntaxException - if (originalException != null && !filter.startsWith("(") && filter.indexOf(' ') < 0) { //$NON-NLS-1$ - try { - filter = "(" + Constants.OBJECTCLASS + "=" + filter + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - services = context.getServiceReferences((String) null, filter); - } catch (InvalidSyntaxException e) { - throw originalException; - } - } else if (originalException != null) { - throw originalException; - } - - if (services != null) { - int size = services.length; - if (size > 0) { - for (int j = 0; j < size; j++) { - ServiceReference<?> service = services[j]; - intp.println(service); - intp.print(" "); //$NON-NLS-1$ - intp.print(ConsoleMsg.CONSOLE_REGISTERED_BY_BUNDLE_MESSAGE); - intp.print(" "); //$NON-NLS-1$ - intp.println(service.getBundle()); - Bundle[] users = service.getUsingBundles(); - if (users != null) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_BUNDLES_USING_SERVICE_MESSAGE); - for (int k = 0; k < users.length; k++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(users[k]); - } - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLES_USING_SERVICE_MESSAGE); - } - } - return; - } - } - intp.println(ConsoleMsg.CONSOLE_NO_REGISTERED_SERVICES_MESSAGE); - } - - /** - * Handle the packages command's abbreviation. Invoke _packages() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _p(CommandInterpreter intp) throws Exception { - _packages(intp); - } - - /** - * Handle the packages command. Display imported/exported package details. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _packages(CommandInterpreter intp) throws Exception { - org.osgi.framework.Bundle bundle = null; - - String token = intp.nextArgument(); - if (token != null) { - bundle = getBundleFromToken(intp, token, false); - } - - ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$ - if (packageAdminRef != null) { - PackageAdmin packageAdmin = (PackageAdmin) context.getService(packageAdminRef); - if (packageAdmin != null) { - try { - org.osgi.service.packageadmin.ExportedPackage[] packages = null; - - if (token != null) - packages = packageAdmin.getExportedPackages(token); - if (packages == null) - packages = packageAdmin.getExportedPackages(bundle); - - if (packages == null) { - intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_MESSAGE); - } else { - for (int i = 0; i < packages.length; i++) { - org.osgi.service.packageadmin.ExportedPackage pkg = packages[i]; - intp.print(pkg); - - boolean removalPending = pkg.isRemovalPending(); - if (removalPending) { - intp.print("("); //$NON-NLS-1$ - intp.print(ConsoleMsg.CONSOLE_REMOVAL_PENDING_MESSAGE); - intp.println(")"); //$NON-NLS-1$ - } - - org.osgi.framework.Bundle exporter = pkg.getExportingBundle(); - if (exporter != null) { - intp.print("<"); //$NON-NLS-1$ - intp.print(exporter); - intp.println(">"); //$NON-NLS-1$ - - org.osgi.framework.Bundle[] importers = pkg.getImportingBundles(); - for (int j = 0; j < importers.length; j++) { - intp.print(" "); //$NON-NLS-1$ - intp.print(importers[j]); - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_IMPORTS_MESSAGE); - } - } else { - intp.print("<"); //$NON-NLS-1$ - intp.print(ConsoleMsg.CONSOLE_STALE_MESSAGE); - intp.println(">"); //$NON-NLS-1$ - } - - } - } - } finally { - context.ungetService(packageAdminRef); - } - } - } else { - intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_NO_PACKAGE_ADMIN_MESSAGE); - } - } - - /** - * Handle the bundles command. Display details for all installed bundles. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _bundles(CommandInterpreter intp) throws Exception { - Object[] options = processOption(intp); - if (options == null) - return; - - AbstractBundle[] bundles = (AbstractBundle[]) context.getBundles(); - int size = bundles.length; - - if (size == 0) { - intp.println(ConsoleMsg.CONSOLE_NO_INSTALLED_BUNDLES_ERROR); - return; - } - - for (int i = 0; i < size; i++) { - AbstractBundle bundle = bundles[i]; - if (!match(bundle, (String) options[0], ((Integer) options[1]).intValue())) - continue; - long id = bundle.getBundleId(); - intp.println(bundle); - intp.print(" "); //$NON-NLS-1$ - intp.print(NLS.bind(ConsoleMsg.CONSOLE_ID_MESSAGE, String.valueOf(id))); - intp.print(", "); //$NON-NLS-1$ - intp.print(NLS.bind(ConsoleMsg.CONSOLE_STATUS_MESSAGE, getStateName(bundle))); - if (id != 0) { - File dataRoot = framework.getDataFile(bundle, ""); //$NON-NLS-1$ - - String root = (dataRoot == null) ? null : dataRoot.getAbsolutePath(); - - intp.print(NLS.bind(ConsoleMsg.CONSOLE_DATA_ROOT_MESSAGE, root)); - } else { - intp.println(); - } - - ServiceReference<?>[] services = bundle.getRegisteredServices(); - if (services != null) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_REGISTERED_SERVICES_MESSAGE); - for (int j = 0; j < services.length; j++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(services[j]); - } - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_REGISTERED_SERVICES_MESSAGE); - } - - services = bundle.getServicesInUse(); - if (services != null) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_SERVICES_IN_USE_MESSAGE); - for (int j = 0; j < services.length; j++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(services[j]); - } - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_SERVICES_IN_USE_MESSAGE); - } - } - } - - /** - * Handle the bundle command's abbreviation. Invoke _bundle() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _b(CommandInterpreter intp) throws Exception { - _bundle(intp); - } - - /** - * Handle the bundle command. Display details for the specified bundle(s). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _bundle(CommandInterpreter intp) throws Exception { - String nextArg = intp.nextArgument(); - if (nextArg == null) { - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR); - } - while (nextArg != null) { - AbstractBundle bundle = getBundleFromToken(intp, nextArg, true); - if (bundle != null) { - long id = bundle.getBundleId(); - intp.println(bundle); - intp.print(" "); //$NON-NLS-1$ - intp.print(NLS.bind(ConsoleMsg.CONSOLE_ID_MESSAGE, String.valueOf(id))); - intp.print(", "); //$NON-NLS-1$ - intp.print(NLS.bind(ConsoleMsg.CONSOLE_STATUS_MESSAGE, getStateName(bundle))); - if (id != 0) { - File dataRoot = framework.getDataFile(bundle, ""); //$NON-NLS-1$ - - String root = (dataRoot == null) ? null : dataRoot.getAbsolutePath(); - - intp.print(NLS.bind(ConsoleMsg.CONSOLE_DATA_ROOT_MESSAGE, root)); - intp.println(); - } else { - intp.println(); - } - - ServiceReference<?>[] services = bundle.getRegisteredServices(); - if (services != null) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_REGISTERED_SERVICES_MESSAGE); - for (int j = 0; j < services.length; j++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(services[j]); - } - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_REGISTERED_SERVICES_MESSAGE); - } - - services = bundle.getServicesInUse(); - if (services != null) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_SERVICES_IN_USE_MESSAGE); - for (int j = 0; j < services.length; j++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(services[j]); - } - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_SERVICES_IN_USE_MESSAGE); - } - - ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$ - if (packageAdminRef != null) { - BundleDescription desc = bundle.getBundleDescription(); - if (desc != null) { - boolean title = true; - try { - ExportPackageDescription[] exports = desc.getSelectedExports(); - if (exports == null || exports.length == 0) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_MESSAGE); - } else { - title = true; - - for (int i = 0; i < exports.length; i++) { - if (title) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_EXPORTED_PACKAGES_MESSAGE); - title = false; - } - intp.print(" "); //$NON-NLS-1$ - intp.print(exports[i].getName()); - intp.print("; version=\""); //$NON-NLS-1$ - intp.print(exports[i].getVersion()); - intp.print("\""); //$NON-NLS-1$ - if (desc.isRemovalPending()) { - intp.println(ConsoleMsg.CONSOLE_EXPORTED_REMOVAL_PENDING_MESSAGE); - } else { - intp.println(ConsoleMsg.CONSOLE_EXPORTED_MESSAGE); - } - } - - if (title) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_MESSAGE); - } - } - title = true; - if (desc != null) { - List<ImportPackageSpecification> fragmentsImportPackages = new ArrayList<ImportPackageSpecification>(); - - // Get bundle' fragments imports - BundleDescription[] fragments = desc.getFragments(); - for (int i = 0; i < fragments.length; i++) { - ImportPackageSpecification[] fragmentImports = fragments[i].getImportPackages(); - for (int j = 0; j < fragmentImports.length; j++) { - fragmentsImportPackages.add(fragmentImports[j]); - } - } - - // Get all bundle imports - ImportPackageSpecification[] importPackages; - if (fragmentsImportPackages.size() > 0) { - ImportPackageSpecification[] directImportPackages = desc.getImportPackages(); - importPackages = new ImportPackageSpecification[directImportPackages.length + fragmentsImportPackages.size()]; - - for (int i = 0; i < directImportPackages.length; i++) { - importPackages[i] = directImportPackages[i]; - } - - int offset = directImportPackages.length; - for (int i = 0; i < fragmentsImportPackages.size(); i++) { - importPackages[offset + i] = fragmentsImportPackages.get(i); - } - } else { - importPackages = desc.getImportPackages(); - } - - // Get all resolved imports - ExportPackageDescription[] imports = null; - imports = desc.getContainingState().getStateHelper().getVisiblePackages(desc, StateHelper.VISIBLE_INCLUDE_EE_PACKAGES | StateHelper.VISIBLE_INCLUDE_ALL_HOST_WIRES); - - // Get the unresolved optional and dynamic imports - List<ImportPackageSpecification> unresolvedImports = new ArrayList<ImportPackageSpecification>(); - - for (int i = 0; i < importPackages.length; i++) { - if (importPackages[i].getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_OPTIONAL)) { - if (importPackages[i].getSupplier() == null) { - unresolvedImports.add(importPackages[i]); - } - } else if (importPackages[i].getDirective(org.osgi.framework.Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_DYNAMIC)) { - boolean isResolvable = false; - - // Check if the dynamic import can be resolved by any of the wired imports, - // and if not - add it to the list of unresolved imports - for (int j = 0; j < imports.length; j++) { - if (importPackages[i].isSatisfiedBy(imports[j])) { - isResolvable = true; - } - } - - if (isResolvable == false) { - unresolvedImports.add(importPackages[i]); - } - } - } - - title = printImportedPackages(imports, intp, title); - - if (desc.isResolved() && (unresolvedImports.isEmpty() == false)) { - printUnwiredDynamicImports(unresolvedImports, intp); - title = false; - } - } - - if (title) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_IMPORTED_PACKAGES_MESSAGE); - } - - PackageAdmin packageAdmin = (PackageAdmin) context.getService(packageAdminRef); - if (packageAdmin != null) { - intp.print(" "); //$NON-NLS-1$ - if ((packageAdmin.getBundleType(bundle) & PackageAdmin.BUNDLE_TYPE_FRAGMENT) > 0) { - org.osgi.framework.Bundle[] hosts = packageAdmin.getHosts(bundle); - if (hosts != null) { - intp.println(ConsoleMsg.CONSOLE_HOST_MESSAGE); - for (int i = 0; i < hosts.length; i++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(hosts[i]); - } - } else { - intp.println(ConsoleMsg.CONSOLE_NO_HOST_MESSAGE); - } - } else { - org.osgi.framework.Bundle[] fragments = packageAdmin.getFragments(bundle); - if (fragments != null) { - intp.println(ConsoleMsg.CONSOLE_FRAGMENT_MESSAGE); - for (int i = 0; i < fragments.length; i++) { - intp.print(" "); //$NON-NLS-1$ - intp.println(fragments[i]); - } - } else { - intp.println(ConsoleMsg.CONSOLE_NO_FRAGMENT_MESSAGE); - } - } - - RequiredBundle[] requiredBundles = packageAdmin.getRequiredBundles(null); - RequiredBundle requiredBundle = null; - if (requiredBundles != null) { - for (int i = 0; i < requiredBundles.length; i++) { - if (requiredBundles[i].getBundle() == bundle) { - requiredBundle = requiredBundles[i]; - break; - } - } - } - - if (requiredBundle == null) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_NAMED_CLASS_SPACES_MESSAGE); - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NAMED_CLASS_SPACE_MESSAGE); - intp.print(" "); //$NON-NLS-1$ - intp.print(requiredBundle); - if (requiredBundle.isRemovalPending()) { - intp.println(ConsoleMsg.CONSOLE_REMOVAL_PENDING_MESSAGE); - } else { - intp.println(ConsoleMsg.CONSOLE_PROVIDED_MESSAGE); - } - } - title = true; - for (int i = 0; i < requiredBundles.length; i++) { - if (requiredBundles[i] == requiredBundle) - continue; - - org.osgi.framework.Bundle[] depBundles = requiredBundles[i].getRequiringBundles(); - if (depBundles == null) - continue; - - for (int j = 0; j < depBundles.length; j++) { - if (depBundles[j] == bundle) { - if (title) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_REQUIRED_BUNDLES_MESSAGE); - title = false; - } - intp.print(" "); //$NON-NLS-1$ - intp.print(requiredBundles[i]); - - org.osgi.framework.Bundle provider = requiredBundles[i].getBundle(); - intp.print("<"); //$NON-NLS-1$ - intp.print(provider); - intp.println(">"); //$NON-NLS-1$ - } - } - } - if (title) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_REQUIRED_BUNDLES_MESSAGE); - } - - } - } finally { - context.ungetService(packageAdminRef); - } - } - } else { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_NO_PACKAGE_ADMIN_MESSAGE); - } - - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - ProtectionDomain domain = bundle.getProtectionDomain(); - - intp.println(domain); - } - } - nextArg = intp.nextArgument(); - } - } - - private boolean printImportedPackages(ExportPackageDescription[] importedPkgs, CommandInterpreter intp, boolean title) { - for (int i = 0; i < importedPkgs.length; i++) { - if (title) { - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_IMPORTED_PACKAGES_MESSAGE); - title = false; - } - intp.print(" "); //$NON-NLS-1$ - intp.print(importedPkgs[i].getName()); - intp.print("; version=\""); //$NON-NLS-1$ - intp.print(importedPkgs[i].getVersion()); - intp.print("\""); //$NON-NLS-1$ - Bundle exporter = context.getBundle(importedPkgs[i].getSupplier().getBundleId()); - if (exporter != null) { - intp.print("<"); //$NON-NLS-1$ - intp.print(exporter); - intp.println(">"); //$NON-NLS-1$ - } else { - intp.print("<"); //$NON-NLS-1$ - intp.print(ConsoleMsg.CONSOLE_STALE_MESSAGE); - intp.println(">"); //$NON-NLS-1$ - } - } - return title; - } - - private void printUnwiredDynamicImports(List<ImportPackageSpecification> dynamicImports, CommandInterpreter intp) { - for (int i = 0; i < dynamicImports.size(); i++) { - ImportPackageSpecification importPackage = dynamicImports.get(i); - intp.print(" "); //$NON-NLS-1$ - intp.print(importPackage.getName()); - intp.print("; version=\""); //$NON-NLS-1$ - intp.print(importPackage.getVersionRange()); - intp.print("\""); //$NON-NLS-1$ - intp.print("<"); //$NON-NLS-1$ - intp.print("unwired"); //$NON-NLS-1$ - intp.print(">"); //$NON-NLS-1$ - intp.print("<"); //$NON-NLS-1$ - intp.print(importPackage.getDirective(org.osgi.framework.Constants.RESOLUTION_DIRECTIVE)); - intp.println(">"); //$NON-NLS-1$ - } - } - - /** - * Handle the gc command. Perform a garbage collection. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _gc(CommandInterpreter intp) throws Exception { - long before = Runtime.getRuntime().freeMemory(); - - /* Let the finilizer finish its work and remove objects from its queue */ - System.gc(); /* asyncronous garbage collector might already run */ - System.gc(); /* to make sure it does a full gc call it twice */ - System.runFinalization(); - try { - Thread.sleep(100); - } catch (InterruptedException e) { - // do nothing - } - - long after = Runtime.getRuntime().freeMemory(); - intp.print(ConsoleMsg.CONSOLE_TOTAL_MEMORY_MESSAGE); - intp.println(String.valueOf(Runtime.getRuntime().totalMemory())); - intp.print(ConsoleMsg.CONSOLE_FREE_MEMORY_BEFORE_GARBAGE_COLLECTION_MESSAGE); - intp.println(String.valueOf(before)); - intp.print(ConsoleMsg.CONSOLE_FREE_MEMORY_AFTER_GARBAGE_COLLECTION_MESSAGE); - intp.println(String.valueOf(after)); - intp.print(ConsoleMsg.CONSOLE_MEMORY_GAINED_WITH_GARBAGE_COLLECTION_MESSAGE); - intp.println(String.valueOf(after - before)); - } - - /** - * Handle the init command. Uninstall all bundles. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - @SuppressWarnings("deprecation") - public void _init(CommandInterpreter intp) throws Exception { - if (framework.isActive()) { - intp.print(newline); - intp.println(ConsoleMsg.CONSOLE_FRAMEWORK_LAUNCHED_PLEASE_SHUTDOWN_MESSAGE); - return; - } - - AbstractBundle[] bundles = (AbstractBundle[]) context.getBundles(); - - int size = bundles.length; - - if (size > 0) { - for (int i = 0; i < size; i++) { - AbstractBundle bundle = bundles[i]; - - if (bundle.getBundleId() != 0) { - try { - bundle.uninstall(); - } catch (BundleException e) { - intp.printStackTrace(e); - } - } - } - } else { - intp.println(ConsoleMsg.CONSOLE_NO_INSTALLED_BUNDLES_ERROR); - } - if (securityAdmin != null) { - // clear the permissions from permission admin - securityAdmin.setDefaultPermissions(null); - String[] permLocations = securityAdmin.getLocations(); - if (permLocations != null) - for (int i = 0; i < permLocations.length; i++) - securityAdmin.setPermissions(permLocations[i], null); - ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate(); - update.getConditionalPermissionInfos().clear(); - update.commit(); - } - // clear the permissions from conditional permission admin - if (securityAdmin != null) - for (Enumeration<ConditionalPermissionInfo> infos = securityAdmin.getConditionalPermissionInfos(); infos.hasMoreElements();) - infos.nextElement().delete(); - } - - /** - * Handle the close command. Shutdown and exit. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _close(CommandInterpreter intp) throws Exception { - intp.println(); - framework.close(); - System.exit(0); - } - - /** - * Handle the refresh command's abbreviation. Invoke _refresh() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _r(CommandInterpreter intp) throws Exception { - _refresh(intp); - } - - /** - * Handle the refresh command. Refresh the packages of the specified bundles. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _refresh(CommandInterpreter intp) throws Exception { - ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$ - if (packageAdminRef != null) { - org.osgi.service.packageadmin.PackageAdmin packageAdmin = (org.osgi.service.packageadmin.PackageAdmin) context.getService(packageAdminRef); - if (packageAdmin != null) { - try { - Bundle[] refresh = null; - - String token = intp.nextArgument(); - if (token != null) { - List<Bundle> bundles = new ArrayList<Bundle>(); - - while (token != null) { - AbstractBundle bundle = getBundleFromToken(intp, token, true); - - if (bundle != null) { - bundles.add(bundle); - } - token = intp.nextArgument(); - } - - int size = bundles.size(); - - if (size == 0) { - intp.println(ConsoleMsg.CONSOLE_INVALID_BUNDLE_SPECIFICATION_ERROR); - return; - } - - refresh = new Bundle[size]; - bundles.toArray(refresh); - } - - packageAdmin.refreshPackages(refresh); - } finally { - context.ungetService(packageAdminRef); - } - } - } else { - intp.println(ConsoleMsg.CONSOLE_CAN_NOT_REFRESH_NO_PACKAGE_ADMIN_ERROR); - } - } - - /** - * Executes the given system command in a separate system process - * and waits for it to finish. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _exec(CommandInterpreter intp) throws Exception { - String command = intp.nextArgument(); - if (command == null) { - intp.println(ConsoleMsg.CONSOLE_NO_COMMAND_SPECIFIED_ERROR); - return; - } - - Process p = Runtime.getRuntime().exec(command); - - intp.println(NLS.bind(ConsoleMsg.CONSOLE_STARTED_IN_MESSAGE, command, String.valueOf(p))); - int result = p.waitFor(); - intp.println(NLS.bind(ConsoleMsg.CONSOLE_EXECUTED_RESULT_CODE_MESSAGE, command, String.valueOf(result))); - } - - /** - * Executes the given system command in a separate system process. It does - * not wait for a result. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _fork(CommandInterpreter intp) throws Exception { - String command = intp.nextArgument(); - if (command == null) { - intp.println(ConsoleMsg.CONSOLE_NO_COMMAND_SPECIFIED_ERROR); - return; - } - - Process p = Runtime.getRuntime().exec(command); - intp.println(NLS.bind(ConsoleMsg.CONSOLE_STARTED_IN_MESSAGE, command, String.valueOf(p))); - } - - /** - * Handle the headers command's abbreviation. Invoke _headers() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _h(CommandInterpreter intp) throws Exception { - _headers(intp); - } - - /** - * Handle the headers command. Display headers for the specified bundle(s). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _headers(CommandInterpreter intp) throws Exception { - - String nextArg = intp.nextArgument(); - if (nextArg == null) { - intp.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR); - } - while (nextArg != null) { - AbstractBundle bundle = getBundleFromToken(intp, nextArg, true); - if (bundle != null) { - intp.printDictionary(bundle.getHeaders(), ConsoleMsg.CONSOLE_BUNDLE_HEADERS_TITLE); - } - nextArg = intp.nextArgument(); - } - } - - /** - * Handles the props command's abbreviation. Invokes _props() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _pr(CommandInterpreter intp) throws Exception { - _props(intp); - } - - /** - * Handles the _props command. Prints the system properties sorted. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _props(CommandInterpreter intp) throws Exception { - intp.printDictionary(FrameworkProperties.getProperties(), ConsoleMsg.CONSOLE_SYSTEM_PROPERTIES_TITLE); - } - - /** - * Handles the setprop command's abbreviation. Invokes _setprop() - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _setp(CommandInterpreter intp) throws Exception { - _setprop(intp); - } - - /** - * Handles the setprop command. Sets the CDS property in the given argument. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _setprop(CommandInterpreter intp) throws Exception { - String argument = intp.nextArgument(); - if (argument == null) { - intp.println(ConsoleMsg.CONSOLE_NO_PARAMETERS_SPECIFIED_TITLE); - _props(intp); - } else { - InputStream in = new ByteArrayInputStream(argument.getBytes()); - try { - Properties sysprops = FrameworkProperties.getProperties(); - Properties newprops = new Properties(); - newprops.load(in); - intp.println(ConsoleMsg.CONSOLE_SETTING_PROPERTIES_TITLE); - Enumeration<?> keys = newprops.propertyNames(); - while (keys.hasMoreElements()) { - String key = (String) keys.nextElement(); - String value = (String) newprops.get(key); - sysprops.put(key, value); - intp.println(tab + key + " = " + value); //$NON-NLS-1$ - } - } catch (IOException e) { - // ignore - } finally { - try { - in.close(); - } catch (IOException e) { - // ignore - } - } - } - } - - /** - * Prints the short version of the status. - * For the long version use "status". - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _ss(CommandInterpreter intp) throws Exception { - if (framework.isActive()) { - intp.println(); - intp.println(ConsoleMsg.CONSOLE_FRAMEWORK_IS_LAUNCHED_MESSAGE); - } else { - intp.println(); - intp.println(ConsoleMsg.CONSOLE_FRAMEWORK_IS_SHUTDOWN_MESSAGE); - } - - Object[] options = processOption(intp); - if (options == null) - return; - - AbstractBundle[] bundles = (AbstractBundle[]) context.getBundles(); - if (bundles.length == 0) { - intp.println(ConsoleMsg.CONSOLE_NO_INSTALLED_BUNDLES_ERROR); - } else { - intp.print(newline); - intp.print(ConsoleMsg.CONSOLE_ID); - intp.print(tab); - intp.println(ConsoleMsg.CONSOLE_STATE_BUNDLE_TITLE); - for (int i = 0; i < bundles.length; i++) { - AbstractBundle b = bundles[i]; - if (!match(b, (String) options[0], ((Integer) options[1]).intValue())) - continue; - String label = b.getSymbolicName(); - if (label == null || label.length() == 0) - label = b.toString(); - else - label = label + "_" + b.getVersion(); //$NON-NLS-1$ - intp.println(b.getBundleId() + "\t" + getStateName(b) + label); //$NON-NLS-1$ - if (b.isFragment()) { - Bundle[] hosts = b.getHosts(); - if (hosts != null) - for (int j = 0; j < hosts.length; j++) - intp.println("\t Master=" + hosts[j].getBundleId()); //$NON-NLS-1$ - } else { - Bundle[] fragments = b.getFragments(); - if (fragments != null) { - intp.print("\t Fragments="); //$NON-NLS-1$ - for (int f = 0; f < fragments.length; f++) { - AbstractBundle fragment = (AbstractBundle) fragments[f]; - intp.print((f > 0 ? ", " : "") + fragment.getBundleId()); //$NON-NLS-1$ //$NON-NLS-2$ - } - intp.println(); - } - } - } - } - } - - private boolean match(Bundle toFilter, String searchedName, int searchedState) { - if ((toFilter.getState() & searchedState) == 0) { - return false; - } - if (searchedName != null && toFilter.getSymbolicName() != null && toFilter.getSymbolicName().indexOf(searchedName) == -1) { - return false; - } - return true; - } - - /** - * Handles the threads command abbreviation. Invokes _threads(). - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _t(CommandInterpreter intp) throws Exception { - _threads(intp); - } - - /** - * Prints the information about the currently running threads - * in the embedded system. - * - * @param intp A CommandInterpreter object containing the command - * and it's arguments. - */ - public void _threads(CommandInterpreter intp) throws Exception { - - ThreadGroup[] threadGroups = getThreadGroups(); - Util.sortByString(threadGroups); - - ThreadGroup tg = getTopThreadGroup(); - Thread[] threads = new Thread[tg.activeCount()]; - int count = tg.enumerate(threads, true); - Util.sortByString(threads); - - StringBuffer sb = new StringBuffer(120); - intp.println(); - intp.println(ConsoleMsg.CONSOLE_THREADGROUP_TITLE); - for (int i = 0; i < threadGroups.length; i++) { - tg = threadGroups[i]; - int all = tg.activeCount(); //tg.allThreadsCount(); - int local = tg.enumerate(new Thread[all], false); //tg.threadsCount(); - ThreadGroup p = tg.getParent(); - String parent = (p == null) ? "-none-" : p.getName(); //$NON-NLS-1$ - sb.setLength(0); - sb.append(Util.toString(simpleClassName(tg), 18)).append(" ").append(Util.toString(tg.getName(), 21)).append(" ").append(Util.toString(parent, 16)).append(Util.toString(new Integer(tg.getMaxPriority()), 3)).append(Util.toString(new Integer(local), 4)).append("/").append(Util.toString(String.valueOf(all), 6)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - intp.println(sb.toString()); - } - intp.print(newline); - intp.println(ConsoleMsg.CONSOLE_THREADTYPE_TITLE); - for (int j = 0; j < count; j++) { - Thread t = threads[j]; - if (t != null) { - sb.setLength(0); - sb.append(Util.toString(simpleClassName(t), 18)).append(" ").append(Util.toString(t.getName(), 21)).append(" ").append(Util.toString(t.getThreadGroup().getName(), 16)).append(Util.toString(new Integer(t.getPriority()), 3)); //$NON-NLS-1$ //$NON-NLS-2$ - if (t.isDaemon()) - sb.append(" [daemon]"); //$NON-NLS-1$ - intp.println(sb.toString()); - } - } - } - - /** - * Handles the sl (startlevel) command. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _sl(CommandInterpreter intp) throws Exception { - if (isStartLevelSvcPresent(intp)) { - org.osgi.framework.Bundle bundle = null; - String token = intp.nextArgument(); - int value = 0; - if (token != null) { - bundle = getBundleFromToken(intp, token, true); - if (bundle == null) { - return; - } - } - if (bundle == null) { // must want framework startlevel - value = slImpl.getStartLevel(); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_FRAMEWORK_ACTIVE_STARTLEVEL, String.valueOf(value))); - } else { // must want bundle startlevel - value = slImpl.getBundleStartLevel(bundle); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_BUNDLE_STARTLEVEL, new Long(bundle.getBundleId()), new Integer(value))); - } - } - } - - /** - * Handles the setfwsl (set framework startlevel) command. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _setfwsl(CommandInterpreter intp) throws Exception { - if (isStartLevelSvcPresent(intp)) { - int value = 0; - String token = intp.nextArgument(); - if (token == null) { - intp.println(ConsoleMsg.STARTLEVEL_NO_STARTLEVEL_GIVEN); - value = slImpl.getStartLevel(); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_FRAMEWORK_ACTIVE_STARTLEVEL, String.valueOf(value))); - } else { - value = this.getStartLevelFromToken(intp, token); - if (value > 0) { - try { - slImpl.setStartLevel(value); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_FRAMEWORK_ACTIVE_STARTLEVEL, String.valueOf(value))); - } catch (IllegalArgumentException e) { - intp.println(e.getMessage()); - } - } - } - } - } - - /** - * Handles the setbsl (set bundle startlevel) command. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _setbsl(CommandInterpreter intp) throws Exception { - if (isStartLevelSvcPresent(intp)) { - String token; - AbstractBundle bundle = null; - token = intp.nextArgument(); - if (token == null) { - intp.println(ConsoleMsg.STARTLEVEL_NO_STARTLEVEL_OR_BUNDLE_GIVEN); - return; - } - - int newSL = this.getStartLevelFromToken(intp, token); - - token = intp.nextArgument(); - if (token == null) { - intp.println(ConsoleMsg.STARTLEVEL_NO_STARTLEVEL_OR_BUNDLE_GIVEN); - return; - } - while (token != null) { - bundle = getBundleFromToken(intp, token, true); - if (bundle != null) { - try { - slImpl.setBundleStartLevel(bundle, newSL); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_BUNDLE_STARTLEVEL, new Long(bundle.getBundleId()), new Integer(newSL))); - } catch (IllegalArgumentException e) { - intp.println(e.getMessage()); - } - } - token = intp.nextArgument(); - } - } - } - - /** - * Handles the setibsl (set initial bundle startlevel) command. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _setibsl(CommandInterpreter intp) throws Exception { - if (isStartLevelSvcPresent(intp)) { - int value = 0; - String token = intp.nextArgument(); - if (token == null) { - intp.println(ConsoleMsg.STARTLEVEL_NO_STARTLEVEL_GIVEN); - value = slImpl.getInitialBundleStartLevel(); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_INITIAL_BUNDLE_STARTLEVEL, String.valueOf(value))); - } else { - value = this.getStartLevelFromToken(intp, token); - if (value > 0) { - try { - slImpl.setInitialBundleStartLevel(value); - intp.println(NLS.bind(ConsoleMsg.STARTLEVEL_INITIAL_BUNDLE_STARTLEVEL, String.valueOf(value))); - } catch (IllegalArgumentException e) { - intp.println(e.getMessage()); - } - } - } - } - } - - public void _requiredBundles(CommandInterpreter intp) { - _classSpaces(intp); - } - - public void _classSpaces(CommandInterpreter intp) { - - String token = intp.nextArgument(); - - ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$ - if (packageAdminRef != null) { - PackageAdmin packageAdmin = (PackageAdmin) context.getService(packageAdminRef); - if (packageAdmin != null) { - try { - org.osgi.service.packageadmin.RequiredBundle[] symBundles = null; - - symBundles = packageAdmin.getRequiredBundles(token); - - if (symBundles == null) { - intp.println(ConsoleMsg.CONSOLE_NO_NAMED_CLASS_SPACES_MESSAGE); - } else { - for (int i = 0; i < symBundles.length; i++) { - org.osgi.service.packageadmin.RequiredBundle symBundle = symBundles[i]; - intp.print(symBundle); - - boolean removalPending = symBundle.isRemovalPending(); - if (removalPending) { - intp.print("("); //$NON-NLS-1$ - intp.print(ConsoleMsg.CONSOLE_REMOVAL_PENDING_MESSAGE); - intp.println(")"); //$NON-NLS-1$ - } - - org.osgi.framework.Bundle provider = symBundle.getBundle(); - if (provider != null) { - intp.print("<"); //$NON-NLS-1$ - intp.print(provider); - intp.println(">"); //$NON-NLS-1$ - - org.osgi.framework.Bundle[] requiring = symBundle.getRequiringBundles(); - if (requiring != null) - for (int j = 0; j < requiring.length; j++) { - intp.print(" "); //$NON-NLS-1$ - intp.print(requiring[j]); - intp.print(" "); //$NON-NLS-1$ - intp.println(ConsoleMsg.CONSOLE_REQUIRES_MESSAGE); - } - } else { - intp.print("<"); //$NON-NLS-1$ - intp.print(ConsoleMsg.CONSOLE_STALE_MESSAGE); - intp.println(">"); //$NON-NLS-1$ - } - - } - } - } finally { - context.ungetService(packageAdminRef); - } - } - } else { - intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_NO_PACKAGE_ADMIN_MESSAGE); - } - } - - /** - * Handles the profilelog command. - * - * @param intp A CommandInterpreter object containing the command and it's arguments. - */ - public void _profilelog(CommandInterpreter intp) throws Exception { - intp.println(Profile.getProfileLog()); - } - - public void _getPackages(CommandInterpreter intp) { - - String nextArg = intp.nextArgument(); - if (nextArg == null) - return; - AbstractBundle bundle = getBundleFromToken(intp, nextArg, true); - ServiceReference<?> ref = context.getServiceReference("org.eclipse.osgi.service.resolver.PlatformAdmin"); //$NON-NLS-1$ - if (ref == null) - return; - PlatformAdmin platformAdmin = (PlatformAdmin) context.getService(ref); - try { - ExportPackageDescription[] exports = platformAdmin.getStateHelper().getVisiblePackages(bundle.getBundleDescription(), StateHelper.VISIBLE_INCLUDE_EE_PACKAGES | StateHelper.VISIBLE_INCLUDE_ALL_HOST_WIRES); - for (int i = 0; i < exports.length; i++) { - intp.println(exports[i] + ": " + platformAdmin.getStateHelper().getAccessCode(bundle.getBundleDescription(), exports[i])); //$NON-NLS-1$ - } - } finally { - context.ungetService(ref); - } - } - - /** - * Handles the help command - * - * @param intp - * @return description for a particular command or false if there is no command with the specified name - */ - public Object _help(CommandInterpreter intp) { - String commandName = intp.nextArgument(); - if (commandName == null) { - return false; - } - String help = getHelp(commandName); - return help.length() > 0 ? help : false; - } - - /** - * Checks for the presence of the StartLevel Service. Outputs a message if it is not present. - * @param intp The CommandInterpreter object to be used to write to the console - * @return true or false if service is present or not - */ - protected boolean isStartLevelSvcPresent(CommandInterpreter intp) { - boolean retval = false; - ServiceReference<?> slSvcRef = context.getServiceReference("org.osgi.service.startlevel.StartLevel"); //$NON-NLS-1$ - if (slSvcRef != null) { - StartLevel slSvc = (StartLevel) context.getService(slSvcRef); - if (slSvc != null) { - retval = true; - } - } else { - intp.println(ConsoleMsg.CONSOLE_CAN_NOT_USE_STARTLEVEL_NO_STARTLEVEL_SVC_ERROR); - } - return retval; - } - - /** - * Given a number or a token representing a bundle symbolic name or bundle location, - * retrieve the Bundle object with that id. The bundle symbolic name token is parsed as - * symbolicname[@version] - * - * @param intp The CommandInterpreter - * @param token A string containing a potential bundle it - * @param error A boolean indicating whether or not to output a message - * @return The requested Bundle object - */ - protected AbstractBundle getBundleFromToken(CommandInterpreter intp, String token, boolean error) { - AbstractBundle bundle = null; - try { - long id = Long.parseLong(token); - bundle = (AbstractBundle) context.getBundle(id); - } catch (NumberFormatException nfe) { - - // if not found, assume token is either symbolic name@version, or location - String symbolicName = token; - Version version = null; - - // check for @ -- this may separate either the version string, or be part of the - // location - int ix = token.indexOf("@"); //$NON-NLS-1$ - if (ix != -1) { - if ((ix + 1) != token.length()) { - try { - // if the version parses, then use the token prior to @ as a symbolic name - version = Version.parseVersion(token.substring(ix + 1, token.length())); - symbolicName = token.substring(0, ix); - } catch (IllegalArgumentException e) { - // version doesn't parse, assume token is symbolic name without version, or location - } - } - } - - Bundle[] bundles = context.getBundles(); - for (int i = 0, n = bundles.length; i < n; i++) { - AbstractBundle b = (AbstractBundle) bundles[i]; - // if symbolicName matches, then matches if there is no version specific on command, or the version matches - // if there is no version specified on command, pick first matching bundle - if ((symbolicName.equals(b.getSymbolicName()) && (version == null || version.equals(b.getVersion()))) || token.equals(b.getLocation())) { - bundle = b; - break; - } - } - } - - if ((bundle == null) && error) { - intp.println(NLS.bind(ConsoleMsg.CONSOLE_CANNOT_FIND_BUNDLE_ERROR, token)); - } - - return (bundle); - } - - /** - * Given a string containing a startlevel value, validate it and convert it to an int - * - * @param intp A CommandInterpreter object used for printing out error messages - * @param value A string containing a potential startlevel - * @return The start level or an int <0 if it was invalid - */ - protected int getStartLevelFromToken(CommandInterpreter intp, String value) { - int retval = -1; - try { - retval = Integer.parseInt(value); - if (Integer.parseInt(value) <= 0) { - intp.println(ConsoleMsg.STARTLEVEL_POSITIVE_INTEGER); - } - } catch (NumberFormatException nfe) { - intp.println(ConsoleMsg.STARTLEVEL_POSITIVE_INTEGER); - } - return retval; - } - - /** - * Given a bundle, return the string describing that bundle's state. - * - * @param bundle A bundle to return the state of - * @return A String describing the state - */ - protected String getStateName(Bundle bundle) { - int state = bundle.getState(); - switch (state) { - case Bundle.UNINSTALLED : - return "UNINSTALLED "; //$NON-NLS-1$ - - case Bundle.INSTALLED : - if (isDisabled(bundle)) { - return "<DISABLED> "; //$NON-NLS-1$ - } - return "INSTALLED "; //$NON-NLS-1$ - - case Bundle.RESOLVED : - return "RESOLVED "; //$NON-NLS-1$ - - case Bundle.STARTING : - synchronized (lazyActivation) { - if (lazyActivation.contains(bundle)) { - return "<<LAZY>> "; //$NON-NLS-1$ - } - return "STARTING "; //$NON-NLS-1$ - } - - case Bundle.STOPPING : - return "STOPPING "; //$NON-NLS-1$ - - case Bundle.ACTIVE : - return "ACTIVE "; //$NON-NLS-1$ - - default : - return Integer.toHexString(state); - } - } - - private boolean isDisabled(Bundle bundle) { - boolean disabled = false; - ServiceReference<?> platformAdminRef = null; - try { - platformAdminRef = context.getServiceReference(PlatformAdmin.class.getName()); - if (platformAdminRef != null) { - PlatformAdmin platAdmin = (PlatformAdmin) context.getService(platformAdminRef); - if (platAdmin != null) { - State state = platAdmin.getState(false); - BundleDescription bundleDesc = state.getBundle(bundle.getBundleId()); - DisabledInfo[] disabledInfos = state.getDisabledInfos(bundleDesc); - if ((disabledInfos != null) && (disabledInfos.length != 0)) { - disabled = true; - } - } - } - } finally { - if (platformAdminRef != null) - context.ungetService(platformAdminRef); - } - return disabled; - } - - /** - * Answers all thread groups in the system. - * - * @return An array of all thread groups. - */ - protected ThreadGroup[] getThreadGroups() { - ThreadGroup tg = getTopThreadGroup(); - ThreadGroup[] groups = new ThreadGroup[tg.activeGroupCount()]; - int count = tg.enumerate(groups, true); - if (count == groups.length) { - return groups; - } - // get rid of null entries - ThreadGroup[] ngroups = new ThreadGroup[count]; - System.arraycopy(groups, 0, ngroups, 0, count); - return ngroups; - } - - /** - * Answers the top level group of the current thread. - * <p> - * It is the 'system' or 'main' thread group under - * which all 'user' thread groups are allocated. - * - * @return The parent of all user thread groups. - */ - protected ThreadGroup getTopThreadGroup() { - ThreadGroup topGroup = Thread.currentThread().getThreadGroup(); - if (topGroup != null) { - while (topGroup.getParent() != null) { - topGroup = topGroup.getParent(); - } - } - return topGroup; - } - - /** - * Returns the simple class name of an object. - * - * @param o The object for which a class name is requested - * @return The simple class name. - */ - public String simpleClassName(Object o) { - java.util.StringTokenizer t = new java.util.StringTokenizer(o.getClass().getName(), "."); //$NON-NLS-1$ - int ct = t.countTokens(); - for (int i = 1; i < ct; i++) { - t.nextToken(); - } - return t.nextToken(); - } - - public void _getprop(CommandInterpreter ci) throws Exception { - Properties allProperties = FrameworkProperties.getProperties(); - String filter = ci.nextArgument(); - Iterator<?> propertyNames = new TreeSet<Object>(allProperties.keySet()).iterator(); - while (propertyNames.hasNext()) { - String prop = (String) propertyNames.next(); - if (filter == null || prop.startsWith(filter)) { - ci.println(prop + '=' + allProperties.getProperty(prop)); - } - } - } - - /** - * This is used to track lazily activated bundles. - */ - public void bundleChanged(BundleEvent event) { - int type = event.getType(); - Bundle bundle = event.getBundle(); - synchronized (lazyActivation) { - switch (type) { - case BundleEvent.LAZY_ACTIVATION : - if (!lazyActivation.contains(bundle)) { - lazyActivation.add(bundle); - } - break; - - default : - lazyActivation.remove(bundle); - break; - } - } - - } -} diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java deleted file mode 100644 index 8ecbcf968..000000000 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java +++ /dev/null @@ -1,209 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2010 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.osgi.framework.internal.core; - -import java.io.*; -import org.eclipse.osgi.framework.console.*; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; - -/** - * This class starts OSGi with a console for development use. - * - * FrameworkConsole provides a printStackTrace method to print Exceptions and their - * nested Exceptions. - */ -public class FrameworkConsole implements Runnable { - /** The stream to receive commands on */ - private final BufferedReader in; - /** The stream to write command results to */ - private final PrintWriter out; - /** The current bundle context */ - private final BundleContext context; - /** A tracker containing the service object of all registered command providers */ - private final ServiceTracker<CommandProvider, CommandProvider> cptracker; - private final ConsoleSession consoleSession; - private final boolean isSystemInOut; - /** Default code page which must be supported by all JVMs */ - static final String defaultEncoding = "iso8859-1"; //$NON-NLS-1$ - /** The current setting for code page */ - static final String encoding = FrameworkProperties.getProperty("osgi.console.encoding", FrameworkProperties.getProperty("file.encoding", defaultEncoding)); //$NON-NLS-1$ //$NON-NLS-2$ - private static final boolean blockOnready = FrameworkProperties.getProperty("osgi.dev") != null || FrameworkProperties.getProperty("osgi.console.blockOnReady") != null; //$NON-NLS-1$ //$NON-NLS-2$ - volatile boolean shutdown = false; - - public FrameworkConsole(BundleContext context, ConsoleSession consoleSession, boolean isSystemInOut, ServiceTracker<CommandProvider, CommandProvider> cptracker) { - this.context = context; - this.cptracker = cptracker; - this.isSystemInOut = isSystemInOut; - this.consoleSession = consoleSession; - in = createBufferedReader(consoleSession.getInput()); - out = createPrintWriter(consoleSession.getOutput()); - } - - /** - * Return a BufferedReader from an InputStream. Handle encoding. - * - * @param _in An InputStream to wrap with a BufferedReader - * @return a BufferedReader - */ - static BufferedReader createBufferedReader(InputStream _in) { - BufferedReader reader; - try { - reader = new BufferedReader(new InputStreamReader(_in, encoding)); - } catch (UnsupportedEncodingException uee) { - // if the encoding is not supported by the jvm, punt and use whatever encodiing there is - reader = new BufferedReader(new InputStreamReader(_in)); - } - return reader; - } - - /** - * Return a PrintWriter from an OutputStream. Handle encoding. - * - * @param _out An OutputStream to wrap with a PrintWriter - * @return a PrintWriter - */ - static PrintWriter createPrintWriter(OutputStream _out) { - PrintWriter writer; - try { - writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(_out, encoding)), true); - } catch (UnsupportedEncodingException uee) { - // if the encoding is not supported by the jvm, punt and use whatever encoding there is - writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(_out)), true); - } - return writer; - } - - /** - * Return the current output PrintWriter - * @return The currently active PrintWriter - */ - public PrintWriter getWriter() { - return out; - } - - /** - * Command Line Interface for OSGi. The method processes the initial commands - * and then reads and processes commands from the console InputStream. - * Command output is written to the console PrintStream. The method will - * loop reading commands from the console InputStream until end-of-file - * is reached. This method will then return. - */ - public void run() { - try { - runConsole(); - } finally { - // ensure the console is shutdown before exiting the thread - shutdown(); - } - } - - private void runConsole() { - // wait to receive commands from console and handle them - //cache the console prompt String - String consolePrompt = "\r\n" + ConsoleMsg.CONSOLE_PROMPT; //$NON-NLS-1$ - while (!shutdown) { - out.print(consolePrompt); - out.flush(); - - String cmdline = null; - try { - if (blockOnready && isSystemInOut) { - // bug 40066: avoid waiting on input stream - apparently generates contention with other native calls - try { - while (!in.ready()) - Thread.sleep(300); - cmdline = in.readLine(); - } catch (InterruptedException e) { - // do nothing; probably got disconnected - } - } else - cmdline = in.readLine(); - } catch (IOException ioe) { - if (!shutdown) - ioe.printStackTrace(out); - } - if (cmdline == null) - // we assume the session is done and break out of the loop. - break; - if (!shutdown) - docommand(cmdline); - } - } - - /** - * Process the args on the command line. - * This method invokes a CommandInterpreter to do the actual work. - * - * @param cmdline a string containing the command line arguments - */ - protected void docommand(String cmdline) { - if (cmdline != null && cmdline.length() > 0) { - CommandInterpreter intcp = new FrameworkCommandInterpreter(cmdline, getServices(), this); - String command = intcp.nextArgument(); - if (command != null) { - intcp.execute(command); - } - } - } - - /** - * Reads a string from standard input until user hits the Enter key. - * - * @return The string read from the standard input without the newline character. - */ - public String getInput() { - String input; - try { - /** The buffered input reader on standard in. */ - input = in.readLine(); - System.out.println("<" + input + ">"); //$NON-NLS-1$//$NON-NLS-2$ - } catch (IOException e) { - input = ""; //$NON-NLS-1$ - } - return input; - } - - /** - * Return an array of service objects for all services - * being tracked by this <tt>ServiceTracker</tt> object. - * - * The array is sorted primarily by descending Service Ranking and - * secondarily by ascending Service ID. - * - * @return Array of service objects; if no service - * are being tracked then an empty array is returned - */ - public CommandProvider[] getServices() { - ServiceReference<CommandProvider>[] serviceRefs = cptracker.getServiceReferences(); - if (serviceRefs == null) - return new CommandProvider[0]; - Util.dsort(serviceRefs, 0, serviceRefs.length); - - CommandProvider[] serviceObjects = new CommandProvider[serviceRefs.length]; - for (int i = 0; i < serviceRefs.length; i++) - serviceObjects[i] = FrameworkConsole.this.context.getService(serviceRefs[i]); - return serviceObjects; - } - - /** - * Stops the console so the thread can be GC'ed - */ - public synchronized void shutdown() { - if (shutdown) - return; - shutdown = true; - consoleSession.close(); - } - -} diff --git a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsoleSession.java b/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsoleSession.java deleted file mode 100644 index 91b7c24d8..000000000 --- a/bundles/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsoleSession.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -package org.eclipse.osgi.framework.internal.core; - -import java.io.*; -import java.net.Socket; -import org.eclipse.osgi.framework.console.ConsoleSession; - -public class FrameworkConsoleSession extends ConsoleSession { - private final Socket s; - private final InputStream in; - private final OutputStream out; - - public FrameworkConsoleSession(InputStream in, OutputStream out, Socket s) { - this.in = in; - this.out = out; - this.s = s; - } - - public synchronized InputStream getInput() { - return in; - } - - public synchronized OutputStream getOutput() { - return out; - } - - public void doClose() { - if (s != null) - try { - s.close(); - } catch (IOException ioe) { - // do nothing - } - if (out != null) - try { - out.close(); - } catch (IOException e) { - // do nothing - } - if (in != null) - try { - in.close(); - } catch (IOException ioe) { - // do nothing - } - } - -} |