第 9 章 結論
9.1 結論
第 9 章
近年デバイス技術の発達,
IoT
などの進展の中,組込みシステムの重要性はます ます高まってきている.そうした中,ハードウェアとソフトウェアからなるシス テムの開発の効果的な支援は一層重要となっている.本研究がそうした開発や研 究へのひとつの貢献になることを願っている.謝辞
まず何よりも博士前期課程,博士後期課程に渡り研究をご指導頂きました岸知 二教授に深く感謝致します.何度も研究に行き詰まり論文も遅筆であった私を辛 抱強くご指導頂き導いて頂けました.岸先生の元でなければ本論文まで辿りつけ なかったと思います.本当にありがとうございました.
博士後期課程の研究室での生活や論文,研究の進め方について数々のご助言を 頂きました
Defago
Xavier
先生に感謝致します.また青木利晃先生にも研究や研 究室生活など様々にご助言,ご協力頂きましたありがとうございました.研究に 関してご助言やご協力を頂きました野田夏子先生にも感謝致します.九州大学に移ってからは,福田晃先生,鵜林尚靖先生始め,多くの先生方にご 助言,ご協力頂きました.深く感謝いたします.
JAIST
での生活を楽しく支えて 頂いた研究室メンバーにも感謝致します.最後にここまでの研究生活を支え,見守ってくれた両親に感謝致します.皆様 本当にありがとうございました.
参考文献
[1] OSEK/VDX group,OSEK-VDX Portal,http://www.osek-vdx.org/ (accessed 2014-08-24)
[2] ITRON Project, ITRON Project Archive, http://www.ertl.jp/ITRON/
home-j.html (accessed 2014-08-24)
[3] FreeRTOS, FreeRTOS, http://www.freertos.org/ (accessed 2014-08-24) [4] Pohl, K., Bockle, G. and van der Linden,F. Software Product Line Engineering
. Foundations, Principles, and Techniques. Springer, Berlin, Heidelberg, New York, 2005.
[5] Object Management Group: Model-Driven Architecture, www.omg.com/mda.(accessed 2014-08-24)
[6] OMG. ,Meta Object Facility (MOF) Version
2.4.1.,http://www.omg.org/spec/MOF/2.4.1/PDF (accessed 2014-08-24) [7] Markus Voelter, Sebastian Benz, Christian Dietrich, Birgit Engelmann, Mats
Helander, Lennart C. L. Kats, Eelco Visser, and Guido Wachsmuth, DSL En-gineering: Desingning, Implementing, and Using Domain-Specific Languages, dslbook.org, (2013)
[8] Evans, Eric. Domain-Driven Design: Tackling Complexity in the Heart of Software. : Addison-Wesley, (2004)
[9] Itemis, Xtext, http://www.eclipse.org/Xtext/(accessed 2014-08-24)
[10]
田中 明,
細合 晋太郎,
テキスト型DSL
開発フレームワークXtext
入門,
技術評 論社ベータパブリッシュ, http://www.beta-publish.com/books.html ( accessed 2014-08-24)
[11] MetaCase, MetaEdit+ Domain-Specific Modeling (DSM) environment ,http://www.metacase.com/products.html (accessed 2014-08-24)
[12] Eclipse org,Graphical Modeling Framework (GMF) ,http://www.eclipse.org/modeling/gmf/ (accessed 2014-08-24)
[13] Eclipse org, Graphiti, http://www.eclipse.org/graphiti/ (accessed 2014-08-24) [14] Eclipse org, Sirius, http://www.eclipse.org/sirius/ (accessed 2014-08-24) [15] OMG. ,UML Profile for Modeling and Analysis of Real-time and
Embed-ded Systems (MARTE), V1.1, http://www.omg.org/spec/MARTE/1.1/PDF (accessed 2014-08-24)
[16] OMG. ,OMG Systems Modeling Language (OMG SysML), V1.2. , http://www.omg.org/spec/SysML/1.2/PDF (accessed 2014-08-24)
[17] AUTOSAR. ,AUTOSAR., www.autosar.org ( accessed 2014-08-24)
[18] OMG. ,OMG Unified Modeling Language (OMG UML), Superstruc-ture, V2.4.1, http://www.omg.org/spec/UML/2.4.1/Superstructure/PDF (accessed 2014-08-24)
[19] Kang K. C., Cohen S. G., Hess J. A., Novak W. E., and Peterson A.
S.,”Feature-oriented domain analysis (FODA) feasibility study”, Technical report, DTIC Document, 1990.
[20] K. C. Kang, S. Kim, J. Lee, K. Kim, E. Shin, and M. Huh, FORM: A Feature-Oriented Reuse Method with Domain-Specific Reference Architec-tures, Annals of Software Engineering, vol. 5, 1998, pp. 143 - 168.
[21] eclipse.org., Eclipse, http://www.eclipse.org/ ( accessed 2014-08-24)
[22] eclipse.org, Eclipse Modeling Framework, http://www.eclipse.org/emf (ac-cessed 2014-08-24)
[23] CEA., Papyrus UML, http://www.eclipse.org/papyrus/ (accessed 2014-08-24)
[24] Itemis, Xtext, http://www.eclipse.org/Xtext/ (accessed 2014-08-24)
[25] Eclipse org, Graphical Modeling Framework (GMF), http://www.eclipse.org/modeling/gmf/ (accessed 2014-08-24)
[26] Atmel, ATmega328P, http://www.atmel.com/devices/ATMEGA328.aspx (accessed 2014-08-24)
[27] Kionix, KXP84, http://www.kionix.com/accelerometers/kxss5(accessed 2014-08-24)
[28] Atmel, AT25010B., http://www.atmel.com/devices/AT25010B.aspx (ac-cessed 2014-08-24)
[29] Atmel, ATmega2560P, http://www.atmel.com/devices/atmega2560.aspx (ac-cessed 2015-01-10)
[30] InvenSense, MPU9150, http://www.invensense.com/mems/gyro/mpu9150.html (accessed 2015-01-10)
[31] FTDI, FT232R, http://www.ftdichip.com/Products/ICs/FT232R.htm, (ac-cessed 2015-01-10)
[32] C. W. Krueger, New Methods in Software Product Line Development, in Proceedings of the International Software Product Line Conference (SPLC).
IEEE Computer Society Press, 2006, pp. 95-102.
[33] M. Rosenmuller and N. Siegmund, ”Automating the configu- ration of multi
software product lines.”, In Fourth International Workshop on Variability
[34] Krzysztof Czarnecki, Simon Helsen, Ulrich Eisenecker ”Staged Configuration Using Feature Models”, LNCS Volume 3154, 2004, pp 266-283 2004
[35] Jules White, Brian Dougherty, Doulas C. Schmidt, David Benavides, ”Auto-mated reasoning for multi-step feature model configuration problems”. Pro-ceeding SPLC ’09 ProPro-ceedings of the 13th International Software Product Line Conference Pages 11-20, 2009
[36] Hui Chen, Godet-Bar G., Rousseau F, Petrot F, ”Me3D: A model-driven methodology expediting embedded device driver development,” Rapid System Prototyping (RSP), 2011 22nd IEEE International Symposium on , vol., no., pp.171,177, 24-27 May 2011
[37] M Voelter, ”Embedded Software Development with Projectional Language Workbenches”, MoDELS, Lecture Notes in Computer Science, Vol.6395, Springer, pp.32-46, 2010.
[38] S., Marlet, R. and Consel, C. Thibault, ”Domain-Specific Languages: From Design to Implementation Application to Video Device Drivers Generation”, IEEE Trans.Software Eng., Vol.25, No.3, pp.363-377, 1999.
[39] T., Hausmann, J. H. and Engels, G. Schattkowsky, ”Using UML Activities for System-on-Chip Design and Synthesis”, MoDELS, Lecture Notes in Computer Science, Vol.4199, Springer, pp.737-752 2006.
[40] Dirk Muthig, Colin Atkinson, ”Model-Driven Product Line Architectures”, SPLC 2002, LNCS Volume 2379, 2002, pp 110-129, 2002.
[41] Tawhid, R.; Petriu, D.C., ”Product Model Derivation by Model Transforma-tion in Software Product Lines”, Object/Component/Service-Oriented Real-Time Distributed Computing Workshops (ISORCW), 2011 14th IEEE Inter-national Symposium on , vol., no., pp.72,79, 28-31 March 2011
[42] K. Czarnecki, M. Antkiewicz, Mapping Features to Models: A Template
Approach Based on Superimposed Variants , Proceedings of the 4th
interna-tional conference on Generative Programming and Component Engineer-ing (GPCE), LNCS vol. 3676, pp. 422-437, Springer, 2005.
[43] Pure Systems, pure variants, http://www.pure-systems.com/Home.142.0.html (accessed 2014-08-24)
[44] BigLever, Gaers, http://www.biglever.com/ (accessed 2014-08-24)
[45] CadSoft, Eagle, http://www.cadsoftusa.com/ (accessed 2015-01-10)
本研究に関する発表論文
[1]
細合 晋太郎,岸 知二:
ハードウェア情報を含めたMDA
の提案と実装,情 報処理学会研究報告,2007-EMB-005, No.52, pp. 3340 (2007).[2]
細合晋太郎, 岸知二,”システム構成による制約を考慮したSPL
の提案”, 情報 処理学会, ソフトウェア・エンジニアリングシンポジウム2008
[3]
細合晋太郎,岸知二, ハードウェア情報のモデル化とモデル駆動技術による 組込みソフトウェア開発への活用,
情報処理学会,ソフトウェアエンジニア リングシンポジウム2011, pp.1-8, 2011.
[4]
細合晋太郎, 岸知二,2
層フィーチャモデルを用いた開発手法の提案と実 装,
情報処理学会,組込みシステム研究会, 2008- EMB-010, pp.29-36, 2008.[5]
細合晋太郎, 野田夏子, 岸知二, ”組み込みシステムプロダクトライン開発の ためのドライバ生成方式の提案”,
情報処理学会 論文誌(
査読中)
付録
付録 A メタモデル定義
図
A.1
に本研究で実装したハードウェアメタモデル,ゲートウェイメタモデル のパッケージ構造を,図A.2
に詳細なメタモデル定義,図A.3
に詳細なメタモデ ルのリストを示す.図
A.1:
ハードウェアメタモデル,ゲートウェイメタモデルのパッケージ構造図
A.2:
ハードウェアメタモデル,ゲートウェイメタモデルの詳細モデル図図
A.3:
ハードウェアメタモデル,ゲートウェイメタモデルのリスト付録 B 実装システムの構成
図
A.4:
実装システムの構成付録 C DSL 定義
Code 1:
ハードウェア部品DSL
の定義(Xtext
形式)
g r a m m a r jp . ac . j a i s t . k s l a b . sb . m a r t e . sp e c . S p e c D s l w i t h
org . e c l i p s e . x t e x t . c o m m o n . T e r m i n a l s g e n e r a t e s p e c D s l " h t t p : // www . ac . jp / j a i s t / k s l a b / sb / m a r t e / sp e c / S p e c D s l "
i m p o r t " h t t p : // www . e c l i p s e . org / emf / 2 0 0 2 / E c o r e "
M o d e l :
D a t a s h e e t | D s l P r o t o c o l ;
D a t a s h e e t :
(’ r e v i s i o n ’ r e v i s i o n = P a c k a g e N a m e ) ?
’ d a t a s h e e t ’ n a m e = ID
’ { ’
( i m p o r t s += I m p o r t ) *
( c o m p o n e n t s += D s l C o m p o n e n t ) *
’ } ’;
I m p o r t :
’ i m p o r t ’ i m p o r t e d N a m e s p a c e = Q u a l i f i e d N a m e W i t h W i l d c a r d ;
D s l P r o t o c o l :
’ p r o t o c o l ’ na m e = Q u a l i f i e d N a m e ’ { ’ o p e r a t i o n s += D s l O p e r a t i o n *
’ } ’;
D s l O p e r a t i o n :
( t y p e = D s l T y p e ) ? na m e = ID’ ( ’( p a r a m T y p e += D s l T y p e p a r a m n a m e +=
ID (’ , ’
p a r a m T y p e += D s l T y p e p a r a m n a m e += ID ) *) ?’ ) ’;
D s l C o m p o n e n t :
D s l M c u | D s l D e v i c e ;
D s l M c u :
’ mcu ’ n a m e = ID’ { ’
’ p i n s ␣ { ’ p i n s += D s l P i n (’ , ’ p i n s += D s l P i n ) * ’ } ’ p o r t s += D s l P o r t *
p e r i p h e r a l s += D s l P e r i p h e r a l * (’ sf r s ␣ { ’
sfr += D s l R e g i s t e r (’ , ’sfr += D s l R e g i s t e r ) *
’ } ’) ?
p a c k a g e s += D s l P a c k a g e *
’ } ’;
D s l D e v i c e :
’ d e v i c e ’ n a m e = ID ’ { ’
’ p i n s ␣ { ’ p i n s += D s l P i n (’ , ’ p i n s += D s l P i n ) * ’ } ’ p o r t s += D s l P o r t *
f u n c t i o n s += D s l F u n c t i o n * p a c k a g e s += D s l P a c k a g e * (’ r e g i s t e r s ’ ’ { ’
r e g i s t e r s += D s l R e g i s t e r (’ , ’ r e g i s t e r s += D s l R e g i s t e r ) *
’ } ’) ?
’ } ’;
/* c o m m o n */
D s l P o r t :
’ p o r t ’ n a m e = ID (’ { ’
pi n s +=[ D s l P i n ] (’ , ’ pi n s +=[ D s l P i n ]) *
’ } ’) ?;
D s l P i n :
n a m e = P i n N a m e ;
/* m e m o r y */
D s l R e g i s t e r :
a d d r e s s = HEX ’ : ’ na m e = ID (’ { ’( b i t s += D s l B i t ) ? (’ , ’ ( bi t s +=
D s l B i t ) ?) *’ } ’) ?;
D s l B i t :
n a m e = ID ;
/* P a c k a g e s */
D s l P a c k a g e :
’ p a c k a g e ’ n a m e s += ID (’ , ’n a m e s += ID ) *
’ { ’
pi n s += D s l P a c k a g e P i n (’ , ’ pi n s += D s l P a c k a g e P i n ) *
’ } ’;
D s l P a c k a g e P i n :
n a m e = P i n N a m e ’ ( ’p i n N o = P i n N a m e’ ) ’(’ { ’
a l t N a m e s += P i n N a m e (’ , ’ a l t N a m e s += P i n N a m e ) *
’ } ’) ?;
/* mcu s p e c i f i c */
D s l P e r i p h e r a l :
’ p e r i p h e r a l ’ na m e = ID ’ i m p l e m e n t s ’ c o m p l i a n t +=[ D s l P r o t o c o l ]
’ { ’
o p e r a t i o n s += D s l O p e r a t i o n I m p l *
’ } ’;
D s l O p e r a t i o n I m p l :
’ i m p l ’ ( r e t t y p e = D s l T y p e ) ? i m p l O p e r a t i o n =[ D s l O p e r a t i o n ]
’ ( ’( p a r a m s += D s l T y p e d P a r a m e t e r (’ , ’p a r a m s += D s l T y p e d P a r a m e t e r ) *) ?’ ) ’ ’ { ’
e x p r e s s i o n += D s l P e r i p h e r a l E x p r e s s i o n *
’ } ’;
D s l P e r i p h e r a l E x p r e s s i o n : D s l E x p r e s s i o n ;
D s l R e g i s t e r R e a d :
ref = X B o o l T y p e ’ = > ’ var = X B o o l T y p e ;
r e g i s t e r =[ D s l R e g i s t e r ] " = > "( var =[ D s l V a r i a b l e ]) ?;
D s l R e g i s t e r W r i t e :
ref = X B o o l T y p e ’ <= ’ var = D s l V a l u e ;
D s l V a l u e :
HEX | B I N A R Y | INT | X B o o l T y p e ;
D s l R e f V a r i a b l e :
ref =[ D s l V a r i a b l e ];
/* D e v i c e S p e c i f i c */
D s l F u n c t i o n :
’ f u n c t i o n ’ ( t y p e = D s l T y p e ) ? na m e = ID’ ( ’( p a r a m s +=
D s l T y p e d P a r a m e t e r (’ , ’
p a r a m s += D s l T y p e d P a r a m e t e r ) *) ?’ ) ’ ’ { ’ e x p r e s s i o n s += D s l E x p r e s s i o n *
’ } ’;
D s l T y p e d P a r a m e t e r :
p a r a m T y p e = D s l T y p e n a m e = ID ;
D s l E x p r e s s i o n :
D s l C a l l F u n c t i o n | D s l D e f i n e V a r i a b l e | D s l R e t u r n ;
D s l C a l l F u n c t i o n :
( v a r i a b l e s = X B o o l T y p e " = ") ? f u n c t i o n =[ D s l O p e r a t i o n | Q u a l i f i e d N a m e ]’ ( ’( p a r a m s += X C o n d i t i o n a l E x p r e s s i o n (’ , ’ p a r a m s += X C o n d i t i o n a l E x p r e s s i o n ) *) ?’ ) ’;
D s l D e f i n e V a r i a b l e :
" var " n a m e = ID (’ = ’ val = X B o o l T y p e ) ?;
D s l R e t u r n :
" r e t u r n " val = X B o o l T y p e ;
D s l T y p e :
t y p e = D s l C T y p e ;
D s l V a r i a b l e :
var =[ D s l D e f i n e V a r i a b l e ];
/* b a s i c s */
N a m e :
S T R I N G | INT | ID ;
Q u a l i f i e d N a m e :
ID (’ . ’ ID ) *;
Q u a l i f i e d N a m e W i t h W i l d c a r d : Q u a l i f i e d N a m e ’ .* ’?;
P i n N a m e : N a m e ;
P a c k a g e N a m e :
(’ th i s ’| ID ) (’ / ’ ID ) *;
D s l C T y p e :
’ int ’|’ c h a r ’|’ by t e ’|’ l o n g ’|’ f l o a t ’|’ d o u b l e ’|’ s t r i n g ’|’ v o i d
’|’ bo o l ’;
t e r m i n a l HEX r e t u r n s E S t r i n g :
’ 0 x ’(’ A ’..’ F ’|’ 0 ’..’ 9 ’) +;
t e r m i n a l B I N A R Y r e t u r n s E S t r i n g :
’ 0 b ’(’ 0 ’..’ 1 ’) +;
D s l E x p r e s s i o n :
X P r i m a r y E x p r e s s i o n | X B i n a r y E x p r e s s i o n | X B l o c k E x p r e s s i o n
|
D s l C a l l F u n c t i o n | D s l D e f i n e V a r i a b l e | D s l R e t u r n | D s l R e g i s t e r R e a d |
D s l R e g i s t e r W r i t e ;
X B i n a r y E x p r e s s i o n :
l e f t = D s l V a r i a b l e op = X B i n a r y O p e r a t o r r i g h t = D s l E x p r e s s i o n ;
X B i n a r y O p e r a t o r :
’ + ’|’ - ’|’ == ’|’ != ’|’ < ’|’ > ’|’ << ’|’ > > ’|’ * ’|’ / ’|’ & ’|’ | ’;
X B l o c k E x p r e s s i o n :
’ ( ’e x p r e s s i o n = D s l E x p r e s s i o n’ ) ’;
X P r i m a r y E x p r e s s i o n :
X I f E x p r e s s i o n | X W h i l e E x p r e s s i o n | X F o r E x p r e s s i o n | X D o W h i l e E x p r e s s i o n ;
X C o n d i t i o n a l E x p r e s s i o n :
X C o n d i t i o n a l U n a r y E x p r e s s i o n | X C o n d i t i o n a l B l o c k E x p r e s s i o n | X B o o l E x p r e s s i o n | X B o o l T y p e | X L i t e r a l ;
X C o n d i t i o n a l B l o c k E x p r e s s i o n :
’ ( ’e x p r e s s i o n = X C o n d i t i o n a l E x p r e s s i o n’ ) ’;
X C o n d i t i o n a l U n a r y E x p r e s s i o n :
’ ! ’e x p r e s s i o n = X C o n d i t i o n a l E x p r e s s i o n ;
X B o o l E x p r e s s i o n :
l e f t = X B o o l T y p e op = X B o o l O p e r a t i o n r i g h t = X C o n d i t i o n a l E x p r e s s i o n ;
X B o o l O p e r a t i o n :
’ || ’|’ && ’|’ == ’|’ != ’|’ > ’|’ < ’|’ >= ’|’ <= ’|’ & ’|’ | ’;
X B o o l T y p e :
X B i t A c c e s s | X R e g i s t e r A c c e s s | X V a r i a b l e A c c e s s | X P a r a m V a r i a b l e A c c e s s ;
X L i t e r a l :
B I N A R Y | HEX | INT ;
X B i t A c c e s s :
’ # ’bit =[ D s l B i t | Q u a l i f i e d N a m e ];
X R e g i s t e r A c c e s s :
’ $ ’reg =[ D s l R e g i s t e r ];
X V a r i a b l e A c c e s s :
var =[ D s l D e f i n e V a r i a b l e ];
X P a r a m V a r i a b l e A c c e s s :
’ ~ ’var =[ D s l T y p e d P a r a m e t e r ];
X I f E x p r e s s i o n :
’ if ’ ’ ( ’ if = X C o n d i t i o n a l E x p r e s s i o n ’ ) ’ ’ { ’ th e n = D s l E x p r e s s i o n
’ } ’ (’ e l s e ’ ’ { ’ el s e = D s l E x p r e s s i o n ’ } ’) ?;
X W h i l e E x p r e s s i o n :
’ w h i l e ’ ’ ( ’ p r e d i c a t e = X C o n d i t i o n a l E x p r e s s i o n ’ ) ’ ’ { ’ ( b o d y = D s l E x p r e s s i o n ) ?
’ } ’;
X F o r E x p r e s s i o n :
’ for ’ ’ ( ’ in i t = D s l E x p r e s s i o n ’ ; ’ p r e d i c a t e = X C o n d i t i o n a l E x p r e s s i o n ’ ; ’
l o o p = D s l E x p r e s s i o n ’ ) ’ ’ { ’ ( b o d y = D s l E x p r e s s i o n ) ?
’ } ’;
’ do ’ ’ { ’
bo d y = D s l E x p r e s s i o n
’ } ’ ’ w h i l e ’ ’ ( ’ p r e d i c a t e = X C o n d i t i o n a l E x p r e s s i o n ’ ) ’;
Code 2:
回路図DSL
の定義(Xtext形式)
g r a m m a r jp . ac . j a i s t . k s l a b . sb . m a r t e . dsl . c i r c u i t . C i r c u i t D s l wi t h org . e c l i p s e . x t e x t . c o m m o n . T e r m i n a l s
i m p o r t ’ h t t p : /// M A R T E / M A R T E _ D e s i g n M o d e l / HRM / H w D i a g r a m . e c o r e ’ i m p o r t ’ h t t p : /// M A R T E / M A R T E _ D e s i g n M o d e l / HRM / H w S p e c i f i c a t i o n /
H w P a c k a g e . e c o r e ’
H w C i r c u i t D i a g r a m r e t u r n s H w C i r c u i t D i a g r a m : { H w C i r c u i t D i a g r a m }
’ net ␣ { ’
w i r e s += H w W i r e (’ , ’w i r e s += H w W i r e ) *
’ } ’
c o m p o n e n t s += H w C o m p o n e n t s *;
H w C o m p o n e n t s r e t u r n s H w P a c k a g e :
’ c o m p o n e n t ’ n a m e = ID ’ { ’
p i n s += H w P a c k a g e P i n (’ , ’p i n s += H w P a c k a g e P i n ) *
’ } ’;
H w P a c k a g e P i n r e t u r n s H w P a c k a g e P i n : n a m e = ID ’ : ’ w i r e +=[ H w W i r e ];
H w W i r e r e t u r n s H w W i r e : n a m e = ID ;
付録 D 変換定義ソースコード
Code 3: DSL
から各ハードウェアモデルへの変換定義(Xtend形式)
p a c k a g e jp . ac . j a i s t . k s l a b . sb . m a r t e . m e r g e . g e n e r a t o r
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w D i a g r a m F a c t o r y i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w H R M D i a g r a m
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m m u n i c a t i o n . H w C o m m u n i c a t i o n F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m m u n i c a t i o n . H w P o r t
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m p u t i n g . H w C o m p u t i n g F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m p u t i n g . H w M C U i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w D e v i c e . H w D e v i c e i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w D e v i c e .
H w D e v i c e F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w P r o t o c o l . H w P r o t o c o l F a c t o r y i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n .
H w D e v i c e F u n c t i o n . H w D e v i c e F u n c t i o n F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w I O . H w I O F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w I O . H w P i n i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P a c k a g e .
H w P a c k a g e
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P a c k a g e . H w P a c k a g e F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P a c k a g e . H w P a c k a g e P i n
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P e r i p h e r a l . H w P e r i p h e r a l F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w R e g i s t e r . H w R e g i s t e r F a c t o r y
i m p o r t ja v a . u t i l . A r r a y L i s t i m p o r t ja v a . u t i l . H a s h M a p i m p o r t ja v a . u t i l . Map
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D a t a s h e e t
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l C a l l F u n c t i o n i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l D e f i n e V a r i a b l e i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l D e v i c e
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l E x p r e s s i o n i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l F u n c t i o n i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l M c u
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l O p e r a t i o n i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l O p e r a t i o n I m p l i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l P a c k a g e
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l P a c k a g e P i n
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l P e r i p h e r a l E x p r e s s i o n
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l P i n i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l P o r t i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l P r o t o c o l i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l R e g i s t e r i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l R e g i s t e r R e a d i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l R e g i s t e r W r i t e i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l T y p e
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . D s l T y p e d P a r a m e t e r i m p o r t org . e c l i p s e . emf . c o m m o n . ut i l . E L i s t
i m p o r t org . e c l i p s e . emf . e c o r e . E O b j e c t
i m p o r t org . e c l i p s e . emf . e c o r e . r e s o u r c e . R e s o u r c e i m p o r t org . e c l i p s e . emf . mwe . co r e . W o r k f l o w C o n t e x t i m p o r t org . e c l i p s e . emf . mwe . co r e . i s s u e s . I s s u e s
i m p o r t org . e c l i p s e . emf . mwe . co r e . lib . W o r k f l o w C o m p o n e n t W i t h M o d e l S l o t i m p o r t org . e c l i p s e . emf . mwe . co r e . m o n i t o r . P r o g r e s s M o n i t o r
i m p o r t org . e c l i p s e . um l 2 . uml . D a t a T y p e i m p o r t org . e c l i p s e . um l 2 . uml . U M L F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w R e g i s t e r . H w R e g i s t e r
i m p o r t jp . ac . j a i s t . k s l a b . sb . m a r t e . s p e c . s p e c D s l . X R e g i s t e r A c c e s s
c l a s s D S L T r a n s f o r m e r e x t e n d s W o r k f l o w C o m p o n e n t W i t h M o d e l S l o t { // @ I n j e c t e x t e n s i o n D s l B e h a v i o r T r a n s f o r m e r
// w o r k f l o w p a r a m s p r i v a t e S t r i n g i n p u t p r i v a t e S t r i n g o u t p u t
def s e t I n p u t ( S t r i n g i n p u t S l o t ) { th i s . i n p u t = i n p u t S l o t
}
def s e t O u t p u t ( S t r i n g o u t p u t S l o t ) { th i s . o u t p u t = o u t p u t S l o t
}
// t r a n s f o r m p a r a m s
p r i v a t e Map< HwPort , A r r a y L i s t< String > > u n r e s o l v e P o r t P i n s = new H a s h M a p ()
p r i v a t e Map< String , D a t a T y p e> t y p e s
p r i v a t e Map< String , H w R e g i s t e r> r e g i s t e r s ;
o v e r r i d e p r o t e c t e d i n v o k e I n t e r n a l ( W o r k f l o w C o n t e x t ctx , P r o g r e s s M o n i t o r monitor , I s s u e s i s s u e s ) {
var d s l m o d e l s = ctx . get ( i n p u t ) as A r r a y L i s t< R e s o u r c e >
var A r r a y L i s t< EObject > r e s u l t s = new A r r a y L i s t< EObject >()
var H w H R M D i a g r a m r e s u l t for ( r: d s l m o d e l s ) {
t y p e s = new H a s h M a p ()
for ( e : r . a l l C o n t e n t s . t o I t e r a b l e ) { s w i t c h ( e ) {
D a t a s h e e t : {
r e s u l t = c r e a t e D a t a s h e e t ( e ) r e s u l t . p i n R e c o n n e c t ()
}
D s l P r o t o c o l : r e s u l t = c r e a t e P r o t o c o l D a t a s h e e t ( e ) }
}
r e s u l t . d a t a t y p e s . a d d A l l ( t y p e s . v a l u e s ) r e s u l t s . add ( r e s u l t )
}
ctx . set ( output , r e s u l t s ) }
def c r e a t e r : H w D i a g r a m F a c t o r y : : e I N S T A N C E . c r e a t e H w H R M D i a g r a m c r e a t e P r o t o c o l D a t a s h e e t ( D s l P r o t o c o l d ) {
r . n a m e = d . n a m e
r . p r o t o c o l s . add ( c r e a t e P r o t o c o l ( d ) ) }
def c r e a t e r : H w D i a g r a m F a c t o r y : : e I N S T A N C E . c r e a t e H w H R M D i a g r a m c r e a t e D a t a s h e e t ( D a t a s h e e t d ) {
for ( c o m p o n e n t : d . c o m p o n e n t s ) { r e g i s t e r s = new H a s h M a p () s w i t c h ( c o m p o n e n t ) {
D s l D e v i c e : r . c o m p o n e n t s . add ( c r e a t e C o m p o n e n t ( c o m p o n e n t ) ) D s l M c u : r . c o m p o n e n t s . add ( c r e a t e C o m p o n e n t ( c o m p o n e n t ) ) }
}
for ( imp : d . i m p o r t s ) {
if (! imp . i m p o r t e d N a m e s p a c e . c o n t a i n s (" * ") ) {
r . p r o t o c o l s . add ( c r e a t e P r o t o c o l ( imp . i m p o r t e d N a m e s p a c e ) ) p r i n t l n (" add ␣ p r o t o c o l ␣ "+ imp . i m p o r t e d N a m e s p a c e )
} } }
def c r e a t e r : H w C o m p u t i n g F a c t o r y : : e I N S T A N C E . c r e a t e H w M C U c r e a t e C o m p o n e n t ( D s l M c u mcu ) {
r . n a m e = mcu . n a m e for ( pin : mcu . pi n s ) {
r . p i n s . add ( c r e a t e P i n ( pin ) ) }
for ( p o r t : mcu . p o r t s ) {
r . p o r t s . add ( c r e a t e P o r t ( p o r t ) ) }
for ( pkg : mcu . p a c k a g e s ) {
r . p a c k a g e s . add ( c r e a t e P a c k a g e ( pkg ) ) }
for ( reg : mcu . sfr ) {
r . sfr . add ( c r e a t e R e g i s t e r ( reg ) ) }
for ( p e r i p h e r a l : mcu . p e r i p h e r a l s ) {
r . p e r i p h e r a l s . add ( c r e a t e P e r i p h e r a l ( p e r i p h e r a l ) ) }
}
def c r e a t e r : H w D e v i c e F a c t o r y : : e I N S T A N C E . c r e a t e H w D e v i c e c r e a t e C o m p o n e n t ( D s l D e v i c e dev ) {
r . n a m e = dev . n a m e for ( pin : dev . pi n s ) {
r . p i n s . add ( c r e a t e P i n ( pin ) ) }
for ( p o r t : dev . p o r t s ) {
r . p o r t s . add ( c r e a t e P o r t ( p o r t ) ) }
for ( pkg : dev . p a c k a g e s ) {
r . p a c k a g e s . add ( c r e a t e P a c k a g e ( pkg ) ) }
for ( reg : dev . r e g i s t e r s ) {
r . r e g i s t e r s . add ( c r e a t e R e g i s t e r ( reg ) ) }
for ( f u n c : dev . f u n c t i o n s ) {
var d e v f u n c = c r e a t e F u n c t i o n ( fu n c ) var d e v a c t = c r e a t e A c t i v i t y ( f u n c ) d e v f u n c . m e t h o d s . add ( d e v a c t )
d e v a c t . s p e c i f i c a t i o n = d e v f u n c r . o p e r a t i o n s . add ( d e v f u n c ) r . a c t i v i t i e s . add ( d e v a c t ) }
}
def c r e a t e r : H w P r o t o c o l F a c t o r y : : e I N S T A N C E . c r e a t e H w P r o t o c o l c r e a t e P r o t o c o l ( D s l P r o t o c o l p r o t o c o l ) {
r . n a m e = p r o t o c o l . na m e
for ( op : p r o t o c o l . o p e r a t i o n s ) {
r . o p e r a t i o n s . add ( c r e a t e O p e r a t i o n ( op ) ) }
}
def c r e a t e r : H w P r o t o c o l F a c t o r y : : e I N S T A N C E . c r e a t e H w P r o t o c o l c r e a t e P r o t o c o l ( S t r i n g n a m e ) {
r . n a m e = na m e }
// for c o m m o n e l e m e n t s // Pin
def c r e a t e r : H w I O F a c t o r y : : e I N S T A N C E . c r e a t e H w P i n c r e a t e P i n ( D s l P i n pin ) {
r . n a m e = pin . n a m e
// pkg , のとはで.p o r t p i n p i n r e c o n n e c t }
// Po r t
def c r e a t e r : H w C o m m u n i c a t i o n F a c t o r y : : e I N S T A N C E . c r e a t e H w P o r t c r e a t e P o r t ( D s l P o r t p o r t ) {
r . n a m e = po r t . na m e
var p i n s = new A r r a y L i s t< String >() for ( p : p o r t . p i n s ) {
p i n s . add ( p . n a m e ) }
}
// P a c k a g e
def c r e a t e r : H w P a c k a g e F a c t o r y : : e I N S T A N C E . c r e a t e H w P a c k a g e c r e a t e P a c k a g e ( D s l P a c k a g e pkg ) {
r . n a m e = pkg . n a m e s . h e a d
r . p a c k a g e T y p e = pkg . n a m e s . he a d
for ( pin : pkg . pi n s ) {
r . p i n s . add ( c r e a t e P k g P i n ( pin ) ) }
} // P k g P i n
def c r e a t e r : H w P a c k a g e F a c t o r y : : e I N S T A N C E . c r e a t e H w P a c k a g e P i n c r e a t e P k g P i n ( D s l P a c k a g e P i n pin ) {
r . n a m e = pin . n a m e r . p i n N o = pin . p i n N o for ( alt : pin . a l t N a m e s ) {
r . a l t N a m e s . add ( alt ) }
}
// R e g i s t e r
def c r e a t e r : H w R e g i s t e r F a c t o r y : : e I N S T A N C E . c r e a t e H w R e g i s t e r c r e a t e R e g i s t e r ( D s l R e g i s t e r r e g i s t e r ) {
r . n a m e = r e g i s t e r . na m e
r . a d d r e s s = r e g i s t e r . a d d r e s s r e g i s t e r s . put ( r e g i s t e r . name , r ) }
// for mcu e l e m e n t s
def c r e a t e r : H w D e v i c e F a c t o r y : : e I N S T A N C E . c r e a t e H w P e r i p h e r a l c r e a t e P e r i p h e r a l ( D s l P e r i p h e r a l p e r i p h e r a l ) {
r . n a m e = p e r i p h e r a l . na m e
for ( op : p e r i p h e r a l . o p e r a t i o n s ) {
var o p i m p l = c r e a t e O p e r a t i o n I m p l ( op )
var a c t i m p l = c r e a t e P e r i p h e r a l A c t i v i t i e s ( op ) o p i m p l . m e t h o d s . add ( a c t i m p l )
a c t i m p l . s p e c i f i c a t i o n = o p i m p l r . o p e r a t i o n i m p l s . add ( o p i m p l ) r . a c t i v i t i e s . add ( a c t i m p l ) }
}
// O p e r a t i o n I m p l
def c r e a t e r : H w P e r i p h e r a l F a c t o r y : : e I N S T A N C E .
c r e a t e O p e r a t i o n I m p l c r e a t e O p e r a t i o n I m p l ( D s l O p e r a t i o n I m p l op ) { r . n a m e = op . i m p l O p e r a t i o n . na m e
r . t y p e = g e t T y p e ( op . r e t t y p e )
for ( p a r a m : op . p a r a m s ) {
// r . p a r a m e t e r a b l e E l e m e n t s . add ( c r e a t e P a r a m e t e r ( p a r a m ) ) }
}
def c r e a t e r : H w P e r i p h e r a l F a c t o r y : : e I N S T A N C E .
c r e a t e P e r i p h e r a l A c t i v i t y c r e a t e P e r i p h e r a l A c t i v i t i e s ( D s l O p e r a t i o n I m p l op ) {
r . n a m e = op . i m p l O p e r a t i o n . na m e
for ( p a r a m : op . p a r a m s ) {
r . o w n e d N o d e s . add ( c r e a t e P i n ( p a r a m ) ) }
r . o w n e d N o d e s . add ( U M L F a c t o r y : : e I N S T A N C E . c r e a t e I n i t i a l N o d e ) for ( exp : op . e x p r e s s i o n ) {
r . o w n e d N o d e s . add ( c r e a t e A c t i o n ( exp ) ) }
r . o w n e d N o d e s . add ( U M L F a c t o r y : : e I N S T A N C E . c r e a t e A c t i v i t y F i n a l N o d e )
if ( op . r e t t y p e != n u l l ) {
var r e s u l t = U M L F a c t o r y : : e I N S T A N C E . c r e a t e O u t p u t P i n () r e s u l t . na m e = op . r e t t y p e . t y p e
r . o w n e d N o d e s . add ( r e s u l t ) }
}
def c r e a t e A c t i o n ( D s l P e r i p h e r a l E x p r e s s i o n exp ) { s w i t c h ( exp ) {
D s l R e g i s t e r R e a d : c r e a t e A c t i o n ( exp ) D s l R e g i s t e r W r i t e : c r e a t e A c t i o n ( exp ) d e f a u l t : c r e a t e A c t i o n A n y O t h e r ( exp ) }
}
def c r e a t e r : H w P e r i p h e r a l F a c t o r y : : e I N S T A N C E .
c r e a t e R e a d R e g i s t e r A c t i o n () c r e a t e A c t i o n ( D s l R e g i s t e r R e a d exp ) { var ref = exp . ref
s w i t c h ( ref ) {
X R e g i s t e r A c c e s s : {
r . na m e = ref . reg . n a m e
r . r e g i s t e r = r e g i s t e r s . get ( ref . reg . n a m e ) }
} }
def c r e a t e r : H w P e r i p h e r a l F a c t o r y : : e I N S T A N C E .
c r e a t e W r i t e R e g i s t e r A c t i o n () c r e a t e A c t i o n ( D s l R e g i s t e r W r i t e exp ) {
var ref = exp . ref s w i t c h ( ref ) {
X R e g i s t e r A c c e s s : {
r . na m e = ref . reg . n a m e
r . r e g i s t e r = r e g i s t e r s . get ( ref . reg . n a m e ) ; }
} }
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E .
c r e a t e S t r u c t u r e d A c t i v i t y N o d e c r e a t e A c t i o n A n y O t h e r ( D s l P e r i p h e r a l E x p r e s s i o n exp ) {
r . n a m e = exp . t o S t r i n g }
// for d e v i c e e l e m e n t s
def c r e a t e r : H w D e v i c e F u n c t i o n F a c t o r y : : e I N S T A N C E .
c r e a t e H w D e v i c e F u n c t i o n c r e a t e F u n c t i o n ( D s l F u n c t i o n f u n c t i o n ) { r . n a m e = f u n c t i o n . na m e
r . s e t I s A b s t r a c t ( f a l s e )
r . t y p e = g e t T y p e ( f u n c t i o n . ty p e ) }
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E . c r e a t e O p e r a t i o n c r e a t e O p e r a t i o n ( D s l O p e r a t i o n o p e r a t i o n ) {
r . n a m e = o p e r a t i o n . n a m e r . s e t I s A b s t r a c t ( t r u e )
r . t y p e = g e t T y p e ( o p e r a t i o n . t y p e )
r . o w n e d P a r a m e t e r s }
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E . c r e a t e A c t i v i t y c r e a t e A c t i v i t y ( D s l F u n c t i o n fu n c ) {
r . n a m e = fu n c . na m e
// i n p u t pi n s fr o m p a r a m e t e r for ( p a r a m : fu n c . p a r a m s ) {
r . n o d e s . add ( c r e a t e P i n ( p a r a m ) ) }
r . n o d e s . add ( U M L F a c t o r y : : e I N S T A N C E . c r e a t e I n i t i a l N o d e ) for ( exp : f u n c . e x p r e s s i o n s ) {
r . n o d e s . add ( c r e a t e A c t i o n ( exp ) ) }
r . n o d e s . add ( U M L F a c t o r y : : e I N S T A N C E . c r e a t e A c t i v i t y F i n a l N o d e )
if ( f u n c . ty p e != nu l l ) {
var r e s u l t = U M L F a c t o r y : : e I N S T A N C E . c r e a t e O u t p u t P i n () r e s u l t . na m e = f u n c . t y p e . ty p e
r e s u l t . ty p e = g e t T y p e ( f u n c . ty p e ) r . n o d e s . add ( r e s u l t )
} }
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E . c r e a t e I n p u t P i n c r e a t e P i n ( D s l T y p e d P a r a m e t e r p a r a m ) {
r . n a m e = p a r a m . na m e
r . t y p e = g e t T y p e ( p a r a m . p a r a m T y p e ) }
def c r e a t e A c t i o n ( D s l E x p r e s s i o n exp ) { s w i t c h ( exp ) {
D s l C a l l F u n c t i o n : c r e a t e A c t i o n ( exp ) D s l D e f i n e V a r i a b l e : c r e a t e A c t i o n ( exp ) d e f a u l t : c r e a t e A c t i o n A n y O t h e r ( exp ) }
}
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E . c r e a t e C a l l O p e r a t i o n A c t i o n c r e a t e A c t i o n ( D s l C a l l F u n c t i o n exp ) {
r . n a m e = exp . f u n c t i o n . n a m e
// Ta s k
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E . c r e a t e C a l l O p e r a t i o n A c t i o n c r e a t e A c t i o n ( D s l D e f i n e V a r i a b l e exp ) {
r . n a m e = exp . n a m e }
def g e t T y p e ( D s l T y p e t ) { if ( t != nu l l ) {
if ( t y p e s . c o n t a i n s K e y ( t . t y p e ) ) { r e t u r n t y p e s . get ( t . ty p e ) } el s e {
var t y p e = c r e a t e T y p e ( t . ty p e ) t y p e s . put ( t . type , t y p e )
r e t u r n t y p e }
} el s e {
var v = c r e a t e T y p e (" v o i d ") t y p e s . put (" v o i d ", v )
} }
def c r e a t e r : U M L F a c t o r y : : e I N S T A N C E . c r e a t e D a t a T y p e c r e a t e T y p e ( S t r i n g na m e ) {
r . n a m e = na m e }
def p i n R e c o n n e c t ( H w H R M D i a g r a m d ) { for ( c o m p : d . c o m p o n e n t s ) {
var E L i s t< HwPin > p i n s
var E L i s t< H w P a c k a g e P i n > p k g p i n s var H w P a c k a g e pkg
var E L i s t< HwPort > p o r t s s w i t c h ( c o m p ) {
H w M C U : {
pi n s = c o m p . pi n s
pkg = co m p . p a c k a g e s . he a d p k g p i n s = pkg . pi n s
p o r t s = co m p . p o r t s }
H w D e v i c e : {
pi n s = c o m p . pi n s
pkg = co m p . p a c k a g e s . he a d p k g p i n s = pkg . pi n s
p o r t s = co m p . p o r t s }
}
for ( p : p i n s ) {
var r e f P k g P i n = p k g p i n s . f i n d F i r s t ( p k g p |
pk g p . a l t N a m e s . c o n t a i n s ( p . na m e ) || p k g p . na m e == p . na m e ) if ( r e f P k g P i n != nu l l ) {
p . p k g P i n = r e f P k g P i n r e f P k g P i n . r e f p i n . add ( p ) } e l s e {
p r i n t l n (" u n r e s o l v ␣ pin ␣ : ␣ "+ p . na m e ) }
}
for ( po r t : p o r t s ) {
for ( p o r t p i n : u n r e s o l v e P o r t P i n s . get ( po r t ) ) {
po r t . p i n s . add ( pi n s . f i n d F i r s t ( p | p . n a m e == p o r t p i n ) ) }
} } }
}
Code 4:
ハードウェアモデルの結合変換定義(Xtend
形式)
p a c k a g e jp . ac . j a i s t . k s l a b . sb . m a r t e . m e r g e . g e n e r a t o r
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w C i r c u i t D i a g r a m i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w H R M D i a g r a m i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m p u t i n g . H w M C U i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w D e v i c e . H w D e v i c e i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w P r o t o c o l . H w P r o t o c o l
i m p o r t b l o c k d i a g r a m . D i a g r a m i m p o r t ja v a . u t i l . A r r a y L i s t i m p o r t ja v a . u t i l . H a s h M a p i m p o r t ja v a . u t i l . Map
i m p o r t org . e c l i p s e . emf . c o m m o n . ut i l . E L i s t
i m p o r t org . e c l i p s e . emf . e c o r e . r e s o u r c e . R e s o u r c e i m p o r t org . e c l i p s e . emf . mwe . co r e . W o r k f l o w C o n t e x t
i m p o r t org . e c l i p s e . emf . mwe . co r e . lib . A b s t r a c t W o r k f l o w C o m p o n e n t i m p o r t org . e c l i p s e . emf . mwe . co r e . m o n i t o r . P r o g r e s s M o n i t o r
i m p o r t org . e c l i p s e . um l 2 . uml . A c t i v i t y
i m p o r t org . e c l i p s e . um l 2 . uml . C a l l O p e r a t i o n A c t i o n i m p o r t org . e c l i p s e . um l 2 . uml . D a t a T y p e
i m p o r t org . e c l i p s e . um l 2 . uml . O p e r a t i o n i m p o r t ja v a . u t i l . L i s t
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P a c k a g e . H w W i r e
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m m u n i c a t i o n . H w C o m m u n i c a t i o n F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w G e n e r a l . H w R e s o u r c e
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w I O . H w P i n i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P a c k a g e .
H w P a c k a g e
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m m u n i c a t i o n . H w P o r t
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w I O . H w I O F a c t o r y
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w P r o t o c o l . H w P r o t o c o l F a c t o r y i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w I O . H w L i n e i m p o r t b l o c k d i a g r a m . MCU
i m p o r t b l o c k d i a g r a m . D e v i c e
i m p o r t org . e c l i p s e . emf . mwe . co r e . W o r k f l o w I n t e r r u p t e d E x c e p t i o n i m p o r t b l o c k d i a g r a m . C o n n e c t i o n
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w D i a g r a m F a c t o r y i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w S p e c i f i c a t i o n . H w P a c k a g e .
H w P a c k a g e P i n
c l a s s H a r d w a r e M o d e l M e r g e r e x t e n d s A b s t r a c t W o r k f l o w C o m p o n e n t { // s l o t s
S t r i n g c i r c u i t S l o t S t r i n g b l o c k S l o t S t r i n g s p e c S l o t S t r i n g o u t p u t
// i n t e r
Map< String , H w M C U> mc u s
Map< String , H w D e v i c e> d e v i c e s Map< String , H w P r o t o c o l> p r o t o c o l s Map< String , D a t a T y p e> d a t a t y p e s
H w C i r c u i t D i a g r a m c i r c u i t d i a g r a m D i a g r a m b l o c k d i a g r a m
H w H R M D i a g r a m h a r d w a r e m o d e l
/**
*
*/
o v e r r i d e p r o t e c t e d i n v o k e I n t e r n a l ( W o r k f l o w C o n t e x t ctx , P r o g r e s s M o n i t o r monitor , I s s u e s i s s u e s ) {
p r i n t l n (" l o a d i n g ␣ m o d e l s ␣ ... ")
mc u s = new H a s h M a p< String , H w M C U> ()
d e v i c e s = new H a s h M a p< String , H w D e v i c e> () p r o t o c o l s = new H a s h M a p ()
d a t a t y p e s = new H a s h M a p ()
var m o d e l = ctx . get ( s p e c S l o t ) as A r r a y L i s t< H w H R M D i a g r a m >
for ( d a t a s h e e t : m o d e l ) {
for ( p r o t o c o l : d a t a s h e e t . p r o t o c o l s as E L i s t< H w P r o t o c o l >) { if ( p r o t o c o l . o p e r a t i o n s . s i z e != 0 ) {
p r o t o c o l s . put ( p r o t o c o l . name , p r o t o c o l ) }
}
for ( ty p e : d a t a s h e e t . d a t a t y p e s as E L i s t< D a t a T y p e >) { d a t a t y p e s . put ( ty p e . name , ty p e )
} }
for ( d a t a s h e e t : m o d e l ) {
for ( com : d a t a s h e e t . c o m p o n e n t s ) { s w i t c h com {
H w M C U : {
m c u s . put ( com . name , com )
p r i n t l n (" pu t s ␣ mcu ␣ "+ com . na m e ) }
H w D e v i c e : {
d e v i c e s . put ( com . name , com )
for ( act : com . a c t i v i t i e s as E L i s t< A c t i v i t y >) { for ( a c t i o n : act . n o d e s ) {
s w i t c h ( a c t i o n ) {
C a l l O p e r a t i o n A c t i o n : {
if ( op != nu l l ) a c t i o n . o p e r a t i o n = op }
} } }
p r i n t l n (" pu t s ␣ dev ␣ "+ com . na m e ) }
} } }
b l o c k d i a g r a m = ctx . get ( b l o c k S l o t ) as D i a g r a m p r i n t l n (" m e r g i n g ␣ b l o c k ␣ m o d e l ")
h a r d w a r e m o d e l = c r e a t e P o r t l e v e l H R M ( b l o c k d i a g r a m )
p r i n t l n (" m e r g i n g ␣ c i r c u i t ␣ m o d e l ")
c i r c u i t d i a g r a m = g e t C i r c u i t M o d e l ( ctx . get ( c i r c u i t S l o t ) as A r r a y L i s t< Re s o u r c e >)
if ( c i r c u i t d i a g r a m == nu l l ) {
i s s u e s . a d d W a r n i n g (" C I R C U I T ␣ IS ␣ NU L L ") }
c r e a t e D e t a i l e d H R M ( h a r d w a r e m o d e l , c i r c u i t d i a g r a m ) h a r d w a r e m o d e l . d a t a t y p e s . a d d A l l ( d a t a t y p e s . v a l u e s ) ctx . set ( output , h a r d w a r e m o d e l )
}
def f i n d O p e r a t i o n ( C a l l O p e r a t i o n A c t i o n act ) { for ( p : p r o t o c o l s . v a l u e s ) {
var obj = p . o p e r a t i o n s . f i n d F i r s t ( O p e r a t i o n op | op . na m e == act . na m e ) as O p e r a t i o n
if ( obj != n u l l ) {
p r i n t l n (" f i n d ␣ : ␣ "+ obj . na m e ) r e t u r n obj
} }
r e t u r n n u l l }
o v e r r i d e c h e c k C o n f i g u r a t i o n ( I s s u e s a r g 0 ) { }
def H w C i r c u i t D i a g r a m g e t C i r c u i t M o d e l ( A r r a y L i s t< Re s o u r c e >
r e s o u r c e s ) {
for ( r : r e s o u r c e s ) {
for ( obj : r . a l l C o n t e n t s . t o I t e r a b l e ) { s w i t c h obj {
H w C i r c u i t D i a g r a m : r e t u r n obj }
} }
r e t u r n n u l l
// t h r o w e x c e p t i o n ? }
def c r e a t e r : H w D i a g r a m F a c t o r y : : e I N S T A N C E . c r e a t e H w H R M D i a g r a m c r e a t e P o r t l e v e l H R M ( D i a g r a m b l o c k ) {
for ( com : b l o c k . com ) { s w i t c h ( com ) {
MCU : {
var mcu = m c u s . get ( com . na m e ) if ( mcu != nu l l ) {
r . c o m p o n e n t s . add ( mcu ) } e l s e {
p r i n t l n (" not ␣ f o u n d ␣ : ␣ "+ com . n a m e ) }
}
D e v i c e : {
var dev = d e v i c e s . get ( com . na m e ) if ( dev != nu l l ) {
r . c o m p o n e n t s . add ( dev ) } e l s e {
p r i n t l n (" not ␣ f o u n d ␣ : ␣ "+ com . n a m e ) }
} } }
// c o n n e c t p o r t to p o r t ^^ ef ^^ bf ^^檎樟 迥bd ^^ ef ^^ bd ^^縺b6 ^^ ef ^^ bd ^^蜷
阪a f p o r t ^^ ef ^^ bf ^^謗bd ^^ ef ^^ bd ^^邯壼
錐a5 ^^ ef ^^ bf ^^茨bd ^^ ef ^^ bd ^^抉蜷搾b c r o t o c o l ^^ ef ^^ bd ^^峨→蜷後§
縺bc ^^ ef ^^ bd ^^ a7 ^^ ef ^^ bf ^^ bd ^^ ef ^^ bf ^^ bd
for ( c o m p o n e n t : b l o c k . com as E L i s t< b l o c k d i a g r a m . H w C o m p o n e n t >) {
s w i t c h ( c o m p o n e n t ) { MCU : {
var p o r t 1 = mc u s . get ( c o m p o n e n t . n a m e ) . p o r t s . g e t P o r t ( con . n a m e )
var p o r t 2 = d e v i c e s . get ( con . ref . na m e ) . p o r t s . g e t P o r t ( con . n a m e )
if ( p o r t 1 == nu l l || p o r t 2 == n u l l ) {
t h r o w new W o r k f l o w I n t e r r u p t e d E x c e p t i o n () }
r . c o n n e c t i o n s . add ( c r e a t e C o n n e c t i o n ( port1 , port2 , con ) ) }
D e v i c e : {
var p o r t 1 = mc u s . get ( con . ref . na m e ) . p o r t s . g e t P o r t ( con . na m e )
var p o r t 2 = d e v i c e s . get ( c o m p o n e n t . n a m e ) . p o r t s . g e t P o r t ( con . n a m e )
if ( p o r t 1 == nu l l || p o r t 2 == n u l l ) {
t h r o w new W o r k f l o w I n t e r r u p t e d E x c e p t i o n () }
r . c o n n e c t i o n s . add ( c r e a t e C o n n e c t i o n ( port1 , port2 , con ) ) }
} } } }
def c r e a t e D e t a i l e d H R M ( H w H R M D i a g r a m diag , H w C i r c u i t D i a g r a m c i r c u i t ) {
var L i s t< HwWire > w i r e s = new A r r a y L i s t () var L i s t< HwLine > l i n e s = new A r r a y L i s t () for ( w : c i r c u i t . w i r e s as E L i s t< HwWire >) {
w i r e s . add ( w )
l i n e s . add ( c r e a t e L i n e ( w ) ) }
di a g . c o n n e c t i o n s . a d d A l l ( w i r e s ) di a g . c o n n e c t i o n s . a d d A l l ( l i n e s )
for ( c i r c u i t C o m p o n e n t : c i r c u i t . c o m p o n e n t s as E L i s t< H w P a c k a g e >) {
var pos = c i r c u i t C o m p o n e n t . na m e . i n d e x O f (" _ ")
var c o m p N a m e = c i r c u i t C o m p o n e n t . na m e . s u b s t r i n g (0 , pos )
var p k g N a m e = c i r c u i t C o m p o n e n t . n a m e . s u b s t r i n g ( pos +1) p r i n t l n ( c o m p N a m e +" , ␣ "+ p k g N a m e )
var c o m p o n e n t = g e t C o m p o n e n t ( c o m p N a m e )
for ( c i r c u i t P i n : c i r c u i t C o m p o n e n t . p i n s as E L i s t< H w P a c k a g e P i n
>) {
var p k g p i n = g e t P k g P i n ( c o m p o n e n t , pkgName , c i r c u i t P i n . n a m e )
var pin = g e t P i n ( c o m p o n e n t , c i r c u i t P i n . na m e )
for ( c i r c u i t W i r e : c i r c u i t P i n . w i r e as E L i s t< HwWire >) { p r i n t l n ( p k g p i n )
p r i n t l n ( pin )
p k g p i n . w i r e . add ( w i r e s . f i n d F i r s t ( w | w . n a m e == c i r c u i t W i r e . n a m e ) )
pin . l i n e s . add ( l i n e s . f i n d F i r s t ( l | l . n a m e == c i r c u i t W i r e . n a m e ) )
} } }
di a g . p r o t o c o l s . a d d A l l ( p r o t o c o l s . v a l u e s ) }
def c r e a t e r : H w C o m m u n i c a t i o n F a c t o r y : : e I N S T A N C E .
c r e a t e H w C o n n e c t i o n c r e a t e C o n n e c t i o n ( H w P o r t p1 , H w P o r t p2 , C o n n e c t i o n b l o c k C o n n e c t i o n ) {
r . n a m e = b l o c k C o n n e c t i o n . n a m e
r . p r o t o c o l s . add ( g e t P r o t o c o l ( b l o c k C o n n e c t i o n . n a m e ) )
p1 . c o n n e c t e d T o . add ( r ) p2 . c o n n e c t e d T o . add ( r ) }
def c r e a t e r : H w I O F a c t o r y : : e I N S T A N C E . c r e a t e H w L i n e c r e a t e L i n e ( H w W i r e wi r e ) {
r . n a m e = wi r e . na m e }
def c r e a t e r : H w P r o t o c o l F a c t o r y : : e I N S T A N C E . c r e a t e H w P r o t o c o l c r e a t e P r o t o c o l ( S t r i n g n a m e ) {
r . n a m e = na m e
def g e t C o m p o n e n t ( S t r i n g n a m e ) {
var all = new H a s h M a p< String , H w R e s o u r c e> () all . p u t A l l ( m c u s )
all . p u t A l l ( d e v i c e s ) all . get ( n a m e )
}
def g e t P r o t o c o l ( S t r i n g n a m e ) {
if ( p r o t o c o l s . c o n t a i n s K e y ( na m e ) ) { r e t u r n p r o t o c o l s . get ( na m e ) } el s e {
// var p = c r e a t e P r o t o c o l ( n a m e ) // p r o t o c o l s . put ( name , p )
r e t u r n nu l l }
}
def g e t P o r t ( E L i s t< HwPort > ports , S t r i n g n a m e ) { p o r t s . f i n d F i r s t ( H w P o r t p | p . na m e == n a m e ) }
def g e t P k g P i n ( H w R e s o u r c e res , S t r i n g pkgName , S t r i n g p i n N a m e ) { var E L i s t< H w P a c k a g e > p k g s
s w i t c h ( res ) {
H w M C U : p k g s = res . p a c k a g e s H w D e v i c e : p k g s = res . p a c k a g e s d e f a u l t : r e t u r n n u l l
}
pk g s . f i n d F i r s t ( H w P a c k a g e p | p . na m e == p k g N a m e ) . pi n s . f i n d F i r s t ( H w P a c k a g e P i n pin | pin . n a m e == p i n N a m e )
}
def g e t P i n ( H w R e s o u r c e res , S t r i n g p i n n a m e ) { var E L i s t< HwPin > pi n s
s w i t c h ( res ) {
H w M C U : pi n s = res . pi n s H w D e v i c e : p i n s = res . p i n s }
pi n s . f i n d F i r s t ( p | p . n a m e == p i n n a m e ) }
// setter , getter , o t h e r s
def v o i d s e t S p e c ( S t r i n g s p e c S l o t ) { th i s . s p e c S l o t = s p e c S l o t
}
def v o i d s e t C i r c u i t ( S t r i n g c i r c u i t S l o t ) { th i s . c i r c u i t S l o t = c i r c u i t S l o t
}
def v o i d s e t B l o c k ( S t r i n g b l o c k S l o t ) { th i s . b l o c k S l o t = b l o c k S l o t
}
def v o i d s e t O u t p u t ( S t r i n g o u t p u t ) { th i s . o u t p u t = o u t p u t
}
}
Code 5:
ハードウェアモデルからゲートウェイモデルへの変換定義(Xtend形式)
p a c k a g e jp . ac . j a i s t . k s l a b . sb . m a r t e . m e r g e . g e n e r a t o r
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w D i a g r a m F a c t o r y i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w D i a g r a m . H w H R M D i a g r a m i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w C o m p u t i n g . H w M C U i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w D e v i c e . H w D e v i c e i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . HRM . H w L o g i c a l . H w D e v i c e . H w P e r i p h e r a l i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . SRM . S W _ B r o k e r i n g . D e v i c e B r o k e r
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . SRM . S W _ B r o k e r i n g . S W _ B r o k e r i n g F a c t o r y
i m p o r t ja v a . u t i l . H a s h S e t i m p o r t ja v a . u t i l . Set
i m p o r t org . e c l i p s e . emf . c o m m o n . ut i l . E L i s t i m p o r t org . e c l i p s e . emf . e c o r e . u t i l . E c o r e U t i l i m p o r t org . e c l i p s e . emf . mwe . co r e . W o r k f l o w C o n t e x t i m p o r t org . e c l i p s e . emf . mwe . co r e . i s s u e s . I s s u e s
i m p o r t org . e c l i p s e . emf . mwe . co r e . lib . A b s t r a c t W o r k f l o w C o m p o n e n t i m p o r t org . e c l i p s e . emf . mwe . co r e . m o n i t o r . P r o g r e s s M o n i t o r
i m p o r t org . e c l i p s e . um l 2 . uml . A c t i v i t y
i m p o r t org . e c l i p s e . um l 2 . uml . C a l l O p e r a t i o n A c t i o n i m p o r t org . e c l i p s e . um l 2 . uml . O p e r a t i o n
c l a s s H R M t o S R M T r a n s f o r m e r e x t e n d s A b s t r a c t W o r k f l o w C o m p o n e n t {
p r i v a t e S t r i n g h a r d w a r e S l o t p r i v a t e S t r i n g g a t e w a y S l o t
p r i v a t e D e v i c e B r o k e r mcu
p r i v a t e Set< D e v i c e B r o k e r > d e v s = new H a s h S e t ()
o v e r r i d e p r o t e c t e d i n v o k e I n t e r n a l ( W o r k f l o w C o n t e x t ctx , P r o g r e s s M o n i t o r monitor , I s s u e s i s s u e s ) {
p r i n t l n (" HRM ␣ to ␣ SRM ␣ t r a n s f o r m i n g ")
var m o d e l = ctx . get ( h a r d w a r e S l o t ) as H w H R M D i a g r a m var s r m d i a g r a m = c r e a t e S R M D i a g r a m
for ( com : m o d e l . c o m p o n e n t s ) { s w i t c h ( com ) {
H w M C U : {
var b r o k e r = c r e a t e S R M C o m p o n e n t ( com ) s r m d i a g r a m . d e v i c e s . add ( b r o k e r )
mcu = b r o k e r }
H w D e v i c e : {
var b r o k e r = c r e a t e S R M C o m p o n e n t ( com ) s r m d i a g r a m . d e v i c e s . add ( b r o k e r )
de v s . add ( b r o k e r ) }
} }
c a l l R e c o n n e c t ()
ctx . set ( g a t e w a y S l o t , s r m d i a g r a m ) }
def c r e a t e r: H w D i a g r a m F a c t o r y : : e I N S T A N C E . c r e a t e S R M D i a g r a m () c r e a t e S R M D i a g r a m () {}
def c r e a t e r: S W _ B r o k e r i n g F a c t o r y : : e I N S T A N C E . c r e a t e D e v i c e B r o k e r () c r e a t e S R M C o m p o n e n t ( H w M C U mcu ) {
r . n a m e = mcu . n a m e // r . d e v i c e s . add ( mcu )
for ( p e r i p h e r a l : mcu . p e r i p h e r a l s as E L i s t< H w P e r i p h e r a l >) { r . o p e r a t i o n s . a d d A l l ( E c o r e U t i l : : c o p y A l l ( p e r i p h e r a l . o p e r a t i o n i m p l s ) )
r . a c t i v i t i e s . a d d A l l ( E c o r e U t i l : : c o p y A l l ( p e r i p h e r a l . a c t i v i t i e s ) )
}
for ( o p : r . o p e r a t i o n s as E L i s t< O p e r a t i o n >) {
var act = r . a c t i v i t i e s . f i n d F i r s t ( A c t i v i t y a | a . n a m e == op . na m e )
act . s p e c i f i c a t i o n = op op . m e t h o d s . add ( act ) }
}
def c r e a t e r: S W _ B r o k e r i n g F a c t o r y : : e I N S T A N C E . c r e a t e D e v i c e B r o k e r () c r e a t e S R M C o m p o n e n t ( H w D e v i c e dev ) {
r . n a m e = dev . n a m e // r . d e v i c e s . add ( dev )
r . o p e r a t i o n s . a d d A l l ( E c o r e U t i l : : c o p y A l l ( dev . o p e r a t i o n s ) ) r . a c t i v i t i e s . a d d A l l ( E c o r e U t i l : : c o p y A l l ( dev . a c t i v i t i e s ) ) for ( o p : r . o p e r a t i o n s as E L i s t< O p e r a t i o n >) {
var act = r . a c t i v i t i e s . f i n d F i r s t ( A c t i v i t y a | a . n a m e == op . na m e )
act . s p e c i f i c a t i o n = op op . m e t h o d s . add ( act ) }
}
def c a l l R e c o n n e c t () { for ( d : d e v s ) {
for ( act : d . a c t i v i t i e s as E L i s t< Ac t i v i t y >) { for ( c a l l : act . n o d e s ) {
s w i t c h ( c a l l ) {
C a l l O p e r a t i o n A c t i o n : {
c a l l . o p e r a t i o n = mcu . o p e r a t i o n s . f i n d F i r s t ( O p e r a t i o n o | o . na m e == ca l l . o p e r a t i o n . n a m e )
} } } } } }
// s e t t e r & c h e c k
def s e t H a r d w a r e M o d e l ( S t r i n g h a r d w a r e S l o t ) { th i s . h a r d w a r e S l o t = h a r d w a r e S l o t
}
def s e t G a t e w a y M o d e l ( S t r i n g g a t e w a y S l o t ) { th i s . g a t e w a y S l o t = g a t e w a y S l o t
}
o v e r r i d e c h e c k C o n f i g u r a t i o n ( I s s u e s i s s u e s ) { if ( h a r d w a r e S l o t == nu l l ) {
i s s u e s . a d d E r r o r (" H a r d w a r e ␣ Sl o t ␣ is ␣ e m p t y ") }
if ( g a t e w a y S l o t == n u l l ) {
i s s u e s . a d d E r r o r (" G a t e w a y ␣ S l o t ␣ is ␣ e m p t y ") }
}
}
Code 6:
ゲートウェイモデルからのコード生成定義(Xtend
形式)
p a c k a g e jp . ac . j a i s t . k s l a b . sb . m a r t e . m e r g e . g e n e r a t o r
i m p o r t ja v a . u t i l . H a s h M a p i m p o r t ja v a . u t i l . Map
i m p o r t org . e c l i p s e . emf . e c o r e . r e s o u r c e . R e s o u r c e i m p o r t org . e c l i p s e . um l 2 . uml . A c t i v i t y
i m p o r t org . e c l i p s e . um l 2 . uml . A c t i v i t y N o d e i m p o r t org . e c l i p s e . um l 2 . uml . C l a s s
i m p o r t org . e c l i p s e . um l 2 . uml . O p e r a t i o n
i m p o r t org . e c l i p s e . um l 2 . uml . P a r a m e t e r a b l e E l e m e n t i m p o r t org . e c l i p s e . x t e x t . g e n e r a t o r . I F i l e S y s t e m A c c e s s i m p o r t org . e c l i p s e . x t e x t . g e n e r a t o r . I G e n e r a t o r
i m p o r t org . e c l i p s e . um l 2 . uml . T y p e
i m p o r t org . e c l i p s e . um l 2 . uml . C a l l O p e r a t i o n A c t i o n
i m p o r t M A R T E . M A R T E _ D e s i g n M o d e l . SRM . S W _ B r o k e r i n g . D e v i c e B r o k e r
c l a s s U M L t o C o d e G e n e r a t o r i m p l e m e n t s I G e n e r a t o r { Map< String , A c t i v i t y> a c t i v i t i e s = new H a s h M a p ()
o v e r r i d e d o G e n e r a t e ( R e s o u r c e input , I F i l e S y s t e m A c c e s s fsa ) { for ( r : i n p u t . a l l C o n t e n t s . t o I t e r a b l e ) {
s w i t c h ( r ) { A c t i v i t y : {
// nop }
org . e c l i p s e . u m l 2 . uml . C l a s s : {
fsa . g e n e r a t e F i l e ( r . n a m e . t o L o w e r C a s e +" . h ", g e n e r a t e H e a d e r ( r ) )
fsa . g e n e r a t e F i l e ( r . n a m e . t o L o w e r C a s e +" . c ", g e n e r a t e S o u r c e ( r ) )
}
d e f a u l t : { }
} } }
def g e n e r a t e H e a d e r ( C l a s s c l a z z )’ ’ ’
␣ ␣ # i f d e f ␣ __ < < c l a z z . na m e . t o U p p e r C a s e > > _H
␣ ␣ # d e f i n e ␣ __ < < c l a z z . n a m e . t o U p p e r C a s e > > _H
␣ ␣ << FOR ␣ op ␣ : ␣ c l a z z . o w n e d O p e r a t i o n s > >
␣ ␣ ␣ ␣ << g e n e r a t e S i g n a t u r e ( op ) >>
␣ ␣ << ENDFOR > >
␣ ␣ # e n d i f
␣ ␣ ’ ’ ’
def a d d A c t i v i t i e s ( C l a s s c l a z z ) { a c t i v i t i e s . c l e a r
for ( act : c l a z z . o w n e d B e h a v i o r s ) {
a c t i v i t i e s . put ( act . name , act as A c t i v i t y ) }
}
def g e n e r a t e S i g n a t u r e ( O p e r a t i o n op )’ ’ ’
␣ ␣ ␣ ␣ << g e t T y p e N a m e ( op . ty p e ) > > ␣ < < op . name > >( < < for ( p ␣ : ␣ op . p a r a m e t e r a b l e E l e m e n t s ) { g e n e r a t e P a r a m ( p ) } > >) ;
␣ ␣ ’ ’ ’
def g e n e r a t e P a r a m ( P a r a m e t e r a b l e E l e m e n t el e m )’ ’ ’
␣ ␣ ’ ’ ’
def g e n e r a t e S o u r c e ( C l a s s c l a z z )’ ’ ’
␣ ␣ << a d d A c t i v i t i e s ( c l a z z ) >>