示例#1
0
        /// <summary>
        ///   Start task,parsing
        /// </summary>
        private bool initInnerObjects(String foundTagName, MGData mgdata, OpeningTaskDetails openingTaskDetails)
        {
            if (foundTagName == null)
            {
                return(false);
            }

            if (foundTagName.Equals(XMLConstants.MG_TAG_TASK))
            {
                var task = new Task();
                ClientManager.Instance.TasksNotStartedCount++;
                _tasks.Add(task);
                task.fillData(mgdata, openingTaskDetails);
            }
            else
            {
                return(false);
            }
            return(true);
        }
示例#2
0
        /// <summary>
        ///   Function for filling own fields, allocate memory for inner objects. Parsing the input String.
        /// </summary>
        internal void fillData(OpeningTaskDetails openingTaskDetails)
        {
            XmlParser parser = ClientManager.Instance.RuntimeCtx.Parser;

            // To avoid the need to send data that sets default values, we'll assume we want the default values
            // unless different info was sent. i.e. if the relevant tags are not in the XML, set the default values.
            while (true)
            {
                string nextTag = parser.getNextTag();

                if (!initInnerObjects(parser, nextTag, openingTaskDetails))
                {
                    break;
                }
            }

            Logger.Instance.WriteDevToLog("MGData.FillData(): THE END of the parsing " +
                                          parser.getCurrIndex() +
                                          " characters");
        }
示例#3
0
 /// <summary>
 ///   parse a set of tasks
 /// </summary>
 /// <param name = "mgdata">to parent -> MGData </param>
 /// <param name="openingTaskDetails">additional information of opening task</param>
 internal void fillData(MGData mgdata, OpeningTaskDetails openingTaskDetails)
 {
     while (initInnerObjects(ClientManager.Instance.RuntimeCtx.Parser.getNextTag(), mgdata, openingTaskDetails))
     {
     }
 }
示例#4
0
        /// <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);
        }