Class ResolverImpl

  • All Implemented Interfaces:
    Resolver

    public class ResolverImpl
    extends java.lang.Object
    implements Resolver
    • Field Detail

      • m_context

        private final org.osgi.framework.BundleContext m_context
      • m_logger

        private final org.apache.felix.utils.log.Logger m_logger
      • m_repositories

        private final Repository[] m_repositories
      • m_addedSet

        private final java.util.Set<Resource> m_addedSet
      • m_addedRequirementSet

        private final java.util.Set<Requirement> m_addedRequirementSet
      • m_globalCapabilities

        private final java.util.Set<Capability> m_globalCapabilities
      • m_failedSet

        private final java.util.Set<Resource> m_failedSet
      • m_resolveSet

        private final java.util.Set<Resource> m_resolveSet
      • m_requiredSet

        private final java.util.Set<Resource> m_requiredSet
      • m_optionalSet

        private final java.util.Set<Resource> m_optionalSet
      • m_reasonMap

        private final java.util.Map<Resource,​java.util.List<Reason>> m_reasonMap
      • m_unsatisfiedSet

        private final java.util.Set<Reason> m_unsatisfiedSet
      • m_resolved

        private boolean m_resolved
      • m_resolveTimeStamp

        private long m_resolveTimeStamp
      • m_resolutionFlags

        private int m_resolutionFlags
    • Constructor Detail

      • ResolverImpl

        public ResolverImpl​(org.osgi.framework.BundleContext context,
                            Repository[] repositories,
                            org.apache.felix.utils.log.Logger logger)
    • Method Detail

      • add

        public void add​(Resource resource)
        Description copied from interface: Resolver
        Add the following resource to the resolution. The resource will be part of the output and all its requirements will be satisfied. It has the same effect has adding a requirement that will match this resource by symbolicname and version. The current resolution will be lost after adding a resource.
        Specified by:
        add in interface Resolver
        Parameters:
        resource - the resource to add
      • getAddedResources

        public Resource[] getAddedResources()
        Description copied from interface: Resolver
        Returns the list of resources that have been added to the resolution
        Specified by:
        getAddedResources in interface Resolver
        Returns:
      • add

        public void add​(Requirement requirement)
        Description copied from interface: Resolver
        Add the following requirement to the resolution The current resolution will be lost after adding a requirement.
        Specified by:
        add in interface Resolver
        Parameters:
        requirement - the requirement to add
      • getAddedRequirements

        public Requirement[] getAddedRequirements()
        Description copied from interface: Resolver
        Returns the list of requirements that have been added to the resolution
        Specified by:
        getAddedRequirements in interface Resolver
        Returns:
      • addGlobalCapability

        public void addGlobalCapability​(Capability capability)
        Description copied from interface: Resolver
        Add a global capability. A global capability is one capability provided by the environment but not reflected in local resources.
        Specified by:
        addGlobalCapability in interface Resolver
        Parameters:
        capability - the new global capability
      • getRequiredResources

        public Resource[] getRequiredResources()
        Description copied from interface: Resolver
        List of mandatory resources that need to be installed
        Specified by:
        getRequiredResources in interface Resolver
        Returns:
      • getOptionalResources

        public Resource[] getOptionalResources()
        Description copied from interface: Resolver
        List of optional resources that may be installed
        Specified by:
        getOptionalResources in interface Resolver
        Returns:
      • getReason

        public Reason[] getReason​(Resource resource)
        Description copied from interface: Resolver
        List of reasons why a resource has been included either as a mandatory or optional resource during the resolution.
        Specified by:
        getReason in interface Resolver
        Returns:
        an array of Reason
      • getUnsatisfiedRequirements

        public Reason[] getUnsatisfiedRequirements()
        Description copied from interface: Resolver
        List of requirements that could not be satisfied during the resolution
        Specified by:
        getUnsatisfiedRequirements in interface Resolver
        Returns:
      • getLocalResources

        protected LocalResource[] getLocalResources()
      • getRemoteResources

        private Resource[] getRemoteResources()
      • getResources

        private Resource[] getResources()
      • resolve

        public boolean resolve()
        Description copied from interface: Resolver
        Start the resolution process and return whether the constraints have been successfully met or not. The resolution can be interrupted by a call to Thread.interrupt() at any time. The result will be to stop the resolver and throw an InterruptedException.
        Specified by:
        resolve in interface Resolver
        Returns:
        true if the resolution has succeeded else false
      • resolve

        public boolean resolve​(int flags)
        Description copied from interface: Resolver
        Start the resolution process with the following flags.
        Specified by:
        resolve in interface Resolver
        Parameters:
        flags - resolution flags
        Returns:
        true if the resolution has succeeded else false
      • searchResources

        private java.util.List<ResourceCapability> searchResources​(Requirement req,
                                                                   Resource[] resources)
        Searches for resources that do meet the given requirement
        Parameters:
        req - the the requirement that must be satisfied by resources
        resources - list of resources to look at
        Returns:
        all resources meeting the given requirement
      • getBestCandidate

        private ResourceCapability getBestCandidate​(java.util.List<ResourceCapability> caps)
        Determines which resource is preferred to deliver the required capability. This method selects the resource providing the highest version of the capability. If two resources provide the same version of the capability, the resource with the largest number of cabailities be preferred
        Parameters:
        caps -
        Returns:
      • checkInterrupt

        private void checkInterrupt()
      • deploy

        public void deploy​(int flags)
        Specified by:
        deploy in interface Resolver
      • isFragmentBundle

        private boolean isFragmentBundle​(org.osgi.framework.Bundle bundle)
        Determines if the given bundle is a fragement bundle.
        Parameters:
        bundle - bundle to check
        Returns:
        flag indicating if the given bundle is a fragement
      • findLocalResources

        private LocalResource[] findLocalResources​(java.lang.String symName)
        Returns all local resources with the given symbolic name.
        Parameters:
        symName - The symbolic name of the wanted local resources.
        Returns:
        The local resources with the specified symbolic name.
      • isResourceUpdatable

        private boolean isResourceUpdatable​(Resource oldVersion,
                                            Resource newVersion,
                                            Resource[] resources)
      • getBundleName

        public static java.lang.String getBundleName​(org.osgi.framework.Bundle bundle)