BSky.Statistics.R.UAPackageAPI.RefreshNewDataset C# (CSharp) Method

RefreshNewDataset() public method

public RefreshNewDataset ( ServerDataSource dataSource ) : UAReturn
dataSource BSky.Statistics.Common.ServerDataSource
return BSky.Statistics.Common.UAReturn
        public UAReturn RefreshNewDataset(ServerDataSource dataSource)//03Jan2014
        {
            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);//get number of rows in dataset/dataframe
                    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 
                            {
                                ////Set Measure
                                //logService.WriteToLogLevel("Set Measure start : " + s.ToString(), LogLevelEnum.Info);
                                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  ////////////
                            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

                        }
                        catch (ArgumentException ex)
                        {
                            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;
        }
        
UAPackageAPI