public void CreateTransicionTest2() { ITramitadorFactory target = CreateITramitadorFactory(); // TODO: Initialize to an appropriate value IFlujograma flujograma1 = target.CreateFlujograma(); flujograma1.Nombre = "Flujograma pruebas 1"; flujograma1.Entidad = "Entidad pruebas 1"; IFlujograma flujograma2 = target.CreateFlujograma(); flujograma2.Nombre = "Flujograma pruebas 2"; flujograma2.Entidad = "Entidad pruebas 2"; IEstado origen = target.CreateEstado(flujograma1); // TODO: Initialize to an appropriate value origen.Nombre = "Descorigen"; origen.Estado = 1; IEstado destino = target.CreateEstado(flujograma2); // TODO: Initialize to an appropriate value destino.Nombre = "DesDestino"; destino.EsEstadoFinal = true; destino.Estado = 2; ITransicion expected = null; // TODO: Initialize to an appropriate value ITransicion actual; try { actual = target.CreateTransicion(origen, destino); Assert.Fail("Debería haber elevado una excepcion Tramitador.NoMismoFlujogramaException"); } catch (Tramitador.NoMismoFlujogramaException) { } }
public void CreateTransicionTest() { ITramitadorFactory target = CreateITramitadorFactory(); // TODO: Initialize to an appropriate value IFlujograma flujograma = target.CreateFlujograma(); flujograma.Nombre = "Flujograma pruebas"; flujograma.Entidad = "Entidad pruebas"; IEstado origen = target.CreateEstado(flujograma); // TODO: Initialize to an appropriate value origen.Nombre = "Descorigen"; origen.Estado = 1; IEstado destino = target.CreateEstado(flujograma); // TODO: Initialize to an appropriate value destino.Nombre = "DesDestino"; destino.EsEstadoFinal = true; destino.Estado = 2; ITransicion expected = null; // TODO: Initialize to an appropriate value ITransicion actual; actual = target.CreateTransicion(origen, destino); Assert.IsNotNull(origen); Assert.IsNotNull(destino); Assert.IsNotNull(actual); Assert.IsNotNull(actual.Origen); Assert.IsNotNull(actual.Destino); Assert.AreEqual <IEstado>(actual.Origen, origen); Assert.AreEqual <IEstado>(actual.Destino, destino); Assert.AreEqual <int>(actual.Descripcion.Length, 0); }
public bool Equals(ITransicion other) { return((!EsAutomatica || other.EsAutomatica) && (!other.EsAutomatica || EsAutomatica) //&& Descripcion.Equals(other.Descripcion) && FechaTransicion.Equals(other.FechaTransicion) && Flujograma.Equals(other.Flujograma) && Origen.Equals(other.Origen) && Destino.Equals(other.Destino)); }
public IProceso Realizar(ITransicion transicion, IIdentificable identificable) { //comprobamos si los estados origen y destino tienen el mismo flujograma if (!transicion.Origen.Flujograma.Equals(transicion.Destino.Flujograma)) throw new NoMismoFlujogramaException(); //obtenemos el proceso asociado al flujograma y su identificable IProceso proceso = factoria.ObtenerProcesoActual(transicion.Flujograma, identificable); //comprobamos que la transición esté perfectamente definida if (!proceso.FlujogramaDef.EsValido(transicion)) throw new InvalidOperationException("Transición no definida."); //preparamos las precondiciones por defecto, y lanzamos un evento de precondición que el usuario puede //cancelar en cualquier momento para abortar la transición PrecondicionTransicionCancelableEventArgs precondicion = new PrecondicionTransicionCancelableEventArgs() { Transicion = transicion }; if (OnAntesTransicion != null) { OnAntesTransicion(this, precondicion); } //comprobamos que la ultima transición realizada tenga elementos válidos if (proceso.UltimaTransicion != null && proceso.UltimaTransicion.Destino == null) throw new NoSuchElementException(); //miramos si efectivamente la transición que se quiere realizar tiene como estado origen //el mismo estado destino de la última transición que se realizó en el proceso if (proceso.UltimaTransicion != null && !proceso.UltimaTransicion.Destino.Equals(transicion.Origen)) throw new InvalidOperationException("El estado origen tiene que ser el mismo que el estado destino de la última transición."); //vemos si el usuario ha cancelado la operación if (!precondicion.Cancelar) { //si hasta ahora todo va bien, realizamos el cambio de transicion //primero guardamos la ultima transición en el histórico if (proceso.UltimaTransicion != null) { proceso.ProcesosAnteriores.Add(proceso.UltimaTransicion.FechaTransicion, proceso.UltimaTransicion); } //actualizamos el proceso transicion.FechaTransicion = DateTime.Now; proceso.UltimaTransicion = transicion; proceso.EstadoActual = transicion.Destino; factoria.Almacenar(proceso); if (OnDespuesTransicion != null) { OnDespuesTransicion(this, new TransicionEventArgs() { Trancion = transicion }); } } return proceso; }
public ITransicion Remove(ITransicion transicion) { ITransicion sol = null; if (_transiciones.Remove(XMLTransicion.Transformar(transicion))) { sol = transicion; } return(sol); }
public void ReadXml(System.Xml.XmlReader reader) { reader.ReadToFollowing(xmlFlujogramaType.Name); XmlSerializer serializer = new XmlSerializer(xmlFlujogramaType); FlujogramaDef = serializer.Deserialize(reader) as IFlujograma; //EntidadIDentificable.IdEntidad = FlujogramaDef.IdEntidad; //EntidadIDentificable.Entidad = FlujogramaDef.Entidad; reader.ReadToFollowing(xmlEstadoType.Name); if (reader.Name.Equals(xmlEstadoType.Name)) { serializer = new XmlSerializer(xmlEstadoType); EstadoActual = serializer.Deserialize(reader) as IEstado; EstadoActual.Flujograma = FlujogramaDef; } reader.ReadToFollowing(xmlTransicionType.Name); if (reader.Name.Equals(xmlTransicionType.Name)) { serializer = new XmlSerializer(xmlTransicionType); UltimaTransicion = serializer.Deserialize(reader) as ITransicion; UltimaTransicion.Flujograma = FlujogramaDef; UltimaTransicion.Origen = FlujogramaDef.Estados[UltimaTransicion.Origen.Estado]; UltimaTransicion.Destino = FlujogramaDef.Estados[UltimaTransicion.Destino.Estado]; } reader.ReadToFollowing("Historico"); if (reader.Name.Equals("Historico")) { XmlReader hijos = reader.ReadSubtree(); serializer = new XmlSerializer(xmlTransicionType); while (hijos.ReadToFollowing(xmlTransicionType.Name)) { ITransicion tran = serializer.Deserialize(hijos) as ITransicion; tran.Flujograma = FlujogramaDef; tran.Origen = FlujogramaDef.Estados[tran.Origen.Estado]; tran.Destino = FlujogramaDef.Estados[tran.Destino.Estado]; _procesosAnteriores.Add(tran.FechaTransicion, tran); } } }
public void Add(ITransicion transicion) { if (!transicion.Flujograma.Equals(this)) { throw new NoMismoFlujogramaException(); } if (!_estados.Contains(XMLEstado.Tranformar(transicion.Origen)) || !_estados.Contains(XMLEstado.Tranformar(transicion.Destino))) { throw new NoSuchElementException(); } XMLTransicion tr = XMLTransicion.Transformar(transicion); if (!_transiciones.Contains(tr)) { _transiciones.Add(tr); } }
static void Main(string[] args) { ITramitadorFactory fact = new XMLTramitadorFactory(); IFlujograma flujo = fact.ObtenerFlujograma("Mi entidad", 0); List <IEstado> estados = new List <IEstado>(fact.ObtenerEstados(flujo)); //IEstado estado=fact.ObtenerEstado( //IFlujograma flujo = fact.CreateFlujograma(); //flujo.Nombre = "Mi flujo de pruebas"; //flujo.Entidad = "Mi entidad"; IEstado origen = fact.CreateEstado(flujo); //origen.Descripcion = "Estado inicial"; //IEstado destino = fact.CreateEstado(flujo); //destino.Estado = 1; //destino.Descripcion = "Estado final"; ITransicion tr = fact.CreateTransicion(flujo.Estados[2], flujo.Estados[3]); trami.OnAntesTransicion += new Tramitador.EnventArgs.DAntesTransicion(trami_OnAntesTransicion); trami.Realizar(tr, new MiObjeto()); //flujo.Add(origen); //flujo.Add(destino); //flujo.Add(tr); //fact.Almacenar(flujo); }
public static XMLTransicion Transformar(ITransicion transicion) { XMLTransicion sol = null; if (transicion is XMLTransicion) { sol = transicion as XMLTransicion; } else { sol = new XMLTransicion(); sol.Descripcion = transicion.Descripcion; sol.Destino = transicion.Destino; sol.EsAutomatica = transicion.EsAutomatica; sol.FechaTransicion = transicion.FechaTransicion; sol.Flujograma = transicion.Flujograma; sol.Origen = transicion.Origen; } return(sol); }
public IProceso Realizar(ITransicion transicion, IIdentificable identificable) { //comprobamos si los estados origen y destino tienen el mismo flujograma if (!transicion.Origen.Flujograma.Equals(transicion.Destino.Flujograma)) { throw new NoMismoFlujogramaException(); } //obtenemos el proceso asociado al flujograma y su identificable IProceso proceso = factoria.ObtenerProcesoActual(transicion.Flujograma, identificable); //comprobamos que la transición esté perfectamente definida if (!proceso.FlujogramaDef.EsValido(transicion)) { throw new InvalidOperationException("Transición no definida."); } //preparamos las precondiciones por defecto, y lanzamos un evento de precondición que el usuario puede //cancelar en cualquier momento para abortar la transición PrecondicionTransicionCancelableEventArgs precondicion = new PrecondicionTransicionCancelableEventArgs() { Transicion = transicion }; if (OnAntesTransicion != null) { OnAntesTransicion(this, precondicion); } //comprobamos que la ultima transición realizada tenga elementos válidos if (proceso.UltimaTransicion != null && proceso.UltimaTransicion.Destino == null) { throw new NoSuchElementException(); } //miramos si efectivamente la transición que se quiere realizar tiene como estado origen //el mismo estado destino de la última transición que se realizó en el proceso if (proceso.UltimaTransicion != null && !proceso.UltimaTransicion.Destino.Equals(transicion.Origen)) { throw new InvalidOperationException("El estado origen tiene que ser el mismo que el estado destino de la última transición."); } //vemos si el usuario ha cancelado la operación if (!precondicion.Cancelar) { //si hasta ahora todo va bien, realizamos el cambio de transicion //primero guardamos la ultima transición en el histórico if (proceso.UltimaTransicion != null) { proceso.ProcesosAnteriores.Add(proceso.UltimaTransicion.FechaTransicion, proceso.UltimaTransicion); } //actualizamos el proceso transicion.FechaTransicion = DateTime.Now; proceso.UltimaTransicion = transicion; proceso.EstadoActual = transicion.Destino; factoria.Almacenar(proceso); if (OnDespuesTransicion != null) { OnDespuesTransicion(this, new TransicionEventArgs() { Trancion = transicion }); } } return(proceso); }
public bool EsValido(ITransicion transion) { return(_transiciones.Contains(XMLTransicion.Transformar(transion))); }