diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py index 17fa2b40b892c13764193a4e5ae9167a40f77927..d2e14050894908c35c28561664f33c895b8d00d5 100644 --- a/force_bdss/core_mco_driver.py +++ b/force_bdss/core_mco_driver.py @@ -3,9 +3,10 @@ from envisage.plugin import Plugin from traits.has_traits import on_trait_change from traits.trait_types import List -from force_bdss.data_sources.i_data_source import ( - IDataSource) -from force_bdss.mco.i_multi_criteria_optimizers import IMultiCriteriaOptimizer +from force_bdss.data_sources.i_data_source_bundle import ( + IDataSourceBundle) +from force_bdss.mco.i_multi_criteria_optimizer_bundle import ( + IMultiCriteriaOptimizerBundle) class CoreMCODriver(Plugin): @@ -20,15 +21,15 @@ class CoreMCODriver(Plugin): #: A List of the available Multi Criteria Optimizers. #: This will be populated by MCO plugins. - multi_criteria_optimizers = ExtensionPoint( - List(IMultiCriteriaOptimizer), - id='force_bdss.multi_criteria_optimizers') + mco_bundles = ExtensionPoint( + List(IMultiCriteriaOptimizerBundle), + id='force.bdss.mco.bundles') #: A list of the available Key Performance Indicator calculators. #: It will be populated by plugins. - data_sources = ExtensionPoint( - List(IDataSource), - id='force_bdss.data_sources') + data_source_bundles = ExtensionPoint( + List(IDataSourceBundle), + id='force.bdss.data_sources.bundles') @on_trait_change("application:started") def application_started(self): @@ -42,13 +43,15 @@ class CoreMCODriver(Plugin): raise Exception("Requested data source {} but don't know " "to find it.".format(requested_ds)) else: - mco_name = workflow.multi_criteria_optimization.name - mco = self._find_mco_by_name(mco_name) - if mco: - mco.run(self.application) + mco_data = workflow.multi_criteria_optimizer + mco_bundle = self._find_mco_bundle_by_name(mco_data.name) + if mco_bundle: + mco_model = mco_bundle.create_model(mco_data.model_data) + mco = mco_bundle.create_optimizer(self, mco_model) + mco.run() else: raise Exception("Requested MCO {} but it's not available" - "to compute it.".format(mco_name)) + "to compute it.".format(mco_data.name)) def _find_data_source_by_computes(self, computes): for ds in self.data_sources: