*/
public static TCGOCLExpression connectPreconditionAndPostcondition(
TCGOCLExpression in_oPrecondition,
TCGOCLExpression in_oPostcondition)
{
TCGOCLExpression oExpression = null;
if(in_oPrecondition instanceof TCGOCLOperation &&
in_oPostcondition instanceof TCGOCLOperation)
{
TCGOCLOperation oPrecondition = (TCGOCLOperation)in_oPrecondition;
TCGOCLOperation oPostcondition = (TCGOCLOperation)in_oPostcondition;
// both conditions have the dependent property on the left side
// // all missing combinations of relations cannot be evaluated
// if((oPrecondition.getOperationName().equals("<") && oPostcondition.getOperationName().equals("<")) ||
// (oPrecondition.getOperationName().equals("<") && oPostcondition.getOperationName().equals("<=")) ||
// (oPrecondition.getOperationName().equals("<") && oPostcondition.getOperationName().equals("=")) ||
// (oPrecondition.getOperationName().equals("<=") && oPostcondition.getOperationName().equals("<")) ||
// (oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals("<"))) {
// oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
// ((TCGOCLOperation)oExpression).setOperationName("<");
// }
// else if((oPrecondition.getOperationName().equals("<=") && oPostcondition.getOperationName().equals("<=")) ||
// (oPrecondition.getOperationName().equals("<=") && oPostcondition.getOperationName().equals("=")) ||
// (oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals("<="))) {
// oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
// ((TCGOCLOperation)oExpression).setOperationName("<=");
// }
// else if((oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals("=")) ||
// (oPrecondition.getOperationName().equals("<>") && oPostcondition.getOperationName().equals("<>"))){
// oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
// ((TCGOCLOperation)oExpression).setOperationName("=");
// }
// else if((oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals(">=")) ||
// (oPrecondition.getOperationName().equals(">=") && oPostcondition.getOperationName().equals("=")) ||
// (oPrecondition.getOperationName().equals(">=") && oPostcondition.getOperationName().equals(">="))) {
// oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
// ((TCGOCLOperation)oExpression).setOperationName(">=");
// }
// else if((oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals(">")) ||
// (oPrecondition.getOperationName().equals(">=") && oPostcondition.getOperationName().equals(">")) ||
// (oPrecondition.getOperationName().equals(">") && oPostcondition.getOperationName().equals("=")) ||
// (oPrecondition.getOperationName().equals(">") && oPostcondition.getOperationName().equals(">=")) ||
// (oPrecondition.getOperationName().equals(">") && oPostcondition.getOperationName().equals(">"))) {
// oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
// ((TCGOCLOperation)oExpression).setOperationName(">");
// }
// else if((oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals("<>")) ||
// (oPrecondition.getOperationName().equals("<>") && oPostcondition.getOperationName().equals("="))) {
// oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
// ((TCGOCLOperation)oExpression).setOperationName("<>");
// }
//
// all missing combinations of relations cannot be evaluated
if((oPrecondition.getOperationName().equals("<") && oPostcondition.getOperationName().equals("<=")) ||
(oPrecondition.getOperationName().equals("<") && oPostcondition.getOperationName().equals("="))) {
oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
((TCGOCLOperation)oExpression).setOperationName("<");
}
else if((oPrecondition.getOperationName().equals("<") && oPostcondition.getOperationName().equals("<")) ||
(oPrecondition.getOperationName().equals("<=") && oPostcondition.getOperationName().equals("<=")) ||
(oPrecondition.getOperationName().equals("<=") && oPostcondition.getOperationName().equals("=")) ||
(oPrecondition.getOperationName().equals("<=") && oPostcondition.getOperationName().equals("<"))) {
oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
((TCGOCLOperation)oExpression).setOperationName("<=");
}
else if((oPrecondition.getOperationName().equals("=") && oPostcondition.getOperationName().equals("=")) ||
(oPrecondition.getOperationName().equals("<>") && oPostcondition.getOperationName().equals("<>"))){
oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
((TCGOCLOperation)oExpression).setOperationName("=");
}
else if((oPrecondition.getOperationName().equals(">") && oPostcondition.getOperationName().equals(">")) ||
(oPrecondition.getOperationName().equals(">=") && oPostcondition.getOperationName().equals(">=")) ||
(oPrecondition.getOperationName().equals(">=") && oPostcondition.getOperationName().equals("=")) ||
(oPrecondition.getOperationName().equals(">=") && oPostcondition.getOperationName().equals(">"))) {
oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
((TCGOCLOperation)oExpression).setOperationName(">=");
}
else if((oPrecondition.getOperationName().equals(">") && oPostcondition.getOperationName().equals(">=")) ||
(oPrecondition.getOperationName().equals(">") && oPostcondition.getOperationName().equals("="))) {
oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
((TCGOCLOperation)oExpression).setOperationName(">");
}
else if((oPrecondition.getOperationName().equals("<>") && oPostcondition.getOperationName().equals("="))) {
oExpression = GeneratedFactory.eINSTANCE.createTCGOCLOperation();
((TCGOCLOperation)oExpression).setOperationName("<>");
}
// got new expression -> also add copies of the left and the right part
if(oExpression != null)
{
// just referencing the used sides of the original conditions is error-prone
// -> in the following these sides are altered -> this would affect also the original conditions!
((TCGOCLOperation)oExpression).setLeft(copyExpression(oPostcondition.getRight()));
((TCGOCLOperation)oExpression).setRight(copyExpression(oPrecondition.getRight()));
normalizeExpression(oExpression);
}
else if(oPrecondition.getOperationName().equals("not")) {
TCGOCLExpression oNegatedExpression = null;
if(oPrecondition.getLeft() != null)
oNegatedExpression = oPrecondition.getLeft();
if(oPrecondition.getRight() != null)
oNegatedExpression = oPrecondition.getRight();
oExpression = connectPreconditionAndPostcondition(oNegatedExpression, in_oPostcondition);
oExpression = negateLogicalTCGOCLExpression(oExpression);
}
else if(oPostcondition.getOperationName().equals("not")) {
TCGOCLExpression oNegatedExpression = null;
if(oPostcondition.getLeft() != null)
oNegatedExpression = oPostcondition.getLeft();
if(oPostcondition.getRight() != null)
oNegatedExpression = oPostcondition.getRight();
oExpression = connectPreconditionAndPostcondition(in_oPrecondition, oNegatedExpression);