Example #1
0
 public ServerCommand(CommandDispatcher dispatcher, string name, string sourceCodeScript)
 {
     _Dispatcher    = dispatcher;
     _Name          = name;
     _CommandSyntax = sourceCodeScript;
     _result        = new UAReturn();
 }
 public ServerCommand(CommandDispatcher dispatcher, string name, string sourceCodeScript)
 {
     _Dispatcher = dispatcher;
     _Name = name;
     _CommandSyntax = sourceCodeScript;
     _result = new UAReturn();
 }
        public UAReturn UABinomial(ServerDataSource dataSource, List<string> vars, double p, string alternative, double confidenceLevel, bool descriptives, bool quartiles, int missing)
        {
            UAReturn result = new UAReturn();

            if (string.IsNullOrEmpty(alternative)) alternative = "two.sided";

            result.CommandString = string.Format(PrototypeBinomial, toRCollection(vars), p, alternative, confidenceLevel, descriptives, quartiles, dataSource.FileName, missing);

            result.Data = EvaluateToObjectXml(result.CommandString);

            result.Success = true;

            return result;
        }
 public override UAReturn Execute(string commandString)
 {
     UAReturn result = new UAReturn();
     try
     {
         _journal.WriteLine(commandString);//06Jul2015
         result.Data = dispatcher.EvaluateToXml(commandString);
         result.Success = true;
     }
     catch (Exception ex)
     {
         logService.WriteToLogLevel("Could not evaluate : <" + commandString + " > ", LogLevelEnum.Error);
     }
     return result;
 }
 public override UAReturn GetRodbcTables(string fname) //27Jan2014
 {
     bool isxlsx = fname.ToLower().EndsWith(".xlsx") ? true : false;
     UAReturn result = new UAReturn();
     result.SimpleTypeData = GetODBCTableList(fname, isxlsx);
     return result;
 }
 public override UAReturn DataSourceReadCell(ServerDataSource dataSource, int row, int col)
 {
     UAReturn result = new UAReturn();
     //R is now 0 Based
     row++; col++;
     result.Data = dispatcher.EvaluateToXml(RCommandStrings.GetDataFrameCellValue(dataSource, row, col));
     return result;
 }
        public UAReturn RefreshDataset(ServerDataSource dataSource)//04Mar2015 refresh on new row added by compute
        {
            UAReturn result = new UAReturn() { Success = false };
            if (true)//dispatcher.GetErrorText().Contains(BSky.Statistics.R.RService.RCommandReturn.Success))
            {
                //Get matrix columns
                string subCommand = RCommandStrings.GetDataFrameColumnNames(dataSource);

                object colnames = dispatcher.EvaluateToObject(subCommand, false);
                //if colnames are null. Because we were unable to open the dataset because of any reason.
                if (colnames == null)
                {
                    CloseDataset(dataSource);
                    result.Success = false;
                    result.Error = "Error Opening Dataset.";
                    return result;
                }

                //if colnames are duplicate then we dont load the dataset and show error message. Also we clean R
                if (isDuplicateColnames(colnames))
                {
                    CloseDataset(dataSource);
                    result.Success = false;
                    result.Error = "Dulicate Column Names in Dataset";
                    return result;
                }
                if (colnames != null)
                {
                    string[] columnNames = null;//var columnNames = new string[] { "aaa", "bbb" };
                    Type retType = colnames.GetType();
                    if (retType.Name == "String[]")//for multicols
                    {
                        columnNames = (String[])colnames;
                    }
                    else if (retType.Name == "String")//for single col
                    {
                        columnNames = new string[1];
                        columnNames[0] = (String)colnames;
                    }
                    else
                    {
                        return new UAReturn() { Success = false };
                    }

                    //maximum factors allowed
                    object maxf = (getMaxFactors(dataSource));
                    //sym = maxf as SymbolicExpression;

                    int mxf;//sym.AsInteger()[0];
                    bool parseSuccess = int.TryParse(maxf.ToString(), out mxf);
                    dataSource.MaxFactors = parseSuccess ? mxf : 40; //Hardcoded Default max factor count   //int.Parse(maxf.ToString());

                    dataSource.Variables.Clear();
                    int rowcount = GetRowCount(dataSource);//31Dec2014
                    int columnindex = 1;
                    SymbolicExpression symex = null;
                    foreach (object s in columnNames)
                    {
    
                        symex = dispatcher.EvaluateToSymExp(string.Format("UAgetColProperties(dataSetNameOrIndex='{0}', colNameOrIndex={1}, asClass=FALSE)", dataSource.Name, columnindex));
                        GenericVector gv = symex.AsList();

                        string colclass = dispatcher.RawEvaluateGetstring(string.Format("class({0}[[{1}]])", dataSource.Name, columnindex));//,true);
                        if (colclass == null)
                        {
                            colclass = "";
                        }

                        string lab = (gv[2] != null && gv[2].AsCharacter() != null && gv[2].AsCharacter()[0] != null) ? gv[2].AsCharacter()[0].ToString() : string.Empty;
                        DataColumnTypeEnum dtyp = (gv[1] != null && gv[1].AsCharacter() != null && gv[1].AsCharacter()[0] != null) ? GetCovertedDataType(gv[1].AsCharacter()[0].ToString()) : DataColumnTypeEnum.Character;
                        string mistyp = (gv[5] != null && gv[5].AsCharacter() != null && gv[5].AsCharacter()[0] != null) ? gv[5].AsCharacter()[0].ToString() : string.Empty;
                        

                        DataSourceVariable var = new DataSourceVariable()
                        {
                            Name = s.ToString(),
                            Label = lab,
                            DataType = dtyp,
                            DataClass = colclass,
                            Measure = DataColumnMeasureEnum.Scale,
                            Width = 4,
                            Decimals = 0,
                            Columns = 8,
                            MissType = mistyp,
                            RowCount = rowcount //GetVectorLength(dataSource, s.ToString())

                        };

                        if (symex != null)
                        {

                            //if (gv.Length == 1)
                            {
                                ////Set Measure
                                switch (gv[7].AsCharacter()[0].ToString())
                                {
                                    case "factor":
                                        var.Measure = DataColumnMeasureEnum.Nominal;
                                        break;

                                    case "ordinal":
                                        var.Measure = DataColumnMeasureEnum.Ordinal;
                                        break;

                                    default:
                                        if(var.DataType == DataColumnTypeEnum.Character) //02Jun2015 treating "character" type as Nominal in UI. In R its not factor
                                        {
                                            var.Measure = DataColumnMeasureEnum.Nominal;
                                        }
                                        else
                                        var.Measure = DataColumnMeasureEnum.Scale;
                                        break;
                                }

                                CharacterVector cv = gv[3].AsCharacter();
                                string[] vals = cv.ToArray();
                                if (vals != null && vals.Length > 0)
                                {
                                    if (vals.Length > 1)
                                    {
                                        var.Values.AddRange(vals);//more than 1 strings
                                    }
                                    else if (vals[0].Trim().Length > 0)
                                    {
                                        var.Values.Add(vals[0]);//1 string
                                    }
                                }

                                if (!(var.MissType == "none"))
                                {
                                    CharacterVector cvv = gv[3].AsCharacter();
                                    string[] misvals = cvv.ToArray();
                                    if (misvals != null && misvals.Length > 0)
                                    {
                                        if (misvals.Length > 1)
                                        {
                                            var.Missing.AddRange(misvals);//more than 1 strings
                                        }
                                        else if (misvals[0].Trim().Length > 0)
                                        {
                                            var.Missing.Add(misvals[0]);//1 string
                                        }
                                    }
                                }
                                else
                                {
                                    string misval = "none";
                                    var.Missing.Add(misval);
                                }

                            }
                        }

                        if (dataSource.Extension == "rdata")// if filetype is RDATA.
                        {
                            if (gv[9].AsCharacter() != null && gv[9].AsCharacter()[0].ToString() != "-2146826288")
                                var.Width = Int32.Parse(gv[9].AsCharacter()[0].ToString());

                            if (gv[10].AsCharacter() != null && gv[10].AsCharacter()[0].ToString() != "-2146826288")
                                var.Decimals = Int32.Parse(gv[10].AsCharacter()[0].ToString());

                            if (gv[11].AsCharacter() != null && gv[11].AsCharacter()[0].ToString() != "-2146826288")
                                var.Columns = UInt32.Parse(gv[11].AsCharacter()[0].ToString());
                        }

                        try
                        {
                            ////////// Alignment  ////////////
                            //logService.WriteToLogLevel("Get-Set Alignment start : " + s.ToString(), LogLevelEnum.Info);
                            string align = gv[6].AsCharacter()[0].ToString();
                            if (align == "-2146826288") align = "Left";
                            DataColumnAlignmentEnum alignVal = (DataColumnAlignmentEnum)Enum.Parse(typeof(DataColumnAlignmentEnum), align);
                            if (Enum.IsDefined(typeof(DataColumnAlignmentEnum), alignVal))
                                var.Alignment = alignVal;
                            else
                                var.Alignment = DataColumnAlignmentEnum.Left;

                            var.Role = DataColumnRole.Input;// Role is not used, I guess, so 'if' is commented above
                            //logService.WriteToLogLevel("Get-Set Alignment start : " + s.ToString(), LogLevelEnum.Info);
                        }
                        catch (ArgumentException)
                        {
                            logService.WriteToLogLevel("Not a member of enum(Alignment) ", LogLevelEnum.Error);
                        }

                        dataSource.Variables.Add(var);
                        columnindex++;
                        dataSource.RowCount = Math.Max(dataSource.RowCount, dataSource.Variables.Last().RowCount);
                    }

                    result.Datasource = dataSource;
                    result.Success = true;

                    this.DataSources.Add(dataSource);
                }
                else // no need of this 'else' unless you want to put custom error message in result
                {
                }
            }
            return result;
        }
        public override List<FactorMap> getColFactormap(string colName, ServerDataSource dataSource)
        {
            UAReturn result = new UAReturn() { Success = false };
            List<FactorMap>
                factormap = getColumnFmap(colName, dataSource);

            return factormap;
            //
        }
 public UAReturn saveDataset(ServerDataSource dataSource)//, string fname, string ftype, string datasetNameOrIndex)//Anil #4
 {
     UAReturn result = new UAReturn() { Success = false };
     result.CommandString = RCommandStrings.SaveDatasetToFile(dataSource);//fname,ftype,datasetNameOrIndex);
     if (result.CommandString != null)
         this.Evaluate(result.CommandString);
     return result;
 }
 //06Dec2013 show installed packages
 public override UAReturn ShowInstalledPackages()
 {
     UAReturn result = new UAReturn() { Success = false };
     object obj = rpm.GetInstalledPackages();
     if (obj != null)
     {
         result.SimpleTypeData = obj;
         result.Success = true;
     }
     //result.CommandString = command;// "Show Installed Packages";
     return result;
 }
 // Returns string[] by converting SimplDataType object that holds results
 public string[] GetUAReturnStringResult(UAReturn rlst)
 {
     string[] strarr = null;
     if (rlst != null && rlst.Success && rlst.SimpleTypeData != null)
     {
         if (rlst.SimpleTypeData.GetType().Name.Equals("String"))
         {
             strarr = new string[1];
             strarr[0] = rlst.SimpleTypeData as string;
         }
         else if (rlst.SimpleTypeData.GetType().Name.Equals("String[]"))
         {
             strarr = rlst.SimpleTypeData as string[];
         }
     }
     return strarr;
 }
        ///14Jun2013 For new R framework. We need XML doc for errors as well as additional result value
        public UAReturn EvaluateToUAReturn(string commandString)
        {
            UAReturn returnRecults = new UAReturn();
            returnRecults.CommandString = commandString;
            XmlDocument returnErrWarn;

            try
            {
                //16Apr2013///
                bool batchcommand = false;
                if (!batchcommand)
                    this._RServer.Evaluate("tmp<-" + commandString); // executing R Command with no left-hand var
                else
                    this._RServer.Evaluate(commandString);///16Apr2013 for commands like a<-somfun(..) and b = some expr. left hand var exists.
            }
            catch (Exception e)
            {
                string errm = "R.NET Error Msg not implemented";// this._RServer.GetErrorText();
                logService.WriteToLogLevel("Could not execute: < " + commandString + " >", LogLevelEnum.Error);
            }
            if (false)//this._RServer.GetErrorText() != RCommandReturn.Success)
            {
                returnErrWarn = null;

            }
            else if (!Conversions.ToBoolean(this._RServer.Evaluate("is.null(tmp)").AsLogical()[0]))
            {
                returnErrWarn = ParseToXmlDocument("tmp");
                ///here returnErrWarn will contain DOM. Having Error/Warn and Return results
            }
            else
            {
                returnErrWarn = null;
            }

            returnRecults.Data = returnErrWarn;
            returnRecults.SimpleTypeData = returnVal;// "Put results here. Should be used for RCommandStrings and nothing else.
            returnVal = null; // resetting so that old value does not get assigned to result of urrent command under execution.
            return returnRecults;
        }
Example #13
0
 public void Execute()
 {
     Debug.Assert(this.Validate());
     _result = this.Dispatcher.Execute(this);
 }
 //Uninstall multiple packages.
 public UAReturn UninstallMultiPakckage(string[] packagenames)
 {
     UAReturn res = new UAReturn() { Success = false };
     UAReturn tmp = null;//11May2014 for temporary return value
     StringBuilder sb = new StringBuilder("");
     StringBuilder comm = new StringBuilder(""); //11May2014 for storing multiple commands in single place
     foreach (string pkgname in packagenames)
     {
         tmp = UninstallPackage(pkgname.Trim());
         if (tmp != null)
         {
             if (tmp.CommandString != null) //11May2014
             {
                 if (comm.Length > 1) comm.Append("\n"); // if there is already something then only add new line
                 comm.Append(tmp.CommandString);
             }
             if (tmp.Error != null && tmp.Error.Length > 1) // if there is some error msg
             {
                 sb.Append(tmp.Error);
             }
         }
     }
     res.Success = sb.Length > 0 ? false : true;
     res.Error = sb.ToString();
     res.CommandString = comm.ToString();//11May2014
     return res;
 }
        public override object ExecuteR(ServerCommand Command, bool hasReturn, bool hasUAReturn)
        {

            _journal.WriteLine(Command.CommandSyntax);

            UAReturn result = new UAReturn();
            result.Success = true;
            result.Data = null;
            object o = dispatcher.SyntaxEditorEvaluateToObject(Command.CommandSyntax, hasReturn, hasUAReturn);

            return o;
        }
        //Install BlueSky R pacakge if its not already installed. Dont install on each launch. But check in each launch if installation is needed or not
        private UAReturn CheckAndInstallBlueSkyRPackage()
        {
            bool isinstalled = false;// package already installed
            bool islatestinstalled = true; //already installed package is the latest version.
            UAReturn res = new UAReturn() { Success = false };

            //Get BlueSky R .zip package names and location
            string BSkyMainPackagePath = string.Empty;//Main pacakge fullpathfilename.Assuming in future BlueSky R pacakge may break down in multiple R pacakges.
            string[] RpackageFullPathFilenames = null;//for all BlueSky*.zip package names
            string parentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace('\\', '/') + "/R Packages/BlueSky R Package(s)";
            if (Directory.Exists(parentDir))
            {
                //find all the .zip file in RPacakges directory
                RpackageFullPathFilenames = Directory.GetFiles(parentDir.Replace('/', '\\'), "BlueSky*.zip");//only look for packages with names "BlueSky*.zip"
                BSkyMainPackagePath = Array.Find(RpackageFullPathFilenames, element => element.Contains("BlueSky_"));
            }

            //Now check if BlueSky R pacakge is already installed.
            isinstalled = IsRPacakgeInstalled("BlueSky");
            if (isinstalled) //if BlueSky R package is already installed then check the version
            {
                string existingVersion = rpm.GetInstalledPacakgeVersion("BlueSky");
                string newVersion = string.Empty;
                string pkgname = rpm.GetPackageNameFromZip(BSkyMainPackagePath, out newVersion);
                if (rpm.CompareVersion(newVersion, existingVersion) == 1) //new version in BlueSky app and old is already installed
                {
                    islatestinstalled = false; //latest not already installed.
                }
            }

            //Install BlueSky R package(s) if not already installed OR if installed one is not the latest
            //To Update BlueSky R pacakge there is different menu options.
            if (!isinstalled || !islatestinstalled) 
            {
                logService.WriteToLogLevel("Install BlueSky R pacakge if its not already installed or not latest:", LogLevelEnum.Info);
                //string parentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace('\\', '/') + "/RPackages/BlueSky R Package(s)";
                if (Directory.Exists(parentDir))
                {
                    //find all the .zip file in RPacakges directory
                    //string[] RpackageFullPathFilenames = Directory.GetFiles(parentDir, "BlueSky*.zip");//only look for packages with names "BlueSky*.zip"
                    res = rpm.InstallMultiPackageFromZip(RpackageFullPathFilenames, true, true);
                }
                else
                {
                    res.Error = "Could not find BlueSky R package(s). Please install them by going to Tools > Package > Update BlueSky package from zip (Restart App)";
                }
            }
            return res;
        }
        public UAReturn OpenEmptyDataset(ServerDataSource dataSource)//03Jan2014
        {
            string commstr = string.Empty;
            UAReturn result = new UAReturn() { Success = false };

            result.CommandString = RCommandStrings.LoadEmptyDataSource(dataSource);
            commstr = result.CommandString;
            result = this.Evaluate(commstr);

            UAReturn result2 = RefreshNewDataset(dataSource);//26Mar2013 to avoid code redundancy.(code here was separated out to a function)
            result.Datasource = result2.Datasource;
            result.Success = result2.Success;
            result.CommandString = commstr;//21Oct2013
            return result;
        }
 public UAReturn Datasetclose(ServerDataSource dataSource)//Anil #4
 {
     UAReturn result = new UAReturn() { Success = false };
     result.CommandString = RCommandStrings.closeDataset(dataSource);
     if (result.CommandString != null)
         this.Evaluate(result.CommandString);
     return result;
 }
 //06Dec2013 show currently loaded packages
 public override UAReturn ShowLoadedPackages()
 {
     UAReturn result = new UAReturn() { Success = false };
     object obj = rpm.GetCurrentlyLoadedPackages();
     if (obj != null)
     {
         result.SimpleTypeData = obj;
         result.Success = true;
     }
     return result;
 }
        public UAReturn LoadDataFrame(ServerDataSource dataSource, string dframename) //13Feb2014 
        {
            string commstr = string.Empty;
            UAReturn result = new UAReturn() { Success = false };

            result.CommandString = RCommandStrings.LoadDataframe(dataSource, dframename);
            commstr = result.CommandString;
            result = this.Evaluate(commstr);
            if (result.Data != null)
            {
                UAReturn result2 = RefreshNewDataset(dataSource);//26Mar2013 to avoid code redundancy.(code here was separated out to a function)
                result.Datasource = result2.Datasource;
                result.Success = result2.Success;
                result.Error = result2.Error;
                result.CommandString = commstr;//21Oct2013
            }
            return result;
        }
        //06Dec2013 for loading custom package
        public override UAReturn LoadLocalPackage(string package)
        {
            string command = string.Format("library({0})", package);

            UAReturn result = new UAReturn() { Success = false };
            //Load Package
            if (!dispatcher.IsLoaded(package))
            {
                result.Success = true;
                this.EvaluateNoReturn(command);
                result.CommandString = command;//  "Load Package";
            }
            return result;
        }
        public UAReturn RefreshDataset_old(ServerDataSource dataSource)//25Mar2013 refresh on new row added by compute
        {
            UAReturn result = new UAReturn() { Success = false };
            if (true)//dispatcher.GetErrorText().Contains(BSky.Statistics.R.RService.RCommandReturn.Success))
            {
                logService.WriteToLogLevel("GetColnames Start:", LogLevelEnum.Info);
                //Get matrix columns
                string subCommand = RCommandStrings.GetDataFrameColumnNames(dataSource);

                object colnames = dispatcher.EvaluateToObject(subCommand, false);
                string[] columnNames = null;//var columnNames = new string[] { "aaa", "bbb" };
                Type retType = colnames.GetType();
                if (retType.Name == "String[]")//for multicols
                {
                    columnNames = (String[])colnames;
                }
                else if (retType.Name == "String")//for single col
                {
                    columnNames = new string[1];
                    columnNames[0] = (String)colnames;
                }
                else
                {
                    return new UAReturn() { Success = false };
                }

                logService.WriteToLogLevel("GetColnames End", LogLevelEnum.Info);

                logService.WriteToLogLevel("Get Max factor start", LogLevelEnum.Info);
                //maximum factors allowed
                object maxf = (getMaxFactors(dataSource));


                int mxf;//sym.AsInteger()[0];
                bool parseSuccess = int.TryParse(maxf.ToString(), out mxf);
                dataSource.MaxFactors = parseSuccess ? mxf : 40; //Hardcoded Default max factor count   //int.Parse(maxf.ToString());
                logService.WriteToLogLevel("Get Max factor end", LogLevelEnum.Info);

                dataSource.Variables.Clear();
                int rowcount = GetRowCount(dataSource);//31Dec2014
                int columnindex = 1;
                foreach (object s in columnNames)
                {
                    logService.WriteToLogLevel("Get Col Prop start : " + s.ToString(), LogLevelEnum.Info);
                    object resobj = GetColProp(dataSource, s.ToString()).SimpleTypeData;
                    object[] cprops = (object[])resobj;
                    logService.WriteToLogLevel("Get Col Prop end : " + s.ToString(), LogLevelEnum.Info);

                    logService.WriteToLogLevel("Set Col Prop start : " + s.ToString(), LogLevelEnum.Info);
                    DataSourceVariable var = new DataSourceVariable()
                    {
                        Name = s.ToString(),
                        Label = cprops[2].ToString(),
                        DataType = GetCovertedDataType(cprops[1].ToString()),
                        Measure = DataColumnMeasureEnum.Scale,
                        Width = 4,
                        Decimals = 0,
                        Columns = 8,
                        MissType = cprops[5].ToString(),
                        RowCount = rowcount //GetVectorLength(dataSource, s.ToString())
                        //factormapList = new List<FactorMap>()//17Apr2014
                    };
                    logService.WriteToLogLevel("Set Col Prop end : " + s.ToString(), LogLevelEnum.Info);

                    logService.WriteToLogLevel("Get-Set Col factors start : " + s.ToString(), LogLevelEnum.Info);
                    //uadatasets$lst$ added by Anil in following two
                    bool isfactors = (bool)dispatcher.EvaluateToObject(string.Format("is.factor({0}[,{1}])", dataSource.Name, columnindex), false);//is.factor(uadatasets$lst${0}[,{1}])
                    if (isfactors)
                    {    //(DataColumnMeasureEnum)Enum.Parse(typeof(DataColumnMeasureEnum), GetMeasure(dataSource, s.ToString()));
                        bool isOrdered = (bool)dispatcher.EvaluateToObject(string.Format("is.ordered({0}[,{1}])", dataSource.Name, columnindex), false);//is.ordered(uadatasets$lst${0}[,{1}])
                        if (isOrdered)
                            var.Measure = DataColumnMeasureEnum.Ordinal;
                        else
                            var.Measure = DataColumnMeasureEnum.Nominal; // default is set in above para which will be overwritten in this line if its factor type
                        //reading all levels/factors
                        object tempO = (object)GetFactorValues(dataSource, s.ToString()).SimpleTypeData;
                        if (tempO != null)
                        {
                            if (tempO.GetType().Name.Equals("String[]"))//tempO.GetType().IsArray)
                            {
                                string[] vals = tempO as string[];
                                var.Values.AddRange(vals);//adding all values to list
                            }
                            else if (tempO.GetType().Name.Equals("String"))
                            {
                                string vals = tempO as string;
                                var.Values.Add(vals);//adding all values to list
                            }
                            else
                            {
                                //some other unexpected type was returned in tempO.
                                //can print an error message here.
                                string[] charfactors = (tempO as SymbolicExpression).AsCharacter().ToArray();
                                var.Values.AddRange(charfactors);//adding all values to list
                            }
                        }
                    }
                    logService.WriteToLogLevel("Get-Set Col factors end : " + s.ToString(), LogLevelEnum.Info);

                    logService.WriteToLogLevel("Get-Set Col Missing start : " + s.ToString(), LogLevelEnum.Info);
                    if (!(var.MissType == "none"))
                    {
                        object tempObj = (object)GetMissingValues(dataSource, s.ToString()).SimpleTypeData;
                        if (tempObj != null)
                        {
                            double[] misval;
                            if (tempObj.GetType().Name.Equals("Double[]"))// (tempObj.GetType().IsArray)
                            {
                                misval = tempObj as double[];
                                foreach (double mv in misval)
                                    var.Missing.Add(mv.ToString());
                            }
                            else if (tempObj.GetType().Name.Equals("Double"))
                            {
                                double misvalue = (double)tempObj;
                                var.Missing.Add(misvalue.ToString());
                            }
                            else
                            {
                                //some other unexpected type was returned in tempO.
                                //can print an error message here.

                                var.Missing.Add("");//adding blank
                            }
                        }
                    }
                    else
                    {
                        string misval = "none";
                        var.Missing.Add(misval);
                    }
                    logService.WriteToLogLevel("Get-Set Col Missing end : " + s.ToString(), LogLevelEnum.Info);

                    logService.WriteToLogLevel("Get-Set others start : " + s.ToString(), LogLevelEnum.Info);
                    if (dataSource.Extension == "rdata")// if filetype is RDATA.
                    {
                        if (cprops[9].ToString() != "-2146826288")
                            var.Width = Int32.Parse(cprops[9].ToString());

                        if (cprops[10].ToString() != "-2146826288")
                            var.Decimals = Int32.Parse(cprops[10].ToString());

                        if (cprops[11].ToString() != "-2146826288")
                            var.Columns = UInt32.Parse(cprops[11].ToString());
                    }
                    try
                    {
                        ////////// Alignment  ////////////
                        if (cprops[6].ToString() == "-2146826288") cprops[6] = "Left";
                        DataColumnAlignmentEnum alignVal = (DataColumnAlignmentEnum)Enum.Parse(typeof(DataColumnAlignmentEnum), cprops[6].ToString());
                        if (Enum.IsDefined(typeof(DataColumnAlignmentEnum), alignVal))
                            var.Alignment = alignVal;
                        else
                            var.Alignment = DataColumnAlignmentEnum.Left;

                        var.Role = DataColumnRole.Input;// Role is not used, I guess, so 'if' is commented above
                    }
                    catch (ArgumentException)
                    {
                        //Console.WriteLine("Not a member of the enumeration.");
                        logService.WriteToLogLevel("Not a member of enum(Alignment) ", LogLevelEnum.Error);
                    }
                    logService.WriteToLogLevel("Get-Set others end : " + s.ToString(), LogLevelEnum.Info);

                    dataSource.Variables.Add(var);
                    columnindex++;
                    dataSource.RowCount = Math.Max(dataSource.RowCount, dataSource.Variables.Last().RowCount);
                }

                result.Datasource = dataSource;
                result.Success = true;

                this.DataSources.Add(dataSource);
            }
            return result;
        }
 //06Dec2013 for loading package from list
 public override UAReturn LoadPackageFromList(string[] packagenames)
 {
     
     UAReturn result = new UAReturn() { Success = false };
     result = rpm.LoadMultiplePackages(packagenames, true);
     return result;
 }
        public override UAReturn DataSourceReadRows(ServerDataSource dataSource, int start, int end)
        {
            UAReturn result = new UAReturn();
            start++; end++;

            List<object> data = new List<object>();
            for (int i = start; i < end; i++)
            {
                data.Add(dispatcher.EvaluateToObject(RCommandStrings.GetDataFrameRowValues(dataSource, i), false));
            }
            return result;
        }
 //06Dec2013 for unloading custom package
 public override UAReturn UnloadPackages(string[] packagenames)
 {
     
     UAReturn result = new UAReturn() { Success = false };
     result = rpm.UnLoadMultiPackage(packagenames);
     return result;
 }
 public override UAReturn DataSourceReadRow(ServerDataSource dataSource, int row)//23Jan2014 Read a Row at once
 {
     UAReturn result = new UAReturn();
     //R is now 0 Based
     row++;
     try
     {
         string commnd = RCommandStrings.GetDataFrameRowValues(dataSource, row);
         //result.Data = dispatcher.EvaluateToXml(commnd);
         result.SimpleTypeData = dispatcher.GetRow(commnd);//DAtaset[index,]
     }
     catch (Exception ex)
     {
         logService.WriteToLogLevel("Error in row : " + row + " " + ex.Message, LogLevelEnum.Error);
     }
     return result;
 }
 //06Dec2013 for uninstalling custom package
 public override UAReturn UninstallPackages(string[] packagenames)
 {
    
     UAReturn result = new UAReturn() { Success = false };
     result = rpm.UninstallMultiPakckage(packagenames);
     return result;
 }
        public UAReturn UAOneSample(ServerDataSource dataSource, List<string> vars, double mu, double confidenceLevel, int missing)
        {
            UAReturn result = new UAReturn();

            result.CommandString = string.Format(PrototypeOneSample, toRCollection(vars), mu, confidenceLevel, dataSource.FileName, missing);

            result.Data = EvaluateToObjectXml(result.CommandString);

            result.Success = true;

            return result;
        }
        public UAReturn OpenDataset(ServerDataSource dataSource, string sheetname)
        {
            string commstr = string.Empty;
            UAReturn result = new UAReturn() { Success = false };
            result.CommandString = RCommandStrings.LoadDataSource(dataSource, sheetname);
            commstr = result.CommandString;

            //07Jul2015 if file type is not supported commstr will be empty(may be null)
            //No need to process further as file type is not supported
            if (commstr == null || commstr.Trim().Length == 0) 
            {                               
                logService.WriteToLogLevel("Unable to open file: " , LogLevelEnum.Error);
                result.Datasource = null;
                result.Success = false;
                result.CommandString = commstr;//21Oct2013
                result.Error = "Error opening file: File format not supported (or corrupt file or duplicate column names).";
                return result;
            }

            result = this.Evaluate(commstr);//Execute command, if supported file type is passed.

            if (result.Data == null)//this checks finds if R was able to successfully open the dataset.
            {
                logService.WriteToLogLevel("Unable to open file: " + commstr, LogLevelEnum.Error);
                result.Datasource = null;
                result.Success = false;
                result.CommandString = commstr;//21Oct2013
                return result;
            }
            else if (result.Data != null)//07Jul2015
            {
                OutputHelper.AnalyticsData.Result = result;
                string[,] errwarn = OutputHelper.GetBSkyErrorsWarning(1, "normal"); //for getting errors and warning from BSkyReturnStruct.
                if (errwarn != null)
                {
                    string[] RErrors = new string[errwarn.GetLength(0)];
                    for (int i = 0; i < errwarn.GetLength(0); i++)
                    {
                        RErrors[i] = errwarn[i, 2];
                    }
                    result.Error = string.Join(". ", RErrors);
                }
            }

            //07Jul2015 IF Error occurred the nno need to do further processing. Push this error message to top layers so that
            // it can be dispalyed in UI (outpuwindow or message box)
            if(result!=null && result.Error!=null && result.Error.Trim().Length>0 && 
                (result.Error.Trim().Contains("R Err Msg : ") || result.Error.Trim().ToLower().Contains("error")) )
            {
                return result; //Return from here. No further processing (like RefreshDataset).
            }


            logService.WriteToLogLevel("Before RefreshDataset:", LogLevelEnum.Info);
            UAReturn result2 = RefreshDataset(dataSource);//26Mar2013 to avoid code redundancy.(code here was separated out to a function)
            logService.WriteToLogLevel("After RefreshDataset:", LogLevelEnum.Info);

            result.Datasource = result2.Datasource;
            result.Success = result2.Success;
            result.Error = result2.Error;
            result.CommandString = commstr;//21Oct2013
            return result;
        }
        public override UAReturn Execute(ServerCommand Command)
        {

            _journal.WriteLine(Command.CommandSyntax);

            UAReturn result = new UAReturn();
            result.Success = true;
            result.Data = dispatcher.EvaluateToXml(Command.CommandSyntax);

            return result;
        }
        private UAReturn Evaluate(string commandString)
        {
            _journal.WriteLine(commandString);
            //08Jun2013 return dispatcher.EvaluateToString(commandString); //returns string

            //08jun2013
            UAReturn result = new UAReturn();
            result.Success = true;
            result.Data = dispatcher.EvaluateToXml(commandString);
            return result;
        }
        private UAReturn LoadPackage()
        {
            UAReturn result = new UAReturn() { Success = false };

            foreach (string package in RPackages)
            {
                if (isNewPackage) UnloadPackage(package);
                //Load Package
                if (!dispatcher.IsLoaded(package))
                {
                    string parentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace('\\', '/') + "/R Packages";

                    this.EvaluateNoReturn("library(tools)");

                    string command = string.Format("write_PACKAGES('{0}')", parentDir);
                    this.EvaluateNoReturn(command);
                    this.EvaluateNoReturn(string.Format("install.packages('{0}', repos=NULL, contriburl='file:///{1}')", package, parentDir));

                    result.Success = true;
                    this.EvaluateNoReturn(string.Format("library({0})", package));
                }

            }


            return result;
        }
 public void JustLogCommandDoNotExecute()//16Aug2016
 {
     Debug.Assert(this.Validate());
     _result = this.Dispatcher.DontExecuteJustLogCommand(this.CommandSyntax);
 }