El Bruno

Blog dedicado a las experiencias del desarrollo con tecnologías Microsoft.
[DSL] Como consumir un DSL a traves de codigo (extremo ... extremo)

 

Buenas

no es muy usual, pero tal vez en algún momento necesites consumir el contenido de un diagrama creado con Domain Specific Language Tools. Como comenté alguna vez, un diagrama está compuesto de 2 archivos;

  • un archivo xml con el contenido del mismo
  • un archivo xml con la información de visualizacion del diagrama

Como ambos archivos son representaciones xml, se pueden interpretar utilizando diversas tecnologías:

Esta última opción es la más interesante ya que permite aprovechar toda la potencia de un modelo de clases ya adaptado a un diagrama específico. Pero el problema que se presenta es que la creación de estos componentes no es una tarea trivial y mucho menos intuitiva.

Es por eso que las siguientes líneas pueden servirnos de utilidad:

1 using Microsoft.VisualStudio.Modeling.Diagrams; 2 using Microsoft.VisualStudio.Modeling; 3 using System.IO; 4 using System.Xml; 5 6 public <Dsl>RootClassName LoadModel(String fileName) 7 { 8 <Dsl>RootClassName ret = null; 9 Store store = new Store(); 10 store.LoadDomainModels( 11 typeof(CoreDesignSurfaceDomainModel), 12 typeof(<Dsl>DomainModel)); 13 14 Transaction t = store.TransactionManager.BeginTransaction("Loading Dsl Model"); 15 ret = <Dsl>SerializationHelper.Instance.LoadModel(store, fileName, null, null); 16 t.Commit(); 17 18 return ret; 19 }

En el ejemplo anterior lo unico que debemos tener en cuenta que el elemento <Dsl> representa el nombre de nuestro proyecto DSL para que lo reemplacemos por la referencia correspondiente.

Por ejemplo si lo aplicamos al ejemplo de DSL que he madurado en los últimos posts el código quedaría:

/// <summary> /// Loads the model. /// </summary> /// <param name="dslPath">The DSL path.</param> /// <returns></returns> public static ExampleModel LoadModel(string dslPath) { ExampleModel ret = null; DslModeling.Store store = new DslModeling.Store(); store.LoadDomainModels( typeof(DslDiagrams.CoreDesignSurfaceDomainModel), typeof(Dsl15DomainModel)); DslModeling.Transaction t = store.TransactionManager.BeginTransaction("Loading Dsl Model"); ret = Dsl15SerializationHelper.Instance.LoadModel(store, dslPath, null, null); t.Commit(); return ret; }

y para crear un modelo a partir del Helper el codigo sería mas simple aún:

public void TestLoadModel() { string dslPath = "modelo.dsl"; ExampleModel model = Dsl15.DSLHelper.LoadModel(dslPath); }

 

Saludos @ La Finca

El Bruno

Published martes, 09 de octubre de 2007 17:54 by elbruno

Comments

# microsoft &raquo; [DSL] Como consumir un DSL a traves de codigo (extremo &#8230; extremo) - El Bruno@ martes, 09 de octubre de 2007 21:44

Pingback from  microsoft &raquo; [DSL] Como consumir un DSL a traves de codigo (extremo &#8230; extremo) - El Bruno

microsoft » [DSL] Como consumir un DSL a traves de codigo (extremo … extremo) - El Bruno

# [DSL] DSL Integration Service, integracion y referencias entre DSLs@ miércoles, 26 de diciembre de 2007 20:26

Buenas si llevas trabajando un tiempo utilizando las Domain Specific Language Tools , seguramente te

El Bruno

# [DSL] DSL Integration Service, integracion y referencias entre DSLs@ miércoles, 26 de diciembre de 2007 20:28

Buenas si llevas trabajando un tiempo utilizando las Domain Specific Language Tools , seguramente te

El Bruno

# [DSL] DSL Integration Service, integracion y referencias entre DSLs@ miércoles, 26 de diciembre de 2007 20:28

Buenas si llevas trabajando un tiempo utilizando las Domain Specific Language Tools , seguramente te

El Bruno

# [DSL] Recopilacion de articulos@ viernes, 04 de enero de 2008 11:44

Buenas me hago un pequeño listado de algunas cosillas que escribí, para tenerlas a mano. [DSL] Migracion

El Bruno

# [DSL] Recopilacion de articulos@ viernes, 04 de enero de 2008 11:45

Buenas me hago un pequeño listado de algunas cosillas que escribí, para tenerlas a mano. [DSL] Migracion

El Bruno

# [DSL] Recopilacion de articulos@ viernes, 04 de enero de 2008 11:45

Buenas me hago un pequeño listado de algunas cosillas que escribí, para tenerlas a mano. [DSL] Migracion

El Bruno

# [DSL] Recopilacion de articulos@ viernes, 04 de enero de 2008 15:21

Buenas me hago un pequeño listado de algunas cosillas que escribí, para tenerlas a mano. [DSL] Migracion

El Bruno

# [DSL] Recopilacion de articulos@ viernes, 04 de enero de 2008 15:22

Buenas me hago un pequeño listado de algunas cosillas que escribí, para tenerlas a mano. [DSL] Migracion

El Bruno

# [DSL] Recopilacion de articulos@ viernes, 04 de enero de 2008 15:22

Buenas me hago un pequeño listado de algunas cosillas que escribí, para tenerlas a mano. [DSL] Migracion

El Bruno

# [DSL] DSL Integration Service, integracion y referencias entre DSLs@ viernes, 04 de enero de 2008 19:25

Buenas si llevas trabajando un tiempo utilizando las Domain Specific Language Tools, seguramente te...

El Bruno

# [DSL] Consumiendo un DSL desde codigo en el contexto de tu DSL actual@ domingo, 03 de febrero de 2008 23:35

Buenas, cómo bien lo dice el título del post; este es un escenario casi imposible, pero probable ( y

El Bruno

# [DSL] Consumiendo un DSL desde codigo en el contexto de tu DSL actual@ domingo, 03 de febrero de 2008 23:36

Buenas, cómo bien lo dice el título del post; este es un escenario casi imposible, pero probable ( y

El Bruno

# [DSL] Consumiendo un DSL desde codigo en el contexto de tu DSL actual@ domingo, 03 de febrero de 2008 23:36

Buenas, cómo bien lo dice el título del post; este es un escenario casi imposible, pero probable ( y

El Bruno