Blob Blame Raw
Index: src/org/eclipse/update/internal/ui/wizards/InstallWizard2.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/InstallWizard2.java,v
retrieving revision 1.12.2.1
diff -u -r1.12.2.1 InstallWizard2.java
--- plugins/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/InstallWizard2.java	23 Aug 2006 03:55:35 -0000	1.12.2.1
+++ plugins/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/InstallWizard2.java	25 Sep 2006 22:38:03 -0000
@@ -153,7 +153,7 @@
 		addPage(licensePage);
 		optionalFeaturesPage = new OptionalFeaturesPage(config);
 		addPage(optionalFeaturesPage);
-		targetPage = new TargetPage(config);
+		targetPage = new TargetPage(config, isUpdate);
 		addPage(targetPage);
 	}
 
Index: src/org/eclipse/update/internal/ui/wizards/TargetPage.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/TargetPage.java,v
retrieving revision 1.81.2.1
diff -u -r1.81.2.1 TargetPage.java
--- plugins/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/TargetPage.java	23 Aug 2006 03:55:35 -0000	1.81.2.1
+++ plugins/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/TargetPage.java	25 Sep 2006 22:38:03 -0000
@@ -18,6 +18,9 @@
 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.dialogs.IDialogSettings;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -92,6 +95,7 @@
     private Label installLocation;
     private Button changeLocation;
     static HashSet added;
+    private boolean isUpdate; // whether the wizard is updating a feature or installing a new one
 
 	class JobsContentProvider
 		extends DefaultContentProvider
@@ -236,13 +240,14 @@
 	/**
 	 * Constructor for ReviewPage2
 	 */
-	public TargetPage(IInstallConfiguration config) {
+	public TargetPage(IInstallConfiguration config, boolean isUpdate) {
 		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();
+		this.isUpdate = isUpdate;
 	}
 
 	public void setJobs(IInstallFeatureOperation[] jobs) {
@@ -273,7 +278,7 @@
         label.setLayoutData(gd);
 
 		installLocation = new Label(client, SWT.NULL);
-        installLocation.setText("foo"); //$NON-NLS-1$
+        installLocation.setText(""); //$NON-NLS-1$
         gd = new GridData(GridData.FILL_HORIZONTAL);
         installLocation.setLayoutData(gd);
         
@@ -656,12 +661,45 @@
 				continue;
 			}
 
-			jobs[i].setTargetSite(getFirstTargetSite(jobs[i]));
+			IConfiguredSite csite = getFirstTargetSite(jobs[i]);
+			if (csite == null && Platform.getInstallLocation().isReadOnly() && isUpdate == false) {
+				// there are no updateable sites, the installation location is read-only and we are installing a new feature
+				// make an update site in the user's home direcotry
+				File site = new File(System.getProperty("user.home") + File.separator + ".eclipse" + File.separator + //$NON-NLS-1$ //$NON-NLS-2$
+					Platform.getProduct().getId() + File.separator + "updates"); //$NON-NLS-1$
+				
+				try {
+					csite = config.createConfiguredSite(site);
+					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;
+					// no need to check if the directory exists because File.delete() returns false if it's not there
+					deleteDir(site);
+				}
+			}
 
+			jobs[i].setTargetSite(csite);
 		}
 
 	}
-	
+
+	private boolean deleteDir(File dir) {
+        if (dir.isDirectory()) {
+            String[] files = dir.list();
+            for (int i=0; i < files.length; i++) {
+                if (!deleteDir(new File(dir, files[i]))) {
+                    return false;
+                }
+            }
+        }
+        return dir.delete();
+    }
+
 	private IConfiguredSite getMostReceantlyUsedSite() {
 		IDialogSettings master = UpdateUI.getDefault().getDialogSettings();
 		IDialogSettings section = master.getSection(TargetSiteDialog.MOST_RECEANTLY_USED_SITE_URL);
@@ -696,7 +734,7 @@
 		IConfiguredSite[] sites = config.getConfiguredSites();
 		for (int i = 0; i < sites.length; i++) {
 			IConfiguredSite csite = sites[i];
-			if (getSiteVisibility(csite, job)) 
+			if (getSiteVisibility(csite, job) && csite.getSite().getCurrentConfiguredSite().verifyUpdatableStatus().isOK())
 				return csite;
 		}
 		return null;
Index: src/org/eclipse/update/search/UpdateSearchRequest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java,v
retrieving revision 1.31
diff -u -r1.31 UpdateSearchRequest.java
--- plugins/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java	8 Aug 2006 20:21:42 -0000	1.31
+++ plugins/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java	25 Sep 2006 22:38:05 -0000
@@ -282,6 +282,10 @@
 					// currently, the next conditional is only executed (qsite!=null) when
 					// running an update search. 
 					if (qsite != null && searchFeatureProvidedSites) {
+						// do not update features that are installed in read-only locations
+						IFeature feature = query.getFeature();
+						if (feature != null && !feature.getSite().getCurrentConfiguredSite().verifyUpdatableStatus().isOK())
+							continue;
 						// check for mapping
 						IUpdateSiteAdapter mappedSite = getMappedSite(updatePolicy, qsite);
 						// when there is no mapped site the feature is not updatable
Index: src/org/eclipse/update/search/IUpdateSearchQuery.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.core/src/org/eclipse/update/search/IUpdateSearchQuery.java,v
retrieving revision 1.8
diff -u -r1.8 IUpdateSearchQuery.java
--- plugins/org.eclipse.update.core/src/org/eclipse/update/search/IUpdateSearchQuery.java	1 Mar 2005 20:29:16 -0000	1.8
+++ plugins/org.eclipse.update.core/src/org/eclipse/update/search/IUpdateSearchQuery.java	25 Sep 2006 22:38:05 -0000
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Red Hat Incorporated - getFeature() API addition
  *******************************************************************************/
 package org.eclipse.update.search;
 
@@ -50,4 +51,12 @@
  * @param monitor a progress monitor to report search progress within the provided site
  */
 	public void run(ISite site, String [] categoriesToSkip, IUpdateSearchFilter filter, IUpdateSearchResultCollector collector, IProgressMonitor monitor);
+	
+/**
+ * Returns IFeature associated with the IUpdateSearchQuery
+ * 
+ * @return the IFeature that is associated with the IUpdateSearchQuery
+ * @since 3.2
+ */
+	public IFeature getFeature();
 }
Index: src/org/eclipse/update/internal/search/OptionalFeatureSearchCategory.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.core/src/org/eclipse/update/internal/search/OptionalFeatureSearchCategory.java,v
retrieving revision 1.9
diff -u -r1.9 OptionalFeatureSearchCategory.java
--- plugins/org.eclipse.update.core/src/org/eclipse/update/internal/search/OptionalFeatureSearchCategory.java	11 Apr 2006 15:47:09 -0000	1.9
+++ plugins/org.eclipse.update.core/src/org/eclipse/update/internal/search/OptionalFeatureSearchCategory.java	25 Sep 2006 22:38:05 -0000
@@ -76,6 +76,13 @@
 		public IQueryUpdateSiteAdapter getQuerySearchSite() {
 			return null;
 		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.update.internal.ui.search.ISearchQuery#getFeature()
+		 */
+		public IFeature getFeature() {
+				return null;
+		}
 	}
 
 	public void addVersionedIdentifier(VersionedIdentifier vid) {
Index: src/org/eclipse/update/internal/search/UpdatesSearchCategory.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.core/src/org/eclipse/update/internal/search/UpdatesSearchCategory.java,v
retrieving revision 1.27
diff -u -r1.27 UpdatesSearchCategory.java
--- plugins/org.eclipse.update.core/src/org/eclipse/update/internal/search/UpdatesSearchCategory.java	11 Apr 2006 15:47:09 -0000	1.27
+++ plugins/org.eclipse.update.core/src/org/eclipse/update/internal/search/UpdatesSearchCategory.java	25 Sep 2006 22:38:05 -0000
@@ -285,6 +285,10 @@
 			monitor.worked(1);
 			monitor.done();
 		}
+		
+		public IFeature getFeature() {
+			return candidate;
+		}	
 	}
 
 	private ArrayList candidates;
Index: src/org/eclipse/update/internal/search/SiteSearchCategory.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.core/src/org/eclipse/update/internal/search/SiteSearchCategory.java,v
retrieving revision 1.14.2.1
diff -u -r1.14.2.1 SiteSearchCategory.java
--- plugins/org.eclipse.update.core/src/org/eclipse/update/internal/search/SiteSearchCategory.java	18 Aug 2006 23:31:21 -0000	1.14.2.1
+++ plugins/org.eclipse.update.core/src/org/eclipse/update/internal/search/SiteSearchCategory.java	25 Sep 2006 22:38:05 -0000
@@ -133,6 +133,14 @@
 		public IQueryUpdateSiteAdapter getQuerySearchSite() {
 			return null;
 		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.update.internal.ui.search.ISearchQuery#getFeature()
+		 */
+		public IFeature getFeature() {
+				return null;
+		}
+		
 	}
 
 	public SiteSearchCategory() {
Index: src/org/eclipse/update/internal/core/ConfiguredSite.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java,v
retrieving revision 1.96
diff -u -r1.96 ConfiguredSite.java
--- plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java	30 Mar 2006 02:34:37 -0000	1.96
+++ plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/ConfiguredSite.java	25 Sep 2006 22:38:05 -0000
@@ -35,6 +35,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.update.configuration.IActivity;
 import org.eclipse.update.configuration.IConfiguredSite;
@@ -803,7 +804,9 @@
 			}
 		} else {
 			File container = getSiteContaining(file);
-			if (container != null) {
+			// allow the install location to pass even though it looks like this
+			// site is contained in another site
+			if (container != null && !siteLocation.equals(Platform.getInstallLocation().getURL().getFile())) {
 				verifyStatus = createStatus(IStatus.ERROR, NLS.bind(Messages.ConfiguredSite_ContainedInAnotherSite, (new String[] { container.getAbsolutePath() })), null);
 				return verifyStatus;
 			}