blob: 650bd1d55ea59d9068772fee659f66ec0b33b59e [file] [log] [blame]
/*******************************************************************************
* 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();
}
}