/******************************************************************************* * 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; } }