Module: OpenHAB::OSGi

Defined in:
lib/openhab/osgi.rb

Overview

OSGi services interface

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.bundleorg.osgi.framework.Bundle (readonly)

Returns The OSGi Bundle for ScriptExtension Class.

Returns:

  • (org.osgi.framework.Bundle)

    The OSGi Bundle for ScriptExtension Class



63
64
65
# File 'lib/openhab/osgi.rb', line 63

def bundle
  @bundle ||= org.osgi.framework.FrameworkUtil.getBundle($scriptExtension.java_class)
end

.bundle_contextorg.osgi.framework.BundleContext (readonly)

Returns OSGi bundle context for ScriptExtension Class.

Returns:

  • (org.osgi.framework.BundleContext)

    OSGi bundle context for ScriptExtension Class



57
58
59
# File 'lib/openhab/osgi.rb', line 57

def bundle_context
  @bundle_context ||= bundle.bundle_context
end

Class Method Details

.register_service(instance, *interfaces, **properties) ⇒ org.osgi.framework.ServiceRegistration

Register a new service instance with OSGi

Parameters:

  • instance (Object)

    The service instance

  • interfaces (Module)

    The interfaces to register this service for. If not provided, it will default to all Java interfaces the instance implements.

  • properties (Hash)

    The service registration properties.

Returns:

  • (org.osgi.framework.ServiceRegistration)


42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/openhab/osgi.rb', line 42

def register_service(instance, *interfaces, **properties)
  if interfaces.empty?
    interfaces = instance.class.ancestors.select { |k| k.respond_to?(:java_class) && k.java_class&.interface? }
  end

  bundle = org.osgi.framework.FrameworkUtil.get_bundle(interfaces.first.java_class)
  bundle.bundle_context.register_service(
    interfaces.map(&:java_class).map(&:name).to_java(java.lang.String),
    instance,
    java.util.Hashtable.new(properties)
  )
end

.service(name, filter: nil) ⇒ Object

Parameters:

Returns:

  • (Object)


15
16
17
# File 'lib/openhab/osgi.rb', line 15

def service(name, filter: nil)
  services(name, filter: filter).first
end

.services(name, filter: nil) ⇒ Array<Object>

Returns An array of services.

Parameters:

Returns:

  • (Array<Object>)

    An array of services



25
26
27
28
29
30
# File 'lib/openhab/osgi.rb', line 25

def services(name, filter: nil)
  (bundle_context.get_service_references(name, filter) || []).map do |reference|
    logger.trace "OSGi service found for '#{name}' using OSGi Service Reference #{reference}"
    bundle_context.get_service(reference)
  end
end