[Erp5-report] r30638 - in /erp5/trunk/products/ERP5: Document/ Tool/
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Nov 16 00:15:00 CET 2009
Author: jp
Date: Mon Nov 16 00:15:00 2009
New Revision: 30638
URL: http://svn.erp5.org?rev=30638&view=rev
Log:
Moved code from SolverTool to SolverProcess.
Modified:
erp5/trunk/products/ERP5/Document/SolverProcess.py
erp5/trunk/products/ERP5/Tool/SolverTool.py
Modified: erp5/trunk/products/ERP5/Document/SolverProcess.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/SolverProcess.py?rev=30638&r1=30637&r2=30638&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/SolverProcess.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/SolverProcess.py [utf8] Mon Nov 16 00:15:00 2009
@@ -137,3 +137,50 @@
"""
for solver in self.contentValues(portal_type=self.getPortalObject().getPortalTargetSolverTypeList()):
solver.activate(active_process=self).solve()
+
+
+ # API
+ def isSolverDecisionListConsistent(self):
+ """
+ Returns True is the Solver Process decisions do not
+ need to be rebuilt, False else. This method can be
+ invoked before invoking buildSolverDecisionList if
+ this helps reducing CPU time.
+ """
+
+ def buildSolverDecisionList(self, delivery_or_movement=None):
+ """
+ Build (or rebuild) the solver decisions in the solver process
+
+ delivery_or_movement -- a movement, a delivery,
+ or a list thereof
+ """
+ if delivery_or_movement is None:
+ raise NotImplementedError
+ # Gather all delivery lines already found
+ # in already built solvers
+
+ # We suppose here that delivery_or_movement is a list of
+ # delivery lines. Let group decisions in such way
+ # that a single decision is created per divergence tester instance
+ # and per application level list
+ solver_decision_dict = {}
+ for movement in delivery_or_movement:
+ for simulation_movement in movement.getDeliveryRelatedValueList():
+ simulation_movemet_url = simulation_movement.getRelativeUrl()
+ for divergence_tester in simulation_movement.getParentValue().getDivergenceTesterValueList():
+ application_list = map(lambda x:x.getRelativeUrl(),
+ self.getSolverDecisionApplicationValueList(simulation_movement, divergence_tester))
+ application_list.sort()
+ solver_decision_key = (divergence_tester.getRelativeUrl(), application_list)
+ movement_dict = solver_decision_dict.setdefaults(solver_decision_key, {})
+ movement_dict[simulation_movemet_url] = None
+
+ # Now build the solver decision instances based on the previous
+ # grouping
+ # XXX-JPS: pseudocode for update (ie. rebuild) is not present
+ for solver_decision_key, movement_dict in solver_decision_dict.items():
+ new_decision = self.newContent(portal_type='Solver Decision')
+ new_decision._setDeliveryList(movement_dict.keys())
+ new_decision._setSolver(solver_decision_key[0])
+ # No need to set application_list or....?
Modified: erp5/trunk/products/ERP5/Tool/SolverTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/SolverTool.py?rev=30638&r1=30637&r2=30638&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/SolverTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Tool/SolverTool.py [utf8] Mon Nov 16 00:15:00 2009
@@ -143,30 +143,11 @@
if not self.isDivergent(delivery_or_movement=delivery_or_movement):
return None
- # We suppose here that delivery_or_movement is a list of
- # delivery lines. Let group decisions in such way
- # that a single decision is created per divergence tester instance
- # and per application level list
- solver_decision_dict = {}
- for movement in delivery_or_movement:
- for simulation_movement in movement.getDeliveryRelatedValueList():
- simulation_movemet_url = simulation_movement.getRelativeUrl()
- for divergence_tester in simulation_movement.getParentValue().getDivergenceTesterValueList():
- application_list = map(lambda x:x.getRelativeUrl(),
- self.getSolverDecisionApplicationValueList(simulation_movement, divergence_tester))
- application_list.sort()
- solver_decision_key = (divergence_tester.getRelativeUrl(), application_list)
- movement_dict = solver_decision_dict.setdefaults(solver_decision_key, {})
- movement_dict[simulation_movemet_url] = None
-
- # Now build the solver process instances based on the previous
- # grouping
+ # Create an empty solver process
new_solver = self.newContent(portal_type='Solver Process')
- for solver_decision_key, movement_dict in solver_decision_dict.items():
- new_decision = self.newContent(portal_type='Solver Decision')
- new_decision._setDeliveryList(movement_dict.keys())
- new_decision._setSolver(solver_decision_key[0])
- # No need to set application_list or....?
+ # And build decisions
+ new_solver.updateSolverDecision(delivery_or_movement=delivery_or_movement)
+ return new_solver
def getSolverProcessValueList(self, delivery_or_movement=None, validation_state=None):
"""
More information about the Erp5-report
mailing list