TCGDisjunctiveNormalForm in_oPreCondition,
TCGConjunction in_oPostCondition)
{
// *** include precondition in search algorithm
// TCGDisjunctiveNormalForm oPreDNF = in_oPair.getSecond().getPrecondition();
TCGDisjunctiveNormalForm oPreDNF = in_oPreCondition;
// insert restricted guard condition here
if(Configuration.isInnerTransitionHasPriorityOverOuterTransition()) {
if(in_oPair.getSecond() != null &&
TCGNodeHelperClass.firstNodeIsSubStateOfSecondNode(
in_oPair.getFirst(), in_oPair.getSecond().getSourceNode())) {
// Hier entstehen widerspr�chliche Bedingungen? Mit Beispiel-debug 167 testen!
Map<TCGEvent, TCGDisjunctiveNormalForm> colAllowedEventToDNF =
TCGTransitionHelperClass.returnAvailableEventsAndGuardsForStateAndOutgoingTransition(
in_oPair.getFirst(), in_oPair.getSecond());
// TODO : ### ObjectComparator durchziehen: nach "contains" suchen
Object oRefObject = ObjectComparator.getEqualObject(colAllowedEventToDNF.keySet(), in_oEvent);
if(oRefObject != null) {
TCGEvent oRefEvent = (TCGEvent)oRefObject;
boolean bBothDNFsAreNonEmpty = !(oPreDNF == null || oPreDNF.getConjunctions().isEmpty())
&& !(colAllowedEventToDNF.get(oRefEvent) == null || colAllowedEventToDNF.get(oRefEvent).getConjunctions().isEmpty());
oPreDNF = TCGDisjunctiveNormalFormHelperClass.connectTwoDNFWithAnd(
oPreDNF, colAllowedEventToDNF.get(oRefEvent));
TCGDisjunctiveNormalFormHelperClass.removeContradictingConjunctions(oPreDNF);
// check if the removal of contradicting conjunctions completely cleared the conjunction set
if(bBothDNFsAreNonEmpty == oPreDNF.getConjunctions().isEmpty())
return;
// oPreDNF = colAllowedEventToDNF.get(in_oEvent);
}
else
return;
}
}
// continue search for all conjunctions of the precondition (guard)
if((oPreDNF != null) && (!oPreDNF.getConjunctions().isEmpty())) {
for(TCGConjunction oPreConjunction : oPreDNF.getConjunctions()) {
searchBackwardsFromEventAndPostcondition(
in_oPair, in_oEvent, oPreConjunction, in_oPostCondition);
}
}
else {