blob: 41b1905b2319b7aeef3c3d2f46e2d6d1bce58668 [file] [log] [blame]
/*
-----------------------------------------------------------------------
-- CHESS M2M plugin --
-- --
-- Copyright (C) 2011-2012 --
-- University of Padova, ITALY --
-- --
-- Author: Stefano Puri stefano.puri@intecs.it --
-- --
-- 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-v20.html --
-----------------------------------------------------------------------
*/
modeltype CHESS uses "http://CHESS";
modeltype UML uses "http://www.eclipse.org/uml2/3.0.0/UML";
modeltype MARTE uses "http://www.eclipse.org/papyrus/MARTE/1";
transformation RemoveMultiInstance(inout chessModel : CHESS);
property CHESSProfile : Profile = null;
property model : Model = null;
property newMultiInstPackage : Set(Package) = null;
property CHGaResourcePlatformQN = "CHESS::Core::CHGaResourcePlatform";
configuration property rootComp : String;
property rootInstance : InstanceSpecification = null;
main() {
log("*** Remove Multi Instance Transformation ***");
model := chessModel.rootObjects()![Model];
CHESSProfile := model.getAppliedProfiles()->selectOne(name="CHESS").oclAsType(Profile);
var compViewPack : Package := model.getView("ComponentView");
compViewPack->map removeMultipleInstancePackage();
}
/**
Takes the package owning the instances created by the BuildInstance trasformation and explodes
all the instanceSpecification and Slot deriving from Properties/Ports with mult>1
*/
mapping UML::Package::removeMultipleInstancePackage() {
var platforms := self.allOwnedElements()[Package]->select(isStereotyped(CHGaResourcePlatformQN))->asSequence();
assert fatal (platforms->size()=1) with log("CHGaResourcesPlatform not found");
var instPackage := platforms->first();
//var instPackage := UML::Package.allInstances()->select(name = rootName+"_instSpec")->asOrderedSet()->first().oclAsType(UML::Package);
var parentPackage : UML::Package := instPackage.owner.oclAsType(UML::Package);
newMultiInstPackage := self.allOwnedElements()[Package] -> select(name=instPackage.name+"_full");
newMultiInstPackage->forEach(p){
p.packagedElement := null;
p.destroy();
};
}
query Model::getView(viewName : String) : Package {
var seq := self.packagedElement[Package]-> union(self.packagedElement[Package].packagedElement[Package]);
return seq -> selectOne(isStereotyped("CHESS::Core::CHESSViews::" + viewName));
}
query Element::isStereotyped(stereoName : String) : Boolean {
return self.getAppliedStereotype(stereoName) <> null
}