/******************************************************************************* * Copyright (c) 2007, 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 * Sonatype, Inc. - transport split *******************************************************************************/ package org.eclipse.equinox.internal.p2.artifact.repository; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.repository.Transport; import org.eclipse.equinox.p2.metadata.IArtifactKey; import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository; import org.eclipse.equinox.p2.repository.artifact.IArtifactRequest; /** * Base class for all requests on an {@link IArtifactRepository}. */ public abstract class ArtifactRequest implements IArtifactRequest { private static final Status DEFAULT_STATUS = new Status(IStatus.ERROR, Activator.ID, "default"); //$NON-NLS-1$ protected IArtifactKey artifact; protected String resolvedKey; protected IArtifactRepository source; protected IStatus result = DEFAULT_STATUS; protected Transport transport = null; public ArtifactRequest(IArtifactKey key, Transport transport) { artifact = key; this.transport = transport; } public IArtifactKey getArtifactKey() { return artifact; } /** * Returns the result of the previous call to {@link #perform(IArtifactRepository, IProgressMonitor)}, * or <code>null</code> if perform has never been called. * * @return The result of the previous perform call. */ public IStatus getResult() { if (result == DEFAULT_STATUS) return new Status(IStatus.ERROR, Activator.ID, "No repository found containing: " + getArtifactKey().toString()); return result; } protected IArtifactRepository getSourceRepository() { return source; } /** * Performs the artifact request, and sets the result status. * * @param sourceRepository the repository to download the artifact from * @param monitor a progress monitor, or <code>null</code> if progress * reporting is not desired */ abstract public void perform(IArtifactRepository sourceRepository, IProgressMonitor monitor); /** * Sets the result of an invocation of {@link #perform(IArtifactRepository, IProgressMonitor)}. * This method is called by subclasses to set the result status for * this request. * * @param value The result status */ protected void setResult(IStatus value) { result = value; } protected void setSourceRepository(IArtifactRepository value) { source = value; } }