static public int LoadReport(string reportFilename, out string batchFilename, out BindableCollection <LogQueryResultViewModel> logQueryResults) { logQueryResults = new BindableCollection <LogQueryResultViewModel>(); XmlDocument reportDoc = new XmlDocument(); reportDoc.Load(reportFilename); XmlNode root = reportDoc.FirstChild; batchFilename = null; string inputBaseFolder = Herd.Utils.GetDirectory(reportFilename); if (root.Name == XMLTags.ReportNodeTag) { batchFilename = root.Attributes[XMLTags.BatchFilenameAttr].Value; foreach (XmlNode child in root.ChildNodes) { if (child.Name == XMLTags.QueryNodeTag) { LogQueryResultViewModel logQueryResult; string queryFilename = inputBaseFolder + child.Attributes[XMLTags.nameAttribute].Value; if (File.Exists(queryFilename)) { logQueryResult = Serialiazer.ReadObject <LogQueryResultViewModel>(queryFilename); logQueryResult.ImportNonSerializable(Herd.Utils.GetDirectory(queryFilename)); logQueryResult.IsNotifying = true; logQueryResults.Add(logQueryResult); } } } } return(logQueryResults.Count); }
/// <summary> /// Method called from the view. Generate a report from a set of selected configurations once /// all conditions are fulfilled. /// </summary> public void MakeReport() { Task.Run(() => { StartLongOperation(); // Execute the Query string batchFilename = LoadedBatch; LoadedBatch = "Running query"; List <TrackGroup> queryResultTracks = null; List <Report> queryReports = null; try { Query.Execute(LoggedExperiments, OnExperimentalUnitProcessed, out queryResultTracks, out queryReports); } catch (Exception ex) { string exception = ex.ToString(); } //Clone the query LogQueryViewModel clonedQuery = Serialiazer.Clone(Query); //Create and add to list the result of the query LogQueryResultViewModel result = new LogQueryResultViewModel(queryResultTracks, queryReports, clonedQuery); LogQueryResults.Add(result); //set this last result as selected SelectedLogQueryResult = LogQueryResults[LogQueryResults.Count - 1]; LoadedBatch = batchFilename; EndLongOperation(); }); }
public void Badger_LogQueryClone() { LogQueryViewModel query1; query1 = new LogQueryViewModel(); List <string> variableList = new List <string>() { "E_p", "v", "omega_r", "omega_g" }; //init query1 before copying it query1.AddLogVariables(variableList); query1.VariablesVM[0].IsSelected = true; query1.VariablesVM[2].IsSelected = true; query1.LimitTracks = true; query1.MaxNumTracks = 3; query1.AddGroupByFork("fork-1"); query1.InGroupSelectionVariable = "omega_g"; query1.InGroupSelectionFunction = LogQueryViewModel.FunctionMax; query1.OrderByFunction = LogQueryViewModel.FunctionDscBeauty; query1.OrderByVariable = "E_p"; query1.OrderByReportType = ReportType.AllTrainingEpisodes.ToString(); query1.Validate(); Assert.IsTrue(query1.CanGenerateReports); //The deep copy itself Serialiazer.WriteObject("serialization.txt", query1); LogQueryViewModel query2 = Serialiazer.Clone(query1); //check query2 is a deep copy of query1 variableList.Remove("omega_g"); //check the list is a deep copy of the original foreach (string variable in variableList) { Assert.IsTrue(query2.LogVariableExists(variable)); } Assert.IsTrue(query2.LogVariableExists("omega_g")); Assert.IsTrue(query2.LimitTracks); Assert.IsTrue(query2.MaxNumTracks == 3); Assert.IsTrue(query2.IsForkUsedToGroup("fork-1")); Assert.AreEqual(query1.InGroupSelectionVariable, query2.InGroupSelectionVariable); Assert.AreEqual(query1.InGroupSelectionFunction, query2.InGroupSelectionFunction); Assert.AreEqual(query2.OrderByFunction, LogQueryViewModel.FunctionDscBeauty); Assert.AreEqual(query1.OrderByReportType, query2.OrderByReportType); Assert.IsTrue(query2.CanGenerateReports); Assert.AreNotEqual(query1.QueryId, query2.QueryId); }
/// <summary> /// This method saves a set of queries on a experiment batch and their results to some output folder /// </summary> /// <param name="absBatchFilename">The absolute path to the experiment batch to which the query belongs</param> /// <param name="logQueryResults">The set of queries to be saved</param> /// <param name="absOutputFolder">Absolute path to the output folder, the name of the output report is taken from the input batch file</param> static public void SaveReport(string absBatchFilename, BindableCollection <LogQueryResultViewModel> logQueryResults, string absOutputFolder) { //save the queries and the report (a set of log query results referencing the queries and the experiment batch) string nakedBatchFilename = Herd.Utils.RemoveDirectories(Herd.Utils.RemoveExtension(absBatchFilename, 2)); string reportFilename = absOutputFolder + "/" + nakedBatchFilename + Herd.Files.Extensions.ReportExtension; using (TextWriter writer = File.CreateText(reportFilename)) { //open the root node in the report writer.WriteLine("<" + XMLTags.ReportNodeTag + " " + XMLTags.BatchFilenameAttr + "=\"" + absBatchFilename + "\">"); foreach (LogQueryResultViewModel logQueryResult in logQueryResults) { string nakedLogQueryName = Herd.Utils.RemoveSpecialCharacters(logQueryResult.Name); //Save the reports, each one in a different subfolder string absQueryOutputFolder = absOutputFolder + "/" + nakedLogQueryName; string relOutputFolder = nakedLogQueryName; if (!Directory.Exists(absQueryOutputFolder)) { Directory.CreateDirectory(absQueryOutputFolder); } //Save serializable data string relLogQueryResultFilename = nakedLogQueryName + "/" + nakedLogQueryName + ".xml"; string absLogQueryResultFilename = absOutputFolder + "/" + relLogQueryResultFilename; Serialiazer.WriteObject(absLogQueryResultFilename, logQueryResult); //Save non-serializable data Dictionary <string, string> additionalOutputFiles = logQueryResult.ExportNonSerializable(absQueryOutputFolder); //the reference to the query and non-serializable data files writer.WriteLine(" <" + XMLTags.QueryNodeTag + " " + XMLTags.nameAttribute + "=\"" + relLogQueryResultFilename + "\">"); foreach (string file in additionalOutputFiles.Keys) { writer.WriteLine(" <" + additionalOutputFiles[file] + ">" + file + "</" + additionalOutputFiles[file] + ">"); } writer.WriteLine(" </" + XMLTags.QueryNodeTag + ">"); } //close the root node in the report writer.WriteLine("</" + XMLTags.ReportNodeTag + ">"); } }