From db1c46287ba344fed06f03bce6483c1669389d27 Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Mon, 10 Jul 2017 18:22:21 +0100
Subject: [PATCH] Creates a first trivial prototype using envisage

---
 README.md                                     |  8 ++++++
 braindump/main.py                             |  2 +-
 {force => force_bdss}/__init__.py             |  0
 force_bdss/application.py                     | 25 +++++++++++++++++
 .../basic_key_performance_calculator.py       |  9 +++++++
 force_bdss/basic_multi_criteria_optimizer.py  |  9 +++++++
 force_bdss/i_key_performance_calculator.py    |  6 +++++
 force_bdss/i_multi_criteria_optimizers.py     |  6 +++++
 .../key_performance_calculators_plugin.py     | 19 +++++++++++++
 .../multi_criteria_optimizers_plugin.py       | 19 +++++++++++++
 force_bdss/workflow_plugin.py                 | 27 +++++++++++++++++++
 setup.py                                      | 15 +++++++++++
 12 files changed, 144 insertions(+), 1 deletion(-)
 rename {force => force_bdss}/__init__.py (100%)
 create mode 100644 force_bdss/application.py
 create mode 100644 force_bdss/basic_key_performance_calculator.py
 create mode 100644 force_bdss/basic_multi_criteria_optimizer.py
 create mode 100644 force_bdss/i_key_performance_calculator.py
 create mode 100644 force_bdss/i_multi_criteria_optimizers.py
 create mode 100644 force_bdss/key_performance_calculators_plugin.py
 create mode 100644 force_bdss/multi_criteria_optimizers_plugin.py
 create mode 100644 force_bdss/workflow_plugin.py

diff --git a/README.md b/README.md
index e69de29..68e6a40 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,8 @@
+FORCE BDSS
+----------
+
+This repository contains the implementation of the Business Decision System. It is implemented
+under the FORCE project (Horizon 2020/NMBP-23-2016/721027).
+
+
+
diff --git a/braindump/main.py b/braindump/main.py
index cbac201..a61d6a0 100644
--- a/braindump/main.py
+++ b/braindump/main.py
@@ -1,4 +1,4 @@
-from force import *
+from force_bdss import *
 
 wf=Workflow()
 wf.set_mco(Dakota())
diff --git a/force/__init__.py b/force_bdss/__init__.py
similarity index 100%
rename from force/__init__.py
rename to force_bdss/__init__.py
diff --git a/force_bdss/application.py b/force_bdss/application.py
new file mode 100644
index 0000000..d0fef51
--- /dev/null
+++ b/force_bdss/application.py
@@ -0,0 +1,25 @@
+# Enthought library imports.
+from envisage.api import Application
+
+
+# Application entry point.
+from force_bdss.multi_criteria_optimizers_plugin import \
+    MultiCriteriaOptimizersPlugin
+from force_bdss.workflow_plugin import WorkflowPlugin
+from force_bdss.key_performance_calculators_plugin import \
+    KeyPerformanceCalculatorsPlugin
+
+
+def run():
+
+    application = Application(
+        id='force',
+        plugins=[
+            WorkflowPlugin(),
+            MultiCriteriaOptimizersPlugin(),
+            KeyPerformanceCalculatorsPlugin(),
+        ]
+    )
+
+    # Run it!
+    application.run()
diff --git a/force_bdss/basic_key_performance_calculator.py b/force_bdss/basic_key_performance_calculator.py
new file mode 100644
index 0000000..30d8a76
--- /dev/null
+++ b/force_bdss/basic_key_performance_calculator.py
@@ -0,0 +1,9 @@
+from traits.api import provides, HasStrictTraits
+
+from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator
+
+
+@provides(IKeyPerformanceCalculator)
+class BasicKeyPerformanceCalculator(HasStrictTraits):
+    def run(self):
+        print("Computing basic key performance indicator")
diff --git a/force_bdss/basic_multi_criteria_optimizer.py b/force_bdss/basic_multi_criteria_optimizer.py
new file mode 100644
index 0000000..740c6aa
--- /dev/null
+++ b/force_bdss/basic_multi_criteria_optimizer.py
@@ -0,0 +1,9 @@
+from traits.api import provides, HasStrictTraits
+
+from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
+
+
+@provides(IMultiCriteriaOptimizer)
+class BasicMultiCriteriaOptimizer(HasStrictTraits):
+    def run(self):
+        print("Basic multicriteria optimizer in action")
diff --git a/force_bdss/i_key_performance_calculator.py b/force_bdss/i_key_performance_calculator.py
new file mode 100644
index 0000000..8ad12ca
--- /dev/null
+++ b/force_bdss/i_key_performance_calculator.py
@@ -0,0 +1,6 @@
+from traits.api import Interface
+
+
+class IKeyPerformanceCalculator(Interface):
+    def run(self):
+        pass
diff --git a/force_bdss/i_multi_criteria_optimizers.py b/force_bdss/i_multi_criteria_optimizers.py
new file mode 100644
index 0000000..a04bf6b
--- /dev/null
+++ b/force_bdss/i_multi_criteria_optimizers.py
@@ -0,0 +1,6 @@
+from traits.api import Interface
+
+
+class IMultiCriteriaOptimizer(Interface):
+    def run(self):
+        pass
diff --git a/force_bdss/key_performance_calculators_plugin.py b/force_bdss/key_performance_calculators_plugin.py
new file mode 100644
index 0000000..082af87
--- /dev/null
+++ b/force_bdss/key_performance_calculators_plugin.py
@@ -0,0 +1,19 @@
+from traits.api import List
+from envisage.plugin import Plugin
+
+from force_bdss.basic_key_performance_calculator import \
+    BasicKeyPerformanceCalculator
+from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator
+
+
+class KeyPerformanceCalculatorsPlugin(Plugin):
+
+    id = "force_bdss.key_performance_calculators_plugin"
+
+    key_performance_calculators = List(
+        IKeyPerformanceCalculator,
+        contributes_to='force_bdss.key_performance_calculators'
+    )
+
+    def _key_performance_calculators_default(self):
+        return [BasicKeyPerformanceCalculator()]
diff --git a/force_bdss/multi_criteria_optimizers_plugin.py b/force_bdss/multi_criteria_optimizers_plugin.py
new file mode 100644
index 0000000..a815cd1
--- /dev/null
+++ b/force_bdss/multi_criteria_optimizers_plugin.py
@@ -0,0 +1,19 @@
+from traits.api import List
+from envisage.plugin import Plugin
+
+from force_bdss.basic_multi_criteria_optimizer import \
+    BasicMultiCriteriaOptimizer
+from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
+
+
+class MultiCriteriaOptimizersPlugin(Plugin):
+
+    id = "force_bdss.multi_criteria_optimizers_plugin"
+
+    multi_criteria_optimizers = List(
+        IMultiCriteriaOptimizer,
+        contributes_to='force_bdss.multi_criteria_optimizers'
+    )
+
+    def _multi_criteria_optimizers_default(self):
+        return [BasicMultiCriteriaOptimizer()]
diff --git a/force_bdss/workflow_plugin.py b/force_bdss/workflow_plugin.py
new file mode 100644
index 0000000..75e898c
--- /dev/null
+++ b/force_bdss/workflow_plugin.py
@@ -0,0 +1,27 @@
+from envisage.extension_point import ExtensionPoint
+from traits.api import List
+from envisage.plugin import Plugin
+from traits.api import on_trait_change
+
+from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator
+from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
+
+
+class WorkflowPlugin(Plugin):
+
+    id = "force_bdss.workflow_plugin"
+
+    key_performance_calculators = ExtensionPoint(
+        List(IKeyPerformanceCalculator),
+        id='force_bdss.key_performance_calculators')
+
+    multi_criteria_optimizers = ExtensionPoint(
+        List(IMultiCriteriaOptimizer),
+        id='force_bdss.multi_criteria_optimizers')
+
+    @on_trait_change("application:started")
+    def application_started(self):
+        for mco in self.multi_criteria_optimizers:
+            mco.run()
+        for kpc in self.key_performance_calculators:
+            kpc.run()
diff --git a/setup.py b/setup.py
index e69de29..dcce066 100644
--- a/setup.py
+++ b/setup.py
@@ -0,0 +1,15 @@
+from setuptools import setup
+
+VERSION="0.1.0.dev0"
+
+setup(
+    name="force_bdss",
+    version=VERSION,
+    entry_points={
+    'console_scripts': [
+        'force_bdss = force_bdss.application:run',
+    ]},
+    install_requires=[
+        "envisage >= 4.6.0"
+    ]
+)
-- 
GitLab