| /******************************************************************************* |
| * Copyright (c) 2000, 2006 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.search; |
| |
| import java.net.*; |
| import java.util.ArrayList; |
| |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.update.core.*; |
| import org.eclipse.update.search.*; |
| |
| /** |
| * Searches for optional features |
| */ |
| public class OptionalFeatureSearchCategory extends BaseSearchCategory { |
| private IUpdateSearchQuery[] queries; |
| private ArrayList vids; |
| private static final String CATEGORY_ID = |
| "org.eclipse.update.core.unified-search"; //$NON-NLS-1$ |
| |
| private class OptionalQuery implements IUpdateSearchQuery { |
| public void run( |
| ISite site, |
| String[] categoriesToSkip, |
| IUpdateSearchFilter filter, |
| IUpdateSearchResultCollector collector, |
| IProgressMonitor monitor) { |
| |
| monitor.beginTask("", vids.size()); //$NON-NLS-1$ |
| for (int i = 0; i < vids.size(); i++) { |
| VersionedIdentifier vid = (VersionedIdentifier) vids.get(i); |
| monitor.subTask(vid.toString()); |
| IFeature feature = |
| createFeature( |
| site, |
| vid, |
| new SubProgressMonitor(monitor, 1)); |
| if (feature!=null && filter.accept(feature)) |
| collector.accept(feature); |
| } |
| } |
| |
| private IFeature createFeature( |
| ISite site, |
| VersionedIdentifier vid, |
| IProgressMonitor monitor) { |
| try { |
| URL siteURL = site.getURL(); |
| //TODO This assumption stands only in the default case |
| // In general, feature archive URL may be mapped on site. |
| // Also, feature type may be something else (not packaged). |
| // We may need additional information (not only id and version) |
| // in order to create a feature on a site. |
| String relative = vid.toString(); |
| URL featureURL = new URL(siteURL, "features/" + relative+".jar"); //$NON-NLS-1$ //$NON-NLS-2$ |
| return site.createFeature( |
| "org.eclipse.update.core.packaged", //$NON-NLS-1$ |
| featureURL, |
| monitor); |
| } catch (Exception e) { |
| return null; |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.update.internal.ui.search.ISearchQuery#getSearchSite() |
| */ |
| public IQueryUpdateSiteAdapter getQuerySearchSite() { |
| return null; |
| } |
| } |
| |
| public void addVersionedIdentifier(VersionedIdentifier vid) { |
| vids.add(vid); |
| } |
| |
| public void clear() { |
| vids.clear(); |
| } |
| |
| public OptionalFeatureSearchCategory() { |
| super(CATEGORY_ID); |
| vids = new ArrayList(); |
| queries = new IUpdateSearchQuery[] { new OptionalQuery()}; |
| } |
| |
| public IUpdateSearchQuery[] getQueries() { |
| return queries; |
| } |
| } |