/*******************************************************************************
* 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.server;
import java.io.File;
import java.net.URL;
import org.eclipse.buckminster.p2.remote.change.AddInstallableUnits;
import org.eclipse.buckminster.p2.remote.change.AddReference;
import org.eclipse.buckminster.p2.remote.change.RemoveAll;
import org.eclipse.buckminster.p2.remote.change.RemoveInstallableUnits;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
import org.eclipse.equinox.internal.provisional.p2.query.Collector;
import org.eclipse.equinox.internal.provisional.p2.query.Query;
public class LoggingMetadataRepository extends LoggingRepository implements IMetadataRepository
{
public LoggingMetadataRepository(RepositoryServer server, IMetadataRepository remoteRepository,
File facadeArea) throws ProvisionException
{
super(server, remoteRepository, facadeArea);
}
public void addInstallableUnits(IInstallableUnit[] installableUnits)
{
AddInstallableUnits change = new AddInstallableUnits();
change.setAdditions(installableUnits);
getChangeLog().addChange(change);
getWrapped().addInstallableUnits(installableUnits);
}
public void addReference(URL location, int type, int options)
{
AddReference change = new AddReference();
change.setLocation(location);
change.setType(type);
change.setOptions(options);
getChangeLog().addChange(change);
getWrapped().addReference(location, type, options);
}
public Collector query(Query query, Collector collector, IProgressMonitor monitor)
{
return getWrapped().query(query, collector, monitor);
}
public void removeAll()
{
getChangeLog().addChange(new RemoveAll());
getWrapped().removeAll();
}
public boolean removeInstallableUnits(Query query, IProgressMonitor monitor)
{
final RemoveInstallableUnits removal = new RemoveInstallableUnits();
SubMonitor subMon = SubMonitor.convert(monitor, 200);
query(query, new Collector()
{
@Override
public boolean accept(Object object)
{
if(object instanceof IInstallableUnit)
removal.addUnitToRemove((IInstallableUnit)object);
return true;
}
}, subMon.newChild(100));
getChangeLog().addChange(removal);
return getWrapped().removeInstallableUnits(query, subMon.newChild(100));
}
private IMetadataRepository getWrapped()
{
return (IMetadataRepository)wrappedRepository;
}
}