/// <summary> /// calculates the maximum similarity of the provided source against /// all sources for the given asignment in the reference database /// </summary> /// <param name="student"></param> /// <param name="assignment"></param> /// <param name="source"></param> public void Start(string student, string assignment, string source) { cLogger.DebugFormat("starting with threshold {0}", Threshold); TokenFactory factory = new MutexTokenFactory(); var tokens = factory.GetTokenWrapperListFromSource(source); //LexerHelper.CreateLexerFromSource(source).GetTokenWrappers().ToList(); cLogger.Debug("tokenized source... loading Data Repository"); var repo = Repository.GetRepository(); comparisonModel = new ComparisonModel(tokens, repo.LoadByAssignment(assignment), factory); comparisonModel.Calculate(); var sourceEntityData = new SourceEntityData(student, assignment, tokens.ToStringEnumerable(), source); repo.Store(sourceEntityData, MaximumSimilarity < Threshold); }
/// <summary> /// stores the data /// </summary> /// <param name="data"></param> /// <param name="keepForTests"></param> public void Store(SourceEntityData data, bool keepForTests) { var command = new SQLiteCommand(keepForTests ? referenceConnection : archiveConnection) { CommandText = SQL_INSERT_SET, CommandType = CommandType.Text, Parameters = { new SQLiteParameter("@student", data.StudentIdentifier), new SQLiteParameter("@assignment", data.AssignmentIdentifier), new SQLiteParameter("@sourcecode", data.RawSource), new SQLiteParameter("@tokens", SerializeTokens(data.Tokens)) } }; cLogger.DebugFormat("storing '{0}' by '{1}'", data.AssignmentIdentifier, data.StudentIdentifier); cLogger.DebugFormat("tokens stored: {0}", SerializeTokens(data.Tokens)); command.ExecuteNonQuery(); }