java - Xtext: Export model as XMI/XML -
i have defined dsl xtext. let's looks this:
model: components+=component* ; component: house | car ; house: 'house' name=id ('height' hubradius=double)? & ('width' hubradius=double)? 'end' 'house' ; car: 'car' name=id ('maxspeed' hubradius=int)? & ('brand' hubradius=string)? 'end' 'car' ; in generated eclipse ide, based on dsl, implemented model. let's looks following:
house myhouse height 102.5 width 30.56 end house car mycar maxspeed 190 brand "mercedes" end car i export model xmi or xml file.
the reason want is, have workflow, allows me change model parameters on fly, using xmi/xml file. instead of redefining model, can pass xml/xmi file workflow, automatically.
short example: dsl allows defining components house , car. house allows parameters width , height, car allows parameters maxspeed , brand (see grammar above).
so in workflow talking about, parameters changed different values. example generated xml looking this:
<model> <component name='house'> <param name='height'>102.5</param> <param name='width'>30.56</param> </component> <component name='car'> <param name='maxspeed'>190</param> <param name='brand'>mercedes</param> </component> </model> how can export model xmi/xml?
i finaly found solution. following code exports *.xmi file requested in opening post:
private void exportxmi(string absulotetargetfolderpath) { // change mylanguage language name injector injector = new mylanguagestandalonesetup() .createinjectoranddoemfregistration(); xtextresourceset resourceset = injector .getinstance(xtextresourceset.class); // .ext ist extension of model file string inputuri = "file:///" + absulotetargetfolderpath + "/myfile.ext"; string outputuri = "file:///" + absulotetargetfolderpath + "/myfile.xmi"; uri uri = uri.createuri(inputuri); resource xtextresource = resourceset.getresource(uri, true); ecoreutil.resolveall(xtextresource); resource xmiresource = resourceset .createresource(uri.createuri(outputuri)); xmiresource.getcontents().add(xtextresource.getcontents().get(0)); try { xmiresource.save(null); } catch (ioexception e) { e.printstacktrace(); } }
Comments
Post a Comment