//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); }
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"); }
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); } }
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; } } } }
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////////////////////////////////////////////////////////////////// } }