package Ġt tc 2 0 1 9 Ċ Ċ import Ġorg . eclipse . emf . ecore . resource . Resource Ċ import Ġorg . eclipse . emf . ecore . x mi . impl . X MI Resource Factory Impl Ċ import Ġt tc 2 0 1 9 . met amodel s . bdd . BDD Ċ import Ġt tc 2 0 1 9 . met amodel s . bdd . BDD Factory Ċ import Ġt tc 2 0 1 9 . met amodel s . bdd . impl . BDD Factory Impl Ċ import Ġt tc 2 0 1 9 . met amodel s . tt . Input Port Ċ import Ġt tc 2 0 1 9 . met amodel s . tt . Output Port Ċ import Ġt tc 2 0 1 9 . met amodel s . tt . Truth Table Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ class ĠKotlin Solution Ġ{ ĊĊĠĠĠ Ġvar Ġbinary Decision Diagram : ĠB DD ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġtruth Table : ĠTr uth Table ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġoutput Resource : ĠResource ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġservice Ġ= ĠSolution Helper ĊĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* Ċĉ ĉ Init Ġthe Ġbinary Ġdecision Ġdiagram ĊĠĠĠĠĠĠĠ ĠEach ĠTr uth Table Ġobject Ġshould Ġcorrespond Ġto Ġa ĠB DD Ġobject , Ġwith Ġthe Ġsame ĊĠĠĠĠĠĠĠ Ġname Ġand Ġequivalent ĠPort s . Ċĉĉ Ġ*/ ĊĠĠĠĠĠĠĠ ĠB DD Factory Impl . init () ĊĠĠĠĠĠĠĠ Ġbinary Decision Diagram Ġ= ĠB DD Factory . e INSTANCE . create BDD () ĊĠĠĠĠĠĠĠ Ġbinary Decision Diagram ?. name Ġ= Ġtruth Table ?. name ĊĊĠĠĠĠĠĠĠ Ġservice . instance Ġ= Ġbinary Decision Diagram ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEach ĠInput Port Ġand ĠOutput Port Ġshould Ġbe Ġmapped Ġto Ġan Ġobject Ġof Ġthe ĠB DD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġwith Ġthe Ġsame Ġname , Ġand Ġshould Ġbe Ġassigned Ġthe Ġsame Ġname . ĊĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġtruth Table !!. ports . forEach Ġ{ Ġport Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( port ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInput Port Ġ-> Ġbinary Decision Diagram !!. ports . add ( service . getInput Port ( binary Decision Diagram !! , Ġport . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOutput Port Ġ-> Ġbinary Decision Diagram !!. ports . add ( service . getOutput Port ( binary Decision Diagram !! , Ġport . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* Ċĉĉ ĠLet Ġthe Ġrecursion Ġbegin Ċĉĉ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= Ġservice . get Tree ( truth Table !!. rows , Ġtruth Table !!. ports ) ĊĠĠĠĠĠĠĠ Ġbinary Decision Diagram ?. tree Ġ= Ġtree ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġthe Ġtransformed Ġbinary Ġdecision Ġdiagram Ġinside Ġthe Ġoutput Ġresource Ġset Ġearlier ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException Ġin Ġcase Ġthe Ġfile Ġis Ġalready Ġused ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreg Ġ= ĠResource . Factory . Registry . INSTANCE ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġreg . extension To Factory Map ĊĠĠĠĠĠĠĠ Ġm [" x mi "] Ġ= ĠX MI Resource Factory Impl () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġresource ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġfirst Ġmodel Ġelement Ġand Ġcast Ġit Ġto Ġthe Ġright Ġtype , Ġin Ġmy ĊĠĠĠĠĠĠĠ Ġ// Ġexample Ġeverything Ġis Ġh ierarchical Ġincluded Ġin Ġthis Ġfirst Ġnode ĊĠĠĠĠĠĠĠ Ġoutput Resource !!. contents . add ( binary Decision Diagram ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġnow Ġsave Ġthe Ġcontent . ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Resource !!. save ( Collections . EMPTY _ MAP ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠAuto - generated Ġcatch Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ