blob: 54654f75e75b8c63aeef2d0ff3aafd982de8fc1c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2011 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.equinox.p2.repository.metadata;
import java.util.Collection;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.equinox.p2.core.IPool;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.repository.*;
import org.eclipse.equinox.p2.repository.metadata.spi.AbstractMetadataRepository;
/**
* A metadata repository stores information about a set of installable units
* <p>
* This interface is not intended to be implemented by clients. Metadata repository
* implementations must subclass {@link AbstractMetadataRepository} rather than
* implementing this interface directly.
* </p>
* @noimplement This interface is not intended to be implemented by clients. Instead subclass {@link AbstractMetadataRepository}
* @since 2.0
*/
public interface IMetadataRepository extends IRepository<IInstallableUnit> {
/**
* Add the given installable units to this repository.
*
* @param installableUnits the installable units to add
*/
public void addInstallableUnits(Collection<IInstallableUnit> installableUnits);
/**
* <p>Adds references to another repository to this repository. When a repository
* is loaded by {@link IMetadataRepositoryManager}, its references
* are automatically added to the repository manager's set of known repositories.</p>
* <p>Note that this method does not add the <b>contents</b> of the given
* repositories to this repository, but merely adds the location of other
* repositories to the metadata of this repository.</p>
*
* @param references The references to add
*/
void addReferences(Collection<? extends IRepositoryReference> references);
/**
* Returns the repositories that this repository is referencing.
* @return An immutable collection of repository references, possibly empty but never <code>null</code>.
*/
Collection<IRepositoryReference> getReferences();
/**
* Removes all installable units in the given collection from this repository.
*
* @param installableUnits the installable units to remove
* @return <code>true</code> if any units were actually removed, and
* <code>false</code> otherwise
*/
public boolean removeInstallableUnits(Collection<IInstallableUnit> installableUnits);
/**
* Remove all installable units from this repository.
*/
public void removeAll();
/**
* Executes a runnable against this repository. It is up to the repository
* implementor to determine what "batch process" means, for example, it may mean
* that the repository index is not stored until after the runnable completes.
*
* The runnable should not execute anything in a separate thread.
*
* @param runnable The runnable to execute
* @param monitor A progress monitor that will be passed to the runnable
* @return The result of running the runnable. Any exceptions thrown during
* the execution will be returned in the status.
*/
public IStatus executeBatch(IRunnableWithProgress runnable, IProgressMonitor monitor);
/**
* Cause semantically equivalent IInstallableUnits in the receiver to be
* replaced with a shared object from the provided {@link IPool}. New objects are
* added to the {@link IPool} as required.
* <p>
* While the {@link IPool} should be retained to increase the scope of sharing when
* calling {@link #compress(IPool)} on subsequent repositories, the {@link IPool} can
* be discarded without adversely effecting the receiver.
* </p>
* @since 2.1
*/
public void compress(IPool<IInstallableUnit> iuPool);
}