Пример #1
0
        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)
            {
            }
        }
Пример #2
0
        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);
        }
Пример #3
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));
 }
Пример #4
0
        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;
        }
Пример #5
0
        public ITransicion Remove(ITransicion transicion)
        {
            ITransicion sol = null;

            if (_transiciones.Remove(XMLTransicion.Transformar(transicion)))
            {
                sol = transicion;
            }

            return(sol);
        }
Пример #6
0
        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);
                }
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
 public bool EsValido(ITransicion transion)
 {
     return(_transiciones.Contains(XMLTransicion.Transformar(transion)));
 }