blob: be0674c7f537b9446dda20ca4412a150dc95a409 [file] [log] [blame]
/*******************************************************************************
* 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 umlMM : 'ClassMM.emof'::ClassMM;
transformation ClassModelToClassModel(uml1:umlMM, uml2:umlMM)
{
key umlMM::Class{name};
top relation classToClass
{
cn : String;
enforce domain uml1
c1:Class
{
name = cn
};
enforce domain uml2
c2:Class
{
name = cn
};
}
top relation classToClassHierarchy
{
cn : String;
enforce domain uml1
c1:Class
{
supers = c1s:Set(Class){}
};
enforce domain uml2
c2:Class
{
supers = c2s:Set(Class){}
};
when
{
classToClass(c1, c2);
}
where
{
classSupersToClassSupers(c1s, c2s);
}
}
relation classSupersToClassSupers
{
cn : String;
c1 : umlMM::Class;
c2 : umlMM::Class;
restC1s : Set(umlMM::Class);
restC2s : Set(umlMM::Class);
enforce domain uml1
c1s:Set(Class)
{
c1 ++ restC1s
}
default_values
{
restC1s = Set{};
};
enforce domain uml2
c2s:Set(Class)
{
c2 ++ restC2s
}
default_values
{
restC2s = Set{};
};
where
{
classToClass(c1, c2);
classSupersToClassSupers(restC1s, restC2s);
}
}
}