use of cn.edu.zju.acm.onlinejudge.bean.Submission in project zoj by licheng.
the class TestSubmitAction method execute.
/**
* SubmitAction.
*
* @param mapping
* action mapping
* @param form
* action form
* @param request
* http servlet request
* @param response
* http servlet response
*
* @return action forward instance
*
* @throws Exception
* any errors happened
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, ContextAdapter context) throws Exception {
if (!this.isLogin(context, true)) {
return this.handleSuccess(mapping, context, "login");
}
boolean isProblemset = context.getRequest().getRequestURI().endsWith("submit.do");
ActionForward forward = this.checkProblemParticipatePermission(mapping, context, isProblemset);
if (forward != null) {
return forward;
}
AbstractContest contest = context.getContest();
Problem problem = context.getProblem();
long languageId = Utility.parseLong(context.getRequest().getParameter("languageId"));
Language language = PersistenceManager.getInstance().getLanguagePersistence().getLanguage(languageId);
if (language == null) {
return this.handleSuccess(mapping, context, "submit");
}
String source = context.getRequest().getParameter("source");
if (source == null || source.length() == 0) {
return this.handleSuccess(mapping, context, "submit");
}
List refrance = PersistenceManager.getInstance().getReferencePersistence().getProblemReferences(problem.getId(), ReferenceType.HEADER);
if (refrance.size() != 0) {
Reference r = (Reference) refrance.get(0);
String percode = new String(r.getContent());
source = percode + "\n" + source;
}
UserProfile user = context.getUserProfile();
if (submitCache != null && submitCache.contains(user.getId())) {
ActionMessages messages = new ActionMessages();
messages.add("message", new ActionMessage("onlinejudge.submit.interval"));
this.saveErrors(context.getRequest(), messages);
context.setAttribute("source", source);
return handleSuccess(mapping, context, "submit");
}
if (contest.isCheckIp()) {
forward = this.checkLastLoginIP(mapping, context, isProblemset);
if (forward != null) {
return forward;
}
}
Submission submission = new Submission();
submission.setContestId(contest.getId());
submission.setLanguage(language);
submission.setProblemId(problem.getId());
submission.setUserProfileId(user.getId());
submission.setContent(source);
submission.setMemoryConsumption(0);
submission.setTimeConsumption(0);
submission.setSubmitDate(new Date());
SubmissionPersistence submissionPersistence = PersistenceManager.getInstance().getSubmissionPersistence();
if (contest.getEndTime() != null && new Date().after(contest.getEndTime())) {
submission.setJudgeReply(JudgeReply.OUT_OF_CONTEST_TIME);
submissionPersistence.createSubmission(submission, user.getId());
} else if (source.getBytes().length > problem.getLimit().getSubmissionLimit() * 1024) {
submission.setContent(source.substring(0, problem.getLimit().getSubmissionLimit() * 1024));
submission.setJudgeReply(JudgeReply.SUBMISSION_LIMIT_EXCEEDED);
submissionPersistence.createSubmission(submission, user.getId());
} else {
Random ran = new Random();
submission.setJudgeReply(ran.nextInt() % 2 == 0 ? JudgeReply.WRONG_ANSWER : JudgeReply.ACCEPTED);
submissionPersistence.createSubmission(submission, user.getId());
JudgeService.getInstance().judge(submission, Priority.NORMAL);
}
context.setAttribute("contestOrder", submission.getContestOrder());
if (submitCache != null) {
submitCache.put(user.getId(), user.getId());
}
return this.handleSuccess(mapping, context, "success");
}
use of cn.edu.zju.acm.onlinejudge.bean.Submission in project zoj by licheng.
the class StatisticsManager method getSubmissions.
public List<Submission> getSubmissions(SubmissionCriteria criteria, long firstId, long lastId, int count) throws PersistenceException {
List<Object> key = new ArrayList<Object>();
key.add(criteria);
key.add(new Long(firstId));
key.add(new Long(lastId));
key.add(new Integer(count));
SubmissionCacheEntry entry;
synchronized (this.submissionCache) {
entry = this.submissionCache.get(key);
if (entry == null) {
JudgingQueueIterator iter = JudgeService.getInstance().getJudgingQueueIterator();
List<Submission> submissions = PersistenceManager.getInstance().getSubmissionPersistence().searchSubmissions(criteria, firstId, lastId, count);
entry = new SubmissionCacheEntry(iter, submissions);
this.submissionCache.put(key, entry);
}
}
return entry.getSubmissions();
}
use of cn.edu.zju.acm.onlinejudge.bean.Submission in project zoj by licheng.
the class JudgeClientUnitTest method testWaitForServer.
@Test
public void testWaitForServer() throws Exception {
mockServer.addReply(MockClient.SAVE_SERVER_ERROR);
for (int i = 0; i < submissions.length + 1; i++) {
mockServer.addReply(MockClient.ACCEPTED);
}
for (int i = 0; i < submissions.length; i++) {
queue.add(submissions[i]);
}
for (int i = 0; i < submissions.length; i++) {
for (; ; ) {
Submission submission = DAOFactory.getSubmissionDAO().getSubmission(i);
if (submission.getJudgeReply() == JudgeReply.ACCEPTED) {
break;
}
Thread.sleep(10);
}
}
assertEquals(0, mockServer.getReplies().size());
}
use of cn.edu.zju.acm.onlinejudge.bean.Submission in project zoj by licheng.
the class JudgeClientUnitTest method testNormal.
@Test
public void testNormal() throws Exception {
for (int i = 0; i < submissions.length + 1; i++) {
mockServer.addReply(MockClient.ACCEPTED);
}
for (int i = 0; i < submissions.length; i++) {
queue.add(submissions[i]);
}
for (int i = 0; i < submissions.length; i++) {
for (; ; ) {
Submission submission = DAOFactory.getSubmissionDAO().getSubmission(i);
if (submission.getJudgeReply() == JudgeReply.ACCEPTED) {
break;
}
Thread.sleep(10);
}
}
assertEquals(0, mockServer.getReplies().size());
}
use of cn.edu.zju.acm.onlinejudge.bean.Submission in project zoj by licheng.
the class JudgeClientUnitTest method setUp.
@Before
public void setUp() throws Exception {
mockServer = new MockClient(true);
queue = new SubmissionQueueReader();
judgeClient = new JudgeClient(queue, new Socket(InetAddress.getLocalHost(), mockServer.getPort()), 3);
judgeClient.start();
submissions = new Submission[10];
for (int i = 0; i < submissions.length; i++) {
submissions[i] = new Submission();
submissions[i].setId(i);
submissions[i].setLanguage(LanguageManager.getLanguage(0));
submissions[i].setProblemId(0);
submissions[i].setContent("test");
DAOFactory.getSubmissionDAO().update(submissions[i]);
}
}
Aggregations