private void ExecuteBSkyFormatCommand(string stmt, ref int bskyfrmtobjcount, OutputWindow ow)
{
KillTempBSkyFormatObj("bskytempvarname");
KillTempBSkyFormatObj("bskyfrmtobj");
string originalCommand = stmt;
CommandOutput lst = new CommandOutput(); ////one analysis////////
lst.IsFromSyntaxEditor = true;//lst belongs to Syn Editor
if (saveoutput.IsChecked == true)//10Jan2013
lst.SelectedForDump = true;
object o;
CommandRequest cmd = new CommandRequest();
/// find argument passed in BSkyFormat(argu) and var name ////
/// eg.. BSkyFormat(osmt <-one.smt.t.test(....) )
/// subcomm will be : osmt<-one.smt.t.test(....)
/// varname will be : osmt
string subcomm = string.Empty, varname = string.Empty, BSkyLeftVar = string.Empty, headername = string.Empty;
string firstparam = string.Empty, restparams = string.Empty, leftvarname = string.Empty;//23Sep2014
string userpassedtitle = string.Empty;
//SplitBSkyFormat(stmt, out subcomm, out varname, out BSkyLeftVar);
SplitBSkyFormatParams(stmt, out firstparam, out restparams, out userpassedtitle);//23Spe2014
if (userpassedtitle.Trim().Length > 0)//user passed title has the highest priority
{
headername = userpassedtitle.Trim();
}
{
//23Sep2014 if firstParam is of the type obj<-OSMT(...) OR obj<-obj2
if (firstparam.Contains("<-") || firstparam.Contains("=")) //if it has assignment
{
int idxassign=-1, idxopenbrket=-1;
if(firstparam.Contains("("))// if obj<-OSMT(...)
{
idxopenbrket = firstparam.IndexOf("(");
string firsthalf = firstparam.Substring(0,idxopenbrket);// "obj <- OSMT("
idxassign = firsthalf.IndexOf("<-");
if (idxassign == -1)// '<-' not present(found in half)
idxassign = firsthalf.IndexOf("=");
}
if (idxassign > -1 && idxopenbrket > -1 && idxopenbrket > idxassign)
{
leftvarname = firstparam.Substring(0, idxassign);
headername = leftvarname.Trim();
cmd.CommandSyntax = firstparam;// command: osmt<-one.smt.tt(...)
o = analytics.ExecuteR(cmd, false, false);//executing sub-command; osmt<-one.smt.tt(...)
}
else if (idxopenbrket < 0 )//type obj <- obj2
{
idxassign = firstparam.IndexOf("<-");
if (idxassign == -1)// '<-' not present
idxassign = firstparam.IndexOf("=");
if (idxassign > -1)//if assignment is there
{
leftvarname = firstparam.Substring(0, idxassign);
headername = leftvarname.Trim();
cmd.CommandSyntax = firstparam;// command: osmt<-one.smt.tt(...)
o = analytics.ExecuteR(cmd, false, false);//executing sub-command; osmt<-one.smt.tt(...)
}
}
}
/////25Feb2013 for writing errors in OutputWindow////
string sinkfilefullpathname = Path.Combine(System.IO.Path.GetTempPath().Replace("\\", "/"), confService.GetConfigValueForKey("tempsink")); //23nov2012
// load default value if no path is set or invalid path is set
if (sinkfilefullpathname.Trim().Length == 0 || !IsValidFullPathFilename(sinkfilefullpathname, false))
{
MessageBox.Show(this, "Key 'tempsink' not found in config file. Aborting...");
return; //return type was void before 22May2014
}
OpenSinkFile(@sinkfilefullpathname, "wt"); //06sep2012
SetSink(); //06sep2012
////////////////////////////////////////////////////////////////////////
//13Aug2012 headername = findHeaderName(subcomm); // data.frame / matrix / array header
varname = "bskytempvarname";
KillTempBSkyFormatObj(varname);
//Now run command
firstparam = (leftvarname.Trim().Length>0? leftvarname : firstparam);
//23Sep2014 cmd.CommandSyntax = varname + " <- " + subcomm;// command: varname <- one.smt.tt(...)
cmd.CommandSyntax = varname + " <- " + firstparam;// varname <- obj OR OSMT()
o = analytics.ExecuteR(cmd, false, false);//executing sub-command
////////////////////////////////////////////////////////////////////////
/////25Feb2013 for writing errors in OutputWindow////
ResetSink();
CloseSinkFile();
CreateOuput(ow);
}
//if var does not exists then there could be error in command execution.
cmd.CommandSyntax = "exists('" + varname + "')";
o = analytics.ExecuteR(cmd, true, false);
if (o.ToString().ToLower().Equals("false"))//possibly some error occured
{
string ewmessage = "Object cannot be formatted using BSKyFormat. Object: " + firstparam + ", does not exists.";
//if (ow != null)//22May2014
SendErrorToOutput(originalCommand + "\n" + ewmessage, ow); //03Jul2013
return; //return type was void before 22May2014
}
//Check if varname is null
cmd.CommandSyntax = "is.null(" + varname + ")";
o = analytics.ExecuteR(cmd, true, false);
if (o.ToString().ToLower().Equals("true"))//possibly some error occured
{
string ewmessage = "Object cannot be formatted using BSKyFormat. Object: " + firstparam + ", is null.";
SendErrorToOutput(originalCommand + "\n" + ewmessage, ow); //03Jul2013
return; //return type was void before 22May2014
}
//setting up flag for showing default ("1","2","3" )row headers.
//This will not work if BSkyReturnStructure is returned(in varname).
bsky_no_row_header = false;
cmd.CommandSyntax = "is.null(row.names(" + varname + ")[1])";
o = analytics.ExecuteR(cmd, true, false);
if (o.ToString().ToLower().Equals("false"))//row name at [1] exists
{
cmd.CommandSyntax = "row.names(" + varname + ")[1]";
o = analytics.ExecuteR(cmd, true, false);
if (o.ToString().Trim().ToLower().Equals("bsky_no_row_header"))
{
bsky_no_row_header = true;
}
}
//one mandatory parameter
string mandatoryparamone = ", bSkyFormatAppRequest = TRUE";
if (restparams.Trim().Length > 0 && restparams.Trim().Contains("bSkyFormatAppRequest"))//if parameter is already present, no need to add it.
{
mandatoryparamone = string.Empty;
}
//second mandatory parameter
string mandatoryparamtwo = ", singleTableOutputHeader = '" + headername + "'"; // \"c(\\\"a\\\")\" )"
if (restparams.Trim().Length > 0 && restparams.Trim().Contains("singleTableOutputHeader"))//if parameter is already present, no need to add it.
{
mandatoryparamtwo = string.Empty;
}
//create BSkyFormat command for execution and execute
if(restparams.Trim().Length > 0)
stmt = "BSkyFormat(" + varname + mandatoryparamone + mandatoryparamtwo +","+restparams+")";//stmt = "BSkyFormat(" + varname + ")";
else
stmt = "BSkyFormat(" + varname + mandatoryparamone + mandatoryparamtwo+" )";
stmt = BSkyLeftVar + stmt;// command is BSkyLeftVar <- BSkyFormat(varname)
/// BSkyLeftVar <- can be blank if user has no assigned leftvar to BSkyFormat
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Command reconstructed : " + stmt, LogLevelEnum.Info);
string objclass = "", objectname = "";
if (stmt.Contains("BSkyFormat("))// Array, Matrix, Data Frame or BSkyObject(ie..Analytic commands)
{
bskyfrmtobjcount++;
stmt = "bskyfrmtobj <- " + stmt; // BSkyFormat has BSkyFormat2 call inside of it
objectname = "bskyfrmtobj";// +bskyfrmtobjcount.ToString();
cmd.CommandSyntax = stmt;// command
o = analytics.ExecuteR(cmd, false, false);//executing BSkyFormat
///Check if returned object is null
cmd.CommandSyntax = "is.null(" + objectname + ")";
o = analytics.ExecuteR(cmd, true, false);
if (o.ToString().ToLower().Equals("true"))//possibly some error occured
{
string ewmessage = "Object cannot be formatted using BSKyFormat. Type not supported. Supported types are :\n array, matrix dataframe and BSky return structure.";
SendErrorToOutput(originalCommand + "\n" + ewmessage, ow); //03Jul2013
return; //return type was void before 22May2014
}
#region Generate UI for data.frame/ matrix / array and analytics commands
if (BSkyLeftVar.Trim().Length < 1) // if left var does not exists then generate UI tables
{
lst.NameOfAnalysis = originalCommand.Contains("BSkyFormat") ? "BSkyFormat-Command" : originalCommand;
//cmd.CommandSyntax = "class(bskyfrmtobj" + bskyfrmtobjcount.ToString() + ")";
cmd.CommandSyntax = "class(bskyfrmtobj)";
objclass = (string)analytics.ExecuteR(cmd, true, false);
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: BSkyFormat object type : " + objclass, LogLevelEnum.Info);
if (objclass.ToString().ToLower().Equals("data.frame") || objclass.ToString().ToLower().Equals("matrix") || objclass.ToString().ToLower().Equals("array"))
{
if (headername != null && headername.Trim().Length < 1) //06May2014
headername = subcomm;
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: BSkyFormatting DF/Matrix/Arr : " + objclass, LogLevelEnum.Info);
BSkyFormatDFMtxArr(lst, objectname, headername, ow);
}
else if (objclass.ToString().ToLower().Equals("list"))//BSkyObject returns "list"
{
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: BSkyFormatting : " + objclass, LogLevelEnum.Info);
SendToOutput("", ref lst, ow);
///tetsing whole else if
objectname = "bskyfrmtobj";// +bskyfrmtobjcount.ToString();
cmd.CommandSyntax = "is.null(" + objectname + "$BSkySplit)";//$BSkySplit or $split in return structure
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Executing : " + cmd.CommandSyntax, LogLevelEnum.Info);
bool isNonBSkyList1=false;
object isNonBSkyList1str = analytics.ExecuteR(cmd, true, false);
if (isNonBSkyList1str != null && isNonBSkyList1str.ToString().ToLower().Equals("true"))
{
isNonBSkyList1 = true;
}
cmd.CommandSyntax = "is.null(" + objectname + "$list2name)";//another type pf BSky list
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Executing : " + cmd.CommandSyntax, LogLevelEnum.Info);
bool isNonBSkyList2=false ;
object isNonBSkyList2str = analytics.ExecuteR(cmd, true, false);
if (isNonBSkyList2str != null && isNonBSkyList2str.ToString().ToLower().Equals("true"))
{
isNonBSkyList2 = true;
}
if (!isNonBSkyList1)
{
//if there was error in execution, say because non scale field has scale variable
// so now if we first check if $executionstatus = -2, we know that some error has occured.
cmd.CommandSyntax = objectname + "$executionstatus";//$BSkySplit or $split in return structure
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Executing : " + cmd.CommandSyntax, LogLevelEnum.Info);
object errstat = analytics.ExecuteR(cmd, true, false);
if (errstat != null && (errstat.ToString().ToLower().Equals("-2") || errstat.ToString().ToLower().Equals("-1")))
{
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Execution Stat : " + errstat, LogLevelEnum.Info);
if(errstat.ToString().ToLower().Equals("-2"))
SendErrorToOutput("Critical Error Occurred!", ow);//15Jan2015
else
SendErrorToOutput("Error Occurred!", ow);//03Jul2013
}
cmd.CommandSyntax = objectname + "$nooftables";//$nooftables=0, means no data to display. Not even error warning tables are there.
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Executing : " + cmd.CommandSyntax, LogLevelEnum.Info);
object retval = analytics.ExecuteR(cmd, true, false);
if (retval != null && retval.ToString().ToLower().Equals("0"))
{
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: No of Tables : " + retval, LogLevelEnum.Info);
SendErrorToOutput("No tables to show in output!", ow);//03Jul2013
}
if (AdvancedLogging) logService.WriteToLogLevel("ExtraLogs: Start creating actual UI tables : ", LogLevelEnum.Info);
//finally we can now format the tables of BSkyReturnStruture list
RefreshOutputORDataset(objectname, cmd, originalCommand, ow); //list like one sample etc..
}
else if (!isNonBSkyList2)
{
//if (ow != null)//22May2014
FormatBSkyList2(lst, objectname, headername, ow); //list that contains tables 2nd location onwards
}
}
else // invalid format
{
/// put it in right place
string ewmessage = "This Object cannot be formatted using BSKyFormat. BSkyFormat can be used on Array, Matrix, Data Frame and BSky List objects only";
//if (ow != null)//22May2014
SendErrorToOutput(originalCommand + "\n" + ewmessage, ow);//03Jul2013
}
}/// if leftvar is not assigned generate UI
#endregion
}
return;//22May2014
}