use of org.akaza.openclinica.bean.submit.SectionBean in project OpenClinica by OpenClinica.
the class DataEntryServlet method prevSection.
protected SectionBean prevSection(SectionBean sb, EventCRFBean ecb, DisplayTableOfContentsBean toc, int sbPos) {
SectionBean p = new SectionBean();
ArrayList<SectionBean> sectionBeans = new ArrayList<SectionBean>();
if (toc != null) {
sectionBeans = toc.getSections();
if (sbPos > 0) {
p = sectionBeans.get(sbPos - 1);
}
}
return p != null && p.getId() > 0 ? p : new SectionBean();
}
use of org.akaza.openclinica.bean.submit.SectionBean in project OpenClinica by OpenClinica.
the class OpenRosaXmlGenerator method buildInstance.
// method
/**
* @param model
* @param crfVersion
* @param crfSections
* @return
* @throws Exception
*/
private String buildInstance(Model model, FormLayoutBean formLayout, CRFVersionBean crfVersion, ArrayList<SectionBean> crfSections) throws Exception {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder build = docFactory.newDocumentBuilder();
Document doc = build.newDocument();
Element crfElement = doc.createElement(formLayout.getOid());
crfElement.setAttribute("id", formLayout.getOid());
doc.appendChild(crfElement);
crfElement.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:jr", "http://openrosa.org/javarosa");
for (SectionBean section : crfSections) {
Element sectionSubTitle = doc.createElement("SECTION_" + section.getId() + ".SUBTITLE");
Element sectionInstructions = doc.createElement("SECTION_" + section.getId() + ".INSTRUCTIONS");
Element sectionElm = doc.createElement("SECTION_" + section.getLabel().replaceAll("\\W", "_"));
crfElement.appendChild(sectionSubTitle);
crfElement.appendChild(sectionInstructions);
crfElement.appendChild(sectionElm);
}
ArrayList<ItemGroupBean> itemGroupBeans = getItemGroupBeansByFormLayout(formLayout);
for (ItemGroupBean itemGroupBean : itemGroupBeans) {
ItemGroupMetadataBean itemGroupMetadataBean = getItemGroupMetadataByGroup(itemGroupBean, crfVersion);
String repeatGroupMin = itemGroupMetadataBean.getRepeatNum().toString();
Boolean isrepeating = itemGroupMetadataBean.isRepeatingGroup();
Element groupElement = doc.createElement(itemGroupBean.getOid());
if (isrepeating) {
groupElement.setTextContent(repeatGroupMin);
groupElement.setAttribute("jr:template", "");
Element hiddenOrdinalItem = doc.createElement("OC.REPEAT_ORDINAL");
groupElement.appendChild(hiddenOrdinalItem);
}
crfElement.appendChild(groupElement);
idao = new ItemDAO(dataSource);
ArrayList<ItemBean> items = (ArrayList<ItemBean>) idao.findAllItemsByGroupIdOrdered(itemGroupBean.getId(), crfVersion.getId());
for (ItemBean item : items) {
ItemFormMetadataBean itemMetaData = getItemFormMetadata(item, crfVersion);
if (itemMetaData.getHeader() != null && !itemMetaData.getHeader().equals("")) {
Element header = doc.createElement(item.getOid() + ".HEADER");
groupElement.appendChild(header);
}
if (itemMetaData.getHeader() != null && !itemMetaData.getSubHeader().equals("")) {
Element subHeader = doc.createElement(item.getOid() + ".SUBHEADER");
groupElement.appendChild(subHeader);
}
Element question = doc.createElement(item.getOid());
groupElement.appendChild(question);
}
// end of item
}
// end of group
// add meta
Element meta = doc.createElement("meta");
// add instanceId
Element instanceId = doc.createElement("instanceID");
meta.appendChild(instanceId);
crfElement.appendChild(meta);
TransformerFactory transformFactory = TransformerFactory.newInstance();
Transformer transformer = transformFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
return writer.toString();
}
use of org.akaza.openclinica.bean.submit.SectionBean in project OpenClinica by OpenClinica.
the class OpenRosaXmlGenerator method getSectionBean.
private SectionBean getSectionBean(Integer ID) {
sdao = new SectionDAO(dataSource);
SectionBean sBean = (SectionBean) sdao.findByPK(ID);
return sBean;
}
use of org.akaza.openclinica.bean.submit.SectionBean in project OpenClinica by OpenClinica.
the class OpenRosaXmlGenerator method mapBeansToDTO.
/**
* @param html
* @param crf
* @param crfVersion
* @param crfSections
* @return
* @throws Exception
*/
private Integer mapBeansToDTO(Html html, CRFBean crf, CRFVersionBean crfVersion, ArrayList<SectionBean> crfSections) throws Exception {
boolean expressionEvaluate = true;
int sectionCount = 0;
ItemFormMetadataBean itemFormMetadataBean = null;
Body body = html.getBody();
ArrayList<Group> allSections = new ArrayList<Group>();
ArrayList<Bind> bindList = new ArrayList<Bind>();
WidgetFactory factory = new WidgetFactory(crfVersion);
html.getHead().setTitle(crf.getName());
for (SectionBean section : crfSections) {
ArrayList<Group> groups = new ArrayList<Group>();
Group singleSection = new Group();
singleSection.setUsercontrol(new ArrayList<UserControl>());
String ref = "/" + crfVersion.getOid() + "/" + "SECTION_" + section.getLabel().replaceAll("\\W", "_");
singleSection.setRef(ref);
String sectionExpression = null;
igdao = new ItemGroupDAO(dataSource);
ArrayList<ItemGroupBean> groupBeans = (ArrayList<ItemGroupBean>) igdao.findGroupBySectionId(section.getId());
int count = 0;
if (groupBeans.size() > 0) {
for (ItemGroupBean groupBean : groupBeans) {
ExpressionExpressionEvaluate eev = getSkipPattern(null, groupBean);
String expr = eev.getExpression();
expressionEvaluate = eev.isExpressionEvaluate();
if (expr != null) {
if (sectionExpression != null) {
sectionExpression = sectionExpression + " and " + expr;
count++;
} else {
sectionExpression = expr;
count++;
}
}
}
if (sectionExpression != null && groupBeans.size() == count) {
sectionExpression = getFullExpressionToParse(sectionExpression, crfVersion, expressionEvaluate);
} else {
sectionExpression = null;
}
setSectionWidget(section, crfVersion, sectionExpression, bindList, factory, singleSection);
HashMap<String, Object> groupMap = null;
boolean isGroupRepeating = false;
Group group = null;
Repeat repeat = null;
idao = new ItemDAO(dataSource);
ArrayList<ItemBean> items = (ArrayList<ItemBean>) idao.findAllBySectionIdOrderedByItemFormMetadataOrdinal(section.getId());
Integer itemGroupId = 0;
for (ItemBean item : items) {
ItemGroupBean itemGroupBean = getItemGroupBeanByItemId(item.getId());
if (itemGroupId != itemGroupBean.getId()) {
groupMap = getGroupInfo(itemGroupBean, crfVersion, section, factory, bindList);
isGroupRepeating = (Boolean) groupMap.get("isGroupRepeating");
group = (Group) groupMap.get("group");
repeat = (Repeat) groupMap.get("repeat");
}
itemFormMetadataBean = getItemFormMetadata(item, crfVersion);
int responseTypeId = itemFormMetadataBean.getResponseSet().getResponseTypeId();
boolean isItemRequired = itemFormMetadataBean.isRequired();
String responseLayout = itemFormMetadataBean.getResponseLayout();
String itemExpression = null;
ExpressionExpressionEvaluate eev = getSkipPattern(item, itemGroupBean);
itemExpression = eev.getExpression();
expressionEvaluate = eev.isExpressionEvaluate();
if (itemExpression != null)
itemExpression = getFullExpressionToParse(itemExpression, crfVersion, expressionEvaluate);
// Add the Item Header
setHeaderWidget(item, itemFormMetadataBean, itemGroupBean, bindList, factory, isGroupRepeating, repeat, group, itemExpression);
// Add the Item SubHeader
setSubHeaderWidget(item, itemFormMetadataBean, itemGroupBean, bindList, factory, isGroupRepeating, repeat, group, itemExpression);
// Add the Item itself
setItemWidget(item, responseTypeId, itemFormMetadataBean, itemGroupBean, bindList, factory, isGroupRepeating, repeat, group, isItemRequired, responseLayout, itemExpression);
if (itemGroupId != itemGroupBean.getId()) {
groups.add(group);
itemGroupId = itemGroupBean.getId();
}
}
// end of item loop
singleSection.setGroup(groups);
allSections.add(singleSection);
}
// end of groups per section if exist
sectionCount = allSections.size();
}
// end of section loop
body.setGroup(allSections);
html.getHead().getModel().setBind(bindList);
return sectionCount;
}
use of org.akaza.openclinica.bean.submit.SectionBean in project OpenClinica by OpenClinica.
the class CreateFiltersTwoServlet method processRequest.
// < ResourceBundle restext,resword,respage,resexception;
@Override
public void processRequest() throws Exception {
// we can't get to here without an action:
// begin--takes us to specify parameters,
// where the user will select CRF, then section,
// then parameters of the section: a little tricky
// to do entirely with javascript, but can be done.
// possible to set up the CRF-section relationship,
// and then have a screen 3.5 with the parameters?
// criteria--takes us to specify criteria, that is,
// to specify and, or, not and, etc. here we'll take the
// list we just generated online and generate a chain
// of filterobjectbeans, which will in turn,
// generate the SQL add on for the dataset.
String action = request.getParameter("action");
StudyBean studyWithEventDefs = currentStudy;
if (currentStudy.getParentStudyId() > 0) {
studyWithEventDefs = new StudyBean();
studyWithEventDefs.setId(currentStudy.getParentStudyId());
}
if (StringUtil.isBlank(action)) {
// throw an error
} else if ("begin".equalsIgnoreCase(action)) {
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
HashMap events = sedao.findCRFsByStudy(studyWithEventDefs);
// if events are empty -- resend to first filter page with message
if (events.isEmpty()) {
addPageMessage(respage.getString("no_CRF_assigned_pick_another"));
FormProcessor fp = new FormProcessor(request);
FilterDAO fdao = new FilterDAO(sm.getDataSource());
EntityBeanTable table = fp.getEntityBeanTable();
ArrayList filters = (ArrayList) fdao.findAll();
ArrayList filterRows = FilterRow.generateRowsFromBeans(filters);
String[] columns = { resword.getString("filter_name"), resword.getString("description"), resword.getString("created_by"), resword.getString("created_date"), resword.getString("status"), resword.getString("actions") };
table.setColumns(new ArrayList(Arrays.asList(columns)));
table.hideColumnLink(5);
table.addLink(resword.getString("create_new_filter"), "CreateFiltersOne?action=begin");
table.setQuery("CreateFiltersOne", new HashMap());
table.setRows(filterRows);
table.computeDisplay();
request.setAttribute("table", table);
forwardPage(Page.CREATE_FILTER_SCREEN_1);
} else {
// else, send to the following page:
request.setAttribute("events", events);
forwardPage(Page.CREATE_FILTER_SCREEN_3);
}
} else if ("crfselected".equalsIgnoreCase(action)) {
// get the crf id, return to a new page with sections
// and parameters attached, tbh
FormProcessor fp = new FormProcessor(request);
HashMap errors = new HashMap();
int crfId = fp.getInt("crfId");
if (crfId > 0) {
CRFVersionDAO cvDAO = new CRFVersionDAO(sm.getDataSource());
CRFDAO cDAO = new CRFDAO(sm.getDataSource());
SectionDAO secDAO = new SectionDAO(sm.getDataSource());
Collection sections = secDAO.findByVersionId(crfId);
CRFVersionBean cvBean = (CRFVersionBean) cvDAO.findByPK(crfId);
CRFBean cBean = (CRFBean) cDAO.findByPK(cvBean.getCrfId());
request.setAttribute("sections", sections);
session.setAttribute("cBean", cBean);
// for further pages,
session.setAttribute("cvBean", cvBean);
// tbh
forwardPage(Page.CREATE_FILTER_SCREEN_3_1);
} else {
addPageMessage(respage.getString("select_a_CRF_before_picking"));
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
HashMap events = sedao.findCRFsByStudy(studyWithEventDefs);
request.setAttribute("events", events);
forwardPage(Page.CREATE_FILTER_SCREEN_3);
}
} else if ("sectionselected".equalsIgnoreCase(action)) {
// TODO set the crf and the section into session,
// allow for the user to go back and forth,
// set up the questions to be picked,
// allow the user to move on to create_filter_screen_4
FormProcessor fp = new FormProcessor(request);
int sectionId = fp.getInt("sectionId");
if (sectionId > 0) {
SectionDAO secDAO = new SectionDAO(sm.getDataSource());
SectionBean secBean = (SectionBean) secDAO.findByPK(sectionId);
session.setAttribute("secBean", secBean);
ItemFormMetadataDAO ifmDAO = new ItemFormMetadataDAO(sm.getDataSource());
Collection metadatas = ifmDAO.findAllBySectionId(sectionId);
if (metadatas.size() > 0) {
request.setAttribute("metadatas", metadatas);
forwardPage(Page.CREATE_FILTER_SCREEN_3_2);
} else {
CRFVersionBean cvBean = (CRFVersionBean) session.getAttribute("cvBean");
addPageMessage(respage.getString("section_not_have_questions_select_another"));
// SectionDAO secDAO = new SectionDAO(sm.getDataSource());
Collection sections = secDAO.findByVersionId(cvBean.getId());
request.setAttribute("sections", sections);
forwardPage(Page.CREATE_FILTER_SCREEN_3_1);
}
} else {
CRFVersionBean cvBean = (CRFVersionBean) session.getAttribute("cvBean");
addPageMessage(respage.getString("select_section_before_select_question"));
SectionDAO secDAO = new SectionDAO(sm.getDataSource());
Collection sections = secDAO.findByVersionId(cvBean.getId());
request.setAttribute("sections", sections);
forwardPage(Page.CREATE_FILTER_SCREEN_3_1);
}
} else if ("questionsselected".equalsIgnoreCase(action)) {
ArrayList alist = this.extractIdsFromForm();
// and send the user to create_filter_screen_4
if (alist.size() > 0) {
ItemFormMetadataDAO ifmDAO = new ItemFormMetadataDAO(sm.getDataSource());
Collection questions = ifmDAO.findByMultiplePKs(alist);
session.setAttribute("questions", questions);
forwardPage(Page.CREATE_FILTER_SCREEN_4);
} else {
SectionBean secBean = (SectionBean) session.getAttribute("secBean");
addPageMessage(respage.getString("select_questions_before_set_parameters"));
ItemFormMetadataDAO ifmDAO = new ItemFormMetadataDAO(sm.getDataSource());
Collection metadatas = ifmDAO.findAllBySectionId(secBean.getId());
request.setAttribute("metadatas", metadatas);
forwardPage(Page.CREATE_FILTER_SCREEN_3_2);
}
} else if ("validatecriteria".equalsIgnoreCase(action)) {
// TODO look at the criteria and create a list of filterobjectdata
// beans, so that we can create the SQL later on in
// the process.
// also, throw the user back to the process or throw
// them forward into the createServletThree process
FormProcessor fp = new FormProcessor(request);
String logical = fp.getString("logical");
ArrayList questions = (ArrayList) session.getAttribute("questions");
ArrayList filterobjects = new ArrayList();
// (ArrayList)session.getAttribute("filterobjects");
Iterator q_it = questions.iterator();
int arrCnt = 0;
while (q_it.hasNext()) {
ItemFormMetadataBean ifmBean = (ItemFormMetadataBean) q_it.next();
String opString = "operator:" + ifmBean.getId();
String valString = "value:" + ifmBean.getId();
String remString = "remove:" + ifmBean.getId();
if ("remove".equals(fp.getString(remString))) {
logger.info("found the string: " + remString);
// TODO remove the question from from the list,
// redirect to that page again????? <--maybe not?
// questions.remove(arrCnt);
// shouldn't have to remove the above, just do nothing
arrCnt++;
} else {
String operator = fp.getString(opString);
String value = fp.getString(valString);
FilterObjectBean fob = new FilterObjectBean();
fob.setItemId(ifmBean.getId());
fob.setItemName(ifmBean.getHeader() + " " + ifmBean.getLeftItemText() + " " + ifmBean.getRightItemText());
// case operator:
if ("equal to".equalsIgnoreCase(operator)) {
fob.setOperand("=");
} else if ("greater than".equalsIgnoreCase(operator)) {
fob.setOperand(">");
} else if ("less than".equalsIgnoreCase(operator)) {
fob.setOperand("<");
} else if ("greater than or equal".equalsIgnoreCase(operator)) {
fob.setOperand(">=");
} else if ("less than or equal".equalsIgnoreCase(operator)) {
fob.setOperand("<=");
} else if ("like".equalsIgnoreCase(operator)) {
fob.setOperand(" like ");
} else if ("not like".equalsIgnoreCase(operator)) {
fob.setOperand(" not like ");
} else {
fob.setOperand("!=");
}
fob.setValue(value);
filterobjects.add(fob);
}
// end else
//
}
// end while
session.setAttribute("questions", questions);
// TODO where does the connector come into play?
// session.setAttribute("filterobjects",filterobjects);
FilterDAO fDAO = new FilterDAO(sm.getDataSource());
String newSQL = (String) session.getAttribute("newSQL");
ArrayList newExp = (ArrayList) session.getAttribute("newExp");
// human readable explanation
String newNewSQL = fDAO.genSQLStatement(newSQL, logical, filterobjects);
ArrayList newNewExp = fDAO.genExplanation(newExp, logical, filterobjects);
if (arrCnt == questions.size()) {
newNewSQL = newSQL;
newNewExp = newExp;
// don't change anything, if we've removed everything from this
// list
}
logger.info("new SQL Generated: " + newNewSQL);
String sub = fp.getString("submit");
if ("Specify Filter Metadata".equals(sub)) {
// add new params, create the filter object,
// and go to create metadata
FilterBean fb = new FilterBean();
fb.setSQLStatement(newNewSQL + ")");
// adding parens here to finish off other
// statement--might add first part of statement here
// for legibility's sake
// tbh 06-02-2005
session.removeAttribute("newSQL");
// end of the road
session.setAttribute("newFilter", fb);
request.setAttribute("statuses", getStatuses());
forwardPage(Page.CREATE_FILTER_SCREEN_5);
} else {
// replace the 'old' sql with the new sql gathered from the
// session
session.setAttribute("newSQL", newNewSQL);
session.setAttribute("newExp", newNewExp);
// add new params, and go back
StudyEventDAO sedao = new StudyEventDAO(sm.getDataSource());
HashMap events = sedao.findCRFsByStudy(currentStudy);
//
request.setAttribute("events", events);
forwardPage(Page.CREATE_FILTER_SCREEN_3);
}
}
}
Aggregations