/******************************************************************************* * Copyright (c) 2000, 2010 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.core; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.core.runtime.CoreException; import org.eclipse.osgi.util.NLS; import org.eclipse.update.core.model.ArchiveReferenceModel; import org.eclipse.update.core.model.CategoryModel; import org.eclipse.update.core.model.InvalidSiteTypeException; import org.eclipse.update.core.model.SiteModel; import org.eclipse.update.core.model.SiteModelFactory; import org.eclipse.update.core.model.URLEntryModel; import org.eclipse.update.internal.core.Messages; import org.eclipse.update.internal.core.UpdateCore; import org.eclipse.update.internal.core.UpdateManagerUtils; import org.eclipse.update.internal.core.connection.ConnectionFactory; import org.eclipse.update.internal.core.connection.IResponse; /** * Base implementation of a site factory. * The factory is responsible for constructing the correct * concrete implementation of the model objects for each particular * site type. This class creates model objects that correspond * to the concrete implementation classes provided in this package. * The actual site creation method is subclass responsibility. * <p> * This class must be subclassed by clients. * </p> * <p> * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to * change significantly before reaching stability. It is being made available at this early stage to solicit feedback * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken * (repeatedly) as the API evolves. * </p> * @see org.eclipse.update.core.ISiteFactory * @see org.eclipse.update.core.model.SiteModelFactory * @since 2.0 * @deprecated The org.eclipse.update component has been replaced by Equinox p2. * This API will be deleted in a future release. See bug 311590 for details. */ public abstract class BaseSiteFactory extends SiteModelFactory implements ISiteFactory { /** * Create site. Implementation of this method must be provided by * subclass * * @see ISiteFactory#createSite(URL) * @since 2.0 */ public abstract ISite createSite(URL url) throws CoreException, InvalidSiteTypeException; /** * Helper method to access resouce bundle for site. The default * implementation attempts to load the appropriately localized * site.properties file. * * @param url base URL used to load the resource bundle. * @return resource bundle, or <code>null</code>. * @since 2.0 */ protected ResourceBundle getResourceBundle(URL url) { ResourceBundle bundle = null; try { url = UpdateManagerUtils.asDirectoryURL(url); ClassLoader l = new URLClassLoader(new URL[] { url }, null); bundle = ResourceBundle.getBundle(Site.SITE_FILE, Locale.getDefault(), l); } catch (MissingResourceException e) { UpdateCore.warn(e.getLocalizedMessage() + ":" + url.toExternalForm()); //$NON-NLS-1$ } catch (MalformedURLException e) { UpdateCore.warn(NLS.bind(Messages.BaseSiteFactory_CannotRetriveParentDirectory, (new String[] { url.toExternalForm() }))); } return bundle; } /** * Create a concrete implementation of site model. * * @see Site * @return site model * @since 2.0 */ public SiteModel createSiteMapModel() { return new Site(); } /** * Create a concrete implementation of feature reference model. * * @see FeatureReference * @return feature reference model * @since 2.0 */ public SiteFeatureReferenceModel createFeatureReferenceModel() { return new SiteFeatureReference(); } /** * Create a concrete implementation of archive reference model. * * @see ArchiveReference * @return archive reference model * @since 2.0 */ public ArchiveReferenceModel createArchiveReferenceModel() { return new ArchiveReference(); } /** * Create a concrete implementation of annotated URL model. * * @see URLEntry * @return annotated URL model * @since 2.0 */ public URLEntryModel createURLEntryModel() { return new URLEntry(); } /** * Create a concrete implementation of category model. * * @see Category * @return category model * @since 2.0 */ public CategoryModel createSiteCategoryModel() { return new Category(); } /** * Open a stream on a URL. * manages a time out if the connection is locked or fails * * @param resolvedURL * @return InputStream */ protected InputStream openStream(URL resolvedURL) throws IOException { IResponse response = ConnectionFactory.get(resolvedURL); return response.getInputStream(); } }