From 62426ce24be25a68ee517a1c7d30662e3dc2828d Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Fri, 14 Jul 2017 10:31:35 +0100
Subject: [PATCH] Readapted Core driver to handle MCO bundles

---
 force_bdss/core_mco_driver.py | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index 17fa2b4..d2e1405 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:
-- 
GitLab