• 検索結果がありません。

結論

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 109-151)

第 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 ) >>

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 109-151)