Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusan Franklin2009-03-16 16:42:57 +0000
committerSusan Franklin2009-03-16 16:42:57 +0000
commitaffcd2aa6bc32542dcb79f2c4e9a7a94f74e9948 (patch)
tree4e589c7e10a7e4385404f090911b8e70344ac319 /examples/org.eclipse.equinox.p2.examples.rcp.cloud
parent40a8c3115862f986b37a0a37c8192f8fd5bb8e54 (diff)
downloadrt.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')
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/.classpath7
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/.project28
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/.settings/org.eclipse.jdt.core.prefs8
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/META-INF/MANIFEST.MF28
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/build.properties8
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/mail.icobin0 -> 26694 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.gifbin0 -> 983 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.icnsbin0 -> 35301 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample2.gifbin0 -> 318 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample3.gifbin0 -> 173 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.properties17
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/plugin.xml154
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/product_lg.gifbin0 -> 9559 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmpbin0 -> 135600 bytes
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Activator.java104
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Application.java45
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationActionBarAdvisor.java91
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchAdvisor.java21
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ApplicationWorkbenchWindowAdvisor.java30
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/ICommandIds.java15
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/MessagePopupAction.java25
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/NavigationView.java151
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/OpenViewAction.java36
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/Perspective.java25
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/View.java77
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/IHelpContextIds.java14
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/InstallNewSoftwareHandler.java51
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/Messages.java45
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/PreloadingRepositoryHandler.java124
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/UpdateHandler.java97
-rw-r--r--examples/org.eclipse.equinox.p2.examples.rcp.cloud/src/org/eclipse/equinox/p2/examples/rcp/cloud/p2/messages.properties30
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
new file mode 100644
index 000000000..b00006113
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/mail.ico
Binary files differ
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
new file mode 100644
index 000000000..34fb3c9d8
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.gif
Binary files differ
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
new file mode 100644
index 000000000..1e92ccce1
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample.icns
Binary files differ
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
new file mode 100644
index 000000000..252d7ebcb
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample2.gif
Binary files differ
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
new file mode 100644
index 000000000..b949ac948
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/icons/sample3.gif
Binary files differ
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
new file mode 100644
index 000000000..bd95e283f
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/product_lg.gif
Binary files differ
diff --git a/examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmp b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmp
new file mode 100644
index 000000000..d7d2e3032
--- /dev/null
+++ b/examples/org.eclipse.equinox.p2.examples.rcp.cloud/splash.bmp
Binary files differ
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

Back to the top