Example #1
0
        //Metodo barbaro per calcolare i nodi coinvolti nel percorso anche in caso di biforcazioni
        private List <string> BackTrace(IComputableWorkflow WF, string checkPointNode)
        {
            List <string> backNodes = new List <string>();

            while (!WF.IsInitialState())//backtrace dal nodo corrente
            {
                backNodes.Add(WF.GetState().Name);
                WF.ComputeNewStatus(WFeventType.ROLLBACK, null, null);

                //nodePlaceHolder.ResetStates();
                presenPanel2.Controls.Clear();
                presenPanel2.Visible = false;
                //renderNode(workflow.GetState());

                //nodePlaceHolder.ResetStates();
                //nodePlaceHolder.Controls.Clear();
                presenPanel.Controls.Clear();
                renderNode(workflow.GetState());
            }
            backNodes.Add(WF.GetState().Name);

            WFnode curr = WF.GetState();

            while (curr.Name != checkPointNode)//riporta il workflow allo stato corrente
            {
                WFnode      actual = workflow.GetState();
                XmlDocument doc    = new XmlDocument();
                doc.LoadXml(actual.GetValue(nodePlaceHolder.Controls[0], actual.GetRenderingDocument().DocumentElement.FirstChild));
                ActionResult ar = workflow.ComputeNewStatus(WFeventType.TRYGOON, doc, ValidationEventHandler);
                curr = WF.GetState();
                //nodePlaceHolder.ResetStates();
                //nodePlaceHolder.Controls.Clear();
                presenPanel.Controls.Clear();
                renderNode(workflow.GetState());
            }
            return(backNodes);
        }
Example #2
0
        private void loadWf(string wfId, string crId, string user, string serv, string tokMail)
        {
            Trace.Warn("Begin load workflow");
            Security.ComputableWorkflowReference cref = Security.Token.GetWorkflow(wfId, crId, user, serv, tokMail);
            if (cref == null)
            {
                contentAll.Style.Add("background", "#A7A7A7 url('../lib/image/lock2.png') no-repeat center");
                contentAll.Style.Add("-moz-opacity", "0.35");
                contentAll.Visible = true;
                Page.Controls.Add(new LiteralControl("<script>setType(-2);</script>"));
                Session["wf"] = null;
            }
            else
            {
                Session["wfr"] = cref;
                workflow       = cref.GetWorkflow();
                Session["wf"]  = workflow;
                //si fa la prima visualizzazione
                renderNode(workflow.GetState());
                #region caricamento del tema 2° versione pro

                Security.Theme theme = ((Security.ComputableWorkflowReference)Session["wfr"]).GetTheme();
                Page.Header.Controls.Add(new LiteralControl(@"<style type='text/css'>" + theme.CSS + "</style" + ">"));
                if (theme.Title == "")
                {
                    formTitle.InnerText = "Testo di prova";
                }
                else
                {
                    formTitle.InnerText = theme.Title;
                    formTitle.Style.Add("font-family", "Verdana");
                    formTitle.Style.Add("font-size", "30px");
                }
                #endregion
            }
            Trace.Warn("End load workflow");
        }
Example #3
0
        protected void forward_Click(object sender, EventArgs e)
        {
            bool        final  = workflow.IsFinalState();
            WFnode      actual = workflow.GetState();
            XmlDocument doc    = new XmlDocument();

            doc.LoadXml(actual.GetValue(/*nodePlaceHolder.Controls[0]*/ presenPanel.Controls[0], actual.GetRenderingDocument().DocumentElement.FirstChild));
            ActionResult ar = workflow.ComputeNewStatus(WFeventType.TRYGOON, doc, ValidationEventHandler);

            if (ar.OK && !final)
            {
                //nodePlaceHolder.ResetStates();
                //nodePlaceHolder.Controls.Clear();
                presenPanel.Controls.Clear();
                WFnode currentNode = workflow.GetState();
                renderNode(currentNode);

                /////////////////////////////////HISTORY//////////////////////////////////////////////////////////////////
                UpdateHistory(currentNode, ar);
                /////////////////////////////////HISTORY//////////////////////////////////////////////////////////////////
            }
            else if (ar.OK && final)
            {
                //nodePlaceHolder.ResetStates();
                //nodePlaceHolder.Controls.Clear();
                presenPanel.Controls.Clear();
                //nodePlaceHolder.Controls.Add(new Panel());//To not handle generic error dialog
                presenPanel.Controls.Add(new Panel());
                presenPanel2.Visible = true;
                forward.Visible      = false;
                save.Visible         = true;

                XmlDocument xd = workflow.GetCollectedDocument();
                xd.Schemas = workflow.GetCollectedDocumentSchemas();
                xd.Validate(null);//bug
                XmlNodeList          ln       = xd.ChildNodes[1].ChildNodes;
                IEnumerable <WFnode> nodeList = workflow.getNodeList();

                foreach (XmlNode xnd in ln)
                {
                    foreach (WFnode wfn in nodeList)
                    {
                        if (wfn.Name == XmlConvert.DecodeName(xnd.Name))
                        {
                            renderFinal(wfn, xnd);
                        }
                    }
                }
                presenPanel3.Controls.Clear();
            }
            else
            {
                /*It remains here...but someone should say him that there is no edge or his input doesn't validate*/
                WFnode currentNode = workflow.GetState();
                UpdateHistory(currentNode, ar);
            }
        }
Example #4
0
        protected void Page_Init(object sender, EventArgs e)
        {
            //presenPanel.Controls.Add(nodePlaceHolder);
            //presenPanel.Controls.Add();
            if (!Page.IsPostBack)
            {
                Trace.Warn("Begin retrieving env variabiles from db");
                Page.Controls.Add(new LiteralControl("<script>headerDivRed('none');</script>"));

                String crId    = Request.Params.Get("CompilationRequestID");
                String wfId    = Request.Params.Get("WorkflowID");
                String user    = Request.Params.Get("Username");
                String serv    = Request.Params.Get("Service");
                String tokMail = Request.Params.Get("Token");
                Trace.Warn("End retrieving env variabiles from db");

                if (crId != null)
                {
                    if (!crId.Equals("-1"))
                    {//Abbiamo tutto
                        loadWf(wfId, crId, user, serv, tokMail);
                    }
                    else
                    {     //Manca qualcosa crID ==-1
                        if (Session["LoginContactUserID"] == null)
                        { //E' la prima volta che viene richieta la pagina con crId == -1
                            int serviceid = -1;
                            try
                            {
                                serviceid = int.Parse(serv);
                            }
                            catch (Exception e2)
                            {
                                serviceid = -1;
                            }
                            if (serviceid == -1)
                            {//Va fatto scegliere il servizio
                                contentAll.Style.Add("background", "#A7A7A7 url('../lib/image/lock2.png') no-repeat center");
                                contentAll.Style.Add("-moz-opacity", "0.35");
                                contentAll.Visible = true;
                                List <Security.Service> listaServizi = Security.ExternalService.List();
                                string temp = "";
                                foreach (Security.Service s in listaServizi)
                                {
                                    temp = temp + s.ServiceName + "|";
                                }


                                Page.Controls.Add(new LiteralControl("<script>setType(-1, '" + temp + "');</script>"));
                            }
                            //Si presume che serv sia valido o scelto dall'utente
                            Session["LoginContact"]          = true;
                            Session["LoginContactServiceID"] = serviceid;
                            Session["LoginContactReturnURL"] = "http://" + Security.EnvironmentManagement.getEnvValue("webServerAddress") + Request.Url.AbsolutePath + Request.Url.Query;
                            if (serviceid != -1)
                            {
                                Response.Redirect("http://" + Security.EnvironmentManagement.getEnvValue("webServerAddress") + "/Auth/login.aspx");
                            }
                        }
                        else
                        {//Vuol dire che Session["LoginContactUserID"] != null, e' la seconda volta e ho tutte le info
                            // Si ma le hai nella sessione!
                            serv = "" + (int)Session["LoginContactServiceID"];
                            user = (string)Session["LoginContactUserID"];
                            // Pulisco la sessione, nn mi servono piu'
                            Session["LoginContactServiceID"] = null;
                            Session["LoginContactUserID"]    = null;
                            loadWf(wfId, crId, user, serv, tokMail);
                        }
                    }
                }
                else
                {
                    workflow = (IComputableWorkflow)Session["wf"];
                    WFnode currentNode = workflow.GetState();

                    renderNode(currentNode);
                    UpdateHistory(currentNode, new ActionResult(true));
                }
            }
            else
            {
                Page.Controls.Add(new LiteralControl("<script>headerDivRed('filling');</script>"));

                workflow = ((IComputableWorkflow)Session["wf"]);
                if (workflow != null)
                {
                    if (!workflow.IsEndComputationState)
                    {
                        renderNode(workflow.GetState());
                    }

                    Security.Theme theme = ((Security.ComputableWorkflowReference)Session["wfr"]).GetTheme();
                    Page.Header.Controls.Add(new LiteralControl(@"<style type='text/css'>" + theme.CSS + "</style" + ">"));
                    if (theme.Title == "")
                    {
                        formTitle.InnerText = "NO TITLE";

                        formTitle.Style.Add("font-family", "Verdana");
                        formTitle.Style.Add("font-size", "30px");
                    }
                    else
                    {
                        formTitle.InnerText = theme.Title;
                    }
                }
            }
        }
Example #5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            List <Control> listControl    = new List <Control>();
            string         cbReference    = this.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "");
            string         callBackScript = @"function CallServer(arg, context){" + cbReference + ";}";

            this.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callBackScript, true);

            listControl.Add(new ServiceFakeLog());
            List <Control> .Enumerator it = listControl.GetEnumerator();
            while (it.MoveNext())
            {
                callFill.Controls.Add(it.Current);

                IControlFormFiller t = (IControlFormFiller)it.Current;
                cbReference    = Page.ClientScript.GetCallbackEventReference(it.Current, "arg", t.getNameFunctionServerResponse(), "context");
                callBackScript = @"function " + t.getNameFunctionServerCall() + "(arg, context)" + "{ " + cbReference + ";}";
                Page.ClientScript.RegisterClientScriptBlock(it.Current.GetType(), t.getNameFunctionServerCall(), callBackScript, true);
            }


            if (((IComputableWorkflow)Session["wf"]) != null)
            {
                workflow = (IComputableWorkflow)Session["wf"]; //RIGA DI FIX PER NULL??!!!
                presenPanel.Attributes.Add("style", "position:relative;left:800px;width:0px;display:none;");

                /////////////////////////////////HISTORY//////////////////////////////////////////////////////////////////

                IEnumerable <WFnode> nl        = workflow.getNodeList();
                List <string>        nodeNames = new List <string>();
                foreach (WFnode n in nl)
                {
                    nodeNames.Add(n.Name);
                }

                List <string> ns = new List <string>();
                ns = workflow.GetThroughPath();

                if (ns.Count > 0)
                {
                    string initNode      = "";
                    int    initNodeIndex = 0;

                    for (int i = 0; i < nodeNames.Count; i++)
                    {
                        if (nodeNames[i] == ns[ns.Count - 1])
                        {
                            initNode      = nodeNames[i];
                            initNodeIndex = i;
                        }
                    }
                    string tmp = nodeNames[0];

                    nodeNames.RemoveAt(0);
                    nodeNames.Insert(0, initNode);
                    nodeNames.RemoveAt(initNodeIndex);
                    nodeNames.Insert(initNodeIndex, tmp);

                    int h = 1;
                    for (int i = ns.Count - 2; i >= 0; i--)
                    {
                        nodeNames.RemoveAt(h);
                        nodeNames.Insert(h, ns[i]);
                        h++;
                    }
                    //if (ns.Count < nodeNames.Count)
                    //{
                    //    nodeNames.RemoveAt(ns.Count);
                    //    nodeNames.Insert(ns.Count, workflow.GetState().Name);
                    //}
                }
                else
                {
                    string initNode      = "";
                    int    initNodeIndex = 0;

                    for (int i = 0; i < nodeNames.Count; i++)
                    {
                        if (nodeNames[i] == workflow.GetState().Name)
                        {
                            initNode      = nodeNames[i];
                            initNodeIndex = i;
                        }
                    }
                    string tmp = nodeNames[0];

                    nodeNames.RemoveAt(0);
                    nodeNames.Insert(0, initNode);
                    nodeNames.RemoveAt(initNodeIndex);
                    nodeNames.Insert(initNodeIndex, tmp);
                }

                int W = ((nodeNames.Count() - 1) * 16) + 32 + ((nodeNames.Count()) * 5);
                int L = 480 - W / 2;
                presenPanel3.Attributes.Add("style", "position:relative;width:" + W + "px;margin:4px 0px 10px 0px;left:" + L + "px;");//"style", "position:relative;width:100%;margin:4px 0px 10px 0px;left:0px;"

                WFnode actual = workflow.GetState();
                int    j      = 0;
                presenPanel3.Controls.Clear();
                foreach (string n in nodeNames)
                {
                    ImageButton l = new ImageButton();
                    l.ImageUrl = "../lib/image/backNode.PNG";
                    l.CssClass = "HistoryLabel";
                    //if (j == 0)
                    //    l.ToolTip = nodeNames[0];
                    l.ToolTip = nodeNames[j];
                    if (!IsPostBack)
                    {
                        if (j == 0)
                        {
                            l.ImageUrl = "../lib/image/currentNode.PNG";
                            l.Attributes.Add("style", "margin-left:5px;");
                        }
                        else
                        {
                            l.Enabled  = false;
                            l.ImageUrl = "../lib/image/forwardNode.PNG";
                            l.Attributes.Add("style", "margin-left:5px;margin-bottom:8px;");
                        }
                    }
                    l.ID = j.ToString();
                    //l.OnClientClick = "slideRightToLeft();";
                    l.Click           += new ImageClickEventHandler(l_Click);
                    l.CausesValidation = false;
                    presenPanel3.Controls.Add(l);
                    j++;
                }


                /////////////////////////////////HISTORY//////////////////////////////////////////////////////////////////
            }
        }