blob: 53171d3e6716faa37a00f733e9752c7f52164b1b [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_IN.emof'::ClassMM;
import ABS2CONC : 'ClassAbstractToConcrete.ecore'::abs2conc;
transformation AbstractToConcrete {
uml1 imports UMLMM;
uml2 imports UMLMM;
imports ABS2CONC;
}
map AbstractClassToConcreteClass in AbstractToConcrete {
uml1 (cc1 : Class, ac : Class |
cc1.inheritsFrom = ac;
ac.isAbstract;)
{
}
enforce uml2 ()
{
realize cc2 : Class |
}
where () {
realize p2c : ParentToChild |
p2c.parent := ac;
p2c.class2 := cc2;
}
}
map OperationToOperation in AbstractToConcrete {
uml1 (pc : Class, aco:Operation |
pc.isAbstract;
aco.class = pc;)
{
}
enforce uml2 (cc2 : Class | )
{
realize cco:Operation |
cco.class := cc2;
}
where (p2c : ParentToChild |
p2c.parent = pc;
p2c.class2 = cc2;)
{
realize o2o : OperationToOperation |
o2o.op1 := aco;
o2o.op2 := cco;
o2o.class := p2c;
}
map
{
where() {
o2o.name := aco.name;
o2o.name := cco.name;
aco.name := o2o.name;
cco.name := o2o.name;
}
}
}
map ParameterToParameter in AbstractToConcrete {
uml1 (aco:Operation, acop:Parameter |)
{
acop.operation = aco;
}
uml2 (cco:Operation, ccop:Parameter |)
{
ccop.operation = cco;
}
where (o2o : OperationToOperation |
o2o.op1 = aco;
o2o.op2 = cco;)
{
realize p2p : ParameterToParameter |
p2p.param1 := acop;
p2p.param2 := ccop;
p2p.operation := o2o;
}
map
{
where ()
{
p2p.name := acop.name;
p2p.name := ccop.name;
acop.name := p2p.name;
ccop.name := p2p.name;
p2p.type := acop.type;
p2p.type := ccop.type;
acop.type := p2p.type;
ccop.type := p2p.type;
}
}
}