Search in sources :

Example 16 with Wire

use of org.osgi.resource.Wire in project intellij-plugins by JetBrains.

the class ResolveAction method actionPerformed.

@Override
public void actionPerformed(@NotNull AnActionEvent event) {
    VirtualFile virtualFile = event.getData(CommonDataKeys.VIRTUAL_FILE);
    Project project = event.getProject();
    if (virtualFile == null || project == null)
        return;
    Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
    if (document == null)
        return;
    FileDocumentManager.getInstance().saveAllDocuments();
    new Task.Backgroundable(project, message("bnd.resolve.requirements.title"), true) {

        private Map<Resource, List<Wire>> resolveResult;

        private String updatedText;

        @Override
        public void run(@NotNull ProgressIndicator indicator) {
            indicator.setIndeterminate(true);
            File file = new File(virtualFile.getPath());
            try (Workspace workspace = Workspace.findWorkspace(file);
                Run run = Run.createRun(workspace, file);
                ProjectResolver projectResolver = new ProjectResolver(run)) {
                resolveResult = projectResolver.resolve();
                List<VersionedClause> versionedClauses = projectResolver.getRunBundles().stream().map(c -> {
                    Attrs attrs = new Attrs();
                    attrs.put(Constants.VERSION_ATTRIBUTE, c.getVersion());
                    return new VersionedClause(c.getBundleSymbolicName(), attrs);
                }).sorted(Comparator.comparing(VersionedClause::getName)).collect(Collectors.toList());
                BndEditModel editModel = new BndEditModel();
                IDocument bndDocument = new aQute.bnd.properties.Document(document.getImmutableCharSequence().toString());
                editModel.loadFrom(bndDocument);
                editModel.setRunBundles(versionedClauses);
                editModel.saveChangesTo(bndDocument);
                updatedText = bndDocument.get();
            } catch (ProcessCanceledException e) {
                throw e;
            } catch (Exception e) {
                throw new WrappingException(e);
            }
            indicator.checkCanceled();
        }

        @Override
        public void onSuccess() {
            if (new ResolutionSucceedDialog(project, resolveResult).showAndGet() && FileModificationService.getInstance().prepareVirtualFilesForWrite(project, Collections.singleton(virtualFile))) {
                writeCommandAction(project).withName("Bndrun Resolve").run(() -> document.setText(updatedText));
            }
        }

        @Override
        public void onThrowable(@NotNull Throwable t) {
            Throwable cause = t instanceof WrappingException ? t.getCause() : t;
            LOG.warn("Resolution failed", cause);
            if (cause instanceof ResolutionException) {
                new ResolutionFailedDialog(project, (ResolutionException) cause).show();
            } else {
                OsmorcBundle.notification(message("bnd.resolve.failed.title"), cause.getMessage(), NotificationType.ERROR).notify(project);
            }
        }
    }.queue();
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) WriteCommandAction.writeCommandAction(com.intellij.openapi.command.WriteCommandAction.writeCommandAction) Constants(aQute.bnd.osgi.Constants) VirtualFile(com.intellij.openapi.vfs.VirtualFile) Document(com.intellij.openapi.editor.Document) ProcessCanceledException(com.intellij.openapi.progress.ProcessCanceledException) Task(com.intellij.openapi.progress.Task) Workspace(aQute.bnd.build.Workspace) DialogWrapper(com.intellij.openapi.ui.DialogWrapper) Map(java.util.Map) Project(com.intellij.openapi.project.Project) CommonDataKeys(com.intellij.openapi.actionSystem.CommonDataKeys) Logger(com.intellij.openapi.diagnostic.Logger) OsmorcBundle.message(org.osmorc.i18n.OsmorcBundle.message) BndEditModel(aQute.bnd.build.model.BndEditModel) OsmorcBundle(org.osmorc.i18n.OsmorcBundle) ProjectResolver(biz.aQute.resolve.ProjectResolver) FileModificationService(com.intellij.codeInsight.FileModificationService) Resource(org.osgi.resource.Resource) AnAction(com.intellij.openapi.actionSystem.AnAction) FileDocumentManager(com.intellij.openapi.fileEditor.FileDocumentManager) Run(aQute.bnd.build.Run) Collectors(java.util.stream.Collectors) File(java.io.File) NotificationType(com.intellij.notification.NotificationType) BndFileType(org.jetbrains.osgi.bnd.BndFileType) Nullable(org.jetbrains.annotations.Nullable) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) List(java.util.List) IDocument(aQute.bnd.properties.IDocument) VersionedClause(aQute.bnd.build.model.clauses.VersionedClause) Attrs(aQute.bnd.header.Attrs) Wire(org.osgi.resource.Wire) AnActionEvent(com.intellij.openapi.actionSystem.AnActionEvent) ResolutionException(org.osgi.service.resolver.ResolutionException) NotNull(org.jetbrains.annotations.NotNull) Comparator(java.util.Comparator) Collections(java.util.Collections) javax.swing(javax.swing) Task(com.intellij.openapi.progress.Task) VersionedClause(aQute.bnd.build.model.clauses.VersionedClause) ProjectResolver(biz.aQute.resolve.ProjectResolver) Attrs(aQute.bnd.header.Attrs) Document(com.intellij.openapi.editor.Document) IDocument(aQute.bnd.properties.IDocument) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) List(java.util.List) BndEditModel(aQute.bnd.build.model.BndEditModel) ProcessCanceledException(com.intellij.openapi.progress.ProcessCanceledException) Resource(org.osgi.resource.Resource) Run(aQute.bnd.build.Run) ProcessCanceledException(com.intellij.openapi.progress.ProcessCanceledException) ResolutionException(org.osgi.service.resolver.ResolutionException) ResolutionException(org.osgi.service.resolver.ResolutionException) Project(com.intellij.openapi.project.Project) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File) IDocument(aQute.bnd.properties.IDocument) Workspace(aQute.bnd.build.Workspace)

Example 17 with Wire

use of org.osgi.resource.Wire in project intellij-plugins by JetBrains.

the class ResolveConfirm method addRequirer.

private static void addRequirer(DefaultMutableTreeNode root, Resource resource, Map<Resource, List<Wire>> resolve) {
    List<Wire> wires = resolve.get(resource);
    if (wires == null)
        return;
    Map<Capability, DefaultMutableTreeNode> map = new HashMap<>();
    wires.forEach(wire -> {
        DefaultMutableTreeNode requirement = map.computeIfAbsent(wire.getCapability(), DefaultMutableTreeNode::new);
        DefaultMutableTreeNode child = new DefaultMutableTreeNode(wire.getRequirer());
        requirement.add(child);
        addRequirer(child, wire.getRequirer(), resolve);
    });
    map.values().forEach(root::add);
}
Also used : Capability(org.osgi.resource.Capability) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) HashMap(java.util.HashMap) Wire(org.osgi.resource.Wire)

Example 18 with Wire

use of org.osgi.resource.Wire in project aries by apache.

the class ResolveContext method processAsSubstitutableExport.

private void processAsSubstitutableExport(boolean isFragment, Requirement requirement, List<Capability> capabilities) {
    String namespace = requirement.getNamespace();
    if (!PackageNamespace.PACKAGE_NAMESPACE.equals(namespace)) {
        return;
    }
    Resource resource = requirement.getResource();
    Wiring wiring = wirings.get(resource);
    if (isFragment) {
        List<Wire> fragmentWires = wiring.getRequiredResourceWires(HostNamespace.HOST_NAMESPACE);
        for (Wire fragmentWire : fragmentWires) {
            Resource host = fragmentWire.getProvider();
            processResourceCapabilities(wirings.get(host).getResourceCapabilities(namespace), requirement, capabilities);
        }
    } else {
        List<Capability> resourceCapabilities = wiring.getResourceCapabilities(namespace);
        processResourceCapabilities(resourceCapabilities, requirement, capabilities);
    }
}
Also used : BundleWiring(org.osgi.framework.wiring.BundleWiring) Wiring(org.osgi.resource.Wiring) HostedCapability(org.osgi.service.resolver.HostedCapability) Capability(org.osgi.resource.Capability) MissingCapability(org.apache.aries.subsystem.core.internal.DependencyCalculator.MissingCapability) Resource(org.osgi.resource.Resource) Wire(org.osgi.resource.Wire)

Example 19 with Wire

use of org.osgi.resource.Wire in project aries by apache.

the class ResolveContext method processAsFragment.

private void processAsFragment(Requirement requirement, List<Capability> capabilities) {
    String namespace = requirement.getNamespace();
    Resource fragment = requirement.getResource();
    Wiring fragmentWiring = wirings.get(fragment);
    List<Wire> fragmentWires = fragmentWiring.getRequiredResourceWires(HostNamespace.HOST_NAMESPACE);
    for (Wire fragmentWire : fragmentWires) {
        Resource host = fragmentWire.getProvider();
        Wiring hostWiring = wirings.get(host);
        List<Wire> hostWires = hostWiring.getRequiredResourceWires(namespace);
        processWires(hostWires, requirement, capabilities);
    }
}
Also used : BundleWiring(org.osgi.framework.wiring.BundleWiring) Wiring(org.osgi.resource.Wiring) Resource(org.osgi.resource.Resource) Wire(org.osgi.resource.Wire)

Example 20 with Wire

use of org.osgi.resource.Wire in project aries by apache.

the class DependencyCalculator method calculateDependencies.

public List<Requirement> calculateDependencies() throws ResolutionException {
    ArrayList<Requirement> result = new ArrayList<Requirement>();
    Resolver resolver = Activator.getInstance().getResolver();
    Map<Resource, List<Wire>> resolution = resolver.resolve(context);
    for (List<Wire> wires : resolution.values()) for (Wire wire : wires) if (wire.getCapability() instanceof MissingCapability)
        result.add(wire.getRequirement());
    result.trimToSize();
    return result;
}
Also used : Requirement(org.osgi.resource.Requirement) Resolver(org.osgi.service.resolver.Resolver) ArrayList(java.util.ArrayList) Resource(org.osgi.resource.Resource) ArrayList(java.util.ArrayList) List(java.util.List) Wire(org.osgi.resource.Wire)

Aggregations

Wire (org.osgi.resource.Wire)27 Resource (org.osgi.resource.Resource)22 ArrayList (java.util.ArrayList)12 List (java.util.List)12 HashMap (java.util.HashMap)11 Requirement (org.osgi.resource.Requirement)11 Map (java.util.Map)7 Capability (org.osgi.resource.Capability)7 BundleWiring (org.osgi.framework.wiring.BundleWiring)6 HashSet (java.util.HashSet)5 Set (java.util.Set)4 Region (org.eclipse.equinox.region.Region)4 Bundle (org.osgi.framework.Bundle)4 BundleException (org.osgi.framework.BundleException)4 BundleRevision (org.osgi.framework.wiring.BundleRevision)4 FileInputStream (java.io.FileInputStream)3 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 Collection (java.util.Collection)3 EnumSet (java.util.EnumSet)3