package org.akaza.openclinica.control.submit;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.akaza.openclinica.bean.core.DiscrepancyNoteType;
import org.akaza.openclinica.bean.core.ResolutionStatus;
import org.akaza.openclinica.bean.login.UserAccountBean;
import org.akaza.openclinica.bean.managestudy.DiscrepancyNoteBean;
import org.akaza.openclinica.bean.managestudy.StudyBean;
import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean;
import org.akaza.openclinica.bean.managestudy.StudySubjectBean;
import org.akaza.openclinica.control.AbstractTableFactory;
import org.akaza.openclinica.control.DefaultActionsEditor;
import org.akaza.openclinica.control.DropdownFilter;
import org.akaza.openclinica.dao.admin.CRFDAO;
import org.akaza.openclinica.dao.hibernate.AuditUserLoginDao;
import org.akaza.openclinica.dao.login.UserAccountDAO;
import org.akaza.openclinica.dao.managestudy.DiscrepancyNoteDAO;
import org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO;
import org.akaza.openclinica.dao.managestudy.ListNotesFilter;
import org.akaza.openclinica.dao.managestudy.ListNotesSort;
import org.akaza.openclinica.dao.managestudy.StudyDAO;
import org.akaza.openclinica.dao.managestudy.StudyEventDAO;
import org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO;
import org.akaza.openclinica.dao.managestudy.StudySubjectDAO;
import org.akaza.openclinica.dao.submit.CRFVersionDAO;
import org.akaza.openclinica.dao.submit.EventCRFDAO;
import org.akaza.openclinica.dao.submit.ItemDAO;
import org.akaza.openclinica.dao.submit.ItemDataDAO;
import org.akaza.openclinica.dao.submit.SubjectDAO;
import org.akaza.openclinica.i18n.util.ResourceBundleProvider;
import org.akaza.openclinica.service.DiscrepancyNotesSummary;
import org.akaza.openclinica.service.managestudy.ViewNotesFilterCriteria;
import org.akaza.openclinica.service.managestudy.ViewNotesService;
import org.akaza.openclinica.service.managestudy.ViewNotesSortCriteria;
import org.jmesa.core.filter.FilterMatcher;
import org.jmesa.facade.TableFacade;
import org.jmesa.limit.Filter;
import org.jmesa.limit.FilterSet;
import org.jmesa.limit.Limit;
import org.jmesa.limit.Sort;
import org.jmesa.limit.SortSet;
import org.jmesa.view.component.Row;
import org.jmesa.view.editor.CellEditor;
import org.jmesa.view.editor.DateCellEditor;
import org.jmesa.view.html.HtmlBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ListNotesTableFactory extends AbstractTableFactory {
private static final Logger LOG = LoggerFactory.getLogger(ListNotesTableFactory.class.getName());
private AuditUserLoginDao auditUserLoginDao;
private StudySubjectDAO studySubjectDao;
private UserAccountDAO userAccountDao;
private DiscrepancyNoteDAO discrepancyNoteDao;
private StudyDAO studyDao;
private SubjectDAO subjectDao;
private CRFVersionDAO crfVersionDao;
private CRFDAO crfDao;
private StudyEventDAO studyEventDao;
private StudyEventDefinitionDAO studyEventDefinitionDao;
private EventDefinitionCRFDAO eventDefinitionCRFDao;
private ItemDataDAO itemDataDao;
private ItemDAO itemDao;
private EventCRFDAO eventCRFDao;
private StudyBean currentStudy;
private ResourceBundle resword;
private ResourceBundle resformat;
private List<DiscrepancyNoteBean> allNotes = new ArrayList<DiscrepancyNoteBean>();
private ArrayList<StudyEventDefinitionBean> studyEventDefinitions;
private String module;
private Integer resolutionStatus;
private Integer discNoteType;
private Boolean studyHasDiscNotes = new Boolean(false);
private ViewNotesService viewNotesService;
private final boolean showMoreLink;
private DiscrepancyNotesSummary notesSummary;
private final TypeDroplistFilterEditor discrepancyNoteTypeDropdown = new TypeDroplistFilterEditor();
private final ResolutionStatusDroplistFilterEditor resolutionStatusDropdown = new ResolutionStatusDroplistFilterEditor();
public ListNotesTableFactory(boolean showMoreLink){
this.showMoreLink = showMoreLink;
}
@Override
protected String getTableName() {
return "listNotes";
}
@Override
protected void configureColumns(TableFacade tableFacade, Locale locale) {
tableFacade.setColumnProperties("studySubject.label", "discrepancyNoteBean.disType",
"discrepancyNoteBean.resolutionStatus", "siteId",
"discrepancyNoteBean.createdDate",
"discrepancyNoteBean.updatedDate", "age", "days", "eventName",
"eventStartDate", "crfName","crfStatus", "entityName", "entityValue", "discrepancyNoteBean.entityType",
"discrepancyNoteBean.description", "discrepancyNoteBean.detailedNotes",
"numberOfNotes", "discrepancyNoteBean.user",
"discrepancyNoteBean.owner", "actions");
Row row = tableFacade.getTable().getRow();
configureColumn(row.getColumn("studySubject.label"), resword.getString("study_subject_ID"), null, null, true, true);
configureColumn(row.getColumn("siteId"), resword.getString("site_id"), null, null, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.createdDate"), resword.getString("date_created"), new DateCellEditor(getDateFormat()), null, true,
true);
configureColumn(row.getColumn("discrepancyNoteBean.updatedDate"), resword.getString("date_updated"), new DateCellEditor(getDateFormat()), null, true,
false);
configureColumn(row.getColumn("eventStartDate"), resword.getString("event_date"), new DateCellEditor(getDateFormat()), null, false, false);
configureColumn(row.getColumn("eventName"), resword.getString("event_name"), null, null, true, false);
configureColumn(row.getColumn("crfName"), resword.getString("CRF"), null, null, true, false);
configureColumn(row.getColumn("crfStatus"), resword.getString("CRF_status"), null, null, false, false);
configureColumn(row.getColumn("entityName"), resword.getString("entity_name"), new EntityNameCellEditor(), null, true, false);
configureColumn(row.getColumn("entityValue"), resword.getString("entity_value"), null, null, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.description"), resword.getString("description"), null, null, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.detailedNotes"), resword.getString("detailed_notes"), null, null, false, false);
configureColumn(row.getColumn("numberOfNotes"), resword.getString("of_notes"), null, null, false, false);
configureColumn(row.getColumn("discrepancyNoteBean.user"), resword.getString("assigned_user"), new AssignedUserCellEditor(), null, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.resolutionStatus"), resword.getString("resolution_status"), new ResolutionStatusCellEditor(),
resolutionStatusDropdown, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.disType"), resword.getString("type"), new DiscrepancyNoteTypeCellEditor(),
discrepancyNoteTypeDropdown, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.entityType"), resword.getString("entity_type"), null, null, true, false);
configureColumn(row.getColumn("discrepancyNoteBean.owner"), resword.getString("owner"), new OwnerCellEditor(), null, false, false);
String actionsHeader = resword.getString("actions") + " ";
configureColumn(row.getColumn("actions"), actionsHeader, new ActionsCellEditor(), new DefaultActionsEditor(locale), true, false);
configureColumn(row.getColumn("age"), resword.getString("days_open"), null, null);
configureColumn(row.getColumn("days"), resword.getString("days_since_updated"), null, null);
}
@Override
public void configureTableFacadePostColumnConfiguration(TableFacade tableFacade) {
ListNotesTableToolbar toolbar = new ListNotesTableToolbar(showMoreLink);
toolbar.setStudyHasDiscNotes(studyHasDiscNotes);
toolbar.setDiscNoteType(discNoteType);
toolbar.setResolutionStatus(resolutionStatus);
toolbar.setModule(module);
toolbar.setResword(resword);
Limit limit = tableFacade.getLimit();
toolbar.setFilterSet(limit.getFilterSet());
toolbar.setSortSet(limit.getSortSet());
tableFacade.setToolbar(toolbar);
}
public List<DiscrepancyNoteBean> findAllNotes(TableFacade tableFacade) {
Limit limit = tableFacade.getLimit();
limit.setRowSelect(null);
ViewNotesFilterCriteria filter = ViewNotesFilterCriteria.buildFilterCriteria(
limit,
getDateFormat(),
discrepancyNoteTypeDropdown.getDecoder(),
resolutionStatusDropdown.getDecoder());
List<DiscrepancyNoteBean> items = getViewNotesService().listNotes(
getCurrentStudy(),
filter,
ViewNotesSortCriteria.buildFilterCriteria(limit.getSortSet()));
return items;
}
@Override
public void setDataAndLimitVariables(TableFacade tableFacade) {
// initialize i18n
resword = ResourceBundleProvider.getWordsBundle(getLocale());
resformat = ResourceBundleProvider.getFormatBundle(getLocale());
int parentStudyId=0;
Limit limit = tableFacade.getLimit();
if (!limit.isComplete()) {
parentStudyId = currentStudy.getId();
//Build row count of various DN types
int totalRows = getDiscrepancyNoteDao().getSubjectDNCountWithFilter(getListNoteFilter(limit), parentStudyId);
totalRows += getDiscrepancyNoteDao().getStudySubjectDNCountWithFilter(getListNoteFilter(limit), parentStudyId);
totalRows += getDiscrepancyNoteDao().getStudyEventDNCountWithFilter(getListNoteFilter(limit), parentStudyId);
totalRows += getDiscrepancyNoteDao().getEventCrfDNCountWithFilter(getListNoteFilter(limit), parentStudyId);
totalRows += getDiscrepancyNoteDao().getItemDataDNCountWithFilter(getListNoteFilter(limit), parentStudyId);
tableFacade.setTotalRows(totalRows);
}
ViewNotesFilterCriteria filter = ViewNotesFilterCriteria.buildFilterCriteria(limit, getDateFormat(),
discrepancyNoteTypeDropdown.getDecoder(), resolutionStatusDropdown.getDecoder());
notesSummary = getViewNotesService().calculateNotesSummary(getCurrentStudy(), filter);
int pageSize = limit.getRowSelect().getMaxRows();
int firstRecordShown = (limit.getRowSelect().getPage() - 1) * pageSize;
if (firstRecordShown > notesSummary.getTotal() && notesSummary.getTotal()!=0) { // The page selected goes beyond the dataset size
// Move to the last page
limit.getRowSelect().setPage((int) Math.ceil((double) notesSummary.getTotal() / pageSize));
filter = ViewNotesFilterCriteria.buildFilterCriteria(limit, getDateFormat(),
discrepancyNoteTypeDropdown.getDecoder(), resolutionStatusDropdown.getDecoder());
}
List<DiscrepancyNoteBean> items = getViewNotesService().listNotes(getCurrentStudy(), filter,
ViewNotesSortCriteria.buildFilterCriteria(limit.getSortSet()));
this.setAllNotes(items);
Collection<HashMap<Object, Object>> theItems = new ArrayList<HashMap<Object, Object>>();
for (DiscrepancyNoteBean discrepancyNoteBean : items) {
HashMap<Object, Object> h = new HashMap<Object, Object>();
h.put("studySubject", discrepancyNoteBean.getStudySub());
h.put("studySubject.label", discrepancyNoteBean.getStudySub().getLabel());
h.put("discrepancyNoteBean.disType", discrepancyNoteBean.getDisType());
h.put("discrepancyNoteBean.resolutionStatus", discrepancyNoteBean.getResStatus());
h.put("age", discrepancyNoteBean.getAge());
h.put("days", discrepancyNoteBean.getDays());
h.put("siteId", discrepancyNoteBean.getSiteId());
h.put("discrepancyNoteBean", discrepancyNoteBean);
h.put("discrepancyNoteBean.createdDate", discrepancyNoteBean.getCreatedDate());
h.put("discrepancyNoteBean.updatedDate", discrepancyNoteBean.getUpdatedDate());
h.put("eventName", discrepancyNoteBean.getEventName());
h.put("eventStartDate", discrepancyNoteBean.getEventStart());
h.put("crfName", discrepancyNoteBean.getCrfName());
h.put("crfStatus", discrepancyNoteBean.getCrfStatus());
h.put("entityName", discrepancyNoteBean.getEntityName());
h.put("entityValue", discrepancyNoteBean.getEntityValue());
h.put("discrepancyNoteBean", discrepancyNoteBean);
h.put("discrepancyNoteBean.description", discrepancyNoteBean.getDescription());
h.put("discrepancyNoteBean.detailedNotes", discrepancyNoteBean.getDetailedNotes());
h.put("numberOfNotes", discrepancyNoteBean.getNumChildren());
h.put("discrepancyNoteBean.user", discrepancyNoteBean.getAssignedUser());
h.put("discrepancyNoteBean.entityType", discrepancyNoteBean.getEntityType());
h.put("discrepancyNoteBean.owner", discrepancyNoteBean.getOwner());
theItems.add(h);
setStudyHasDiscNotes(true);
}
tableFacade.setItems(theItems);
}
@Override
public TableFacade getTableFacadeImpl(HttpServletRequest request, HttpServletResponse response) {
TableFacade facade = super.getTableFacadeImpl(request, response);
facade.autoFilterAndSort(false); // Filtering and sorting performed on the DB layer
return facade;
}
/**
* A very custom way to filter the items. The AuditUserLoginFilter acts as a command for the Hibernate criteria object. Take the Limit information and
* filter the rows.
*
* @param limit
* The Limit to use.
*/
public ListNotesFilter getListNoteFilter(Limit limit) {
ListNotesFilter listNotesFilter = new ListNotesFilter();
FilterSet filterSet = limit.getFilterSet();
Collection<Filter> filters = filterSet.getFilters();
for (Filter filter : filters) {
String property = filter.getProperty();
String value = filter.getValue();
//Checking if the given date format is valid
if("discrepancyNoteBean.createdDate".equalsIgnoreCase(property)
|| "discrepancyNoteBean.updatedDate".equalsIgnoreCase(property)){
try{
String date = formatDate(new Date(value));
value = date;
}catch(Exception ex){
value = "01-Jan-1700";
}
}else if("discrepancyNoteBean.disType".equalsIgnoreCase(property)) {
ResourceBundle reterm = ResourceBundleProvider.getTermsBundle();
if(reterm.getString("Query_and_Failed_Validation_Check").equals(value)) {
value = 31 + "";
} else {
value = DiscrepancyNoteType.getByName(value).getId()+"";
}
}else if("discrepancyNoteBean.resolutionStatus".equalsIgnoreCase(property)) {
ResourceBundle reterm = ResourceBundleProvider.getTermsBundle();
if(reterm.getString("New_and_Updated").equalsIgnoreCase(value)){
value = 21 + "";
} else {
value = ResolutionStatus.getByName(value).getId()+"";
}
}
//
listNotesFilter.addFilter(property, value);
}
return listNotesFilter;
}
/**
* A very custom way to sort the items. The AuditUserLoginSort acts as a command for the Hibernate criteria object. Take the Limit information and sort the
* rows.
*
* @param limit
* The Limit to use.
*/
protected ListNotesSort getListSubjectSort(Limit limit) {
ListNotesSort listNotesSort = new ListNotesSort();
SortSet sortSet = limit.getSortSet();
Collection<Sort> sorts = sortSet.getSorts();
for (Sort sort : sorts) {
String property = sort.getProperty();
String order = sort.getOrder().toParam();
listNotesSort.addSort(property, order);
}
return listNotesSort;
}
public AuditUserLoginDao getAuditUserLoginDao() {
return auditUserLoginDao;
}
public void setAuditUserLoginDao(AuditUserLoginDao auditUserLoginDao) {
this.auditUserLoginDao = auditUserLoginDao;
}
private class ResolutionStatusDroplistFilterEditor extends DropdownFilter {
public ResolutionStatusDroplistFilterEditor() {
ResourceBundle reterm = ResourceBundleProvider.getTermsBundle();
for (ResolutionStatus status : ResolutionStatus.list) {
this.addOption(Integer.toString(status.getId()), status.getName());
}
this.addOption("1,2", reterm.getString("New_and_Updated"));
}
}
private class TypeDroplistFilterEditor extends DropdownFilter {
public TypeDroplistFilterEditor() {
ResourceBundle reterm = ResourceBundleProvider.getTermsBundle();
for (DiscrepancyNoteType type : DiscrepancyNoteType.list) {
this.addOption(Integer.toString(type.getId()), type.getName());
}
this.addOption("1,3", reterm.getString("Query_and_Failed_Validation_Check"));
}
}
private class ResolutionStatusCellEditor implements CellEditor {
@Override
@SuppressWarnings("unchecked")
public Object getValue(Object item, String property, int rowcount) {
String value = "";
ResolutionStatus status = (ResolutionStatus) ((HashMap<Object, Object>) item).get("discrepancyNoteBean.resolutionStatus");
if (status != null) {
value = "<img src=\""+status.getIconFilePath() +"\" border=\"0\" align=\"left\"> " + status.getName() ;
}
return value;
}
}
private class DiscrepancyNoteTypeCellEditor implements CellEditor {
@Override
@SuppressWarnings("unchecked")
public Object getValue(Object item, String property, int rowcount) {
String value = "";
DiscrepancyNoteType type = (DiscrepancyNoteType) ((HashMap<Object, Object>) item).get("discrepancyNoteBean.disType");
if (type != null) {
value = type.getName();
}
return value;
}
}
private class OwnerCellEditor implements CellEditor {
@Override
@SuppressWarnings("unchecked")
public Object getValue(Object item, String property, int rowcount) {
String value = "";
UserAccountBean user = (UserAccountBean) ((HashMap<Object, Object>) item).get("discrepancyNoteBean.owner");
if (user != null) {
value = user.getName();
}
return value;
}
}
private class AssignedUserCellEditor implements CellEditor {
@Override
@SuppressWarnings("unchecked")
public Object getValue(Object item, String property, int rowcount) {
String value = "";
UserAccountBean user = (UserAccountBean) ((HashMap<Object, Object>) item).get("discrepancyNoteBean.user");
if (user != null) {
value = user.getFirstName() + " " + user.getLastName() + " (" + user.getName() + ")";
}
return value;
}
}
private class EntityNameCellEditor implements CellEditor {
@Override
@SuppressWarnings("rawtypes")
public Object getValue(Object item, String property, int rowcount) {
DiscrepancyNoteBean bean = (DiscrepancyNoteBean) ((Map) item).get("discrepancyNoteBean");
String entityName = "";
if (bean.getEntityType().equals("itemData")) {
entityName = bean.getEntityName();
} else {
try {
entityName = resword.getString(bean.getEntityName());
} catch (MissingResourceException e) {
logger.warn("Missing translation for key '" + bean.getEntityName() + "'", e);
entityName = "###" + bean.getEntityName() + "###";
}
}
return entityName;
}
}
private class ActionsCellEditor implements CellEditor {
@Override
@SuppressWarnings("unchecked")
public Object getValue(Object item, String property, int rowcount) {
String value = "";
DiscrepancyNoteBean dnb = (DiscrepancyNoteBean) ((HashMap<Object, Object>) item).get("discrepancyNoteBean");
HtmlBuilder builder = new HtmlBuilder();
//for "view" as action
//This createNoteURL uses the same method as in ResolveDiscrepancyServlet
String createNoteURL = CreateDiscrepancyNoteServlet.getAddChildURL(dnb, ResolutionStatus.CLOSED, true);
builder.a().href("javascript:openDNWindow('" + createNoteURL + "&viewAction=1" + "');");
builder.close();
builder.img().name("bt_View1").src("images/bt_View_d.gif").border("0").alt(resword.getString("view")).title(resword.getString("view"))
.align("left").append("hspace=\"6\"").close();
builder.aEnd();
if (!getCurrentStudy().getStatus().isLocked()) {
if (dnb.getEntityType() != "eventCrf") {
builder.a().href("ResolveDiscrepancy?noteId=" + dnb.getId());
if (dnb.getEntityType().equals("itemData")) builder.append(" target=\"_blank\" ");
builder.close();
builder.img().name("bt_Reassign1").src("images/bt_Reassign_d.gif").border("0").alt(resword.getString("view_within_crf"))
.title(resword.getString("view_within_crf")).align("left").append("hspace=\"6\"").close();
builder.aEnd();
} else {
if (dnb.getStageId() == 5) {
builder.a().href("ResolveDiscrepancy?noteId=" + dnb.getId());
builder.close();
builder.img().name("bt_Reassign1").src("images/bt_Reassign_d.gif").border("0").alt(resword.getString("view_within_crf"))
.title(resword.getString("view_within_crf")).align("left").append("hspace=\"6\"").close();
builder.aEnd();
}
}
}
StudySubjectBean studySubjectBean = (StudySubjectBean) ((HashMap<Object, Object>) item).get("studySubject");
Integer studySubjectId = studySubjectBean.getId();
if (studySubjectId != null) {
StringBuilder url = new StringBuilder();
url.append(downloadNotesLinkBuilder(studySubjectBean));
value = url.toString();
}
return builder.toString();
}
}
private String downloadNotesLinkBuilder(StudySubjectBean studySubject) {
HtmlBuilder actionLink = new HtmlBuilder();
if (this.isStudyHasDiscNotes()) {
if (this.getResolutionStatus() >= 1 && this.getResolutionStatus() <= 5) {
actionLink.a().href(
"javascript:openDocWindow('ChooseDownloadFormat?subjectId=" + studySubject.getId() + "&discNoteType=" + discNoteType
+ "&resolutionStatus=" + resolutionStatus + "')");
actionLink.img().name("bt_View1").src("images/bt_Download.gif").border("0").alt(resword.getString("download_discrepancy_notes")).title(
resword.getString("download_discrepancy_notes")).append("hspace=\"4\" width=\"24 \" height=\"15\"").end().aEnd();
actionLink.append(" ");
} else {
actionLink.a().href(
"javascript:openDocWindow('ChooseDownloadFormat?subjectId=" + studySubject.getId() + "&discNoteType=" + discNoteType + "&module="
+ module + "')");
actionLink.img().name("bt_View1").src("images/bt_Download.gif").border("0").alt(resword.getString("download_discrepancy_notes")).title(
resword.getString("download_discrepancy_notes")).append("hspace=\"2\" width=\"24 \" height=\"15\"").end().aEnd();
actionLink.append(" ");
}
}
return actionLink.toString();
}
// Ignore the mathing values with filter
public class AgeDaysFilterMatcher implements FilterMatcher {
@Override
public boolean evaluate(Object itemValue, String filterValue) {
return true;
}
}
private String formatDate(Date date) {
String format = resformat.getString("date_format_string");
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
private String getDateFormat() {
return resformat.getString("date_format_string");
}
public StudySubjectDAO getStudySubjectDao() {
return studySubjectDao;
}
public void setStudySubjectDao(StudySubjectDAO studySubjectDao) {
this.studySubjectDao = studySubjectDao;
}
public SubjectDAO getSubjectDao() {
return subjectDao;
}
public void setSubjectDao(SubjectDAO subjectDao) {
this.subjectDao = subjectDao;
}
public StudyDAO getStudyDao() {
return studyDao;
}
public void setStudyDao(StudyDAO studyDao) {
this.studyDao = studyDao;
}
public StudyBean getCurrentStudy() {
return currentStudy;
}
public void setCurrentStudy(StudyBean currentStudy) {
this.currentStudy = currentStudy;
}
public UserAccountDAO getUserAccountDao() {
return userAccountDao;
}
public void setUserAccountDao(UserAccountDAO userAccountDao) {
this.userAccountDao = userAccountDao;
}
public DiscrepancyNoteDAO getDiscrepancyNoteDao() {
return discrepancyNoteDao;
}
public void setDiscrepancyNoteDao(DiscrepancyNoteDAO discrepancyNoteDao) {
this.discrepancyNoteDao = discrepancyNoteDao;
}
public CRFVersionDAO getCrfVersionDao() {
return crfVersionDao;
}
public void setCrfVersionDao(CRFVersionDAO crfVersionDao) {
this.crfVersionDao = crfVersionDao;
}
public CRFDAO getCrfDao() {
return crfDao;
}
public void setCrfDao(CRFDAO crfDao) {
this.crfDao = crfDao;
}
public StudyEventDAO getStudyEventDao() {
return studyEventDao;
}
public void setStudyEventDao(StudyEventDAO studyEventDao) {
this.studyEventDao = studyEventDao;
}
public EventDefinitionCRFDAO getEventDefinitionCRFDao() {
return eventDefinitionCRFDao;
}
public void setEventDefinitionCRFDao(EventDefinitionCRFDAO eventDefinitionCRFDao) {
this.eventDefinitionCRFDao = eventDefinitionCRFDao;
}
public ItemDataDAO getItemDataDao() {
return itemDataDao;
}
public void setItemDataDao(ItemDataDAO itemDataDao) {
this.itemDataDao = itemDataDao;
}
public ItemDAO getItemDao() {
return itemDao;
}
public void setItemDao(ItemDAO itemDao) {
this.itemDao = itemDao;
}
public EventCRFDAO getEventCRFDao() {
return eventCRFDao;
}
public void setEventCRFDao(EventCRFDAO eventCRFDao) {
this.eventCRFDao = eventCRFDao;
}
public StudyEventDefinitionDAO getStudyEventDefinitionDao() {
return studyEventDefinitionDao;
}
public void setStudyEventDefinitionDao(StudyEventDefinitionDAO studyEventDefinitionDao) {
this.studyEventDefinitionDao = studyEventDefinitionDao;
}
public List<DiscrepancyNoteBean> getAllNotes() {
return allNotes;
}
public void setAllNotes(List<DiscrepancyNoteBean> allNotes) {
this.allNotes = allNotes;
}
public String getModule() {
return module;
}
public void setModule(String module) {
this.module = module;
}
public Integer getDiscNoteType() {
return discNoteType;
}
public void setDiscNoteType(Integer discNoteType) {
this.discNoteType = discNoteType;
}
public Boolean isStudyHasDiscNotes() {
return studyHasDiscNotes;
}
public void setStudyHasDiscNotes(Boolean studyHasDiscNotes) {
this.studyHasDiscNotes = studyHasDiscNotes;
}
public Integer getResolutionStatus() {
return resolutionStatus;
}
public void setResolutionStatus(Integer resolutionStatus) {
this.resolutionStatus = resolutionStatus;
}
public ViewNotesService getViewNotesService() {
return viewNotesService;
}
public void setViewNotesService(ViewNotesService viewNotesService) {
this.viewNotesService = viewNotesService;
}
public DiscrepancyNotesSummary getNotesSummary() {
return notesSummary;
}
}