2005-05-23 17:01:40 +00:00
|
|
|
Index: src/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java
|
|
|
|
===================================================================
|
|
|
|
RCS file: /home/eclipse/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java,v
|
|
|
|
retrieving revision 1.18
|
|
|
|
diff -u -r1.18 ModeSelectionPage.java
|
|
|
|
--- src/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java 11 Apr 2005 22:45:30 -0000 1.18
|
|
|
|
+++ src/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java 18 May 2005 01:18:01 -0000
|
|
|
|
@@ -10,17 +10,23 @@
|
|
|
|
*******************************************************************************/
|
|
|
|
package org.eclipse.update.internal.ui.wizards;
|
|
|
|
|
|
|
|
-import org.eclipse.jface.dialogs.*;
|
|
|
|
+import org.eclipse.core.runtime.Platform;
|
|
|
|
import org.eclipse.jface.dialogs.Dialog;
|
|
|
|
+import org.eclipse.jface.dialogs.IDialogSettings;
|
|
|
|
import org.eclipse.swt.SWT;
|
|
|
|
-import org.eclipse.swt.events.*;
|
|
|
|
-import org.eclipse.swt.layout.*;
|
|
|
|
-import org.eclipse.swt.widgets.*;
|
|
|
|
-import org.eclipse.ui.*;
|
|
|
|
+import org.eclipse.swt.events.SelectionAdapter;
|
|
|
|
+import org.eclipse.swt.events.SelectionEvent;
|
|
|
|
+import org.eclipse.swt.layout.GridData;
|
|
|
|
+import org.eclipse.swt.layout.GridLayout;
|
|
|
|
+import org.eclipse.swt.widgets.Button;
|
|
|
|
+import org.eclipse.swt.widgets.Composite;
|
|
|
|
+import org.eclipse.swt.widgets.Control;
|
|
|
|
+import org.eclipse.swt.widgets.Label;
|
|
|
|
+import org.eclipse.ui.PlatformUI;
|
|
|
|
import org.eclipse.update.internal.operations.UpdateUtils;
|
|
|
|
import org.eclipse.update.internal.ui.UpdateUI;
|
|
|
|
import org.eclipse.update.internal.ui.UpdateUIMessages;
|
|
|
|
-import org.eclipse.update.search.*;
|
|
|
|
+import org.eclipse.update.search.UpdateSearchRequest;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*/
|
|
|
|
@@ -65,10 +71,17 @@
|
|
|
|
GridLayout layout = new GridLayout();
|
|
|
|
composite.setLayout(layout);
|
|
|
|
updatesButton = new Button(composite, SWT.RADIO);
|
|
|
|
- updatesButton.setText(UpdateUIMessages.ModeSelectionPage_updates);
|
|
|
|
+ updatesButton.setText(UpdateUIMessages.ModeSelectionPage_updates);
|
|
|
|
updateMode = !getSettings().getBoolean(P_NEW_FEATURES_MODE);
|
|
|
|
+ // don't allow updates if the installation location is readonly
|
|
|
|
+ if (Platform.getInstallLocation().isReadOnly()) {
|
|
|
|
+ updatesButton.setEnabled(false);
|
|
|
|
+ updateMode = false;
|
|
|
|
+ }
|
|
|
|
updatesButton.setSelection(updateMode);
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
final Label updatesText = new Label(composite, SWT.WRAP);
|
|
|
|
updatesText.setText(UpdateUIMessages.ModeSelectionPage_updatesText);
|
|
|
|
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
|
2005-04-20 02:44:10 +00:00
|
|
|
Index: src/org/eclipse/update/internal/ui/wizards/TargetPage.java
|
|
|
|
===================================================================
|
|
|
|
RCS file: /home/eclipse/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/TargetPage.java,v
|
2005-05-23 17:01:40 +00:00
|
|
|
retrieving revision 1.71
|
|
|
|
diff -u -r1.71 TargetPage.java
|
|
|
|
--- src/org/eclipse/update/internal/ui/wizards/TargetPage.java 28 Apr 2005 18:22:31 -0000 1.71
|
|
|
|
+++ src/org/eclipse/update/internal/ui/wizards/TargetPage.java 18 May 2005 01:18:01 -0000
|
|
|
|
@@ -1,420 +1,463 @@
|
|
|
|
-/*******************************************************************************
|
|
|
|
- * Copyright (c) 2000, 2005 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.update.internal.ui.wizards;
|
|
|
|
-
|
2005-04-20 02:44:10 +00:00
|
|
|
-import java.io.*;
|
|
|
|
-import java.util.*;
|
2005-05-23 17:01:40 +00:00
|
|
|
-
|
|
|
|
-import org.eclipse.jface.dialogs.Dialog;
|
2005-04-20 02:44:10 +00:00
|
|
|
-import org.eclipse.jface.resource.*;
|
|
|
|
-import org.eclipse.jface.viewers.*;
|
2005-05-23 17:01:40 +00:00
|
|
|
-import org.eclipse.osgi.util.NLS;
|
2005-04-20 02:44:10 +00:00
|
|
|
-import org.eclipse.swt.*;
|
|
|
|
-import org.eclipse.swt.events.*;
|
|
|
|
-import org.eclipse.swt.graphics.*;
|
|
|
|
-import org.eclipse.swt.layout.*;
|
|
|
|
-import org.eclipse.swt.widgets.*;
|
2005-05-23 17:01:40 +00:00
|
|
|
-import org.eclipse.ui.*;
|
2005-04-20 02:44:10 +00:00
|
|
|
-import org.eclipse.update.configuration.*;
|
|
|
|
-import org.eclipse.update.core.*;
|
|
|
|
-import org.eclipse.update.internal.operations.*;
|
|
|
|
-import org.eclipse.update.internal.ui.*;
|
|
|
|
-import org.eclipse.update.internal.ui.parts.*;
|
|
|
|
-import org.eclipse.update.operations.*;
|
2005-05-23 17:01:40 +00:00
|
|
|
-
|
|
|
|
-public class TargetPage extends BannerPage implements IDynamicPage {
|
|
|
|
- private TableViewer jobViewer;
|
|
|
|
- private IInstallConfiguration config;
|
|
|
|
- private ConfigListener configListener;
|
|
|
|
- private Label requiredSpaceLabel;
|
|
|
|
- private Label availableSpaceLabel;
|
|
|
|
- private IInstallFeatureOperation[] jobs;
|
|
|
|
- //private IInstallFeatureOperation currentJob;
|
|
|
|
- private Label installLocation;
|
|
|
|
- private Button changeLocation;
|
|
|
|
- static HashSet added;
|
|
|
|
-
|
|
|
|
- class JobsContentProvider
|
|
|
|
- extends DefaultContentProvider
|
|
|
|
- implements IStructuredContentProvider {
|
|
|
|
- public Object[] getElements(Object parent) {
|
|
|
|
- return jobs;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- class JobsLabelProvider
|
|
|
|
- extends LabelProvider
|
|
|
|
- implements ITableLabelProvider {
|
|
|
|
-
|
|
|
|
- public Image getColumnImage(Object obj, int col) {
|
|
|
|
- UpdateLabelProvider provider = UpdateUI.getDefault().getLabelProvider();
|
|
|
|
-
|
|
|
|
- IInstallFeatureOperation job = (IInstallFeatureOperation) obj;
|
|
|
|
- ImageDescriptor base =
|
|
|
|
- job.getFeature().isPatch()
|
|
|
|
- ? UpdateUIImages.DESC_EFIX_OBJ
|
|
|
|
- : UpdateUIImages.DESC_FEATURE_OBJ;
|
|
|
|
- int flags = 0;
|
|
|
|
- if (job.getTargetSite() == null)
|
|
|
|
- flags = UpdateLabelProvider.F_ERROR;
|
|
|
|
- return provider.get(base, flags);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public String getColumnText(Object obj, int col) {
|
|
|
|
- if (col == 0) {
|
|
|
|
- IFeature feature = ((IInstallFeatureOperation) obj).getFeature();
|
|
|
|
- return feature.getLabel()
|
|
|
|
- + " " //$NON-NLS-1$
|
|
|
|
- + feature.getVersionedIdentifier().getVersion().toString();
|
|
|
|
- }
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- class ConfigListener implements IInstallConfigurationChangedListener {
|
|
|
|
- public void installSiteAdded(IConfiguredSite csite) {
|
|
|
|
-
|
|
|
|
- // set the site as target for all jobs without a target
|
|
|
|
- for (int i=0; jobs != null && i<jobs.length; i++)
|
|
|
|
- if (jobs[i].getTargetSite() == null && getSiteVisibility(csite, jobs[i])) {
|
|
|
|
- jobs[i].setTargetSite(csite);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- jobViewer.refresh();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void installSiteRemoved(IConfiguredSite csite) {
|
|
|
|
- // remove the target site for all jobs that use it
|
|
|
|
- // set the site as target for all jobs without a target
|
|
|
|
- boolean refreshJobs = false;
|
|
|
|
- for (int i=0; jobs != null && i<jobs.length; i++)
|
|
|
|
- if (jobs[i].getTargetSite() == csite) {
|
|
|
|
- jobs[i].setTargetSite(null);
|
|
|
|
- refreshJobs = true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- pageChanged();
|
|
|
|
-
|
|
|
|
- jobViewer.refresh();
|
|
|
|
- if (refreshJobs) {
|
|
|
|
- jobViewer.getControl().setFocus();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Constructor for ReviewPage2
|
|
|
|
- */
|
|
|
|
- public TargetPage(IInstallConfiguration config) {
|
|
|
|
- super("Target"); //$NON-NLS-1$
|
|
|
|
- setTitle(UpdateUIMessages.InstallWizard_TargetPage_title);
|
|
|
|
- setDescription(UpdateUIMessages.InstallWizard_TargetPage_desc);
|
|
|
|
- this.config = config;
|
|
|
|
- UpdateUI.getDefault().getLabelProvider().connect(this);
|
|
|
|
- configListener = new ConfigListener();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void setJobs(IInstallFeatureOperation[] jobs) {
|
|
|
|
- this.jobs = jobs;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void dispose() {
|
|
|
|
- UpdateUI.getDefault().getLabelProvider().disconnect(this);
|
|
|
|
-// config.removeInstallConfigurationChangedListener(configListener);
|
|
|
|
- super.dispose();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public Control createContents(Composite parent) {
|
|
|
|
- Composite client = new Composite(parent, SWT.NULL);
|
|
|
|
- GridLayout layout = new GridLayout();
|
|
|
|
- layout.numColumns = 3;
|
|
|
|
- layout.marginWidth = layout.marginHeight = 0;
|
|
|
|
- client.setLayout(layout);
|
|
|
|
- client.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
|
|
-
|
|
|
|
- Label label = new Label(client, SWT.NULL);
|
|
|
|
- label.setText(UpdateUIMessages.InstallWizard_TargetPage_jobsLabel);
|
|
|
|
- createJobViewer(client);
|
|
|
|
-
|
|
|
|
- label = new Label(client, SWT.NULL);
|
|
|
|
- label.setText(UpdateUIMessages.InstallWizard_TargetPage_location);
|
|
|
|
- GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
|
|
|
- label.setLayoutData(gd);
|
|
|
|
-
|
|
|
|
- installLocation = new Label(client, SWT.NULL);
|
2005-04-20 02:44:10 +00:00
|
|
|
- installLocation.setText("foo");
|
2005-05-23 17:01:40 +00:00
|
|
|
- gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
|
|
- installLocation.setLayoutData(gd);
|
|
|
|
-
|
|
|
|
- changeLocation = new Button(client, SWT.PUSH);
|
|
|
|
- changeLocation.setText(UpdateUIMessages.InstallWizard_TargetPage_location_change);
|
|
|
|
- changeLocation.addSelectionListener(new SelectionAdapter() {
|
|
|
|
- public void widgetSelected(SelectionEvent e) {
|
|
|
|
- IStructuredSelection selection = (IStructuredSelection) jobViewer.getSelection();
|
|
|
|
- if (selection == null)
|
|
|
|
- return;
|
|
|
|
- IInstallFeatureOperation job = (IInstallFeatureOperation) selection.getFirstElement();
|
|
|
|
- if (job == null)
|
|
|
|
- return;
|
|
|
|
-
|
|
|
|
- TargetSiteDialog dialog = new TargetSiteDialog(getShell(), config, job, configListener);
|
|
|
|
- dialog.create();
|
|
|
|
-
|
|
|
|
- SWTUtil.setDialogSize(dialog, 400, 300);
|
|
|
|
-
|
|
|
|
- dialog.getShell().setText(UpdateUIMessages.SitePage_new);
|
|
|
|
- dialog.open();
|
|
|
|
- setTargetLocation(job);
|
|
|
|
- pageChanged();
|
|
|
|
- jobViewer.refresh();
|
|
|
|
- updateStatus(job.getTargetSite());
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- Composite status = new Composite(client, SWT.NULL);
|
|
|
|
- gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
|
|
|
- gd.horizontalSpan = 3;
|
|
|
|
- status.setLayoutData(gd);
|
|
|
|
- layout = new GridLayout();
|
|
|
|
- layout.numColumns = 2;
|
|
|
|
- status.setLayout(layout);
|
|
|
|
- label = new Label(status, SWT.NULL);
|
|
|
|
- label.setText(UpdateUIMessages.InstallWizard_TargetPage_requiredSpace);
|
|
|
|
- requiredSpaceLabel = new Label(status, SWT.NULL);
|
|
|
|
- requiredSpaceLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
- label = new Label(status, SWT.NULL);
|
|
|
|
- label.setText(UpdateUIMessages.InstallWizard_TargetPage_availableSpace);
|
|
|
|
- availableSpaceLabel = new Label(status, SWT.NULL);
|
|
|
|
- availableSpaceLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
-
|
|
|
|
- PlatformUI.getWorkbench().getHelpSystem().setHelp(client, "org.eclipse.update.ui.MultiTargetPage2"); //$NON-NLS-1$
|
|
|
|
-
|
|
|
|
- Dialog.applyDialogFont(parent);
|
|
|
|
-
|
|
|
|
- return client;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void createJobViewer(Composite parent) {
|
|
|
|
- jobViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
|
|
|
|
- GridData gd = new GridData(GridData.FILL_BOTH);
|
|
|
|
- gd.horizontalSpan = 3;
|
|
|
|
- gd.widthHint = 150;
|
|
|
|
- jobViewer.getTable().setLayoutData(gd);
|
|
|
|
- jobViewer.setContentProvider(new JobsContentProvider());
|
|
|
|
- jobViewer.setLabelProvider(new JobsLabelProvider());
|
|
|
|
-
|
|
|
|
- jobViewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
|
|
|
- public void selectionChanged(SelectionChangedEvent event) {
|
|
|
|
- IStructuredSelection selection = (IStructuredSelection) event.getSelection();
|
|
|
|
- IInstallFeatureOperation job = (IInstallFeatureOperation) selection.getFirstElement();
|
|
|
|
- setTargetLocation(job);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void setVisible(boolean visible) {
|
|
|
|
- if (visible) {
|
|
|
|
- initializeDefaultTargetSites();
|
|
|
|
- jobViewer.setInput(jobs);
|
|
|
|
- if (jobViewer.getSelection().isEmpty() && jobs.length > 0)
|
|
|
|
- jobViewer.setSelection(new StructuredSelection(jobs[0]));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- super.setVisible(visible);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void verifyNotEmpty(boolean empty) {
|
|
|
|
- String errorMessage = null;
|
|
|
|
- if (empty)
|
|
|
|
- errorMessage = UpdateUIMessages.InstallWizard_TargetPage_location_empty;
|
|
|
|
- setErrorMessage(errorMessage);
|
|
|
|
- setPageComplete(!empty);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- private void updateStatus(Object element) {
|
|
|
|
- if (element == null) {
|
|
|
|
- requiredSpaceLabel.setText(""); //$NON-NLS-1$
|
|
|
|
- availableSpaceLabel.setText(""); //$NON-NLS-1$
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- IConfiguredSite site = (IConfiguredSite) element;
|
|
|
|
- File file = new File(site.getSite().getURL().getFile());
|
|
|
|
- long available = LocalSystemInfo.getFreeSpace(file);
|
|
|
|
- long required = computeRequiredSizeFor(site);
|
|
|
|
- if (required <= 0)
|
|
|
|
- requiredSpaceLabel.setText(UpdateUIMessages.InstallWizard_TargetPage_unknownSize);
|
|
|
|
- else
|
|
|
|
- requiredSpaceLabel.setText(
|
|
|
|
- NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_size, "" + required)); //$NON-NLS-1$
|
|
|
|
-
|
|
|
|
- if (available == LocalSystemInfo.SIZE_UNKNOWN)
|
|
|
|
- availableSpaceLabel.setText(UpdateUIMessages.InstallWizard_TargetPage_unknownSize);
|
|
|
|
- else
|
|
|
|
- availableSpaceLabel.setText(
|
|
|
|
- NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_size, "" + available)); //$NON-NLS-1$
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private long computeRequiredSizeFor(IConfiguredSite site) {
|
|
|
|
- long totalSize = 0;
|
|
|
|
- for (int i = 0; i < jobs.length; i++) {
|
|
|
|
- if (site.equals(jobs[i].getTargetSite())) {
|
|
|
|
- long jobSize = site.getSite().getInstallSizeFor(jobs[i].getFeature());
|
|
|
|
- if (jobSize == -1)
|
|
|
|
- return -1;
|
|
|
|
- totalSize += jobSize;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return totalSize;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void pageChanged() {
|
|
|
|
- boolean empty = false;
|
|
|
|
- for (int i=0; jobs!=null && i<jobs.length; i++) {
|
|
|
|
- if (jobs[i].getTargetSite() == null) {
|
|
|
|
- empty = true;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- IFeature feature = jobs[i].getFeature();
|
|
|
|
- if (feature.isPatch()) {
|
|
|
|
- // Patches must go together with the features
|
|
|
|
- // they are patching.
|
|
|
|
-
|
|
|
|
- // Check current jobs
|
|
|
|
- IInstallFeatureOperation patchedFeatureJob = findPatchedFeature(feature);
|
|
|
|
- if (patchedFeatureJob != null
|
|
|
|
- && patchedFeatureJob.getTargetSite() != null
|
|
|
|
- && !jobs[i].getTargetSite().equals(patchedFeatureJob.getTargetSite())) {
|
|
|
|
- String msg = NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_patchError, (new String[] {
|
|
|
|
- feature.getLabel(),
|
|
|
|
- patchedFeatureJob.getFeature().getLabel()}));
|
|
|
|
- setErrorMessage(msg);
|
|
|
|
- setPageComplete(false);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- // Check installed features
|
|
|
|
- IFeature patchedFeature = UpdateUtils.getPatchedFeature(feature);
|
|
|
|
- if (patchedFeature != null
|
|
|
|
- && !jobs[i].getTargetSite().equals(patchedFeature.getSite().getCurrentConfiguredSite())) {
|
|
|
|
- String msg = NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_patchError2, (new String[] {
|
|
|
|
- feature.getLabel(),
|
|
|
|
- patchedFeature.getLabel(),
|
|
|
|
- patchedFeature.getSite().getCurrentConfiguredSite().getSite().getURL().getFile()}));
|
|
|
|
- setErrorMessage(msg);
|
|
|
|
- setPageComplete(false);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- verifyNotEmpty(empty);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- private boolean getSiteVisibility(IConfiguredSite site, IInstallFeatureOperation job) {
|
|
|
|
- // Do not allow installing into a non-updateable site
|
|
|
|
- if (!site.isUpdatable())
|
|
|
|
- return false;
|
|
|
|
-
|
|
|
|
- // If affinity site is known, only it should be shown
|
|
|
|
- IConfiguredSite affinitySite = UpdateUtils.getAffinitySite(config, job.getFeature());
|
|
|
|
- if (affinitySite != null) {
|
|
|
|
- // Must compare referenced sites because
|
|
|
|
- // configured sites themselves may come from
|
|
|
|
- // different configurations
|
|
|
|
- return site.getSite().equals(affinitySite.getSite());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Co-locate updates with the old feature
|
|
|
|
- if (job.getOldFeature() != null) {
|
|
|
|
- IConfiguredSite oldSite = UpdateUtils.getSiteWithFeature(config, job.getOldFeature().getVersionedIdentifier().getIdentifier());
|
|
|
|
- return (site == oldSite);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Allow installing into any site that is updateable and there is no affinity specified
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void initializeDefaultTargetSites() {
|
|
|
|
- for (int i = 0; i < jobs.length; i++) {
|
|
|
|
- if (jobs[i].getTargetSite() != null)
|
|
|
|
- continue;
|
|
|
|
-
|
|
|
|
- IConfiguredSite affinitySite = UpdateUtils.getAffinitySite(config, jobs[i].getFeature());
|
|
|
|
- if (affinitySite != null) {
|
|
|
|
- jobs[i].setTargetSite(affinitySite);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- IConfiguredSite defaultSite = UpdateUtils.getDefaultTargetSite(config, jobs[i], false);
|
|
|
|
- if (defaultSite != null) {
|
|
|
|
- jobs[i].setTargetSite(defaultSite);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
-
|
2005-04-20 02:44:10 +00:00
|
|
|
- jobs[i].setTargetSite(getFirstTargetSite(jobs[i]));
|
2005-04-20 16:48:00 +00:00
|
|
|
-
|
2005-05-23 17:01:40 +00:00
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- private IConfiguredSite getFirstTargetSite(IInstallFeatureOperation job) {
|
|
|
|
- IConfiguredSite[] sites = config.getConfiguredSites();
|
|
|
|
- for (int i = 0; i < sites.length; i++) {
|
|
|
|
- IConfiguredSite csite = sites[i];
|
2005-04-20 16:48:00 +00:00
|
|
|
- if (getSiteVisibility(csite, job))
|
2005-05-23 17:01:40 +00:00
|
|
|
- return csite;
|
|
|
|
- }
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public IInstallFeatureOperation findPatchedFeature(IFeature patch) {
|
|
|
|
- for (int i=0; i<jobs.length; i++) {
|
|
|
|
- IFeature target = jobs[i].getFeature();
|
|
|
|
- if (!target.equals(patch) && UpdateUtils.isPatch(target, patch))
|
|
|
|
- return jobs[i];
|
|
|
|
- }
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- void removeAddedSites() {
|
|
|
|
- if (added != null) {
|
|
|
|
- while (!added.isEmpty()) {
|
|
|
|
- Iterator it = added.iterator();
|
|
|
|
- if (it.hasNext())
|
|
|
|
- config.removeConfiguredSite((IConfiguredSite) it.next());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* (non-Javadoc)
|
|
|
|
- * @see org.eclipse.jface.wizard.IWizardPage#isPageComplete()
|
|
|
|
- */
|
|
|
|
- public boolean isPageComplete() {
|
|
|
|
- // check if all jobs have a target site set
|
|
|
|
- for (int i = 0; jobs != null && i < jobs.length; i++) {
|
|
|
|
- if (jobs[i].getTargetSite() == null)
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- return super.isPageComplete();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * @param job
|
|
|
|
- */
|
|
|
|
- private void setTargetLocation(IInstallFeatureOperation job) {
|
|
|
|
- if (job != null && job.getTargetSite() != null) {
|
|
|
|
- installLocation.setText(new File(job.getTargetSite().getSite().getURL().getFile()).toString());
|
|
|
|
- updateStatus(job.getTargetSite());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
+/*******************************************************************************
|
|
|
|
+ * Copyright (c) 2000, 2005 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.update.internal.ui.wizards;
|
|
|
|
+
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.util.HashSet;
|
|
|
|
+import java.util.Iterator;
|
|
|
|
+
|
|
|
|
+import org.eclipse.core.runtime.CoreException;
|
|
|
|
+import org.eclipse.core.runtime.IStatus;
|
|
|
|
+import org.eclipse.core.runtime.Platform;
|
|
|
|
+import org.eclipse.jface.dialogs.Dialog;
|
|
|
|
+import org.eclipse.jface.resource.ImageDescriptor;
|
|
|
|
+import org.eclipse.jface.viewers.ISelectionChangedListener;
|
|
|
|
+import org.eclipse.jface.viewers.IStructuredContentProvider;
|
|
|
|
+import org.eclipse.jface.viewers.IStructuredSelection;
|
|
|
|
+import org.eclipse.jface.viewers.ITableLabelProvider;
|
|
|
|
+import org.eclipse.jface.viewers.LabelProvider;
|
|
|
|
+import org.eclipse.jface.viewers.SelectionChangedEvent;
|
|
|
|
+import org.eclipse.jface.viewers.StructuredSelection;
|
|
|
|
+import org.eclipse.jface.viewers.TableViewer;
|
|
|
|
+import org.eclipse.osgi.util.NLS;
|
|
|
|
+import org.eclipse.swt.SWT;
|
|
|
|
+import org.eclipse.swt.events.SelectionAdapter;
|
|
|
|
+import org.eclipse.swt.events.SelectionEvent;
|
|
|
|
+import org.eclipse.swt.graphics.Image;
|
|
|
|
+import org.eclipse.swt.layout.GridData;
|
|
|
|
+import org.eclipse.swt.layout.GridLayout;
|
|
|
|
+import org.eclipse.swt.widgets.Button;
|
|
|
|
+import org.eclipse.swt.widgets.Composite;
|
|
|
|
+import org.eclipse.swt.widgets.Control;
|
|
|
|
+import org.eclipse.swt.widgets.Label;
|
|
|
|
+import org.eclipse.ui.PlatformUI;
|
|
|
|
+import org.eclipse.update.configuration.IConfiguredSite;
|
|
|
|
+import org.eclipse.update.configuration.IInstallConfiguration;
|
|
|
|
+import org.eclipse.update.configuration.IInstallConfigurationChangedListener;
|
|
|
|
+import org.eclipse.update.configuration.LocalSystemInfo;
|
|
|
|
+import org.eclipse.update.core.IFeature;
|
|
|
|
+import org.eclipse.update.internal.operations.UpdateUtils;
|
|
|
|
+import org.eclipse.update.internal.ui.UpdateLabelProvider;
|
|
|
|
+import org.eclipse.update.internal.ui.UpdateUI;
|
|
|
|
+import org.eclipse.update.internal.ui.UpdateUIImages;
|
|
|
|
+import org.eclipse.update.internal.ui.UpdateUIMessages;
|
|
|
|
+import org.eclipse.update.internal.ui.parts.DefaultContentProvider;
|
|
|
|
+import org.eclipse.update.internal.ui.parts.SWTUtil;
|
|
|
|
+import org.eclipse.update.operations.IInstallFeatureOperation;
|
|
|
|
+
|
|
|
|
+public class TargetPage extends BannerPage implements IDynamicPage {
|
|
|
|
+ private TableViewer jobViewer;
|
|
|
|
+ private IInstallConfiguration config;
|
|
|
|
+ private ConfigListener configListener;
|
|
|
|
+ private Label requiredSpaceLabel;
|
|
|
|
+ private Label availableSpaceLabel;
|
|
|
|
+ private IInstallFeatureOperation[] jobs;
|
|
|
|
+ //private IInstallFeatureOperation currentJob;
|
|
|
|
+ private Label installLocation;
|
|
|
|
+ private Button changeLocation;
|
|
|
|
+ static HashSet added;
|
|
|
|
+
|
|
|
|
+ class JobsContentProvider
|
|
|
|
+ extends DefaultContentProvider
|
|
|
|
+ implements IStructuredContentProvider {
|
|
|
|
+ public Object[] getElements(Object parent) {
|
|
|
|
+ return jobs;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ class JobsLabelProvider
|
|
|
|
+ extends LabelProvider
|
|
|
|
+ implements ITableLabelProvider {
|
|
|
|
+
|
|
|
|
+ public Image getColumnImage(Object obj, int col) {
|
|
|
|
+ UpdateLabelProvider provider = UpdateUI.getDefault().getLabelProvider();
|
|
|
|
+
|
|
|
|
+ IInstallFeatureOperation job = (IInstallFeatureOperation) obj;
|
|
|
|
+ ImageDescriptor base =
|
|
|
|
+ job.getFeature().isPatch()
|
|
|
|
+ ? UpdateUIImages.DESC_EFIX_OBJ
|
|
|
|
+ : UpdateUIImages.DESC_FEATURE_OBJ;
|
|
|
|
+ int flags = 0;
|
|
|
|
+ if (job.getTargetSite() == null)
|
|
|
|
+ flags = UpdateLabelProvider.F_ERROR;
|
|
|
|
+ return provider.get(base, flags);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public String getColumnText(Object obj, int col) {
|
|
|
|
+ if (col == 0) {
|
|
|
|
+ IFeature feature = ((IInstallFeatureOperation) obj).getFeature();
|
|
|
|
+ return feature.getLabel()
|
|
|
|
+ + " " //$NON-NLS-1$
|
|
|
|
+ + feature.getVersionedIdentifier().getVersion().toString();
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ class ConfigListener implements IInstallConfigurationChangedListener {
|
|
|
|
+ public void installSiteAdded(IConfiguredSite csite) {
|
|
|
|
+
|
|
|
|
+ // set the site as target for all jobs without a target
|
|
|
|
+ for (int i=0; jobs != null && i<jobs.length; i++)
|
|
|
|
+ if (jobs[i].getTargetSite() == null && getSiteVisibility(csite, jobs[i])) {
|
|
|
|
+ jobs[i].setTargetSite(csite);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ jobViewer.refresh();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void installSiteRemoved(IConfiguredSite csite) {
|
|
|
|
+ // remove the target site for all jobs that use it
|
|
|
|
+ // set the site as target for all jobs without a target
|
|
|
|
+ boolean refreshJobs = false;
|
|
|
|
+ for (int i=0; jobs != null && i<jobs.length; i++)
|
|
|
|
+ if (jobs[i].getTargetSite() == csite) {
|
|
|
|
+ jobs[i].setTargetSite(null);
|
|
|
|
+ refreshJobs = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pageChanged();
|
|
|
|
+
|
|
|
|
+ jobViewer.refresh();
|
|
|
|
+ if (refreshJobs) {
|
|
|
|
+ jobViewer.getControl().setFocus();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Constructor for ReviewPage2
|
|
|
|
+ */
|
|
|
|
+ public TargetPage(IInstallConfiguration config) {
|
|
|
|
+ super("Target"); //$NON-NLS-1$
|
|
|
|
+ setTitle(UpdateUIMessages.InstallWizard_TargetPage_title);
|
|
|
|
+ setDescription(UpdateUIMessages.InstallWizard_TargetPage_desc);
|
|
|
|
+ this.config = config;
|
|
|
|
+ UpdateUI.getDefault().getLabelProvider().connect(this);
|
|
|
|
+ configListener = new ConfigListener();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setJobs(IInstallFeatureOperation[] jobs) {
|
|
|
|
+ this.jobs = jobs;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void dispose() {
|
|
|
|
+ UpdateUI.getDefault().getLabelProvider().disconnect(this);
|
|
|
|
+// config.removeInstallConfigurationChangedListener(configListener);
|
|
|
|
+ super.dispose();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public Control createContents(Composite parent) {
|
|
|
|
+ Composite client = new Composite(parent, SWT.NULL);
|
|
|
|
+ GridLayout layout = new GridLayout();
|
|
|
|
+ layout.numColumns = 3;
|
|
|
|
+ layout.marginWidth = layout.marginHeight = 0;
|
|
|
|
+ client.setLayout(layout);
|
|
|
|
+ client.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
|
|
+
|
|
|
|
+ Label label = new Label(client, SWT.NULL);
|
|
|
|
+ label.setText(UpdateUIMessages.InstallWizard_TargetPage_jobsLabel);
|
|
|
|
+ createJobViewer(client);
|
|
|
|
+
|
|
|
|
+ label = new Label(client, SWT.NULL);
|
|
|
|
+ label.setText(UpdateUIMessages.InstallWizard_TargetPage_location);
|
|
|
|
+ GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
|
|
|
+ label.setLayoutData(gd);
|
|
|
|
+
|
|
|
|
+ installLocation = new Label(client, SWT.NULL);
|
|
|
|
+ installLocation.setText("");
|
|
|
|
+ gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
|
|
+ installLocation.setLayoutData(gd);
|
|
|
|
+
|
|
|
|
+ changeLocation = new Button(client, SWT.PUSH);
|
|
|
|
+ changeLocation.setText(UpdateUIMessages.InstallWizard_TargetPage_location_change);
|
|
|
|
+ changeLocation.addSelectionListener(new SelectionAdapter() {
|
|
|
|
+ public void widgetSelected(SelectionEvent e) {
|
|
|
|
+ IStructuredSelection selection = (IStructuredSelection) jobViewer.getSelection();
|
|
|
|
+ if (selection == null)
|
|
|
|
+ return;
|
|
|
|
+ IInstallFeatureOperation job = (IInstallFeatureOperation) selection.getFirstElement();
|
|
|
|
+ if (job == null)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ TargetSiteDialog dialog = new TargetSiteDialog(getShell(), config, job, configListener);
|
|
|
|
+ dialog.create();
|
|
|
|
+
|
|
|
|
+ SWTUtil.setDialogSize(dialog, 400, 300);
|
|
|
|
+
|
|
|
|
+ dialog.getShell().setText(UpdateUIMessages.SitePage_new);
|
|
|
|
+ dialog.open();
|
|
|
|
+ setTargetLocation(job);
|
|
|
|
+ pageChanged();
|
|
|
|
+ jobViewer.refresh();
|
|
|
|
+ updateStatus(job.getTargetSite());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ Composite status = new Composite(client, SWT.NULL);
|
|
|
|
+ gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
|
|
|
|
+ gd.horizontalSpan = 3;
|
|
|
|
+ status.setLayoutData(gd);
|
|
|
|
+ layout = new GridLayout();
|
|
|
|
+ layout.numColumns = 2;
|
|
|
|
+ status.setLayout(layout);
|
|
|
|
+ label = new Label(status, SWT.NULL);
|
|
|
|
+ label.setText(UpdateUIMessages.InstallWizard_TargetPage_requiredSpace);
|
|
|
|
+ requiredSpaceLabel = new Label(status, SWT.NULL);
|
|
|
|
+ requiredSpaceLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
+ label = new Label(status, SWT.NULL);
|
|
|
|
+ label.setText(UpdateUIMessages.InstallWizard_TargetPage_availableSpace);
|
|
|
|
+ availableSpaceLabel = new Label(status, SWT.NULL);
|
|
|
|
+ availableSpaceLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
+
|
|
|
|
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(client, "org.eclipse.update.ui.MultiTargetPage2"); //$NON-NLS-1$
|
|
|
|
+
|
|
|
|
+ Dialog.applyDialogFont(parent);
|
|
|
|
+
|
|
|
|
+ return client;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void createJobViewer(Composite parent) {
|
|
|
|
+ jobViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
|
|
|
|
+ GridData gd = new GridData(GridData.FILL_BOTH);
|
|
|
|
+ gd.horizontalSpan = 3;
|
|
|
|
+ gd.widthHint = 150;
|
|
|
|
+ jobViewer.getTable().setLayoutData(gd);
|
|
|
|
+ jobViewer.setContentProvider(new JobsContentProvider());
|
|
|
|
+ jobViewer.setLabelProvider(new JobsLabelProvider());
|
|
|
|
+
|
|
|
|
+ jobViewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
|
|
|
+ public void selectionChanged(SelectionChangedEvent event) {
|
|
|
|
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
|
|
|
|
+ IInstallFeatureOperation job = (IInstallFeatureOperation) selection.getFirstElement();
|
|
|
|
+ setTargetLocation(job);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void setVisible(boolean visible) {
|
|
|
|
+ if (visible) {
|
|
|
|
+ initializeDefaultTargetSites();
|
|
|
|
+ jobViewer.setInput(jobs);
|
|
|
|
+ if (jobViewer.getSelection().isEmpty() && jobs.length > 0)
|
|
|
|
+ jobViewer.setSelection(new StructuredSelection(jobs[0]));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ super.setVisible(visible);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void verifyNotEmpty(boolean empty) {
|
|
|
|
+ String errorMessage = null;
|
|
|
|
+ if (empty)
|
|
|
|
+ errorMessage = UpdateUIMessages.InstallWizard_TargetPage_location_empty;
|
|
|
|
+ setErrorMessage(errorMessage);
|
|
|
|
+ setPageComplete(!empty);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private void updateStatus(Object element) {
|
|
|
|
+ if (element == null) {
|
|
|
|
+ requiredSpaceLabel.setText(""); //$NON-NLS-1$
|
|
|
|
+ availableSpaceLabel.setText(""); //$NON-NLS-1$
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ IConfiguredSite site = (IConfiguredSite) element;
|
|
|
|
+ File file = new File(site.getSite().getURL().getFile());
|
|
|
|
+ long available = LocalSystemInfo.getFreeSpace(file);
|
|
|
|
+ long required = computeRequiredSizeFor(site);
|
|
|
|
+ if (required <= 0)
|
|
|
|
+ requiredSpaceLabel.setText(UpdateUIMessages.InstallWizard_TargetPage_unknownSize);
|
|
|
|
+ else
|
|
|
|
+ requiredSpaceLabel.setText(
|
|
|
|
+ NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_size, "" + required)); //$NON-NLS-1$
|
|
|
|
+
|
|
|
|
+ if (available == LocalSystemInfo.SIZE_UNKNOWN)
|
|
|
|
+ availableSpaceLabel.setText(UpdateUIMessages.InstallWizard_TargetPage_unknownSize);
|
|
|
|
+ else
|
|
|
|
+ availableSpaceLabel.setText(
|
|
|
|
+ NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_size, "" + available)); //$NON-NLS-1$
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private long computeRequiredSizeFor(IConfiguredSite site) {
|
|
|
|
+ long totalSize = 0;
|
|
|
|
+ for (int i = 0; i < jobs.length; i++) {
|
|
|
|
+ if (site.equals(jobs[i].getTargetSite())) {
|
|
|
|
+ long jobSize = site.getSite().getInstallSizeFor(jobs[i].getFeature());
|
|
|
|
+ if (jobSize == -1)
|
|
|
|
+ return -1;
|
|
|
|
+ totalSize += jobSize;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return totalSize;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void pageChanged() {
|
|
|
|
+ boolean empty = false;
|
|
|
|
+ for (int i=0; jobs!=null && i<jobs.length; i++) {
|
|
|
|
+ if (jobs[i].getTargetSite() == null) {
|
|
|
|
+ empty = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ IFeature feature = jobs[i].getFeature();
|
|
|
|
+ if (feature.isPatch()) {
|
|
|
|
+ // Patches must go together with the features
|
|
|
|
+ // they are patching.
|
|
|
|
+
|
|
|
|
+ // Check current jobs
|
|
|
|
+ IInstallFeatureOperation patchedFeatureJob = findPatchedFeature(feature);
|
|
|
|
+ if (patchedFeatureJob != null
|
|
|
|
+ && patchedFeatureJob.getTargetSite() != null
|
|
|
|
+ && !jobs[i].getTargetSite().equals(patchedFeatureJob.getTargetSite())) {
|
|
|
|
+ String msg = NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_patchError, (new String[] {
|
|
|
|
+ feature.getLabel(),
|
|
|
|
+ patchedFeatureJob.getFeature().getLabel()}));
|
|
|
|
+ setErrorMessage(msg);
|
|
|
|
+ setPageComplete(false);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // Check installed features
|
|
|
|
+ IFeature patchedFeature = UpdateUtils.getPatchedFeature(feature);
|
|
|
|
+ if (patchedFeature != null
|
|
|
|
+ && !jobs[i].getTargetSite().equals(patchedFeature.getSite().getCurrentConfiguredSite())) {
|
|
|
|
+ String msg = NLS.bind(UpdateUIMessages.InstallWizard_TargetPage_patchError2, (new String[] {
|
|
|
|
+ feature.getLabel(),
|
|
|
|
+ patchedFeature.getLabel(),
|
|
|
|
+ patchedFeature.getSite().getCurrentConfiguredSite().getSite().getURL().getFile()}));
|
|
|
|
+ setErrorMessage(msg);
|
|
|
|
+ setPageComplete(false);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ verifyNotEmpty(empty);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private boolean getSiteVisibility(IConfiguredSite site, IInstallFeatureOperation job) {
|
|
|
|
+ // Do not allow installing into a non-updateable site
|
|
|
|
+ if (!site.isUpdatable())
|
|
|
|
+ return false;
|
|
|
|
+
|
|
|
|
+ // If affinity site is known, only it should be shown
|
|
|
|
+ IConfiguredSite affinitySite = UpdateUtils.getAffinitySite(config, job.getFeature());
|
|
|
|
+ if (affinitySite != null) {
|
|
|
|
+ // Must compare referenced sites because
|
|
|
|
+ // configured sites themselves may come from
|
|
|
|
+ // different configurations
|
|
|
|
+ return site.getSite().equals(affinitySite.getSite());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Co-locate updates with the old feature
|
|
|
|
+ if (job.getOldFeature() != null) {
|
|
|
|
+ IConfiguredSite oldSite = UpdateUtils.getSiteWithFeature(config, job.getOldFeature().getVersionedIdentifier().getIdentifier());
|
|
|
|
+ return (site == oldSite);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Allow installing into any site that is updateable and there is no affinity specified
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void initializeDefaultTargetSites() {
|
|
|
|
+ for (int i = 0; i < jobs.length; i++) {
|
|
|
|
+ if (jobs[i].getTargetSite() != null)
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ IConfiguredSite affinitySite = UpdateUtils.getAffinitySite(config, jobs[i].getFeature());
|
|
|
|
+ if (affinitySite != null) {
|
|
|
|
+ jobs[i].setTargetSite(affinitySite);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ IConfiguredSite defaultSite = UpdateUtils.getDefaultTargetSite(config, jobs[i], false);
|
|
|
|
+ if (defaultSite != null) {
|
|
|
|
+ jobs[i].setTargetSite(defaultSite);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ IConfiguredSite csite = getFirstTargetSite(jobs[i]);
|
|
|
|
+ if (csite == null && Platform.getInstallLocation().isReadOnly()) {
|
|
|
|
+ // there are no updateable sites and the installation location is read only
|
|
|
|
+ // make an update site in the user's home direcotry
|
|
|
|
+ String sitePath = System.getProperty("user.home") + File.separator + ".eclipse" + File.separator +
|
|
|
|
+ Platform.getProduct().getId() + File.separator + "updates"; //$NON-NLS-1$ //$NON-NLS-2$
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ csite = config.createConfiguredSite(new File(sitePath));
|
|
|
|
+ config.addConfiguredSite(csite);
|
|
|
|
+ IStatus status = csite.verifyUpdatableStatus();
|
|
|
|
+ if (!status.isOK())
|
|
|
|
+ throw new CoreException(status);
|
|
|
|
+
|
|
|
|
+ } catch (CoreException e) {
|
|
|
|
+ // there was a problem, the user must choose an installation site
|
|
|
|
+ csite = null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ jobs[i].setTargetSite(csite);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private IConfiguredSite getFirstTargetSite(IInstallFeatureOperation job) {
|
|
|
|
+ IConfiguredSite[] sites = config.getConfiguredSites();
|
|
|
|
+ for (int i = 0; i < sites.length; i++) {
|
|
|
|
+ IConfiguredSite csite = sites[i];
|
|
|
|
+ if (getSiteVisibility(csite, job) && csite.verifyUpdatableStatus().isOK() == true)
|
|
|
|
+ return csite;
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public IInstallFeatureOperation findPatchedFeature(IFeature patch) {
|
|
|
|
+ for (int i=0; i<jobs.length; i++) {
|
|
|
|
+ IFeature target = jobs[i].getFeature();
|
|
|
|
+ if (!target.equals(patch) && UpdateUtils.isPatch(target, patch))
|
|
|
|
+ return jobs[i];
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ void removeAddedSites() {
|
|
|
|
+ if (added != null) {
|
|
|
|
+ while (!added.isEmpty()) {
|
|
|
|
+ Iterator it = added.iterator();
|
|
|
|
+ if (it.hasNext())
|
|
|
|
+ config.removeConfiguredSite((IConfiguredSite) it.next());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* (non-Javadoc)
|
|
|
|
+ * @see org.eclipse.jface.wizard.IWizardPage#isPageComplete()
|
|
|
|
+ */
|
|
|
|
+ public boolean isPageComplete() {
|
|
|
|
+ // check if all jobs have a target site set
|
|
|
|
+ for (int i = 0; jobs != null && i < jobs.length; i++) {
|
|
|
|
+ if (jobs[i].getTargetSite() == null)
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ return super.isPageComplete();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param job
|
|
|
|
+ */
|
|
|
|
+ private void setTargetLocation(IInstallFeatureOperation job) {
|
|
|
|
+ if (job != null && job.getTargetSite() != null) {
|
|
|
|
+ installLocation.setText(new File(job.getTargetSite().getSite().getURL().getFile()).toString());
|
|
|
|
+ updateStatus(job.getTargetSite());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|