package org.bndtools.templating.jgit; import java.net.URL; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map.Entry; import org.bndtools.templating.Template; import org.bndtools.templating.TemplateLoader; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.util.promise.Promise; import org.osgi.util.promise.Promises; import aQute.bnd.header.Attrs; import aQute.bnd.header.Parameters; import aQute.service.reporter.Reporter; @Component(name = "org.bndtools.core.templating.workspace.git", property = { Constants.SERVICE_DESCRIPTION + "=Load workspace templates from Git clone URLs" }) public class PlainGitWorkspaceTemplateLoader implements TemplateLoader { private static final String TEMPLATE_TYPE = "workspace"; private URL iconUrl; @Activate void activate(BundleContext context) { iconUrl = context.getBundle().getEntry("icons/git-16px.png"); } @Override public Promise<List<Template>> findTemplates(String type, Reporter reporter) { if (!TEMPLATE_TYPE.equals(type)) return Promises.resolved(Collections.<Template> emptyList()); List<Template> templates = new LinkedList<>(); Parameters gitRepos = new GitRepoPreferences().getGitRepos(); for (Entry<String,Attrs> entry : gitRepos.entrySet()) { String cloneUrl = GitRepoPreferences.removeDuplicateMarker(entry.getKey()); Attrs attribs = entry.getValue(); try { GitCloneTemplateParams params = new GitCloneTemplateParams(); params.cloneUrl = cloneUrl; params.category = "Git Repositories"; params.name = attribs.get("name"); params.iconUri = iconUrl.toURI(); params.branch = attribs.get("branch"); GitCloneTemplate template = new GitCloneTemplate(params); templates.add(template); } catch (Exception e) { reporter.exception(e, "Error loading template from Git clone URL %s", cloneUrl); } } return Promises.resolved(templates); } }