| /******************************************************************************* |
| * 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 v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * TCS - initial implementation for ModelMorf |
| * E.D.Willink - alignment with evolved specification |
| *******************************************************************************/ |
| import hstmMM_p : 'hstmMM.emof'::hstmMM_p; |
| import stmMM_p : 'stmMM.emof'::stmMM_p; |
| |
| transformation HstmToStm(hstm:hstmMM_p, stm:stmMM_p) |
| { |
| key hstmMM_p::State {name}; |
| key hstmMM_p::Trans {name, fromState, toState}; |
| key stmMM_p::State {name}; |
| key stmMM_p::Trans {name, fromState, toState}; |
| |
| query StateContainsState(cState:hstmMM_p::State, mState:hstmMM_p::State):Boolean |
| { |
| if (mState.containedInState->isEmpty()) |
| then |
| false |
| else if (mState.containedInState = cState) |
| then |
| true |
| else |
| StateContainsState(cState, mState.containedInState) |
| endif |
| endif |
| } |
| |
| top relation LStateToState -- map each Class to Table |
| { |
| n : String; |
| |
| domain hstm s1:State |
| { |
| name = n |
| } {s1.containsState->isEmpty()}; |
| |
| enforce domain stm s2:State |
| { |
| name = n |
| }; |
| } |
| |
| top relation CStateToState -- map each Class to Table |
| { |
| tn : String; |
| ms1: hstmMM_p::State; |
| ms2: hstmMM_p::State; |
| ts1: hstmMM_p::State; |
| ts2: stmMM_p::State; |
| |
| domain hstm fs1:State |
| { |
| outTrans = t1:Trans {name = tn, toState = ts1} |
| }; |
| |
| enforce domain stm fs2:State |
| { |
| outTrans = t2:Trans {name = tn, toState = ts2} |
| }; |
| |
| when |
| { |
| LStateToState(ms1, fs2); |
| ( |
| ms1 = fs1 |
| or |
| StateContainsState(fs1, ms1) |
| ); |
| LStateToState(ms2, ts2); |
| ( |
| ms2 = ts1 |
| or |
| StateContainsState(ts1, ms2) |
| ); |
| } |
| } |
| } |