Bläddra i källkod

Explicitly store the initial configuration of the "core" model in the Modelverse modelling representation as well

Yentl Van Tendeloo 8 år sedan
förälder
incheckning
c208558aee
3 ändrade filer med 155 tillägg och 175 borttagningar
  1. 1 1
      bootstrap/core_formalism.mvc
  2. 139 0
      bootstrap/99_core.mvc
  3. 15 174
      bootstrap/core_algorithm.alc

+ 1 - 1
bootstrap/core_formalism.mvc

@@ -93,7 +93,7 @@ SimpleClassDiagrams CoreFormalism {
     }
 
     Association instanceOf (Model, Model) {
-        type_mapping : TypeMapping
+        typing_location : String
     }
 
     Association owner (Model, User) {

+ 139 - 0
bootstrap/99_core.mvc

@@ -0,0 +1,139 @@
+import models/CoreFormalism as CF
+
+CF core {
+    Group admin_group {
+        name = "admin"
+    }
+
+    Group nobody {
+        name = "nobody"
+    }
+
+    User admin_user {
+        name = "admin"
+        admin = True
+        password = "c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec"
+    }
+
+    ownedBy (admin_group, admin_user) {}
+    belongsTo (admin_user, admin_group) {}
+
+    Model SimpleClassDiagrams {
+        name = "SimpleClassDiagrams"
+        location = "models/SimpleClassDiagrams/model"
+        permissions = "221"
+    }
+    group (SimpleClassDiagrams, admin_group) {}
+    owner (SimpleClassDiagrams, admin_user) {}
+
+    Model Tracability {
+        name = "Tracability"
+        location = "models/Tracability/model"
+        permissions = "221"
+    }
+    group (Tracability, admin_group) {}
+    owner (Tracability, admin_user) {}
+
+    Model ProcessModel {
+        name = "ProcessModel"
+        location = "models/ProcessModel/model"
+        permissions = "221"
+    }
+    group (ProcessModel, admin_group) {}
+    owner (ProcessModel, admin_user) {}
+
+    Model ActionLanguage {
+        name = "ActionLanguage"
+        location = "models/ActionLanguage/model"
+        permissions = "221"
+    }
+    group (ActionLanguage, admin_group) {}
+    owner (ActionLanguage, admin_user) {}
+
+    Model ManualOperation {
+        name = "ManualOperation"
+        location = "models/ManualOperation/model"
+        permissions = "221"
+    }
+    group (ManualOperation, admin_group) {}
+    owner (ManualOperation, admin_user) {}
+
+    ActionLanguage conformance_mv {
+        name = "conformance_mv"
+        location = "models/Conformance_MV/model"
+        permissions = "221"
+    }
+    group (conformance_mv, admin_group) {}
+    owner (conformance_mv, admin_user) {}
+
+    transformInput (conformance_mv, SimpleClassDiagrams) {
+        name = "model"
+    }
+    transformInput (conformance_mv, SimpleClassDiagrams) {
+        name = "metamodel"
+    }
+
+    Model CoreFormalism {
+        name = "CoreFormalism"
+        location = "models/CoreFormalism/model"
+        permissions = "221"
+    }
+    group (CoreFormalism, admin_group) {}
+    owner (CoreFormalism, admin_user) {}
+
+    Model Core {
+        name = "core"
+        location = "models/core/model"
+        permissions = "220"
+    }
+    group (Core, admin_group) {}
+    owner (Core, admin_user) {}
+
+    Model Bottom {
+        name = "bottom"
+        location = "models/bottom/model"
+        permissions = "221"
+    }
+    group (Bottom, admin_group) {}
+    owner (Bottom, admin_user) {}
+
+    instanceOf inst_SCD (SimpleClassDiagrams, SimpleClassDiagrams) {
+        typing_location = "models/SimpleClassDiagrams/type_mapping"
+    }
+    instanceOf inst_trace (Tracability, SimpleClassDiagrams) {
+        typing_location = "models/Tracability/type_mapping"
+    }
+    instanceOf inst_pm (ProcessModel, SimpleClassDiagrams) {
+        typing_location = "models/ProcessModel/type_mapping"
+    }
+    instanceOf inst_al (ActionLanguage, SimpleClassDiagrams) {
+        typing_location = "models/ActionLanguage/type_mapping"
+    }
+    instanceOf inst_man (ManualOperation, SimpleClassDiagrams) {
+        typing_location = "models/ManualOperation/type_mapping"
+    }
+    instanceOf inst_conf (conformance_mv, ActionLanguage) {
+        typing_location = "models/Conformance_MV/type_mapping"
+    }
+    instanceOf inst_cf (CoreFormalism, SimpleClassDiagrams) {
+        typing_location = "models/CoreFormalism/type_mapping"
+    }
+    instanceOf inst_core (Core, CoreFormalism) {
+        typing_location = "models/core/type_mapping"
+    }
+    instanceOf inst_bottom (Bottom, CoreFormalism) {
+        typing_location = "models/Bottom/type_mapping"
+    }
+
+    semantics (inst_SCD, conformance_mv) {}
+    semantics (inst_trace, conformance_mv) {}
+    semantics (inst_pm, conformance_mv) {}
+    semantics (inst_al, conformance_mv) {}
+    semantics (inst_man, conformance_mv) {}
+    semantics (inst_conf, conformance_mv) {}
+    semantics (inst_cf, conformance_mv) {}
+    semantics (inst_core, conformance_mv) {}
+    semantics (inst_bottom, conformance_mv) {}
+}
+
+export core to models/core

+ 15 - 174
bootstrap/core_algorithm.alc

@@ -13,178 +13,12 @@ include "utils.alh"
 
 Element core = ?
 
-String admin_username = "admin"
-String admin_password = "admin"
-
-String core_location = "models/CoreFormalism"
-String core_model_location = "core"
+String core_model_location = "models/core"
 
 Void function initialize_core():
-	// Initialize the Core Formalism
-	String core_model
-	String core_formalism_model
-	String scd_model
-	Element al_model
-	String admin_group
-	String admin_user
-	String nobody_group
-	String instance_of
-	String core_formalism
-	Element scd
-	Element al
-	Element pm
-	Element tracability
-	Element conformance
-	String pm_model
-	String tracability_model
-	String coreM_model_location 
-	String pm_location
-	String scd_location
-	String al_location
-	String tracability_location
-	String conformance_location
-
-	coreM_model_location = "models/core"
-	pm_location = "models/ProcessModel"
-	scd_location = "models/SimpleClassDiagrams"
-	al_location = "models/ActionLanguage"
-	tracability_location = "models/Tracability"
-	conformance_location = "models/Conformance_MV"
-
-	// Annotate action language fragments
-	add_code_model(import_node(al_location), conformance_location, wrap_conformance)
-
-	scd = import_node(scd_location)
-	al = import_node(al_location)
-	pm = import_node(pm_location)
-	tracability = import_node(tracability_location)
-	conformance = import_node(conformance_location)
-
-	// Create the Model itself and make public
-	core_formalism = import_node(core_location)
-	core = instantiate_model(core_formalism)
-	export_node(core_model_location, core)
-	export_node(coreM_model_location, core["model"])
-
-	// Create admin group
-	admin_group = instantiate_node(core, "Group", "")
-	instantiate_attribute(core, admin_group, "name", "admin")
-
-	// Create nobody group
-	nobody_group = instantiate_node(core, "Group", "")
-	instantiate_attribute(core, nobody_group, "name", "nobody")
-
-	// Create admin user
-	admin_user = instantiate_node(core, "User", "")
-	instantiate_attribute(core, admin_user, "name", admin_username)
-	instantiate_attribute(core, admin_user, "admin", True)
-
-	instantiate_attribute(core, admin_user, "password", hash(admin_password))
-
-	// Create link between admin user and group
-	instantiate_link(core, "ownedBy", "", admin_group, admin_user)
-	instantiate_link(core, "belongsTo", "", admin_user, admin_group)
-
-	// Add the SimpleClassDiagrams formalism already
-	scd_model = instantiate_node(core, "Model", "")
-	instantiate_attribute(core, scd_model, "name", "SimpleClassDiagrams")
-	instantiate_attribute(core, scd_model, "location", scd_location + "/model")
-	instantiate_attribute(core, scd_model, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", scd_model, scd_model)
-	instantiate_attribute(core, instance_of, "type_mapping", scd["type_mapping"])
-	instantiate_link(core, "group", "", scd_model, admin_group)
-	instantiate_link(core, "owner", "", scd_model, admin_user)
-
-	// Add the Tracability formalism
-	tracability_model = instantiate_node(core, "Model", "")
-	instantiate_attribute(core, tracability_model, "name", "Tracability")
-	instantiate_attribute(core, tracability_model, "location", tracability_location + "/model")
-	instantiate_attribute(core, tracability_model, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", tracability_model, scd_model)
-	instantiate_attribute(core, instance_of, "type_mapping", tracability["type_mapping"])
-	instantiate_link(core, "group", "", tracability_model, admin_group)
-	instantiate_link(core, "owner", "", tracability_model, admin_user)
-
-	// Add the Process Model formalism
-	pm_model = instantiate_node(core, "Model", "")
-	instantiate_attribute(core, pm_model, "name", "ProcessModel")
-	instantiate_attribute(core, pm_model, "location", pm_location + "/model")
-	instantiate_attribute(core, pm_model, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", pm_model, scd_model)
-	instantiate_attribute(core, instance_of, "type_mapping", pm["type_mapping"])
-	instantiate_link(core, "group", "", pm_model, admin_group)
-	instantiate_link(core, "owner", "", pm_model, admin_user)
-
-	// Add the Action Language formalism
-	al_model = instantiate_node(core, "Model", "")
-	instantiate_attribute(core, al_model, "name", "ActionLanguage")
-	instantiate_attribute(core, al_model, "location", al_location + "/model")
-	instantiate_attribute(core, al_model, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", al_model, scd_model)
-	instantiate_attribute(core, instance_of, "type_mapping", al["type_mapping"])
-	instantiate_link(core, "group", "", al_model, admin_group)
-	instantiate_link(core, "owner", "", al_model, admin_user)
-
-	// Add the Manual Operation formalism
-	Element manual
-	String manual_model
-	manual = instantiate_model(scd)
-	manual_model = instantiate_node(core, "Model", "")
-	export_node("models/ManualOperation", manual)
-	instantiate_attribute(core, manual_model, "name", "ManualOperation")
-	instantiate_attribute(core, manual_model, "location", "models/ManualOperation/model")
-	instantiate_attribute(core, manual_model, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", manual_model, scd_model)
-	instantiate_attribute(core, instance_of, "type_mapping", create_node())
-	instantiate_link(core, "group", "", manual_model, admin_group)
-	instantiate_link(core, "owner", "", manual_model, admin_user)
-
-	// Add the conformance operation as action language
-	String conf
-	conf = instantiate_node(core, "ActionLanguage", "")
-	instantiate_attribute(core, conf, "name", "conformance_mv")
-	instantiate_attribute(core, conf, "location", conformance_location + "/model")
-	instantiate_attribute(core, conf, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", conf, al_model)
-	instantiate_attribute(core, instance_of, "type_mapping", conformance["type_mapping"])
-	instantiate_link(core, "group", "", conf, admin_group)
-	instantiate_link(core, "owner", "", conf, admin_user)
-	String lnk
-	lnk = instantiate_link(core, "transformInput", "", conf, scd_model)
-	instantiate_attribute(core, lnk, "name", "model")
-
-	// Add the core formalism already
-	core_formalism_model = instantiate_node(core, "Model", "")
-	instantiate_attribute(core, core_formalism_model, "name", "CoreFormalism")
-	instantiate_attribute(core, core_formalism_model, "location", core_location + "/model")
-	instantiate_attribute(core, core_formalism_model, "permissions", "221")
-	instance_of = instantiate_link(core, "instanceOf", "", core_formalism_model, scd_model)
-	instantiate_attribute(core, instance_of, "type_mapping", core_formalism["type_mapping"])
-	instantiate_link(core, "group", "", core_formalism_model, admin_group)
-	instantiate_link(core, "owner", "", core_formalism_model, admin_user)
-
-	// Add the core model
-	core_model = instantiate_node(core, "Model", "")
-	instantiate_attribute(core, core_model, "name", "core")
-	instantiate_attribute(core, core_model, "location", coreM_model_location)
-	instantiate_attribute(core, core_model, "permissions", "200")
-	instance_of = instantiate_link(core, "instanceOf", "", core_model, core_formalism_model)
-	instantiate_attribute(core, instance_of, "type_mapping", core["type_mapping"])
-	instantiate_link(core, "group", "", core_model, admin_group)
-	instantiate_link(core, "owner", "", core_model, admin_user)
-
-	// Add all semantics links for the instanceOf links, all of them using the built-in conformance relation of the Modelverse
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("SimpleClassDiagrams"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("Tracability"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("ProcessModel"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("ActionLanguage"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("ManualOperation"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("conformance_mv"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("CoreFormalism"), "instanceOf")), conf)
-	instantiate_link(core, "semantics", "", set_pop(allOutgoingAssociationInstances(core, get_model_id("core"), "instanceOf")), conf)
-
-	// Call this for ourselves as well
-	//log("MvC is ready!")
+	// TODO make this more flexible by putting it in the bootstrap in a similar way as other models
+	add_code_model(import_node("models/ActionLanguage"), "models/Conformance_MV", wrap_conformance)
+
 	return !
 
 String function get_instanceOf_link(model_id : String):
@@ -211,7 +45,7 @@ Element function get_full_model(model_id : String):
 
 	m = create_node()
 	dict_add(m, "model", import_node(read_attribute(core, model_id, "location")))
-	dict_add(m, "type_mapping", read_attribute(core, choice, "type_mapping"))
+	dict_add(m, "type_mapping", import_node(read_attribute(core, choice, "typing_location")))
 	dict_add(m, "semantics", set_pop(allAssociationDestinations(core, choice, "semantics")))
 
 	if (readAssociationDestination(core, choice) == model_id):
@@ -411,12 +245,17 @@ Void function model_create(model : Element, name : String, user_id : String, typ
 	instantiate_link(core, "owner", "", model_id, user_id)
 	instantiate_link(core, "group", "", model_id, get_group_id("nobody"))
 	instance_of = instantiate_link(core, "instanceOf", "", model_id, type_id)
-	instantiate_attribute(core, instance_of, "type_mapping", model["type_mapping"])
+
+	location = "models/" + cast_id2s(model["type_mapping"])
+	export_node(location, model["type_mapping"])
+	instantiate_attribute(core, instance_of, "typing_location", location)
 	instantiate_link(core, "semantics", "", instance_of, get_model_id("conformance_mv"))
 
 	return!
 
 Void function model_overwrite(model : Element, model_id : String):
+	// TODO this should be more elegant than just hiding the old elements
+
 	String location
 	String instanceOf_link
 
@@ -428,8 +267,10 @@ Void function model_overwrite(model : Element, model_id : String):
 	instantiate_attribute(core, model_id, "location", location)
 
 	instanceOf_link = get_instanceOf_link(model_id)
-	unset_attribute(core, instanceOf_link, "type_mapping")
-	instantiate_attribute(core, instanceOf_link, "type_mapping", model["type_mapping"])
+	unset_attribute(core, instanceOf_link, "typing_location")
+	location = "models/" + cast_id2s(model["type_mapping"])
+	export_node(location, model["type_mapping"])
+	instantiate_attribute(core, instanceOf_link, "typing_location", location)
 
 	return!