Package org.eclipse.equinox.region

Examples of org.eclipse.equinox.region.RegionFilterBuilder


  private static void setExportIsolationPolicy(BasicSubsystem subsystem) throws InvalidSyntaxException, IOException, BundleException, URISyntaxException, ResolutionException {
    if (!subsystem.isComposite())
      return;
    Region from = ((BasicSubsystem)subsystem.getParents().iterator().next()).getRegion();
    Region to = subsystem.getRegion();
    RegionFilterBuilder builder = from.getRegionDigraph().createRegionFilterBuilder();
    setExportIsolationPolicy(builder, subsystem.getDeploymentManifest().getExportPackageHeader(), subsystem);
    setExportIsolationPolicy(builder, subsystem.getDeploymentManifest().getProvideCapabilityHeader(), subsystem);
    setExportIsolationPolicy(builder, subsystem.getDeploymentManifest().getSubsystemExportServiceHeader(), subsystem);
    RegionFilter regionFilter = builder.build();
    if (regionFilter.getSharingPolicy().isEmpty())
      return;
    if (logger.isDebugEnabled())
      logger.debug("Establishing region connection: from=" + from
          + ", to=" + to + ", filter=" + regionFilter);
View Full Code Here


  private void setImportIsolationPolicy() throws BundleException, IOException, InvalidSyntaxException, URISyntaxException {
    if (isRoot() || !isScoped())
      return;
    Region region = getRegion();
    Region from = region;
    RegionFilterBuilder builder = from.getRegionDigraph().createRegionFilterBuilder();
    Region to = ((BasicSubsystem)getParents().iterator().next()).getRegion();
    addSubsystemServiceImportToSharingPolicy(builder, to);
    // TODO Is this check really necessary? Looks like it was done at the beginning of this method.
    if (isScoped()) {
      // Both applications and composites have Import-Package headers that require processing.
      // In the case of applications, the header is generated.
      Header<?> header = getSubsystemManifest().getImportPackageHeader();
      setImportIsolationPolicy(builder, (ImportPackageHeader)header);
      // Both applications and composites have Require-Capability headers that require processing.
      // In the case of applications, the header is generated.
      header = getSubsystemManifest().getRequireCapabilityHeader();
      setImportIsolationPolicy(builder, (RequireCapabilityHeader)header);
      // Both applications and composites have Subsystem-ImportService headers that require processing.
      // In the case of applications, the header is generated.
      header = getSubsystemManifest().getSubsystemImportServiceHeader();
      setImportIsolationPolicy(builder, (SubsystemImportServiceHeader)header);
      header = getSubsystemManifest().getRequireBundleHeader();
      setImportIsolationPolicy(builder, (RequireBundleHeader)header);
    }
    RegionFilter regionFilter = builder.build();
    from.connectRegion(to, regionFilter);
  }
View Full Code Here

    }
    return result;
  }
 
  private RegionFilterBuilder createRegionFilterBuilder(Map<String, Collection<String>> sharingPolicy, RegionDigraph digraph) throws InvalidSyntaxException {
    RegionFilterBuilder result = digraph.createRegionFilterBuilder();
    for (Map.Entry<String, Collection<String>> entry : sharingPolicy.entrySet())
      for (String filter : entry.getValue())
        result.allow(entry.getKey(), filter);
    return result;
  }
View Full Code Here

        }
        for (FilterType filterType: regionsType.getFilter()) {
            Region from = regionDigraph.getRegion(filterType.getFrom());
            Region to = regionDigraph.getRegion(filterType.getTo());
            log.debug("Creating filter between " + from.getName() + " to " + to.getName());
            RegionFilterBuilder builder = regionDigraph.createRegionFilterBuilder();
            for (FilterBundleType bundleType: filterType.getBundle()) {
                String symbolicName = bundleType.getSymbolicName();
                String version = bundleType.getVersion();
                if (bundleType.getId() != null) {
                    Bundle b = frameworkContext.getBundle(bundleType.getId());
                    symbolicName = b.getSymbolicName();
                    version = b.getVersion().toString();
                }
                String namespace = BundleRevision.BUNDLE_NAMESPACE;
                List<FilterAttributeType> attributeTypes = bundleType.getAttribute();
                buildFilter(symbolicName, version, namespace, attributeTypes, builder);
            }
            for (FilterPackageType packageType: filterType.getPackage()) {
                String packageName = packageType.getName();
                String version = packageType.getVersion();
                String namespace = BundleRevision.PACKAGE_NAMESPACE;
                List<FilterAttributeType> attributeTypes = packageType.getAttribute();
                buildFilter(packageName, version, namespace, attributeTypes, builder);
            }
            if (to == kernel) {
                //add framework exports
                BundleRevision rev = framework.adapt(BundleRevision.class);
                List<BundleCapability> caps = rev.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE);
                for (BundleCapability cap : caps) {
                    String filter = ManifestHeaderProcessor.generateFilter(filter(cap.getAttributes()));
                    builder.allow(BundleRevision.PACKAGE_NAMESPACE, filter);
                }
            }
            //TODO explicit services?
            for (FilterNamespaceType namespaceType: filterType.getNamespace()) {
                String namespace = namespaceType.getName();
                HashMap<String, Object> attributes = new HashMap<String, Object>();
                for (FilterAttributeType attributeType: namespaceType.getAttribute()) {
                    attributes.put(attributeType.getName(), attributeType.getValue());
                }
                String filter = ManifestHeaderProcessor.generateFilter(attributes);
                builder.allow(namespace, filter);
            }
            regionDigraph.connect(from, builder.build(), to);
        }
    }
View Full Code Here

    List<String> items;

    protected void doExecute(RegionDigraph regionDigraph) throws Exception {
        Region rFrom = getRegion(regionDigraph, fromRegion);
        Region rTo = getRegion(regionDigraph, toRegion);
        RegionFilterBuilder builder = regionDigraph.createRegionFilterBuilder();
        BundleContext framework = getBundleContext().getBundle(0).getBundleContext();
        if (items != null) {
            for (String item : items) {
                try {
                    long id = Long.parseLong(item);
                    Bundle b = framework.getBundle(id);
                    builder.allow("osgi.wiring.bundle", "(osgi.wiring.bundle=" + b.getSymbolicName() + ")");
                } catch (NumberFormatException e) {
                    for (Map.Entry<String, Map<String, String>> parsed: ManifestHeaderProcessor.parseImportString(item).entrySet()) {
                        String packageName = parsed.getKey();
                        Map<String, String> attributes = new HashMap<String, String>(parsed.getValue());
                        attributes.put("osgi.wiring.package", packageName);
                        String filter = generateFilter(attributes);
                        System.out.println("adding filter " + filter);
                        builder.allow("osgi.wiring.package", filter);
                    }
                }

            }
        }
        RegionFilter f = builder.build();
        regionDigraph.connect(rFrom, f, rTo);
    }
View Full Code Here

        }
        for (FilterType filterType: regionsType.getFilter()) {
            Region from = regionDigraph.getRegion(filterType.getFrom());
            Region to = regionDigraph.getRegion(filterType.getTo());
            log.debug("Creating filter between " + from.getName() + " to " + to.getName());
            RegionFilterBuilder builder = regionDigraph.createRegionFilterBuilder();
            for (FilterBundleType bundleType: filterType.getBundle()) {
                String symbolicName = bundleType.getSymbolicName();
                String version = bundleType.getVersion();
                if (bundleType.getId() != null) {
                    Bundle b = frameworkContext.getBundle(bundleType.getId());
                    symbolicName = b.getSymbolicName();
                    version = b.getVersion().toString();
                }
                String namespace = BundleRevision.BUNDLE_NAMESPACE;
                List<FilterAttributeType> attributeTypes = bundleType.getAttribute();
                buildFilter(symbolicName, version, namespace, attributeTypes, builder);
            }
            for (FilterPackageType packageType: filterType.getPackage()) {
                String packageName = packageType.getName();
                String version = packageType.getVersion();
                String namespace = BundleRevision.PACKAGE_NAMESPACE;
                List<FilterAttributeType> attributeTypes = packageType.getAttribute();
                buildFilter(packageName, version, namespace, attributeTypes, builder);
            }
            if (to == kernel) {
                //add framework exports
                BundleRevision rev = framework.adapt(BundleRevision.class);
                List<BundleCapability> caps = rev.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE);
                for (BundleCapability cap : caps) {
                    String filter = ManifestHeaderProcessor.generateFilter(filter(cap.getAttributes()));
                    builder.allow(BundleRevision.PACKAGE_NAMESPACE, filter);
                }
            }
            //TODO explicit services?
            for (FilterNamespaceType namespaceType: filterType.getNamespace()) {
                String namespace = namespaceType.getName();
                HashMap<String, Object> attributes = new HashMap<String, Object>();
                for (FilterAttributeType attributeType: namespaceType.getAttribute()) {
                    attributes.put(attributeType.getName(), attributeType.getValue());
                }
                String filter = ManifestHeaderProcessor.generateFilter(attributes);
                builder.allow(namespace, filter);
            }
            regionDigraph.connect(from, builder.build(), to);
        }
    }
View Full Code Here

        // Add policies
        for (Map.Entry<String, Map<String, Map<String, Set<String>>>> entry1 : policies.entrySet()) {
            Region region1 = temp.getRegion(entry1.getKey());
            for (Map.Entry<String, Map<String, Set<String>>> entry2 : entry1.getValue().entrySet()) {
                Region region2 = temp.getRegion(entry2.getKey());
                RegionFilterBuilder rfb = temp.createRegionFilterBuilder();
                for (Map.Entry<String, Set<String>> entry3 : entry2.getValue().entrySet()) {
                    for (String flt : entry3.getValue()) {
                        rfb.allow(entry3.getKey(), flt);
                    }
                }
                region1.connectRegion(region2, rfb.build());
            }
        }
        digraph.replace(temp);
    }
View Full Code Here

                    String rt = flats.get(r.getName());
                    String rh = flats.get(fr.getRegion().getName());
                    if (!rh.equals(rt)) {
                        Region tail = flatDigraph.getRegion(rt);
                        Region head = flatDigraph.getRegion(rh);
                        RegionFilterBuilder rfb = flatDigraph.createRegionFilterBuilder();
                        for (Map.Entry<String, Collection<String>> entry : fr.getFilter().getSharingPolicy().entrySet()) {
                            // Discard osgi.identity namespace
                            if (!IDENTITY_NAMESPACE.equals(entry.getKey())) {
                                for (String f : entry.getValue()) {
                                    rfb.allow(entry.getKey(), f);
                                }
                            }
                        }
                        flatDigraph.connect(tail, rfb.build(), head);
                    }
                }
            }
        }
        return flatDigraph;
View Full Code Here

            populateDigraph(digraph, child);
        }
    }

    private RegionFilterBuilder createRegionFilterBuilder(RegionDigraph digraph, Map<String, Set<String>> sharingPolicy) throws InvalidSyntaxException {
        RegionFilterBuilder result = digraph.createRegionFilterBuilder();
        for (Map.Entry<String, Set<String>> entry : sharingPolicy.entrySet()) {
            for (String filter : entry.getValue()) {
                result.allow(entry.getKey(), filter);
            }
        }
        return result;
    }
View Full Code Here

        List<Map<String, Object>> edges = (List<Map<String, Object>>) json.get(EDGES);
        for (Map<String, Object> e : edges) {
            String tail = (String) e.get(TAIL);
            String head = (String) e.get(HEAD);
            Map<String, Collection<String>> policy = (Map<String, Collection<String>>) e.get(POLICY);
            RegionFilterBuilder builder = digraph.createRegionFilterBuilder();
            for (Map.Entry<String, Collection<String>> rf : policy.entrySet()) {
                String ns = rf.getKey();
                for (String f : rf.getValue()) {
                    builder.allow(ns, f);
                }
            }
            digraph.connect(digraph.getRegion(tail), builder.build(), digraph.getRegion(head));
        }
        return digraph;
    }
View Full Code Here

TOP

Related Classes of org.eclipse.equinox.region.RegionFilterBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.