public XElement ComputeFeedbackNFAXML(XElement nfaCorrectDesc, XElement nfaAttemptDesc, XElement maxGrade, XElement feedbackLevel, XElement enabledFeedbacks, XElement userId) { #region Check if item is in cache StringBuilder key = new StringBuilder(); key.Append("feed"); key.Append(nfaCorrectDesc.ToString()); key.Append(nfaAttemptDesc.ToString()); key.Append(feedbackLevel.ToString()); key.Append(enabledFeedbacks.ToString()); string keystr = key.ToString(); var cachedValue = HttpContext.Current.Cache.Get(key.ToString()); if (cachedValue != null) { HttpContext.Current.Cache.Remove(keystr); HttpContext.Current.Cache.Add(keystr, cachedValue, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return((XElement)cachedValue); } #endregion CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //Read input var nfaCorrectPair = DFAUtilities.parseNFAFromXML(nfaCorrectDesc, solver); var nfaAttemptPair = DFAUtilities.parseNFAFromXML(nfaAttemptDesc, solver); var level = (FeedbackLevel)Enum.Parse(typeof(FeedbackLevel), feedbackLevel.Value, true); var enabList = (enabledFeedbacks.Value).Split(',').ToList <String>(); var maxG = int.Parse(maxGrade.Value); //Use this for generating 2 classes of feedback for reyjkiavik study var studentIdModule = int.Parse(userId.Value) % 2; //if (studentIdModule == 0) // level = FeedbackLevel.Minimal; //else // level = FeedbackLevel.Hint; //Give hints to everyone level = FeedbackLevel.Hint; //Compute feedback var feedbackGrade = NFAGrading.GetGrade(nfaCorrectPair.Second, nfaAttemptPair.Second, nfaCorrectPair.First, solver, 1500, maxG, level); //Pretty print feedback var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); } feedString += "</ul>"; var output = string.Format("<div><grade>{0}</grade><feedString>{1}</feedString></div>", feedbackGrade.First, feedString); XElement outXML = XElement.Parse(output); //Add this element to chace and return it HttpContext.Current.Cache.Add(key.ToString(), outXML, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return(outXML); }
public XElement ComputeFeedbackNfaToDfa(XElement nfaCorrectDesc, XElement dfaAttemptDesc, XElement maxGrade) { #region Check if item is in cache StringBuilder key = new StringBuilder(); key.Append("feedNFADFA"); key.Append(nfaCorrectDesc.ToString()); key.Append(dfaAttemptDesc.ToString()); string keystr = key.ToString(); var cachedValue = HttpContext.Current.Cache.Get(key.ToString()); if (cachedValue != null) { HttpContext.Current.Cache.Remove(keystr); HttpContext.Current.Cache.Add(keystr, cachedValue, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return((XElement)cachedValue); } #endregion CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //Read input var nfaCorrectPair = DFAUtilities.parseNFAFromXML(nfaCorrectDesc, solver); var dfaCorrect = nfaCorrectPair.Second.RemoveEpsilons(solver.MkOr).Determinize(solver).Minimize(solver); var dfaAttemptPair = DFAUtilities.parseDFAFromXML(dfaAttemptDesc, solver); var level = FeedbackLevel.Hint; var maxG = int.Parse(maxGrade.Value); //Compute feedback var feedbackGrade = DFAGrading.GetGrade(dfaCorrect, dfaAttemptPair.Second, nfaCorrectPair.First, solver, 1500, maxG, level); //Pretty print feedback var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); } feedString += "</ul>"; var output = string.Format("<div><grade>{0}</grade><feedString>{1}</feedString></div>", feedbackGrade.First, feedString); XElement outXML = XElement.Parse(output); //Add this element to chace and return it HttpContext.Current.Cache.Add(key.ToString(), outXML, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return(outXML); }