package org.akaza.openclinica.ws.logic; import org.akaza.openclinica.bean.managestudy.SubjectTransferBean; import org.akaza.openclinica.service.subject.SubjectService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; import java.util.List; public abstract class CctsService { protected final Logger logger = LoggerFactory.getLogger(getClass().getName()); private SubjectService subjectService; private String waitBeforeCommit; public void commit(SubjectTransferBean subjectTransferBean) { boolean isSubjectInQueue = isSubjectInQueue(); boolean isSubjectInMain = doesSubjectExit(); if (isSubjectInMain) { // TODO : either return something or throw exception or don't do anything } else if (isSubjectInQueue) { createSubject(subjectTransferBean); } else { createSubjectTransfer(subjectTransferBean); } } public void rollback() { boolean isSubjectInQueue = true; // subjectAlreadyExistInTemporaryLocation(); boolean isSubjectInMain = true; // jectExistInDatabase(); if (isSubjectInMain) { // TODO : remove subject } if (isSubjectInQueue) { // TODO : Remove from Queue } else { // TODO : Do nothing } } public void autoCommit() { List<SubjectTransferBean> subjectTransfers = getAllSubjectsInQueue(); for (SubjectTransferBean subjectTransferBean : subjectTransfers) { if (isSubjectInQueueForMoreThanXSeconds(subjectTransferBean)) { // TODO: 2. Create Subject , StudySubject then save removeSubjectFromQueue(subjectTransferBean); } } logger.debug("The time is : " + new Date()); } public abstract boolean isSubjectInQueue(); public abstract boolean doesSubjectExit(); public abstract void createSubjectTransfer(SubjectTransferBean subjectTransfer); public abstract void createSubject(SubjectTransferBean subjectTransfer); public abstract List<SubjectTransferBean> getAllSubjectsInQueue(); public abstract void removeSubjectFromQueue(SubjectTransferBean subjectTransfer); private boolean isSubjectInQueueForMoreThanXSeconds(SubjectTransferBean subjectTransferBean) { // TODO: 1.Implement Method return true; } public SubjectService getSubjectService() { return subjectService; } public void setSubjectService(SubjectService subjectService) { this.subjectService = subjectService; } public String getWaitBeforeCommit() { return waitBeforeCommit; } public void setWaitBeforeCommit(String waitBeforeCommit) { this.waitBeforeCommit = waitBeforeCommit; } }