blob: 98562e9398b33f519260cd35884c592248d29310 (
plain) (
tree)
|
|
/*******************************************************************************
* Copyright (c) 2007,2008 Tata Consultancy Services and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* TCS - initial implementation for ModelMorf
* E.D.Willink - alignment with evolved specification
* E.D.Willink - rename / comment
*******************************************************************************/
--import listMM : '../../../../../../../../../org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/DoublyLinkedList.ecore#/';
import listMM : 'DoublyLinkedList.ecore#/';
/**
* Transform a hierarchical StateMachine into a flat StateMachine.
*/
package org::eclipse::qvtd::xtext::qvtrelation2::tests::forward2reverse {
transformation Forward2Reverse(forward:listMM, reverse:listMM)
{
/**
* Map each hierarchical StateMachine to a flat StateMachine
*/
top relation list2list {
domain forward forwardList : DoublyLinkedList {
name = listName : String{}
};
enforce domain reverse reverseList : DoublyLinkedList {
name = listName
};
where {
listHead2listHead(forwardList, reverseList);
}
}
relation listHead2listHead {
domain forward forwardList : DoublyLinkedList {
headElement = forwardHead : Element{}
};
enforce domain reverse reverseList : DoublyLinkedList {
headElement = reverseHead : Element{}
};
when {
element2element(forwardHead, reverseHead);
}
}
/**
* Map each Leaf State to a Flat State in the corresponding StateMachine.
*/
top relation element2element {
domain forward forwardElement : Element {
list = forwardList : DoublyLinkedList{},
name = elementName : String{},
target = forwardTarget : Element{}
};
enforce domain reverse reverseElement : Element {
list = reverseList : DoublyLinkedList{},
name = elementName,
source = reverseSource : Element{}
};
when {
list2list(forwardList, reverseList);
element2element(forwardTarget, reverseSource);
}
}
}
}
|