package cn.edu.zju.acm.onlinejudge.judgeservice; import java.util.Hashtable; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import cn.edu.zju.acm.onlinejudge.bean.Limit; import cn.edu.zju.acm.onlinejudge.bean.Problem; import cn.edu.zju.acm.onlinejudge.dao.ProblemDAO; public class MockProblemDAO extends MockDAO implements ProblemDAO { private AtomicLong id = new AtomicLong(); private Map<Long, Problem> problemMap = new Hashtable<Long, Problem>(); public Problem getProblem(long problemId) { return cloneProblem(problemMap.get(problemId)); } public void save(Problem problem) { problem.setId(id.getAndIncrement()); update(problem); } public void update(Problem problem) { problemMap.put(problem.getId(), cloneProblem(problem)); } private Problem cloneProblem(Problem problem) { Problem ret = new Problem(); ret.setId(problem.getId()); ret.setRevision(problem.getRevision()); ret.setLimit(cloneLimit(problem.getLimit())); ret.setChecker(problem.isChecker()); return ret; } private Limit cloneLimit(Limit limit) { Limit ret = new Limit(); ret.setId(limit.getId()); ret.setMemoryLimit(limit.getMemoryLimit()); ret.setOutputLimit(limit.getOutputLimit()); ret.setTimeLimit(limit.getTimeLimit()); return ret; } }