| -- ****************************************************************************** |
| -- Copyright (c) 2007 Txt e-Solutions. |
| -- 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: |
| -- Txt e-Solutions - Initial implementation |
| -- |
| -- ****************************************************************************** |
| |
| --This module allows ComponentType replacement |
| |
| -- To be used with superimposition |
| |
| -- uses tags to select to be replaced and replacing components: |
| |
| -- To Be Replaced TagType: name = TBR tagtype, type = java.lang.String |
| -- To Be Replaced Tag: name = TBR, type = TBR tagtype |
| -- Replacing Part TagType: name = RC tagtype, type = java.lang.String |
| -- Replacing Part Tag: name = RC, type = RC tagtype |
| |
| module ComponentTypeReplacement_superimp; -- Module Template |
| create OUT : Xirup from IN : Xirup; |
| |
| --check if a ComponentType has a TBR Tag |
| helper context Xirup!ComponentType def : hasTBRTag() : Boolean = |
| if (self.tag->exists(e|e.name='TBR')) |
| then |
| true |
| else |
| false |
| endif; |
| |
| --check if a ComponentType has a RC Tag |
| helper context Xirup!ComponentType def : hasRCTag() : Boolean = |
| if (self.tag->exists(e|e.name='RC')) |
| then |
| true |
| else |
| false |
| endif; |
| |
| |
| --get the TBR ComponentType |
| helper def : getTBR : Xirup!ComponentType = |
| Xirup!ComponentType->allInstances()->iterate(e;res : Sequence(Xirup!ComponentType) = Sequence{}| |
| if e.hasTBRTag() |
| then |
| res->append(e) |
| else |
| res |
| endif |
| )->first() |
| ; |
| |
| --get the Replacing ComponentType |
| helper def : getRC : Xirup!ComponentType = |
| Xirup!ComponentType->allInstances()->iterate(e;res : Sequence(Xirup!ComponentPart) = Sequence{}| |
| if e.hasRCTag() |
| then |
| res->append(e) |
| else |
| res |
| endif |
| )->first() |
| ; |
| |
| --check if the type of a ComponentPart has to be changed |
| helper context Xirup!ComponentPart def : checkType() : Xirup!ComponentType = |
| if (self.type=thisModule.getTBR) |
| then |
| thisModule.getRC |
| else |
| self.type |
| endif |
| ; |
| |
| --check if a Connection offers has to be updated |
| helper context Xirup!Connection def : checkOffConn() : Xirup!Offers = |
| if ((thisModule.getTBR.offers->exists(e|e=self.offers))) |
| then |
| thisModule.getRC.offers->select(e|e.to=self.offers.to)->first() |
| else |
| self.offers |
| endif |
| ; |
| |
| --check if a Connection requires has to be updated |
| helper context Xirup!Connection def : checkReqConn() : Xirup!Requires = |
| if ((thisModule.getTBR.requires->exists(e|e=self.requires))) |
| then |
| thisModule.getRC.requires->select(e|e.to=self.requires.to)->first() |
| else |
| self.requires |
| endif |
| ; |
| |
| --check if a Required internal has to be updated |
| helper context Xirup!Required def : checkReq() : Xirup!Requires = |
| if ((thisModule.getTBR.requires->exists(e|e=self.internal))) |
| then |
| thisModule.getRC.requires->select(e|e.to=self.internal.to)->first() |
| else |
| self.internal |
| endif |
| ; |
| |
| --check if a Exposed internal has to be updated |
| helper context Xirup!Exposed def : checkExp() : Xirup!Offers = |
| if ((thisModule.getTBR.offers->exists(e|e=self.internal))) |
| then |
| thisModule.getRC.offers->select(e|e.to=self.internal.to)->first() |
| else |
| self.internal |
| endif |
| ; |
| |
| |
| --override ComponentPart rule |
| rule ComponentPart{ |
| from |
| s : Xirup!ComponentPart |
| to |
| t : Xirup!ComponentPart ( |
| id<-s.id, |
| tag<-s.tag, |
| metric<-s.metric, |
| externalModelReference<-s.externalModelReference, |
| type<-s.checkType(), |
| name<-s.name |
| ) |
| } |
| |
| |
| --override Connection rule |
| rule Connection{ |
| from |
| s : Xirup!Connection |
| to |
| t : Xirup!Connection ( |
| id<-s.id, |
| tag<-s.tag, |
| metric<-s.metric, |
| offers<-s.checkOffConn(), |
| offersPart<-s.offersPart, |
| requires<-s.checkReqConn(), |
| requiresPart<-s.requiresPart |
| ) |
| } |
| |
| |
| --override Required rule |
| rule Required { |
| from |
| s : Xirup!Required |
| to |
| t : Xirup!Required ( |
| id<-s.id, |
| tag<-s.tag, |
| metric<-s.metric, |
| constrainttemplate<-s.constrainttemplate, |
| constraint<-s.constraint, |
| internal<-s.checkReq(), |
| internalPart<-s.internalPart, |
| external<-s.external |
| ) |
| } |
| |
| --override Exposed rule |
| rule Exposed{ |
| from |
| s : Xirup!Exposed |
| to |
| t : Xirup!Exposed ( |
| id<-s.id, |
| tag<-s.tag, |
| metric<-s.metric, |
| constrainttemplate<-s.constrainttemplate, |
| constraint<-s.constraint, |
| internal<-s.checkExp(), |
| internalPart<-s.internalPart, |
| external<-s.external |
| ) |
| } |
| |
| |
| --override Tag rule |
| |
| rule Tag { |
| from |
| s : Xirup!Tag |
| to |
| t : Xirup!Tag ( |
| id<-s.id, |
| tag<-s.tag, |
| metric<-s.metric, |
| name<-s.name, |
| type<-s.type, |
| value<-s.value |
| ) |
| } |
| |