001: /*******************************************************************************
002: * Copyright (c) 2006, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.ui.launcher;
011:
012: import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
013: import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
014: import org.eclipse.pde.core.plugin.IPluginModelBase;
015: import org.eclipse.pde.core.plugin.PluginRegistry;
016:
017: /**
018: * Initilizes launch configuration attributes for newly-created OSGi Framework
019: * launch configurations
020: *
021: * <p>
022: * Clients may instantiate or subclass this class
023: * </p>
024: *
025: * @since 3.3
026: */
027: public class OSGiLaunchConfigurationInitializer {
028:
029: protected static final String DEFAULT = "default"; //$NON-NLS-1$
030:
031: /**
032: * Initializes some attributes on a newly-created launch configuration
033: *
034: * @param configuration
035: * the launch configuration
036: */
037: public void initialize(ILaunchConfigurationWorkingCopy configuration) {
038: initializeFrameworkDefaults(configuration);
039: initializeBundleState(configuration);
040: initializeSourcePathProvider(configuration);
041: }
042:
043: /**
044: * Sets the source provider ID
045: *
046: * @param configuration
047: * the launch configuration
048: */
049: protected void initializeSourcePathProvider(
050: ILaunchConfigurationWorkingCopy configuration) {
051: configuration
052: .setAttribute(
053: IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER,
054: PDESourcePathProvider.ID);
055: }
056:
057: /**
058: * Initializes the start level and auto-start attributes
059: *
060: * @param configuration
061: * the launch configuration
062: */
063: protected void initializeFrameworkDefaults(
064: ILaunchConfigurationWorkingCopy configuration) {
065: configuration.setAttribute(
066: IPDELauncherConstants.DEFAULT_AUTO_START, true);
067: configuration.setAttribute(
068: IPDELauncherConstants.DEFAULT_START_LEVEL, 4);
069: }
070:
071: /**
072: * Initializes the checked/unchecked state of bundles
073: *
074: * @param configuration
075: * the launch configuration
076: */
077: protected void initializeBundleState(
078: ILaunchConfigurationWorkingCopy configuration) {
079: StringBuffer explugins = new StringBuffer();
080: StringBuffer wsplugins = new StringBuffer();
081: IPluginModelBase[] models = PluginRegistry.getActiveModels();
082: for (int i = 0; i < models.length; i++) {
083: String id = models[i].getPluginBase().getId();
084: boolean inWorkspace = models[i].getUnderlyingResource() != null;
085: appendBundle(inWorkspace ? wsplugins : explugins, id);
086: }
087: configuration.setAttribute(
088: IPDELauncherConstants.WORKSPACE_BUNDLES, wsplugins
089: .toString());
090: configuration.setAttribute(
091: IPDELauncherConstants.TARGET_BUNDLES, explugins
092: .toString());
093: configuration.setAttribute(IPDELauncherConstants.AUTOMATIC_ADD,
094: true);
095: }
096:
097: private void appendBundle(StringBuffer buffer, String bundleID) {
098: if (buffer.length() > 0)
099: buffer.append(","); //$NON-NLS-1$
100: buffer.append(bundleID);
101: buffer.append("@"); //$NON-NLS-1$
102: buffer.append(getStartLevel(bundleID));
103: buffer.append(":"); //$NON-NLS-1$
104: buffer.append(getAutoStart(bundleID));
105: }
106:
107: /**
108: * Returns the bundle's start level
109: *
110: * @param bundleID
111: * the bundle ID
112: * @return the start level for the given bundle or the string <code>default</code>
113: */
114: protected String getStartLevel(String bundleID) {
115: return DEFAULT;
116: }
117:
118: /**
119: * Returns whether the bundle should be started automatically
120: * @param bundleID
121: * the bundle ID
122: * @return <code>true</code>, <code>false</code>, or <code>default</code>
123: */
124: protected String getAutoStart(String bundleID) {
125: return DEFAULT;
126: }
127:
128: }
|