Andrew Overholt c18750b
diff -uNr src/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java src.orig/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java
Andrew Overholt c18750b
--- src/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java	2005-06-10 18:27:12.000000000 -0400
Andrew Overholt c18750b
+++ src.orig/org/eclipse/update/internal/ui/wizards/ModeSelectionPage.java	2005-06-16 12:08:30.000000000 -0400
Andrew Overholt c18750b
@@ -10,6 +10,7 @@
d941e6a
  *******************************************************************************/
d941e6a
 package org.eclipse.update.internal.ui.wizards;
d941e6a
 
d941e6a
+import org.eclipse.core.runtime.Platform;
d941e6a
 import org.eclipse.jface.dialogs.Dialog;
Andrew Overholt c18750b
 import org.eclipse.jface.dialogs.IDialogSettings;
d941e6a
 import org.eclipse.swt.SWT;
Andrew Overholt c18750b
@@ -70,10 +71,17 @@
d941e6a
 		GridLayout layout = new GridLayout();
d941e6a
 		composite.setLayout(layout);
d941e6a
 		updatesButton = new Button(composite, SWT.RADIO);
d941e6a
-		updatesButton.setText(UpdateUIMessages.ModeSelectionPage_updates); 
d941e6a
+		updatesButton.setText(UpdateUIMessages.ModeSelectionPage_updates);
d941e6a
 		updateMode = !getSettings().getBoolean(P_NEW_FEATURES_MODE);
d941e6a
+		// don't allow updates if the installation location is readonly
d941e6a
+		if (Platform.getInstallLocation().isReadOnly()) {
d941e6a
+			updatesButton.setEnabled(false); 
d941e6a
+			updateMode = false;
d941e6a
+		}
d941e6a
 		updatesButton.setSelection(updateMode);
d941e6a
 		
d941e6a
+	
d941e6a
+		
d941e6a
 		final Label updatesText = new Label(composite, SWT.WRAP);
d941e6a
 		updatesText.setText(UpdateUIMessages.ModeSelectionPage_updatesText);
d941e6a
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
Andrew Overholt c18750b
diff -uNr src/org/eclipse/update/internal/ui/wizards/TargetPage.java src.orig/org/eclipse/update/internal/ui/wizards/TargetPage.java
Andrew Overholt c18750b
--- src/org/eclipse/update/internal/ui/wizards/TargetPage.java	2005-06-10 18:29:01.000000000 -0400
Andrew Overholt c18750b
+++ src.orig/org/eclipse/update/internal/ui/wizards/TargetPage.java	2005-06-16 12:09:05.000000000 -0400
Andrew Overholt c18750b
@@ -10,25 +10,48 @@
Andrew Overholt c18750b
  *******************************************************************************/
Andrew Overholt c18750b
 package org.eclipse.update.internal.ui.wizards;
Andrew Overholt c18750b
 
Andrew Overholt 5f25d4d
-import java.io.*;
Andrew Overholt 5f25d4d
-import java.util.*;
d941e6a
-
Andrew Overholt c18750b
+import java.io.File;
Andrew Overholt c18750b
+import java.util.HashSet;
Andrew Overholt c18750b
+import java.util.Iterator;
Andrew Overholt c18750b
+
Andrew Overholt c18750b
+import org.eclipse.core.runtime.CoreException;
Andrew Overholt c18750b
+import org.eclipse.core.runtime.IStatus;
Andrew Overholt c18750b
+import org.eclipse.core.runtime.Platform;
Andrew Overholt c18750b
 import org.eclipse.jface.dialogs.Dialog;
Andrew Overholt 5f25d4d
-import org.eclipse.jface.resource.*;
Andrew Overholt 5f25d4d
-import org.eclipse.jface.viewers.*;
Andrew Overholt c18750b
+import org.eclipse.jface.resource.ImageDescriptor;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.ISelectionChangedListener;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.IStructuredContentProvider;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.IStructuredSelection;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.ITableLabelProvider;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.LabelProvider;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.SelectionChangedEvent;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.StructuredSelection;
Andrew Overholt c18750b
+import org.eclipse.jface.viewers.TableViewer;
Andrew Overholt c18750b
 import org.eclipse.osgi.util.NLS;
Andrew Overholt 5f25d4d
-import org.eclipse.swt.*;
Andrew Overholt 5f25d4d
-import org.eclipse.swt.events.*;
Andrew Overholt 5f25d4d
-import org.eclipse.swt.graphics.*;
Andrew Overholt 5f25d4d
-import org.eclipse.swt.layout.*;
Andrew Overholt 5f25d4d
-import org.eclipse.swt.widgets.*;
d941e6a
-import org.eclipse.ui.*;
Andrew Overholt 5f25d4d
-import org.eclipse.update.configuration.*;
Andrew Overholt 5f25d4d
-import org.eclipse.update.core.*;
Andrew Overholt 5f25d4d
-import org.eclipse.update.internal.operations.*;
Andrew Overholt 5f25d4d
-import org.eclipse.update.internal.ui.*;
Andrew Overholt 5f25d4d
-import org.eclipse.update.internal.ui.parts.*;
Andrew Overholt 5f25d4d
-import org.eclipse.update.operations.*;
Andrew Overholt c18750b
+import org.eclipse.swt.SWT;
Andrew Overholt c18750b
+import org.eclipse.swt.events.SelectionAdapter;
Andrew Overholt c18750b
+import org.eclipse.swt.events.SelectionEvent;
Andrew Overholt c18750b
+import org.eclipse.swt.graphics.Image;
Andrew Overholt c18750b
+import org.eclipse.swt.layout.GridData;
Andrew Overholt c18750b
+import org.eclipse.swt.layout.GridLayout;
Andrew Overholt c18750b
+import org.eclipse.swt.widgets.Button;
Andrew Overholt c18750b
+import org.eclipse.swt.widgets.Composite;
Andrew Overholt c18750b
+import org.eclipse.swt.widgets.Control;
Andrew Overholt c18750b
+import org.eclipse.swt.widgets.Label;
Andrew Overholt c18750b
+import org.eclipse.ui.PlatformUI;
Andrew Overholt c18750b
+import org.eclipse.update.configuration.IConfiguredSite;
Andrew Overholt c18750b
+import org.eclipse.update.configuration.IInstallConfiguration;
Andrew Overholt c18750b
+import org.eclipse.update.configuration.IInstallConfigurationChangedListener;
Andrew Overholt c18750b
+import org.eclipse.update.configuration.LocalSystemInfo;
Andrew Overholt c18750b
+import org.eclipse.update.core.IFeature;
Andrew Overholt c18750b
+import org.eclipse.update.internal.operations.UpdateUtils;
Andrew Overholt c18750b
+import org.eclipse.update.internal.ui.UpdateLabelProvider;
Andrew Overholt c18750b
+import org.eclipse.update.internal.ui.UpdateUI;
Andrew Overholt c18750b
+import org.eclipse.update.internal.ui.UpdateUIImages;
Andrew Overholt c18750b
+import org.eclipse.update.internal.ui.UpdateUIMessages;
Andrew Overholt c18750b
+import org.eclipse.update.internal.ui.parts.DefaultContentProvider;
Andrew Overholt c18750b
+import org.eclipse.update.internal.ui.parts.SWTUtil;
Andrew Overholt c18750b
+import org.eclipse.update.operations.IInstallFeatureOperation;
Andrew Overholt c18750b
 
Andrew Overholt c18750b
 public class TargetPage extends BannerPage implements IDynamicPage {
Andrew Overholt c18750b
 	private TableViewer jobViewer;
Andrew Overholt c18750b
@@ -150,7 +173,7 @@
Andrew Overholt c18750b
         label.setLayoutData(gd);
Andrew Overholt c18750b
 
Andrew Overholt c18750b
 		installLocation = new Label(client, SWT.NULL);
Andrew Overholt c18750b
-        installLocation.setText("foo"); //$NON-NLS-1$
Andrew Overholt c18750b
+        installLocation.setText("");
Andrew Overholt c18750b
         gd = new GridData(GridData.FILL_HORIZONTAL);
Andrew Overholt c18750b
         installLocation.setLayoutData(gd);
Andrew Overholt c18750b
         
Andrew Overholt c18750b
@@ -359,8 +382,28 @@
Andrew Overholt c18750b
 				jobs[i].setTargetSite(defaultSite);
Andrew Overholt c18750b
 				continue;
Andrew Overholt c18750b
 			}
Andrew Overholt c18750b
+			
Andrew Overholt c18750b
+			IConfiguredSite csite = getFirstTargetSite(jobs[i]);
Andrew Overholt c18750b
+			if (csite == null && Platform.getInstallLocation().isReadOnly()) {
Andrew Overholt c18750b
+				// there are no updateable sites and the installation location is read only
Andrew Overholt c18750b
+				// make an update site in the user's home direcotry
Andrew Overholt c18750b
+				String sitePath = System.getProperty("user.home") + File.separator + ".eclipse" + File.separator +
Andrew Overholt c18750b
+								  Platform.getProduct().getId() + File.separator + "updates"; //$NON-NLS-1$ //$NON-NLS-2$
Andrew Overholt c18750b
+
Andrew Overholt c18750b
+				try {
Andrew Overholt c18750b
+					csite = config.createConfiguredSite(new File(sitePath));
Andrew Overholt c18750b
+					config.addConfiguredSite(csite);
Andrew Overholt c18750b
+					IStatus status = csite.verifyUpdatableStatus();
Andrew Overholt c18750b
+					if (!status.isOK())
Andrew Overholt c18750b
+						throw new CoreException(status);
Andrew Overholt c18750b
+
Andrew Overholt c18750b
+				} catch (CoreException e) {
Andrew Overholt c18750b
+					// there was a problem, the user must choose an installation site
Andrew Overholt c18750b
+					csite = null;
Andrew Overholt c18750b
+				}
Andrew Overholt c18750b
+			}
Andrew Overholt c18750b
 
Andrew Overholt 5f25d4d
-			jobs[i].setTargetSite(getFirstTargetSite(jobs[i]));
Andrew Overholt c18750b
+			jobs[i].setTargetSite(csite);
Andrew Overholt c18750b
 
Andrew Overholt c18750b
 		}
Andrew Overholt c18750b
 	}
Andrew Overholt c18750b
@@ -370,7 +413,7 @@
Andrew Overholt c18750b
 		IConfiguredSite[] sites = config.getConfiguredSites();
Andrew Overholt c18750b
 		for (int i = 0; i < sites.length; i++) {
Andrew Overholt c18750b
 			IConfiguredSite csite = sites[i];
Ben Konrath 48ff123
-			if (getSiteVisibility(csite, job)) 
Andrew Overholt c18750b
+			if (getSiteVisibility(csite, job) && csite.verifyUpdatableStatus().isOK() == true) 
Andrew Overholt c18750b
 				return csite;
Andrew Overholt c18750b
 		}
Andrew Overholt c18750b
 		return null;