| /******************************************************************************* |
| * Copyright (c) 2007, 2008 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.tests; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.*; |
| import junit.framework.Assert; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository; |
| import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; |
| import org.eclipse.equinox.internal.provisional.p2.metadata.query.InstallableUnitQuery; |
| 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; |
| import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.AbstractMetadataRepository; |
| import org.osgi.framework.Version; |
| |
| /** |
| * A simple metadata repository used for testing purposes. All metadata |
| * is kept in memory. |
| */ |
| public class TestMetadataRepository extends AbstractMetadataRepository { |
| |
| private static final String DESCRIPTION = "A Test Metadata Repository"; //$NON-NLS-1$ |
| private static final String NAME = "ATestMetadataRepository"; //$NON-NLS-1$ |
| private static final String PROVIDER = "org.eclipse"; //$NON-NLS-1$ |
| private static final String TYPE = "testmetadatarepo"; //$NON-NLS-1$ |
| private static final String VERSION = "1"; //$NON-NLS-1$ |
| private final List units = new ArrayList(); |
| |
| private static URL createLocation() { |
| try { |
| //Just need a unique URL - we don't need to read/write this location |
| return new URL("http://TestMetadataRepository.com/" + Long.toString(System.currentTimeMillis())); |
| } catch (MalformedURLException e) { |
| Assert.fail(e.getMessage()); |
| } |
| return null; |
| } |
| |
| public TestMetadataRepository(IInstallableUnit[] ius) { |
| super(NAME, TYPE, VERSION, createLocation(), DESCRIPTION, PROVIDER, null); |
| units.addAll(Arrays.asList(ius)); |
| } |
| |
| public void addInstallableUnits(IInstallableUnit[] toAdd) { |
| units.addAll(Arrays.asList(toAdd)); |
| } |
| |
| public IInstallableUnit find(String id, String versionString) { |
| Iterator result = query(new InstallableUnitQuery(id, new Version(versionString)), new Collector(), null).iterator(); |
| return (IInstallableUnit) (result.hasNext() ? result.next() : null); |
| } |
| |
| public Object getAdapter(Class adapter) { |
| if (adapter == TestMetadataRepository.class || adapter == IMetadataRepository.class || adapter == IRepository.class) { |
| return this; |
| } |
| return null; |
| } |
| |
| public Collector query(Query query, Collector collector, IProgressMonitor monitor) { |
| return query.perform(units.iterator(), collector); |
| } |
| |
| public void removeAll() { |
| units.clear(); |
| } |
| |
| public boolean removeInstallableUnits(IInstallableUnit[] toRemove) { |
| boolean modified = false; |
| for (int i = 0; i < toRemove.length; i++) { |
| modified |= units.remove(toRemove[i]); |
| } |
| return modified; |
| } |
| |
| public void initialize(RepositoryState state) { |
| this.name = state.Name; |
| this.type = state.Type; |
| this.version = state.Version.toString(); |
| this.provider = state.Provider; |
| this.description = state.Description; |
| this.location = state.Location; |
| this.properties = state.Properties; |
| this.units.addAll(Arrays.asList(state.Units)); |
| } |
| } |