/******************************************************************************* * Copyright (c) 2006-2008, Cloudsmith Inc. * The code, documentation and other materials contained herein have been * licensed under the Eclipse Public License - v 1.0 by the copyright holder * listed above, as the Initial Contributor under such license. The text of * such license is available at www.eclipse.org. ******************************************************************************/ package org.eclipse.buckminster.p2.remote.client; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URL; import java.util.Map; import java.util.zip.GZIPInputStream; import org.eclipse.buckminster.p2.remote.IRepositoryFacade; import org.eclipse.buckminster.p2.remote.IRepositoryServer; import org.eclipse.buckminster.runtime.IOUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository; import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepositoryIO; import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepository; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; import org.eclipse.osgi.util.NLS; /** * @author Thomas Hallgren */ public class RemoteArtifactRepositoryFactory extends RemoteRepositoryFactory implements org.eclipse.equinox.internal.provisional.spi.p2.artifact.repository.IArtifactRepositoryFactory { @SuppressWarnings("unchecked") public IArtifactRepository create(URL location, String name, String type, Map properties) { // TODO Auto-generated method stub return null; } public IArtifactRepository load(URL locationURL, IProgressMonitor monitor) throws ProvisionException { URI location = IOUtils.uri(locationURL); InputStream input = null; IArtifactRepository result; try { IRepositoryFacade facade = getRepositoryFacade(location, monitor); input = new GZIPInputStream(new RemoteInputStream(facade.getRepositoryData())); result = new SimpleArtifactRepositoryIO().read(IOUtils.url(location), input, monitor); } catch(IOException e) { String msg = NLS.bind(Messages.io_failedRead, location); throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, e)); } finally { IOUtils.close(input); } if(result instanceof SimpleArtifactRepository) ((SimpleArtifactRepository)result).initializeAfterLoad(IOUtils.url(location)); return result; } @Override protected IRepositoryFacade getFacadeFromServer(IRepositoryServer server, String repoName) throws ProvisionException { return server.getArtifactRepositoryFacade(repoName); } }