/*******************************************************************************
* Copyright (c) 2012 The PDT Extension Group (https://github.com/pdt-eg)
* 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
******************************************************************************/
package org.pdtextensions.repos.internal.debug;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.pdtextensions.repos.FindResult;
import org.pdtextensions.repos.Module;
import org.pdtextensions.repos.ModuleVersion;
import org.pdtextensions.repos.PEXReposPlugin;
import org.pdtextensions.repos.Vendor;
import org.pdtextensions.repos.api.IFindResult;
import org.pdtextensions.repos.api.IModule;
import org.pdtextensions.repos.api.IModuleVersion;
import org.pdtextensions.repos.api.IRepositoryProvider;
import org.pdtextensions.repos.api.IVendor;
import org.pdtextensions.repos.api.IVendorAwareProvider;
/**
* A sample provider for debug usage
*
* @author mepeisen
*/
public class DebugProvider implements IRepositoryProvider, IVendorAwareProvider {
public static final String TYPE = "DEBUG";
/** the dummy modules */
private Map<String, IVendor> dummyModules = new HashMap<String, IVendor>();
public DebugProvider() {
// initialize dummies
final Vendor vendor1 = new Vendor("org.vendor1", this, new IModule[]{
new Module("foo-lib", "org.vendor1", this, new IModuleVersion[]{
new ModuleVersion("org.vendor1", "foo-lib", "0.9", true, (String) null, null, null),
new ModuleVersion("org.vendor1", "foo-lib", "1.0", true, (String) null, null, null),
new ModuleVersion("org.vendor1", "foo-lib", "1.1-SNAPSHOT", false, (String) null, null, null)
}, "1.0", "1.1-SNAPSHOT")
});
final Vendor vendor2 = new Vendor("com.vendor2", this, new IModule[]{});
this.dummyModules.put(vendor1.getName(), vendor1);
this.dummyModules.put(vendor2.getName(), vendor2);
}
@Override
public String getId() {
return TYPE;
}
@Override
public String getType() {
return TYPE;
}
@Override
public IFindResult findModule(String vendor, String name, String version, IProgressMonitor monitor) {
final String searchName = name == null ? "*" : name;
final String searchVersion = version == null ? "*" : version;
final List<IModuleVersion> result = new ArrayList<IModuleVersion>();
try {
for (final IVendor v : this.searchVendor(vendor, monitor)) {
if (monitor.isCanceled()) {
break;
}
final IFindResult findResult = v.findModule(searchName, searchVersion, monitor);
// return the error if there is any
if (!findResult.isOk()) {
return findResult;
}
for (final IModuleVersion v2 : findResult.moduleVersions()) {
result.add(v2);
}
}
} catch (CoreException e) {
result.clear();
return new FindResult(new Status(IStatus.ERROR, PEXReposPlugin.PLUGIN_ID, "Failed searching for vendors", e), result);
}
return new FindResult(Status.OK_STATUS, result);
}
@Override
public Iterable<IModule> listModules(IProgressMonitor monitor) throws CoreException {
final List<IModule> result = new ArrayList<IModule>();
for (final IVendor vendor : this.dummyModules.values()) {
if (monitor.isCanceled()) {
break;
}
for (final IModule module : vendor.listModules(monitor)) {
result.add(module);
}
}
return result;
}
@Override
public Iterable<IVendor> getVendors(IProgressMonitor monitor) throws CoreException {
return new ArrayList<IVendor>(this.dummyModules.values());
}
@Override
public Iterable<IVendor> searchVendor(String name, IProgressMonitor monitor) throws CoreException {
final String searchVendor = PEXReposPlugin.maskSearchStringToRegexp(name);
return searchVendorRegex(searchVendor, monitor);
}
@Override
public boolean supportsRegexSearch() {
return true;
}
@Override
public List<IVendor> searchVendorRegex(String name, IProgressMonitor monitor) throws CoreException {
final Pattern patternVendor = Pattern.compile(name);
final List<IVendor> result = new ArrayList<IVendor>();
for (final Map.Entry<String, IVendor> entry : this.dummyModules.entrySet()) {
if (patternVendor.matcher(entry.getKey().toLowerCase()).matches()) {
result.add(entry.getValue());
}
}
return result;
}
@Override
public String getUri() {
return TYPE;
}
@Override
public boolean supportsDependencies() {
return false;
}
}