123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- '''This file is part of AToMPM - A Tool for Multi-Paradigm Modelling
- Copyright 2011 by the AToMPM team and licensed under the LGPL
- See COPYING.lesser and README.md in the root of this project for full details'''
- from ..tcore.composer import Composer
- from ...tconstants import TConstants as TC
- class CRule(Composer):
- def __init__(self,motifContext):
- self._mtContexts = []
- self._mtContexts.append(motifContext)
- self.cruleEnd = False
- self.packet = None
- def packet_in(self, packet):
- self.cruleEnd = False
- self._mtContexts[-1]._expired=False
- self._mtContexts[-1]._lastStep={}
- self.exception = None
- self.is_success = False
- self.packet = packet
- while not self.cruleEnd:
- result = self._step()
- self.is_success = result if result != None else False
- return self.packet
- def _nextRule(self) :
- mtc = self._mtContexts[-1]
- ns = mtc.nextStep()
- if 'id' in ns :
- fulltype = mtc.t['nodes'][ns['id']]['$type']
- if fulltype == mtc.metamodel+"CRule":
- #self._loadTransform(ns['rule'])
- return self._nextRule()
- elif fulltype.startswith('/Formalisms/__Transformations__/Transformation/T-Core') or \
- fulltype.startswith('/Formalisms/__Transformations__/Transformation/MoTif'):
- return ns
- elif 'trafoResult' in ns:
- return ns;
- def _step(self) :
- def runRule(r) :
- ar = r['rule']
- self.packet = ar.packet_in(self.packet)
- if ar.is_success :
- return (self.packet.deltas,TC.SUCCEEDED)
- elif not ar.is_success :
- if ar.exception :
- return (str(ar.exception),TC.EXCEPTION)
- else :
- return (None,TC.FAILED)
- try :
- nr = self._nextRule()
- except Exception :
- self.cruleEnd = True
- return
- if 'trafoResult' in nr:
- self.cruleEnd = True
- return nr['trafoResult']
- if nr.__class__ != {}.__class__ :
- self.cruleEnd = True
- return
- elif '$err' in nr :
- self.cruleEnd = True
- return
- else :
- (res,ai) = runRule(nr)
- self._mtContexts[-1].setLastStepApplicationInfo(ai)
- if ai == TC.FAILED :
- pass
- #self._aswPrintReq(TC.RULE_FAILURE_MSG+" ("+self._mtContexts[-1]._lastStep['alias']+":"+self._mtContexts[-1]._lastStep['name']+")")
- elif ai == TC.EXCEPTION :
- pass
- #self._aswPrintReq(TC.RULE_EXCEPTION_MSG + res)
- else :
- return True
- #self._mtContexts[-1].setLastStepFeedbackReceived()
|