Skip to content
Snippets Groups Projects
Commit 1b931729 authored by Stefano Borini's avatar Stefano Borini
Browse files

Fixes problem with incorrect ProbeFactory plugin handling

parent f611c981
No related branches found
No related tags found
1 merge request!105Introduced interface for FactoryRegistryPlugin
...@@ -3,7 +3,7 @@ from traits.trait_types import Instance ...@@ -3,7 +3,7 @@ from traits.trait_types import Instance
from .core.workflow import Workflow from .core.workflow import Workflow
from .factory_registry_plugin import ( from .factory_registry_plugin import (
FactoryRegistryPlugin, IFactoryRegistryPlugin,
FACTORY_REGISTRY_PLUGIN_ID FACTORY_REGISTRY_PLUGIN_ID
) )
from .io.workflow_reader import WorkflowReader from .io.workflow_reader import WorkflowReader
...@@ -15,7 +15,7 @@ class BaseCoreDriver(Plugin): ...@@ -15,7 +15,7 @@ class BaseCoreDriver(Plugin):
""" """
#: The registry of the factories #: The registry of the factories
factory_registry = Instance(FactoryRegistryPlugin) factory_registry = Instance(IFactoryRegistryPlugin)
#: Deserialized content of the workflow file. #: Deserialized content of the workflow file.
workflow = Instance(Workflow) workflow = Instance(Workflow)
......
from envisage.extension_point import ExtensionPoint from envisage.extension_point import ExtensionPoint
from envisage.plugin import Plugin from envisage.plugin import Plugin
from traits.api import List from traits.api import List, Interface, provides
from force_bdss.ids import ExtensionPointID from force_bdss.ids import ExtensionPointID
from force_bdss.notification_listeners.i_notification_listener_factory import \ from force_bdss.notification_listeners.i_notification_listener_factory import \
...@@ -15,6 +15,24 @@ from .ui_hooks.i_ui_hooks_factory import IUIHooksFactory ...@@ -15,6 +15,24 @@ from .ui_hooks.i_ui_hooks_factory import IUIHooksFactory
FACTORY_REGISTRY_PLUGIN_ID = "force.bdss.plugins.factory_registry" FACTORY_REGISTRY_PLUGIN_ID = "force.bdss.plugins.factory_registry"
class IFactoryRegistryPlugin(Interface):
def data_source_factory_by_id(self, id):
pass
def kpi_calculator_factory_by_id(self, id):
pass
def mco_factory_by_id(self, id):
pass
def mco_parameter_factory_by_id(self, mco_id, parameter_id):
pass
def notification_listener_factory_by_id(self, id):
pass
@provides(IFactoryRegistryPlugin)
class FactoryRegistryPlugin(Plugin): class FactoryRegistryPlugin(Plugin):
"""Main plugin that handles the execution of the MCO """Main plugin that handles the execution of the MCO
or the evaluation. or the evaluation.
......
...@@ -5,7 +5,7 @@ from traits.api import HasStrictTraits, Instance ...@@ -5,7 +5,7 @@ from traits.api import HasStrictTraits, Instance
from force_bdss.core.input_slot_map import InputSlotMap from force_bdss.core.input_slot_map import InputSlotMap
from force_bdss.core.workflow import Workflow from force_bdss.core.workflow import Workflow
from ..factory_registry_plugin import FactoryRegistryPlugin from ..factory_registry_plugin import IFactoryRegistryPlugin
SUPPORTED_FILE_VERSIONS = ["1"] SUPPORTED_FILE_VERSIONS = ["1"]
...@@ -25,7 +25,7 @@ class WorkflowReader(HasStrictTraits): ...@@ -25,7 +25,7 @@ class WorkflowReader(HasStrictTraits):
""" """
#: The Factory registry. The reader needs it to create the #: The Factory registry. The reader needs it to create the
#: specific model objects. #: specific model objects.
factory_registry = Instance(FactoryRegistryPlugin) factory_registry = Instance(IFactoryRegistryPlugin)
def __init__(self, def __init__(self,
factory_registry, factory_registry,
......
from traits.api import List from traits.api import List, HasStrictTraits, provides
from force_bdss.factory_registry_plugin import FactoryRegistryPlugin from force_bdss.factory_registry_plugin import IFactoryRegistryPlugin
from .mco import ProbeMCOFactory from .mco import ProbeMCOFactory
from .kpi_calculator import ProbeKPICalculatorFactory from .kpi_calculator import ProbeKPICalculatorFactory
...@@ -8,20 +8,58 @@ from .data_source import ProbeDataSourceFactory ...@@ -8,20 +8,58 @@ from .data_source import ProbeDataSourceFactory
from .notification_listener import ProbeNotificationListenerFactory from .notification_listener import ProbeNotificationListenerFactory
class ProbeFactoryRegistryPlugin(FactoryRegistryPlugin): @provides(IFactoryRegistryPlugin)
class ProbeFactoryRegistryPlugin(HasStrictTraits):
mco_factories = List() mco_factories = List()
kpi_calculator_factories = List() kpi_calculator_factories = List()
data_source_factories = List() data_source_factories = List()
notification_listener_factories = List() notification_listener_factories = List()
def _mco_factories_default(self): def _mco_factories_default(self):
return [ProbeMCOFactory(self)] return [ProbeMCOFactory(None)]
def _kpi_calculator_factories_default(self): def _kpi_calculator_factories_default(self):
return [ProbeKPICalculatorFactory(self)] return [ProbeKPICalculatorFactory(None)]
def _data_source_factories_default(self): def _data_source_factories_default(self):
return [ProbeDataSourceFactory(self)] return [ProbeDataSourceFactory(None)]
def _notification_listener_factories_default(self): def _notification_listener_factories_default(self):
return [ProbeNotificationListenerFactory(self)] return [ProbeNotificationListenerFactory(None)]
def data_source_factory_by_id(self, id):
for ds in self.data_source_factories:
if ds.id == id:
return ds
raise KeyError(id)
def kpi_calculator_factory_by_id(self, id):
for kpic in self.kpi_calculator_factories:
if kpic.id == id:
return kpic
raise KeyError(id)
def mco_factory_by_id(self, id):
for mco in self.mco_factories:
if mco.id == id:
return mco
raise KeyError(id)
def mco_parameter_factory_by_id(self, mco_id, parameter_id):
mco_factory = self.mco_factory_by_id(mco_id)
for factory in mco_factory.parameter_factories():
if factory.id == parameter_id:
return factory
raise KeyError(parameter_id)
def notification_listener_factory_by_id(self, id):
for nl in self.notification_listener_factories:
if nl.id == id:
return nl
raise KeyError(id)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment