merging (meta-)models works (but it's dirty!)
This commit is contained in:
parent
c31c8bf3ea
commit
9883e09ac2
17 changed files with 474 additions and 46 deletions
63
examples/semantics/translational/regenerate_mm.py
Normal file
63
examples/semantics/translational/regenerate_mm.py
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
from state.devstate import DevState
|
||||
from bootstrap.scd import bootstrap_scd
|
||||
from concrete_syntax.textual_od import renderer
|
||||
from concrete_syntax.plantuml.renderer import render_class_diagram
|
||||
from concrete_syntax.plantuml.make_url import make_url
|
||||
from api.od import ODAPI
|
||||
|
||||
from transformation.topify.topify import Topifier
|
||||
from transformation.merger import merge_models
|
||||
|
||||
from util import loader
|
||||
|
||||
from examples.semantics.operational.port import models
|
||||
|
||||
import os
|
||||
THIS_DIR = os.path.dirname(__file__)
|
||||
|
||||
# get file contents as string
|
||||
def read_file(filename):
|
||||
with open(THIS_DIR+'/'+filename) as file:
|
||||
return file.read()
|
||||
|
||||
if __name__ == "__main__":
|
||||
state = DevState()
|
||||
scd_mmm = bootstrap_scd(state)
|
||||
|
||||
# Load Petri Net meta-models
|
||||
pn_mm_cs = read_file('../../petrinet/metamodels/mm_design.od')
|
||||
pn_mm_rt_cs = pn_mm_cs + read_file('../../petrinet/metamodels/mm_runtime.od')
|
||||
pn_mm = loader.parse_and_check(state, pn_mm_cs, scd_mmm, "Petri-Net Design meta-model")
|
||||
pn_mm_rt = loader.parse_and_check(state, pn_mm_rt_cs, scd_mmm, "Petri-Net Runtime meta-model")
|
||||
|
||||
# Load Port meta-models
|
||||
port_mm = loader.parse_and_check(state, models.port_mm_cs, scd_mmm, "Port-MM")
|
||||
port_mm_rt = loader.parse_and_check(state, models.port_rt_mm_cs, scd_mmm, "Port-MM-RT")
|
||||
|
||||
# Merge Petri Net and Port meta-models
|
||||
print("merging...")
|
||||
merged_mm_rt = merge_models(state, mm=scd_mmm, models=[pn_mm_rt, port_mm_rt])
|
||||
print("done merging")
|
||||
|
||||
print()
|
||||
print("topifying... (may take a while)")
|
||||
topifier = Topifier(state)
|
||||
top_merged_mm_rt = topifier.topify_cd(merged_mm_rt)
|
||||
print("done topifying")
|
||||
|
||||
plantuml_url = make_url(render_class_diagram(state, top_merged_mm_rt))
|
||||
|
||||
print()
|
||||
print(plantuml_url)
|
||||
print()
|
||||
|
||||
txt = renderer.render_od(state, top_merged_mm_rt, scd_mmm)
|
||||
|
||||
filename = THIS_DIR+"/merged_mm.od"
|
||||
|
||||
with open(filename, "w") as file:
|
||||
file.write(f"# Auto-generated by {__file__}\n\n")
|
||||
file.write(f"# PlantUML visualization: {plantuml_url}\n\n")
|
||||
file.write(txt)
|
||||
|
||||
print("Wrote file", filename)
|
||||
Loading…
Add table
Add a link
Reference in a new issue