public static ObjectReference FromXML(string xmlData) { ObjectReferenceSAXHandler handler = new ObjectReferenceSAXHandler(); MgSAXParser parser = new MgSAXParser(handler); parser.Parse(xmlData); return(handler.ParsedReference); }
/// <summary> /// This method initializes the Menus vector from the menus source file. This method reads the data from the /// menus source file, creates a MenuEntry object for each entry in the menus file, and connects a menu /// entry with its children. In this method we will use the SAX Parser in order to parse the menus file xml. /// menusFileURL – the name of the menus file /// </summary> /// <param name = "menusData">the menus data buffer</param> public ApplicationMenus(byte[] menusData) { menus = new List <MgMenu>(); try { if (menusData != null && menusData.Length > 0) { ApplicationMenusSaxHandler handler = new ApplicationMenusSaxHandler(menus); MgSAXParser mgSAXParser = new MgSAXParser(handler); mgSAXParser.parse(menusData); } } catch (Exception ex) { Events.WriteExceptionToLog(ex); } }
/// <summary> /// To allocate and fill inner objects of the class /// </summary> /// <param name = "foundTagName">possible tag name , name of object, which need be allocated</param> /// <param name="parentForm">the form of the task that called the current task (note: NOT triggering task)</param> protected virtual bool initInnerObjects(String foundTagName, MgFormBase parentForm) { XmlParser parser = Manager.GetCurrentRuntimeContext().Parser; switch (foundTagName) { case XMLConstants.MG_TAG_HELPTABLE: if (_helpTab == null) { _helpTab = new Helps(); } if (Events.ShouldLog(Logger.LogLevels.Development)) { Events.WriteDevToLog(string.Format("{0} ...", foundTagName)); } _helpTab.fillData(); break; case XMLConstants.MG_TAG_DVHEADER: if (Events.ShouldLog(Logger.LogLevels.Development)) { Events.WriteDevToLog(string.Format("{0} ...", foundTagName)); } DataView.fillHeaderData(); break; case XMLConstants.MG_TAG_PROP: _propTab.fillData(this, 'T'); break; case XMLConstants.MG_TAG_FORM: Form = FormInitData(parentForm); break; case XMLConstants.MG_TAG_ASSEMBLIES: int start = parser.getCurrIndex(); int endContext = parser.getXMLdata().IndexOf('/' + XMLConstants.MG_TAG_ASSEMBLIES, parser.getCurrIndex()); parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); String assemblyData = parser.getXMLdata().Substring(start, parser.getCurrIndex() - start); //read assemblies data using sax parser try { var mgSAXParser = new MgSAXParser(new AssembliesSaxHandler()); mgSAXParser.Parse(assemblyData); } catch (Exception ex) { Events.WriteExceptionToLog(ex); } break; case XMLConstants.MG_ATTR_MENU_CONTENT: // set current index after tag name end parser.setCurrIndex(parser.getXMLdata().IndexOf(XMLConstants.MG_ATTR_MENU_CONTENT, parser.getCurrIndex()) + XMLConstants.MG_ATTR_MENU_CONTENT.Length + 1); endContext = parser.getXMLdata().IndexOf("</" + XMLConstants.MG_ATTR_MENU_CONTENT, parser.getCurrIndex()); _menusContent = Encoding.Unicode.GetBytes(parser.getXMLsubstring(endContext)); Manager.MenuManager.getApplicationMenus(this); parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); break; default: return(false); } return(true); }
/// <summary> /// Fill inner members and needed links for the current 'fld' /// </summary> /// <param name = "((DataView)dataView)">reference to all DataView object, which consist relevant fields </param> private bool initInnerObjects(XmlParser parser, String foundTagName, DataView dataView) { switch (foundTagName) { case XMLConstants.MG_TAG_FLD: if (_isOwnerFld) // init <fld id = recompute_by=> first time, init reference by id { fillFldField(parser, dataView); _isOwnerFld = false; // must to be after FillFldField } else { fillFldField(parser, dataView); // it's not need ((DataView)dataView), it's not first <fld > } break; case ConstInterface.MG_TAG_LINK: fillLink(parser, dataView); break; case XMLConstants.MG_TAG_CONTROL: if (_ctrlProps == null) { _ctrlProps = new PropTable(); } // fill the prop table using the existing properties _ctrlProps.fillDataByExists(Task); //if virtual field causes recompute of repeatable control if (_ctrlProps.getCtrlRef() != null && _ctrlProps.getCtrlRef().IsRepeatable&& OwnerFld.IsVirtual && (!(OwnerFld.hasInitExp()))) { OwnerFld.causeTableInvalidation(true); } break; case XMLConstants.MG_TAG_FORM_PROPERTIES: if (_formProps == null) { _formProps = new PropTable(); } // fill the prop table using the existing properties _formProps.fillDataByExists(Task); break; case ConstInterface.MG_TAG_FLD_END: parser.setCurrIndex2EndOfTag(); return(false); case XMLConstants.MG_TAG_DCVALUES: string segment = parser.ReadToEndOfCurrentElement(); var handler = new DCValuesRecomputeSaxHandler(Task); MgSAXParser.Parse(segment, handler); AddRecomputeItem(handler.DcValuesRecomputeAction); break; default: Logger.Instance.WriteExceptionToLog( "There is no such tag in Recompute. Insert else if to Recompute.initInnerObjects for " + foundTagName); return(false); } return(true); }
/// <summary> /// To allocate and fill inner objects of the class /// </summary> /// <param name = "foundTagName">possible tag name, name of object, which need be allocated</param> /// <param name="openingTaskDetails">additional information of opening task</param> /// <returns> xmlParser.getCurrIndex(), the found object tag and ALL its subtags finish</returns> private bool initInnerObjects(XmlParser parser, String foundTagName, OpeningTaskDetails openingTaskDetails) { if (foundTagName == null) { return(false); } switch (foundTagName) { case XMLConstants.MG_TAG_XML: parser.setCurrIndex( parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); // do // nothing break; case ConstInterface.MG_TAG_DATAVIEW: if (!insertDataView(parser)) { // the task of insert data view not found -> set parsers counter to the // end of the data view // the data view, got from server and there is no task to the data view , yet. int endContext = parser.getXMLdata().IndexOf('/' + ConstInterface.MG_TAG_DATAVIEW, parser.getCurrIndex()); parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); } break; // read DataViewContent that received as a response of GetDataViewContent Command. case ConstInterface.MG_TAG_COMPLETE_DV: { Task task = null; int endContext = parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()); int index = parser.getXMLdata().IndexOf(ConstInterface.MG_TAG_COMPLETE_DV, parser.getCurrIndex()) + ConstInterface.MG_TAG_COMPLETE_DV.Length; List <String> tokensVector = XmlParser.getTokens(parser.getXMLdata().Substring(index, endContext - index), "\""); // get task id string attribute = (tokensVector[0]); String valueStr; if (attribute.Equals(XMLConstants.MG_ATTR_TASKID)) { valueStr = (tokensVector[1]); String taskId = valueStr; task = getTask(taskId) ?? (Task)MGDataCollection.Instance.GetTaskByID(taskId); } int start = endContext + 1; endContext = parser.getXMLdata().IndexOf(XMLConstants.END_TAG + ConstInterface.MG_TAG_COMPLETE_DV, parser.getCurrIndex()); String dataViewContent = parser.getXMLdata().Substring(start, endContext - start); task.dataViewContent = dataViewContent; parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); } break; case XMLConstants.MG_TAG_TREE: { int start = parser.getCurrIndex(); int endContext = parser.getXMLdata().IndexOf('/' + XMLConstants.MG_TAG_TREE, parser.getCurrIndex()); parser.setCurrIndex(endContext); parser.setCurrIndex2EndOfTag(); String treeData = parser.getXMLdata().Substring(start, parser.getCurrIndex() - start); //read tree data using sax parser try { var mgSAXParser = new MgSAXParser(new TreeSaxHandler()); mgSAXParser.parse(Encoding.UTF8.GetBytes(treeData)); } catch (Exception e) { Logger.Instance.WriteExceptionToLog(e); Misc.WriteStackTrace(e, Console.Error); } break; } case ConstInterface.MG_TAG_CONTEXT: { int endContext = parser.getXMLdata().IndexOf(XMLConstants.TAG_TERM, parser.getCurrIndex()); if (endContext != -1 && endContext < parser.getXMLdata().Length) { // last position of its tag String tag = parser.getXMLsubstring(endContext); parser.add2CurrIndex(tag.IndexOf(ConstInterface.MG_TAG_CONTEXT) + ConstInterface.MG_TAG_CONTEXT.Length); parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.Length); // to delete "/>" too } break; } case XMLConstants.MG_TAG_RECOMPUTE: var recompTab = new RecomputeTable(); recompTab.fillData(); break; case ConstInterface.MG_TAG_COMMAND: Logger.Instance.WriteDevToLog("goes to command"); CmdsToClient.fillData(); break; case ConstInterface.MG_TAG_LANGUAGE: Logger.Instance.WriteDevToLog("goes to language data"); ClientManager.Instance.getLanguageData().fillData(); break; case ConstInterface.MG_TAG_KBDMAP_URL: Logger.Instance.WriteDevToLog("goes to keyBoard"); ClientManager.Instance.getEnvironment().fillFromUrl(foundTagName); break; case ConstInterface.MG_TAG_KBDMAP: Logger.Instance.WriteDevToLog("goes to keyBoard"); int kbdStartIdx = parser.getCurrIndex(); int kbdEndIdx = parser.getXMLdata().IndexOf('/' + ConstInterface.MG_TAG_KBDMAP, parser.getCurrIndex()); parser.setCurrIndex(kbdEndIdx); parser.setCurrIndex2EndOfTag(); String kbdData = parser.getXMLdata().Substring(kbdStartIdx, parser.getCurrIndex() - kbdStartIdx); ClientManager.Instance.getKbdMap().fillKbdMapTable(Encoding.UTF8.GetBytes(kbdData)); break; case ConstInterface.MG_TAG_COLORTABLE_URL: Logger.Instance.WriteDevToLog("goes to color"); ClientManager.Instance.getEnvironment().fillFromUrl(foundTagName); break; case XMLConstants.MG_TAG_COLORTABLE: { Logger.Instance.WriteDevToLog("goes to color"); int colorStartIdx = parser.getCurrIndex(); int colorEndIdx = parser.getXMLdata().IndexOf('/' + XMLConstants.MG_TAG_COLORTABLE, parser.getCurrIndex()); parser.setCurrIndex(colorEndIdx); parser.setCurrIndex2EndOfTag(); String colorData = parser.getXMLdata().Substring(colorStartIdx, parser.getCurrIndex() - colorStartIdx); Manager.GetColorsTable().FillFrom(Encoding.UTF8.GetBytes(colorData)); break; } case ConstInterface.MG_TAG_FONTTABLE_URL: Logger.Instance.WriteDevToLog("goes to font"); ClientManager.Instance.getEnvironment().fillFromUrl(foundTagName); break; case ConstInterface.MG_TAG_FONTTABLE: Logger.Instance.WriteDevToLog("goes to font"); int startIdx = parser.getCurrIndex(); int endIdx = parser.getXMLdata().IndexOf('/' + ConstInterface.MG_TAG_FONTTABLE, parser.getCurrIndex()); parser.setCurrIndex(endIdx); parser.setCurrIndex2EndOfTag(); String fontData = parser.getXMLdata().Substring(startIdx, parser.getCurrIndex() - startIdx); Manager.GetFontsTable().FillFrom(Encoding.UTF8.GetBytes(fontData)); break; case ConstInterface.MG_TAG_COMPMAINPRG: Logger.Instance.WriteDevToLog("goes to compmainprg"); ClientManager.Instance.EventsManager.getCompMainPrgTab().fillData(); break; case ConstInterface.MG_TAG_EVENTS_QUEUE: Logger.Instance.WriteDevToLog("goes to eventsqueue"); fillEventsQueue(parser); break; case ConstInterface.MG_TAG_TASKURL: ClientManager.Instance.ProcessTaskURL(); break; case XMLConstants.MG_TAG_TASK: Logger.Instance.WriteDevToLog("goes to task"); int taskCountBefore = _mprgTab.getSize(); _mprgTab.fillData(this, openingTaskDetails); // QCR #759911: mprg must belong to the main application's MGData. // This ensures it will not be discarded until the end of execution. // There could be more then 1 mprgs that are added (Qcr #168549) if (_id != 0) { int taskCountAfter = _mprgTab.getSize(); MGData mgd0 = MGDataCollection.Instance.getMGData(0); // check all the new main prgs. for (int taskIndex = taskCountBefore; taskIndex < taskCountAfter; taskIndex++) { Task newTask = _mprgTab.getTask(taskIndex); if (newTask.isMainProg() && mgd0._mprgTab.getTask(newTask.getTaskTag()) == null) { mgd0._mprgTab.addTask(newTask); mgd0.addTask(newTask); } } } break; case ConstInterface.MG_TAG_ENV: Logger.Instance.WriteDevToLog("goes to environment"); ClientManager.Instance.getEnvironment().fillData(); break; case ConstInterface.MG_TAG_FLWMTR_CONFIG: FlowMonitorQueue.Instance.fillData(); break; case XMLConstants.MG_TAG_XML_END: parser.setCurrIndex2EndOfTag(); return(false); case ConstInterface.MG_TAG_USER_RIGHTS: ClientManager.Instance.fillUserRights(); break; case ConstInterface.MG_TAG_DBH_REAL_IDXS: ClientManager.Instance.fillDbhRealIdxs(); break; case ConstInterface.MG_TAG_GLOBALPARAMSCHANGES: Logger.Instance.WriteDevToLog("applying global params changes from the server (Set/GetParams)"); ClientManager.Instance.getGlobalParamsTable().fillData(); break; case ConstInterface.MG_TAG_GLOBALPARAMS: Logger.Instance.WriteDevToLog("processing base64 encoded image of all global params from the server"); ClientManager.Instance.fillGlobalParams(); break; case ConstInterface.MG_TAG_CACHED_FILES: RemoteCommandsProcessor.GetInstance().ServerFileToClientHelper.RequestedForFolderOrWildcard = true; parser.setCurrIndex(parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); break; case ConstInterface.MG_TAG_CACHED_FILES_END: parser.setCurrIndex(parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); break; case ConstInterface.MG_TAG_CACHED_FILE: ClientManager.Instance.fillCacheFilesMap(); break; case ConstInterface.MG_TAG_ENV_PARAM_URL: Logger.Instance.WriteDevToLog("goes to env params name "); ClientManager.Instance.getEnvironment().fillFromUrl(foundTagName); break; case ConstInterface.MG_TAG_ENV_PARAM: Logger.Instance.WriteDevToLog("goes to env params name "); ClientManager.Instance.getEnvParamsTable().fillData(); break; case ConstInterface.MG_TAG_USER_DETAILS: UserDetails.Instance.fillData(); break; case ConstInterface.MG_TAG_DBHS: ClientManager.Instance.LocalManager.ApplicationDefinitions.DataSourceDefinitionManager.FillData(); break; case ConstInterface.MG_TAG_DATABASE_URL: // If data includes only file url ClientManager.Instance.LocalManager.ApplicationDefinitions.DatabaseDefinitionsManager.FillUrl(); break; case ConstInterface.MG_TAG_DATABASES_HEADER: ClientManager.Instance.LocalManager.ApplicationDefinitions.DatabaseDefinitionsManager.FillData(); break; case ConstInterface.MG_TAG_TASKDEFINITION_IDS_URL: Logger.Instance.WriteDevToLog("goes to task definition ids"); ClientManager.Instance.LocalManager.ApplicationDefinitions.TaskDefinitionIdsManager.FillFromUrl(foundTagName); break; case ConstInterface.MG_TAG_OFFLINE_SNIPPETS_URL: ClientManager.Instance.LocalManager.ApplicationDefinitions.OfflineSnippetsManager.FillFromUrl(foundTagName); break; case ConstInterface.MG_TAG_STARTUP_PROGRAM: CommandsProcessorManager.GetCommandsProcessor().ParseStartupProgram(parser); break; case ConstInterface.MG_TAG_CONTEXT_ID: { String ctxId; int ctxEndIdx; parser.setCurrIndex(parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); ctxEndIdx = parser.getXMLdata().IndexOf(XMLConstants.TAG_OPEN, parser.getCurrIndex()); ctxId = parser.getXMLsubstring(ctxEndIdx).Trim(); parser.setCurrIndex(ctxEndIdx); parser.setCurrIndex2EndOfTag(); ClientManager.Instance.RuntimeCtx.ContextID = Int64.Parse(ctxId); } break; case ConstInterface.MG_TAG_HTTP_COMMUNICATION_TIMEOUT: { uint httpCommunicationTimeout; // communication-level timeout (i.e. the access to the web server, NOT the entire request/response round-trip), in seconds. int httpCommunicationTimeoutIdx; parser.setCurrIndex(parser.getXMLdata().IndexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1); httpCommunicationTimeoutIdx = parser.getXMLdata().IndexOf(XMLConstants.TAG_OPEN, parser.getCurrIndex()); httpCommunicationTimeout = uint.Parse(parser.getXMLsubstring(httpCommunicationTimeoutIdx)); parser.setCurrIndex(httpCommunicationTimeoutIdx); parser.setCurrIndex2EndOfTag(); HttpManager.GetInstance().HttpCommunicationTimeoutMS = httpCommunicationTimeout * 1000; } break; default: Logger.Instance.WriteExceptionToLog( "There is no such tag name in MGData, add case to MGData.initInnerObjects and case to while of MGData.FillData " + foundTagName); return(false); } return(true); }