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