diff options
author | Susan Franklin | 2009-03-16 16:42:57 +0000 |
---|---|---|
committer | Susan Franklin | 2009-03-16 16:42:57 +0000 |
commit | affcd2aa6bc32542dcb79f2c4e9a7a94f74e9948 (patch) | |
tree | 4e589c7e10a7e4385404f090911b8e70344ac319 /examples/org.eclipse.equinox.p2.examples.rcp.cloud | |
parent | 40a8c3115862f986b37a0a37c8192f8fd5bb8e54 (diff) | |
download | rt.equinox.p2-affcd2aa6bc32542dcb79f2c4e9a7a94f74e9948.tar.gz rt.equinox.p2-affcd2aa6bc32542dcb79f2c4e9a7a94f74e9948.tar.xz rt.equinox.p2-affcd2aa6bc32542dcb79f2c4e9a7a94f74e9948.zip |
initial commit
Diffstat (limited to 'examples/org.eclipse.equinox.p2.examples.rcp.cloud')
31 files changed, 1231 insertions, 0 deletions
diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.classpath b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.classpath new file mode 100644 index 000000000..64c5e31b7 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.classpath @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.project b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.project new file mode 100644 index 000000000..9276cae55 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.project @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.equinox.p2.examples.rcp.cloud</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..88da5d43a --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +#Thu Mar 12 11:04:59 PDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/META-INF/MANIFEST.MF b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/META-INF/MANIFEST.MF new file mode 100644 index 000000000..5a99e7723 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/META-INF/MANIFEST.MF @@ -0,0 +1,28 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: RCP Mail (Cloud Update Example) +Bundle-SymbolicName: org.eclipse.equinox.p2.examples.rcp.cloud; singleton:=true +Bundle-Version: 1.0.0 +Bundle-Activator: org.eclipse.equinox.p2.examples.rcp.cloud.Activator +Bundle-Localization: plugin +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.equinox.p2.ui;bundle-version="1.0.100", + org.eclipse.equinox.p2.metadata;bundle-version="1.0.0", + org.eclipse.equinox.p2.metadata.repository;bundle-version="1.0.0", + org.eclipse.equinox.p2.artifact.repository;bundle-version="1.0.0", + org.eclipse.equinox.p2.extensionlocation;bundle-version="1.0.0", + org.eclipse.equinox.p2.updatesite;bundle-version="1.0.0", + org.eclipse.equinox.p2.director;bundle-version="1.0.100", + org.eclipse.equinox.p2.engine;bundle-version="1.0.100", + org.eclipse.equinox.p2.core;bundle-version="1.0.100", + org.eclipse.ecf;bundle-version="3.0.0", + org.eclipse.ecf.filetransfer;bundle-version="3.0.0", + org.eclipse.ecf.identity;bundle-version="3.0.0", + org.eclipse.ecf.provider.filetransfer;bundle-version="3.0.0", + org.eclipse.ecf.provider.filetransfer.httpclient;bundle-version="3.0.0", + org.apache.commons.codec;bundle-version="1.3.0", + org.apache.commons.httpclient;bundle-version="3.1.0" + +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/build.properties b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/build.properties new file mode 100644 index 000000000..4b6aaf25b --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/build.properties @@ -0,0 +1,8 @@ +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + icons/,\ + product_lg.gif,\ + splash.bmp diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/mail.ico b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/mail.ico Binary files differnew file mode 100644 index 000000000..b00006113 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/mail.ico diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.gif b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.gif Binary files differnew file mode 100644 index 000000000..34fb3c9d8 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.gif diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.icns b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.icns Binary files differnew file mode 100644 index 000000000..1e92ccce1 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.icns diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample2.gif b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample2.gif Binary files differnew file mode 100644 index 000000000..252d7ebcb --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample2.gif diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample3.gif b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample3.gif Binary files differnew file mode 100644 index 000000000..b949ac948 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample3.gif diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.properties b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.properties new file mode 100644 index 000000000..524943912 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.properties @@ -0,0 +1,17 @@ +############################################################################### +# 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 +############################################################################### +# +# RCP Mail Plug-in Resources +# +Update.command=Check for Updates +Update.command.mnemonic=U +Install.command=Install New Software... +Install.command.mnemonic=S diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.xml b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.xml new file mode 100644 index 000000000..632705bd1 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.4"?> +<plugin> + + <extension + id="application" + point="org.eclipse.core.runtime.applications"> + <application> + <run + class="org.eclipse.equinox.p2.examples.rcp.cloud.Application"> + </run> + </application> + </extension> + <extension + point="org.eclipse.ui.perspectives"> + <perspective + name="RCP Perspective" + class="org.eclipse.equinox.p2.examples.rcp.cloud.Perspective" + id="org.eclipse.equinox.p2.examples.rcp.cloud.perspective"> + </perspective> + </extension> + <extension + point="org.eclipse.ui.views"> + <view + name="Message" + allowMultiple="true" + icon="icons/sample2.gif" + class="org.eclipse.equinox.p2.examples.rcp.cloud.View" + id="org.eclipse.equinox.p2.examples.rcp.cloud.view"> + </view> + <view + name="Mailboxes" + allowMultiple="true" + icon="icons/sample3.gif" + class="org.eclipse.equinox.p2.examples.rcp.cloud.NavigationView" + id="org.eclipse.equinox.p2.examples.rcp.cloud.navigationView"> + </view> + </extension> + <extension + point="org.eclipse.ui.commands"> + <category + name="Mail" + id="org.eclipse.equinox.p2.examples.rcp.cloud.category"> + </category> + <command + name="Open Mailbox" + description="Opens a mailbox" + categoryId="org.eclipse.equinox.p2.examples.rcp.cloud.category" + id="org.eclipse.equinox.p2.examples.rcp.cloud.open"> + </command> + <command + name="Open Message Dialog" + description="Open a message dialog" + categoryId="org.eclipse.equinox.p2.examples.rcp.cloud.category" + id="org.eclipse.equinox.p2.examples.rcp.cloud.openMessage"> + </command> + </extension> + <extension + point="org.eclipse.ui.bindings"> + <key + commandId="org.eclipse.equinox.p2.examples.rcp.cloud.open" + schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" + sequence="CTRL+2"> + </key> + <key + commandId="org.eclipse.equinox.p2.examples.rcp.cloud.openMessage" + schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" + sequence="CTRL+3"> + </key> + <key + commandId="org.eclipse.ui.file.exit" + schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" + sequence="CTRL+X"> + </key> + </extension> + <extension + id="product" + point="org.eclipse.core.runtime.products"> + <product + application="org.eclipse.equinox.p2.examples.rcp.cloud.application" + name="RCP Mail Example (Cloud Update)"> + <property + name="aboutText" + value="RCP Mail template created by PDE"> + </property> + <property + name="windowImages" + value="icons/sample2.gif"> + </property> + <property + name="aboutImage" + value="product_lg.gif"> + </property> + </product> + </extension> + <extension + point="org.eclipse.ui.installationPages"> + <page + name="%installedSoftwarePage" + class="org.eclipse.equinox.internal.provisional.p2.ui.dialogs.InstalledSoftwarePage" + id="10.org.eclipse.equinox.internal.p2.ui.sdk.InstalledSoftwarePage"> + </page> + <page + name="%installHistoryPage" + class="org.eclipse.equinox.internal.provisional.p2.ui.dialogs.RevertProfilePage" + id="11.org.eclipse.equinox.internal.p2.ui.sdk.RevertProfilePage"> + </page> + + </extension> + <extension + point="org.eclipse.ui.commands"> + <command + name="%Update.command" + id="org.eclipse.equinox.p2.ui.sdk.update"> + </command> + <command + name="%Install.command" + id="org.eclipse.equinox.p2.ui.sdk.install"> + </command> + </extension> + <extension + point="org.eclipse.ui.handlers"> + <handler + commandId="org.eclipse.equinox.p2.ui.sdk.update" + class="org.eclipse.equinox.p2.examples.rcp.cloud.p2.UpdateHandler"> + </handler> + <handler + commandId="org.eclipse.equinox.p2.ui.sdk.install" + class="org.eclipse.equinox.p2.examples.rcp.cloud.p2.InstallNewSoftwareHandler"> + </handler> + </extension> + <extension + point="org.eclipse.ui.menus"> + <menuContribution + locationURI="menu:help?after=additions"> + <command + commandId="org.eclipse.equinox.p2.ui.sdk.update" + mnemonic="%Update.command.mnemonic" + id="org.eclipse.equinox.p2.ui.sdk.update"> + </command> + + </menuContribution> + <menuContribution + locationURI="menu:help?after=org.eclipse.equinox.p2.ui.sdk.update"> + <command + commandId="org.eclipse.equinox.p2.ui.sdk.install" + mnemonic="%Install.command.mnemonic" + id="org.eclipse.equinox.p2.ui.sdk.install"> + </command> + + </menuContribution> + </extension> + +</plugin> diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/product_lg.gif b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/product_lg.gif Binary files differnew file mode 100644 index 000000000..bd95e283f --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/product_lg.gif diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmp b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmp Binary files differnew file mode 100644 index 000000000..d7d2e3032 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmp diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Activator.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Activator.java new file mode 100644 index 000000000..84708ee1a --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Activator.java @@ -0,0 +1,104 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import java.net.URI; +import java.net.URISyntaxException; + +import org.eclipse.core.runtime.URIUtil; +import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.engine.IProfileRegistry; +import org.eclipse.equinox.internal.provisional.p2.ui.ProfileFactory; +import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; +import org.eclipse.equinox.internal.provisional.p2.ui.operations.ProvisioningUtil; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.IProfileChooser; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.statushandlers.StatusManager; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.eclipse.equinox.p2.examples.rcp.cloud"; + + // The shared instance + private static Activator plugin; + + // The update site used for this product + private static final String CLOUD_UPDATE_SITE = "http://www.eclipse.org/equinox/p2/testing/updateSite"; + + /** + * The constructor + */ + public Activator() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + initializeP2Policies(); + initializeP2Repositories(); + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + + /** + * Returns an image descriptor for the image file at the given + * plug-in relative path + * + * @param path the path + * @return the image descriptor + */ + public static ImageDescriptor getImageDescriptor(String path) { + return imageDescriptorFromPlugin(PLUGIN_ID, path); + } + + private void initializeP2Policies() { + Policy policy = Policy.getDefault(); + // Where a profile must be chosen, use the running profile + policy.setProfileChooser(new IProfileChooser() { + public String getProfileId(Shell shell) { + return ProfileFactory.makeProfile("Canned").getProfileId(); + } + }); + // User has no access to manipulate repositories + policy.setRepositoryManipulator(null); + } + + // This should really be done at product build time + private void initializeP2Repositories() { + try { + URI uri = URIUtil.fromString(CLOUD_UPDATE_SITE); + ProvisioningUtil.addMetadataRepository(uri, false); + ProvisioningUtil.addArtifactRepository(uri, false); + } catch (ProvisionException e) { + ProvUI.handleException(e, null, StatusManager.SHOW | StatusManager.LOG); + } catch (URISyntaxException e) { + ProvUI.handleException(e, null, StatusManager.SHOW | StatusManager.LOG); + } + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Application.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Application.java new file mode 100644 index 000000000..cf495c34d --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Application.java @@ -0,0 +1,45 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.equinox.app.IApplication; +import org.eclipse.equinox.app.IApplicationContext; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.PlatformUI; + +/** + * This class controls all aspects of the application's execution + */ +public class Application implements IApplication { + + /* (non-Javadoc) + * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) + */ + public Object start(IApplicationContext context) { + Display display = PlatformUI.createDisplay(); + try { + int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); + if (returnCode == PlatformUI.RETURN_RESTART) { + return IApplication.EXIT_RESTART; + } + return IApplication.EXIT_OK; + } finally { + display.dispose(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.equinox.app.IApplication#stop() + */ + public void stop() { + final IWorkbench workbench = PlatformUI.getWorkbench(); + if (workbench == null) + return; + final Display display = workbench.getDisplay(); + display.syncExec(new Runnable() { + public void run() { + if (!display.isDisposed()) + workbench.close(); + } + }); + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationActionBarAdvisor.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationActionBarAdvisor.java new file mode 100644 index 000000000..ea76f4c68 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationActionBarAdvisor.java @@ -0,0 +1,91 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.GroupMarker; +import org.eclipse.jface.action.ICoolBarManager; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.action.ToolBarContributionItem; +import org.eclipse.jface.action.ToolBarManager; +import org.eclipse.swt.SWT; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; +import org.eclipse.ui.application.ActionBarAdvisor; +import org.eclipse.ui.application.IActionBarConfigurer; + +/** + * An action bar advisor is responsible for creating, adding, and disposing of the + * actions added to a workbench window. Each window will be populated with + * new actions. + */ +public class ApplicationActionBarAdvisor extends ActionBarAdvisor { + + // Actions - important to allocate these only in makeActions, and then use them + // in the fill methods. This ensures that the actions aren't recreated + // when fillActionBars is called with FILL_PROXY. + private IWorkbenchAction exitAction; + private IWorkbenchAction aboutAction; + private IWorkbenchAction newWindowAction; + private OpenViewAction openViewAction; + private Action messagePopupAction; + + + public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { + super(configurer); + } + + protected void makeActions(final IWorkbenchWindow window) { + // Creates the actions and registers them. + // Registering is needed to ensure that key bindings work. + // The corresponding commands keybindings are defined in the plugin.xml file. + // Registering also provides automatic disposal of the actions when + // the window is closed. + + exitAction = ActionFactory.QUIT.create(window); + register(exitAction); + + aboutAction = ActionFactory.ABOUT.create(window); + register(aboutAction); + + newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); + register(newWindowAction); + + openViewAction = new OpenViewAction(window, "Open Another Message View", View.ID); + register(openViewAction); + + messagePopupAction = new MessagePopupAction("Open Message", window); + register(messagePopupAction); + } + + protected void fillMenuBar(IMenuManager menuBar) { + MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE); + MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP); + + menuBar.add(fileMenu); + // Add a group marker indicating where action set menus will appear. + menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); + menuBar.add(helpMenu); + + // File + fileMenu.add(newWindowAction); + fileMenu.add(new Separator()); + fileMenu.add(messagePopupAction); + fileMenu.add(openViewAction); + fileMenu.add(new Separator()); + fileMenu.add(exitAction); + + // Help + helpMenu.add(aboutAction); + } + + protected void fillCoolBar(ICoolBarManager coolBar) { + IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); + coolBar.add(new ToolBarContributionItem(toolbar, "main")); + toolbar.add(openViewAction); + toolbar.add(messagePopupAction); + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchAdvisor.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchAdvisor.java new file mode 100644 index 000000000..717a4fa7c --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchAdvisor.java @@ -0,0 +1,21 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.ui.application.IWorkbenchWindowConfigurer; +import org.eclipse.ui.application.WorkbenchAdvisor; +import org.eclipse.ui.application.WorkbenchWindowAdvisor; + +/** + * This workbench advisor creates the window advisor, and specifies + * the perspective id for the initial window. + */ +public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { + + public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { + return new ApplicationWorkbenchWindowAdvisor(configurer); + } + + public String getInitialWindowPerspectiveId() { + return Perspective.ID; + } + +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchWindowAdvisor.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchWindowAdvisor.java new file mode 100644 index 000000000..9e806ba7f --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchWindowAdvisor.java @@ -0,0 +1,30 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.swt.graphics.Point; +import org.eclipse.ui.application.ActionBarAdvisor; +import org.eclipse.ui.application.IActionBarConfigurer; +import org.eclipse.ui.application.IWorkbenchWindowConfigurer; +import org.eclipse.ui.application.WorkbenchWindowAdvisor; + +public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { + + public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { + super(configurer); + } + + public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) { + return new ApplicationActionBarAdvisor(configurer); + } + + public void preWindowOpen() { + IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); + configurer.setInitialSize(new Point(600, 400)); + configurer.setShowCoolBar(true); + // Set the status line and progress indicator so that update + // information can be shown there + configurer.setShowStatusLine(true); + configurer.setShowProgressIndicator(true); + + } + +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ICommandIds.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ICommandIds.java new file mode 100644 index 000000000..6bf884ccb --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ICommandIds.java @@ -0,0 +1,15 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +/** + * Interface defining the application's command IDs. + * Key bindings can be defined for specific commands. + * To associate an action with a command, use IAction.setActionDefinitionId(commandId). + * + * @see org.eclipse.jface.action.IAction#setActionDefinitionId(String) + */ +public interface ICommandIds { + + public static final String CMD_OPEN = "org.eclipse.equinox.p2.examples.rcp.cloud.open"; + public static final String CMD_OPEN_MESSAGE = "org.eclipse.equinox.p2.examples.rcp.cloud.openMessage"; + +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/MessagePopupAction.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/MessagePopupAction.java new file mode 100644 index 000000000..85324bae0 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/MessagePopupAction.java @@ -0,0 +1,25 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.ui.IWorkbenchWindow; + + +public class MessagePopupAction extends Action { + + private final IWorkbenchWindow window; + + MessagePopupAction(String text, IWorkbenchWindow window) { + super(text); + this.window = window; + // The id is used to refer to the action in a menu or toolbar + setId(ICommandIds.CMD_OPEN_MESSAGE); + // Associate the action with a pre-defined command, to allow key bindings. + setActionDefinitionId(ICommandIds.CMD_OPEN_MESSAGE); + setImageDescriptor(org.eclipse.equinox.p2.examples.rcp.cloud.Activator.getImageDescriptor("/icons/sample3.gif")); + } + + public void run() { + MessageDialog.openInformation(window.getShell(), "Open", "Open Message Dialog!"); + } +}
\ No newline at end of file diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/NavigationView.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/NavigationView.java new file mode 100644 index 000000000..c58a55812 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/NavigationView.java @@ -0,0 +1,151 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import java.util.ArrayList; + +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; + +public class NavigationView extends ViewPart { + public static final String ID = "org.eclipse.equinox.p2.examples.rcp.cloud.navigationView"; + private TreeViewer viewer; + + class TreeObject { + private String name; + private TreeParent parent; + + public TreeObject(String name) { + this.name = name; + } + public String getName() { + return name; + } + public void setParent(TreeParent parent) { + this.parent = parent; + } + public TreeParent getParent() { + return parent; + } + public String toString() { + return getName(); + } + } + + class TreeParent extends TreeObject { + private ArrayList children; + public TreeParent(String name) { + super(name); + children = new ArrayList(); + } + public void addChild(TreeObject child) { + children.add(child); + child.setParent(this); + } + public void removeChild(TreeObject child) { + children.remove(child); + child.setParent(null); + } + public TreeObject[] getChildren() { + return (TreeObject[]) children.toArray(new TreeObject[children.size()]); + } + public boolean hasChildren() { + return children.size()>0; + } + } + + class ViewContentProvider implements IStructuredContentProvider, + ITreeContentProvider { + + public void inputChanged(Viewer v, Object oldInput, Object newInput) { + } + + public void dispose() { + } + + public Object[] getElements(Object parent) { + return getChildren(parent); + } + + public Object getParent(Object child) { + if (child instanceof TreeObject) { + return ((TreeObject)child).getParent(); + } + return null; + } + + public Object[] getChildren(Object parent) { + if (parent instanceof TreeParent) { + return ((TreeParent)parent).getChildren(); + } + return new Object[0]; + } + + public boolean hasChildren(Object parent) { + if (parent instanceof TreeParent) + return ((TreeParent)parent).hasChildren(); + return false; + } + } + + class ViewLabelProvider extends LabelProvider { + + public String getText(Object obj) { + return obj.toString(); + } + public Image getImage(Object obj) { + String imageKey = ISharedImages.IMG_OBJ_ELEMENT; + if (obj instanceof TreeParent) + imageKey = ISharedImages.IMG_OBJ_FOLDER; + return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey); + } + } + + /** + * We will set up a dummy model to initialize tree heararchy. In real + * code, you will connect to a real model and expose its hierarchy. + */ + private TreeObject createDummyModel() { + TreeObject to1 = new TreeObject("Inbox"); + TreeObject to2 = new TreeObject("Drafts"); + TreeObject to3 = new TreeObject("Sent"); + TreeParent p1 = new TreeParent("me@this.com"); + p1.addChild(to1); + p1.addChild(to2); + p1.addChild(to3); + + TreeObject to4 = new TreeObject("Inbox"); + TreeParent p2 = new TreeParent("other@aol.com"); + p2.addChild(to4); + + TreeParent root = new TreeParent(""); + root.addChild(p1); + root.addChild(p2); + return root; + } + + /** + * This is a callback that will allow us to create the viewer and initialize + * it. + */ + public void createPartControl(Composite parent) { + viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); + viewer.setContentProvider(new ViewContentProvider()); + viewer.setLabelProvider(new ViewLabelProvider()); + viewer.setInput(createDummyModel()); + } + + /** + * Passing the focus request to the viewer's control. + */ + public void setFocus() { + viewer.getControl().setFocus(); + } +}
\ No newline at end of file diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/OpenViewAction.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/OpenViewAction.java new file mode 100644 index 000000000..317e07342 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/OpenViewAction.java @@ -0,0 +1,36 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PartInitException; + + +public class OpenViewAction extends Action { + + private final IWorkbenchWindow window; + private int instanceNum = 0; + private final String viewId; + + public OpenViewAction(IWorkbenchWindow window, String label, String viewId) { + this.window = window; + this.viewId = viewId; + setText(label); + // The id is used to refer to the action in a menu or toolbar + setId(ICommandIds.CMD_OPEN); + // Associate the action with a pre-defined command, to allow key bindings. + setActionDefinitionId(ICommandIds.CMD_OPEN); + setImageDescriptor(org.eclipse.equinox.p2.examples.rcp.cloud.Activator.getImageDescriptor("/icons/sample2.gif")); + } + + public void run() { + if(window != null) { + try { + window.getActivePage().showView(viewId, Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE); + } catch (PartInitException e) { + MessageDialog.openError(window.getShell(), "Error", "Error opening view:" + e.getMessage()); + } + } + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Perspective.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Perspective.java new file mode 100644 index 000000000..63299ce7e --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Perspective.java @@ -0,0 +1,25 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class Perspective implements IPerspectiveFactory { + + /** + * The ID of the perspective as specified in the extension. + */ + public static final String ID = "org.eclipse.equinox.p2.examples.rcp.cloud.perspective"; + + public void createInitialLayout(IPageLayout layout) { + String editorArea = layout.getEditorArea(); + layout.setEditorAreaVisible(false); + + layout.addStandaloneView(NavigationView.ID, false, IPageLayout.LEFT, 0.25f, editorArea); + IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea); + folder.addPlaceholder(View.ID + ":*"); + folder.addView(View.ID); + + layout.getViewLayout(NavigationView.ID).setCloseable(false); + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/View.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/View.java new file mode 100644 index 000000000..d215e5b2c --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/View.java @@ -0,0 +1,77 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud; + +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Link; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.part.ViewPart; + +public class View extends ViewPart { + + public static final String ID = "org.eclipse.equinox.p2.examples.rcp.cloud.view"; + + public void createPartControl(Composite parent) { + Composite top = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginHeight = 0; + layout.marginWidth = 0; + top.setLayout(layout); + // top banner + Composite banner = new Composite(top, SWT.NONE); + banner.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL, GridData.VERTICAL_ALIGN_BEGINNING, true, false)); + layout = new GridLayout(); + layout.marginHeight = 5; + layout.marginWidth = 10; + layout.numColumns = 2; + banner.setLayout(layout); + + // setup bold font + Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT); + + Label l = new Label(banner, SWT.WRAP); + l.setText("Subject:"); + l.setFont(boldFont); + l = new Label(banner, SWT.WRAP); + l.setText("This is a message about the cool Eclipse RCP!"); + + l = new Label(banner, SWT.WRAP); + l.setText("From:"); + l.setFont(boldFont); + + final Link link = new Link(banner, SWT.NONE); + link.setText("<a>nicole@mail.org</a>"); + link.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + MessageDialog.openInformation(getSite().getShell(), "Not Implemented", "Imagine the address book or a new message being created now."); + } + }); + + l = new Label(banner, SWT.WRAP); + l.setText("Date:"); + l.setFont(boldFont); + l = new Label(banner, SWT.WRAP); + l.setText("10:34 am"); + // message contents + Text text = new Text(top, SWT.MULTI | SWT.WRAP); + text.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+ + "- add a top-level menu and toolbar with actions\n"+ + "- add keybindings to actions\n" + + "- create views that can't be closed and\n"+ + " multiple instances of the same view\n"+ + "- perspectives with placeholders for new views\n"+ + "- use the default about dialog\n"+ + "- create a product definition\n"); + text.setLayoutData(new GridData(GridData.FILL_BOTH)); + } + + public void setFocus() { + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/IHelpContextIds.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/IHelpContextIds.java new file mode 100644 index 000000000..bf86d89a8 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/IHelpContextIds.java @@ -0,0 +1,14 @@ +package org.eclipse.equinox.p2.examples.rcp.cloud.p2; + +/** + * Help context ids for the P2 SDK + * <p> + * This interface contains constants only; it is not intended to be implemented + * or extended. + * </p> + * @since 3.4 + */ + +public interface IHelpContextIds { + public static final String PREFIX = "org.eclipse.equinox.p2.ui.sdk."; +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/InstallNewSoftwareHandler.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/InstallNewSoftwareHandler.java new file mode 100644 index 000000000..ee450ed58 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/InstallNewSoftwareHandler.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2008 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.equinox.p2.examples.rcp.cloud.p2; + +import org.eclipse.equinox.internal.provisional.p2.ui.IProvHelpContextIds; +import org.eclipse.equinox.internal.provisional.p2.ui.QueryableMetadataRepositoryManager; +import org.eclipse.equinox.internal.provisional.p2.ui.dialogs.InstallWizard; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.ui.PlatformUI; + +/** + * InstallNewSoftwareHandler invokes the install wizard + * + * @since 3.5 + */ +public class InstallNewSoftwareHandler extends PreloadingRepositoryHandler { + + /** + * The constructor. + */ + public InstallNewSoftwareHandler() { + super(); + } + + protected void doExecute(String profileId, QueryableMetadataRepositoryManager manager) { + InstallWizard wizard = new InstallWizard(Policy.getDefault(), profileId, null, null, manager); + WizardDialog dialog = new WizardDialog(getShell(), wizard); + dialog.create(); + PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), IProvHelpContextIds.INSTALL_WIZARD); + + dialog.open(); + } + + protected boolean waitForPreload() { + // If there is no way for the user to manipulate repositories, + // then we may as well wait for existing repos to load so that + // content is available. If the user can manipulate the + // repositories, then we don't wait, because we don't know which + // ones they want to work with. + return Policy.getDefault().getRepositoryManipulator() == null; + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/Messages.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/Messages.java new file mode 100644 index 000000000..8acea0ecb --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/Messages.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2007, 2008 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.equinox.p2.examples.rcp.cloud.p2; + +import org.eclipse.osgi.util.NLS; + +/** + * Message class for provisioning UI messages. + * + * @since 3.4 + */ +public class Messages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.equinox.p2.examples.rcp.cloud.p2.messages"; //$NON-NLS-1$ + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, Messages.class); + } + public static String Handler_CannotLaunchUI; + public static String Handler_SDKUpdateUIMessageTitle; + public static String InstallNewSoftwareHandler_LoadRepositoryJobLabel; + public static String ProvisioningPreferencePage_AlwaysOpenWizard; + public static String ProvisioningPreferencePage_BrowsingPrefsGroup; + public static String ProvisioningPreferencePage_ShowLatestVersions; + public static String ProvisioningPreferencePage_ShowAllVersions; + public static String ProvisioningPreferencePage_NeverOpenWizard; + public static String ProvisioningPreferencePage_OpenWizardIfInvalid; + public static String ProvisioningPreferencePage_PromptToOpenWizard; + public static String ProvSDKUIActivator_ErrorWritingLicenseRegistry; + public static String ProvSDKUIActivator_LicenseManagerReadError; + public static String ProvSDKUIActivator_NoSelfProfile; + public static String ProvSDKUIActivator_OpenWizardAnyway; + public static String ProvSDKUIActivator_Question; + public static String ProvSDKUIActivator_SitePrefLink; + public static String UpdateHandler_NoSitesMessage; + public static String UpdateHandler_NoSitesTitle; +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/PreloadingRepositoryHandler.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/PreloadingRepositoryHandler.java new file mode 100644 index 000000000..8b2213a0c --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/PreloadingRepositoryHandler.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2008, 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.equinox.p2.examples.rcp.cloud.p2; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.runtime.*; +import org.eclipse.core.runtime.jobs.*; +import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.engine.IProfileRegistry; +import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; +import org.eclipse.equinox.internal.provisional.p2.ui.QueryableMetadataRepositoryManager; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.PlatformUI; + +/** + * PreloadingRepositoryHandler provides background loading of repositories + * before executing the provisioning handler. + * + * @since 3.5 + */ +abstract class PreloadingRepositoryHandler extends AbstractHandler { + + Object LOAD_FAMILY = new Object(); + + /** + * The constructor. + */ + public PreloadingRepositoryHandler() { + // constructor + } + + /** + * Execute the command. + */ + public Object execute(ExecutionEvent event) { + final String profileId = IProfileRegistry.SELF; + BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { + public void run() { + doExecuteAndLoad(profileId, preloadRepositories()); + } + }); + return null; + } + + void doExecuteAndLoad(final String profileId, boolean preloadRepositories) { + // cancel any load that is already running + Job.getJobManager().cancel(LOAD_FAMILY); + final QueryableMetadataRepositoryManager queryableManager = new QueryableMetadataRepositoryManager( + Policy.getDefault().getQueryContext(), false); + if (preloadRepositories) { + Job loadJob = new Job( + Messages.InstallNewSoftwareHandler_LoadRepositoryJobLabel) { + + protected IStatus run(IProgressMonitor monitor) { + queryableManager.loadAll(monitor); + return Status.OK_STATUS; + } + + public boolean belongsTo(Object family) { + return family == LOAD_FAMILY; + } + + }; + if (waitForPreload()) { + loadJob.addJobChangeListener(new JobChangeAdapter() { + public void done(IJobChangeEvent event) { + if (PlatformUI.isWorkbenchRunning()) + if (event.getResult().isOK()) { + PlatformUI.getWorkbench().getDisplay() + .asyncExec(new Runnable() { + public void run() { + doExecute(profileId, + queryableManager); + } + }); + } + } + }); + loadJob.setUser(true); + loadJob.schedule(); + + } else { + loadJob.setSystem(true); + loadJob.setUser(false); + loadJob.schedule(); + doExecute(profileId, queryableManager); + } + } else { + doExecute(profileId, queryableManager); + } + } + + protected abstract void doExecute(String profileId, + QueryableMetadataRepositoryManager manager); + + protected boolean preloadRepositories() { + return true; + } + + protected boolean waitForPreload() { + return true; + } + + /** + * Return a shell appropriate for parenting dialogs of this handler. + * + * @return a Shell + */ + protected Shell getShell() { + return ProvUI.getDefaultParentShell(); + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/UpdateHandler.java b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/UpdateHandler.java new file mode 100644 index 000000000..1668b09b3 --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/UpdateHandler.java @@ -0,0 +1,97 @@ +/******************************************************************************* + * Copyright (c) 2007, 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.equinox.p2.examples.rcp.cloud.p2; + +import java.util.Collection; +import java.util.Iterator; + +import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.internal.provisional.p2.ui.ElementQueryDescriptor; +import org.eclipse.equinox.internal.provisional.p2.ui.ProvUI; +import org.eclipse.equinox.internal.provisional.p2.ui.QueryableMetadataRepositoryManager; +import org.eclipse.equinox.internal.provisional.p2.ui.actions.UpdateAction; +import org.eclipse.equinox.internal.provisional.p2.ui.model.ProfileElement; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.Policy; +import org.eclipse.equinox.internal.provisional.p2.ui.policy.RepositoryManipulator; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.StructuredSelection; + +/** + * UpdateHandler invokes the check for updates UI + * + * @since 3.4 + */ +public class UpdateHandler extends PreloadingRepositoryHandler { + + boolean hasNoRepos = false; + + /** + * The constructor. + */ + public UpdateHandler() { + // constructor + } + + protected void doExecute(String profileId, QueryableMetadataRepositoryManager manager) { + if (hasNoRepos) { + boolean goToSites = MessageDialog.openQuestion(getShell(), Messages.UpdateHandler_NoSitesTitle, Messages.UpdateHandler_NoSitesMessage); + if (goToSites) { + Policy.getDefault().getRepositoryManipulator().manipulateRepositories(getShell()); + } + return; + } + // get the profile roots + ElementQueryDescriptor queryDescriptor = Policy.getDefault().getQueryProvider().getQueryDescriptor(new ProfileElement(null, profileId)); + Collection collection = queryDescriptor.performQuery(null); + final IInstallableUnit[] roots = new IInstallableUnit[collection.size()]; + Iterator iter = collection.iterator(); + int i = 0; + while (iter.hasNext()) { + roots[i] = (IInstallableUnit) ProvUI.getAdapter(iter.next(), IInstallableUnit.class); + i++; + } + // now create an update action whose selection is all the roots + UpdateAction action = new UpdateAction(Policy.getDefault(), new ISelectionProvider() { + + public void addSelectionChangedListener(ISelectionChangedListener listener) { + // not dynamic + } + + public ISelection getSelection() { + return new StructuredSelection(roots); + } + + public void removeSelectionChangedListener(ISelectionChangedListener listener) { + // not dynamic + } + + public void setSelection(ISelection selection) { + // not mutable + + } + }, profileId, false); + action.setRepositoryManager(manager); + action.run(); + } + + protected boolean preloadRepositories() { + hasNoRepos = false; + RepositoryManipulator repoMan = Policy.getDefault().getRepositoryManipulator(); + if (repoMan != null && repoMan.getKnownRepositories().length == 0) { + hasNoRepos = true; + return false; + } + return super.preloadRepositories(); + } +} diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/messages.properties b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/messages.properties new file mode 100644 index 000000000..41c5f95db --- /dev/null +++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/messages.properties @@ -0,0 +1,30 @@ +############################################################################### +# Copyright (c) 2007, 2008 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 +############################################################################### + + +Handler_CannotLaunchUI=Cannot launch the Update UI. This installation has not been configured properly for Software Updates. +Handler_SDKUpdateUIMessageTitle=Software Updates +InstallNewSoftwareHandler_LoadRepositoryJobLabel=Contacting Software Sites +ProvSDKUIActivator_ErrorWritingLicenseRegistry=Error writing license registry. Accepted licenses will not be remembered. +ProvSDKUIActivator_LicenseManagerReadError=Error reading license registry. Accepted licenses will not be remembered. +ProvSDKUIActivator_NoSelfProfile=Could not locate the running profile instance. The eclipse.p2.data.area and eclipse.p2.profile properties may not be set correctly in this application's config.ini file. +ProvSDKUIActivator_OpenWizardAnyway=The software items you selected may not be valid with your current installation. Do you want to open the wizard anyway to review the selections? +ProvSDKUIActivator_Question=Question +ProvSDKUIActivator_SitePrefLink=Find more software by working with the <a>'Available Software Sites'</a> preferences. +ProvisioningPreferencePage_AlwaysOpenWizard=&Open the wizard anyway to review or change selections +ProvisioningPreferencePage_BrowsingPrefsGroup=Browsing for updates +ProvisioningPreferencePage_ShowLatestVersions=Show only the &latest versions of available software +ProvisioningPreferencePage_ShowAllVersions=Show all &versions of available software +ProvisioningPreferencePage_NeverOpenWizard=&Report the problems and do not open the wizard +ProvisioningPreferencePage_OpenWizardIfInvalid=When software selected for an install wizard may not be compatible +ProvisioningPreferencePage_PromptToOpenWizard=&Ask me what to do when it happens +UpdateHandler_NoSitesMessage=There are no update sites to search. Do you wish to open the "Available Software Sites" preferences? +UpdateHandler_NoSitesTitle=No Updates Found |