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: }