/******************************************************************************* * 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.core; import java.io.*; import java.net.*; import org.eclipse.core.runtime.*; import org.eclipse.osgi.util.NLS; import org.eclipse.update.core.*; import org.eclipse.update.core.model.*; /** * Factory for Feature Packaged */ public class FeaturePackagedFactory extends BaseFeatureFactory { /* * @see IFeatureFactory#createFeature(URL,ISite,IProgressMonitor) */ public IFeature createFeature(URL url,ISite site, IProgressMonitor monitor) throws CoreException { Feature feature = null; InputStream featureStream = null; if (monitor == null) monitor = new NullProgressMonitor(); monitor.beginTask(null,2); monitor.worked(1); try { IFeatureContentProvider contentProvider = new FeaturePackagedContentProvider(url, site); ContentReference manifest = contentProvider.getFeatureManifestReference(null/*IProgressMonitor*/); featureStream = manifest.getInputStream(); feature = (Feature)parseFeature(featureStream); monitor.worked(1); // if there is no update URL for the Feature // use the Site URL if (feature.getUpdateSiteEntry()==null){ URLEntryModel entryModel = createURLEntryModel(); URL siteUrl = site.getURL(); if (siteUrl!=null){ entryModel.setURLString(siteUrl.toExternalForm()); entryModel.resolve(siteUrl,null); feature.setUpdateSiteEntryModel(entryModel); } } feature.setFeatureContentProvider(contentProvider); feature.setSite(site); URL baseUrl = null; try { baseUrl = new URL(manifest.asURL(),"."); // make sure we have URL to feature directory //$NON-NLS-1$ } catch(MalformedURLException e) { } feature.resolve(baseUrl, baseUrl); feature.markReadOnly(); } catch (CoreException e){ throw e; } catch (Exception e) { e.printStackTrace(); throw Utilities.newCoreException(NLS.bind(Messages.FeatureFactory_CreatingError, (new String[] { url.toExternalForm() })), e); }finally { try { if (featureStream!=null) featureStream.close(); } catch (IOException e) { } } return feature; } public IncludedFeatureReferenceModel createIncludedFeatureReferenceModel() { return new UpdateSiteIncludedFeatureReference(); } }