package bndtools.central;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import org.bndtools.api.ILogger;
import org.bndtools.api.Logger;
import aQute.bnd.build.Workspace;
import aQute.bnd.service.RegistryPlugin;
import aQute.bnd.service.RepositoryPlugin;
public class RepositoryUtils {
private static final ILogger logger = Logger.getLogger(RepositoryUtils.class);
public static List<RepositoryPlugin> listRepositories(boolean hideCache) {
Workspace workspace;
try {
workspace = Central.getWorkspace();
} catch (Exception e1) {
return Collections.emptyList();
}
return listRepositories(workspace, hideCache);
}
public static List<RepositoryPlugin> listRepositories(final Workspace localWorkspace, final boolean hideCache) {
try {
return Central.bndCall(new Callable<List<RepositoryPlugin>>() {
@Override
public List<RepositoryPlugin> call() throws Exception {
List<RepositoryPlugin> plugins = localWorkspace.getPlugins(RepositoryPlugin.class);
List<RepositoryPlugin> repos = new ArrayList<RepositoryPlugin>(plugins.size() + 1);
// Add the workspace repo if the provided workspace == the global bnd workspace
Workspace bndWorkspace = Central.getWorkspaceIfPresent();
if (bndWorkspace == localWorkspace)
repos.add(Central.getWorkspaceRepository());
// Add the repos from the provided workspace
for (RepositoryPlugin plugin : plugins) {
if (hideCache == false || !Workspace.BND_CACHE_REPONAME.equals(plugin.getName()))
repos.add(plugin);
}
for (RepositoryPlugin repo : repos) {
if (repo instanceof RegistryPlugin) {
RegistryPlugin registry = (RegistryPlugin) repo;
registry.setRegistry(bndWorkspace);
}
}
return repos;
}
});
} catch (Exception e) {
logger.logError("Error loading repositories: " + e.getMessage(), e);
}
return Collections.emptyList();
}
}