Welcome to MSDN Blogs Sign in | Join | Help

Wisdom + Knowledge

Keep things as simple as possible but not simpler
Produtividade no Desenvolvimento de Software - DSL Laboratório 2 - Parte 3

 

 

 

Nesta demo vamos tratar a restrição relativa a "StartElements" que não podem ter mais do que um é desconectados. Na figura abaixo mostramos exemplos de tal situação;

 

image

 

 

image

O vídeo a seguir mostra como fazer isto.

 

 

 

Abaixo o código que implementa esta validação

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4: using Microsoft.VisualStudio.Modeling.Diagrams;
   5: using Microsoft.VisualStudio.Modeling.Validation;
   6: using Microsoft.VisualStudio.Modeling;
   7: using System.Globalization;
   8:  
   9: // Como requisito da nossa maquina de estado que representa os nossos "Issues"
  10: // ela nao pode ter myultiplos pontos de entrada ou seja start elements
  11: // assumimos como premissa que apenas um ponto de entrada seria possivel
  12: // Logo o metodo abaixo impede que um novo ponto de incio seja introduzido no modelo
  13: // Caso haja uma tentativa de inserir um outro ponto de inicion do desenho um erro sea
  14: // gerado imediatamente, impedindo que hajam 2 ponto de incio do diagram de estado.
  15: // Ou seja um hard constraint
  16:  
  17: namespace Microsoft.IssueStateModels
  18: {
  19:     [RuleOn(typeof(StartElement), FireTime = TimeToFire.TopLevelCommit, InitiallyDisabled = false)]
  20:     internal sealed class UniqueStartElementAddRule : AddRule
  21:     {
  22:         public override void ElementAdded(ElementAddedEventArgs e)
  23:         {
  24:             string message = "Impossible to have 2 StartElements state";
  25:  
  26:             StartElement g = e.ModelElement as StartElement;
  27:             string name = g.Name;
  28:  
  29:             if (name == "StartElement2")
  30:             {
  31:                 throw new InvalidOperationException(message);
  32:             }
  33:             base.ElementAdded(e);
  34:         }
  35:     }
  36:  
  37:  
  38:     /// <summary>
  39:     /// Domain model class allows extra reflective elements such as rules to be added
  40:     /// </summary>
  41:     public partial class IssueStateModelsDomainModel
  42:     {
  43:         protected override Type[] GetCustomDomainModelTypes ()
  44:         {
  45:             return new System.Type[] { typeof(UniqueStartElementAddRule) };
  46:         }
  47:     }
  48:  
  49: }

 

 

E o resultado da sua implementação e implantação na nossa DSL

 

image

Posted: Wednesday, September 24, 2008 1:20 AM by Carlos Hulot
Anonymous comments are disabled
Page view tracker