/*******************************************************************************
 * 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#/'; 

package org::eclipse::qvtd::xtext::qvtrelation::tests::forward2reverse {
/**
 * Reverse the order of elements in a circular list.
 */
	transformation Forward2Reverse(forward:listMM, reverse:listMM)
	{
		/**
		 *  Map each list to a list
		 */
		top relation list2list {
			listName : String;
			domain forward forwardList : DoublyLinkedList {
				name = listName
			};	   
			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 element to an element with reversed source/target linkage.
		 */
		top relation element2element {
			elementName : String;
			domain forward forwardElement : Element {
				list = forwardList : DoublyLinkedList{},
				name = elementName,
				target = forwardTarget : Element{}
			};
			enforce domain reverse reverseElement : Element {
				list = reverseList : DoublyLinkedList{},
				name = elementName,
				source = reverseSource : Element{}
			};	
			when {
				list2list(forwardList, reverseList);
				element2element(forwardTarget, reverseSource);
			}
		}
	}
}
