/* * OpenClinica is distributed under the * GNU Lesser General Public License (GNU LGPL). * For details see: http://www.openclinica.org/license * copyright 2003-2011 Akaza Research */ package org.akaza.openclinica.bean.submit; import java.util.ArrayList; import java.util.List; /** * For displaying simple conditional display items. * @author ywang */ public class SCDItemDisplayInfo { private int rowDisplayStatus = SCDRowDisplayStatus.SHOW_UNCHANGABLE.getCode(); //0; /** * String pattern: -ItemID-, e.g. -11-12- */ private String rowSCDShowIDStr = ""; private int rowNum = 1; private int rowFirstColIndex = 0; private int scdShowStatus = SCDShowStatus.SHOW_UNCHANGABLE.getCode(); //0; //private SCDShowStatus scdShowStatus = SCDShowStatus.SHOW_UNCHANGABLE; public static DisplaySectionBean generateSCDDisplayInfo(DisplaySectionBean section, Boolean noValueComparison) { /* rowStatus - * SHOW_UNCHANGABLE: 0; row always display; * SHOW_CHANGABLE 1: current display but changable; * HIDE_CHANGABLE 2: current no display but changable; */ /* * scdShowStatus - * 0: always display; * 1: display but changable; * 2: no display but changable; */ List<DisplayItemWithGroupBean> allItems = section.getDisplayItemGroups(); int rowStartIndex = 0, rowStatus = -1, rowIndex = 1; String ids = ""; if(allItems==null || allItems.size()<1) { return section; } DisplayItemBean dib = allItems.get(0).getSingleItem(); if(dib.getMetadata().getParentId()==0) { if(SCDItemDisplayInfo.isSCDItem(dib)) { int scdShowStatus0 = -1; if(noValueComparison) { //scdShowStatus0 = dib.getNumDiscrepancyNotes() > 0 ? 0 : //dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? 1 : 2; scdShowStatus0 = dib.getNumDiscrepancyNotes() > 0 ? SCDShowStatus.SHOW_UNCHANGABLE.getCode() : dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? SCDShowStatus.SHOW_CHANGABLE.getCode() : SCDShowStatus.HIDE_CHANGABLE.getCode(); } else { //scdShowStatus0 = dib.getNumDiscrepancyNotes() > 0 || dib.getScdData().getDbValue().length() > 0 ? 0 : //dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? 1 : 2; scdShowStatus0 = dib.getNumDiscrepancyNotes() > 0 || dib.getScdData().getDbValue().length() > 0 ? SCDShowStatus.SHOW_UNCHANGABLE.getCode() : dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? SCDShowStatus.SHOW_CHANGABLE.getCode() : SCDShowStatus.HIDE_CHANGABLE.getCode(); } SCDItemDisplayInfo dinfo0 = dib.getScdData().getScdDisplayInfo(); dinfo0.setScdShowStatus(scdShowStatus0); //dinfo0.setScdShowStatus(SCDShowStatus.getByCode(scdShowStatus0)); dinfo0.setRowNum(rowIndex); ids += scdShowStatus0 <= 1 ? dinfo0.getRowSCDShowIDStr()+"-"+dib.getMetadata().getItemId() : dinfo0.getRowSCDShowIDStr(); rowStatus = rowStatus!=-1 && rowStatus <= scdShowStatus0 ? rowStatus : scdShowStatus0; } else { rowStatus = 0; } ArrayList<DisplayItemBean> childItems0 = dib.getChildren(); for (int j = 0; j < childItems0.size(); ++j) { DisplayItemBean child = childItems0.get(j); if(SCDItemDisplayInfo.isSCDItem(child)) { //int scdShowStatus = child.getNumDiscrepancyNotes() > 0 ? 0 : //child.getData().getValue().length()>0 || child.getIsSCDtoBeShown() ? 1 : 2; int scdShowStatus = child.getNumDiscrepancyNotes() > 0 ? SCDShowStatus.SHOW_UNCHANGABLE.getCode() : child.getData().getValue().length()>0 || child.getIsSCDtoBeShown() ? SCDShowStatus.SHOW_CHANGABLE.getCode() : SCDShowStatus.HIDE_CHANGABLE.getCode(); child.getScdData().getScdDisplayInfo().setScdShowStatus(scdShowStatus); //child.getScdData().getScdDisplayInfo().setScdShowStatus(SCDShowStatus.getByCode(scdShowStatus)); } } } for (int i = 1; i < allItems.size(); ++i) { dib = allItems.get(i).getSingleItem(); ItemFormMetadataBean ifmb = dib.getMetadata(); if(ifmb.getParentId()==0) { int col = ifmb.getColumnNumber(); if(col <= 1) { DisplayItemBean prevDib = allItems.get(rowStartIndex).getSingleItem(); SCDItemDisplayInfo dinfo = prevDib.getScdData().getScdDisplayInfo(); //dinfo.setRowDisplayStatus(SCDRowDisplayStatus.getByCode(rowStatus)); dinfo.setRowDisplayStatus(rowStatus); dinfo.setRowSCDShowIDStr(ids); rowStartIndex = i; rowStatus = -1; ++rowIndex; } if(SCDItemDisplayInfo.isSCDItem(dib)) { int scdShowStatus = -1; if(noValueComparison) { //scdShowStatus = dib.getNumDiscrepancyNotes() > 0 ? 0 : //dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? 1 : 2; scdShowStatus = dib.getNumDiscrepancyNotes() > 0 ? SCDShowStatus.SHOW_UNCHANGABLE.getCode() : dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? SCDShowStatus.SHOW_CHANGABLE.getCode() : SCDShowStatus.HIDE_CHANGABLE.getCode(); } else { //scdShowStatus = dib.getNumDiscrepancyNotes() > 0 || dib.getScdData().getDbValue().length() > 0 ? 0 : //dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? 1 : 2; scdShowStatus = dib.getNumDiscrepancyNotes() > 0 || dib.getScdData().getDbValue().length() > 0 ? SCDShowStatus.SHOW_UNCHANGABLE.getCode() : dib.getData().getValue().length()>0 || dib.getIsSCDtoBeShown() ? SCDShowStatus.SHOW_CHANGABLE.getCode() : SCDShowStatus.HIDE_CHANGABLE.getCode(); } SCDItemDisplayInfo dinfo = dib.getScdData().getScdDisplayInfo(); dinfo.setScdShowStatus(scdShowStatus); //dinfo.setScdShowStatus(SCDShowStatus.getByCode(scdShowStatus)); dinfo.setRowNum(rowIndex); dinfo.setRowFirstColIndex(rowStartIndex); ids += scdShowStatus <= 1 ? dinfo.getRowSCDShowIDStr()+"-"+ifmb.getItemId() : dinfo.getRowSCDShowIDStr(); rowStatus = rowStatus!=-1 && rowStatus <= scdShowStatus ? rowStatus : scdShowStatus; } else { rowStatus = 0; } ArrayList childItems = dib.getChildren(); for (int j = 0; j < childItems.size(); ++j) { DisplayItemBean child = (DisplayItemBean)childItems.get(j); if(SCDItemDisplayInfo.isSCDItem(child)) { //int scdShowStatus = child.getNumDiscrepancyNotes() > 0 ? 0 : //child.getData().getValue().length()>0 || child.getIsSCDtoBeShown() ? 1 : 2; int scdShowStatus = child.getNumDiscrepancyNotes() > 0 ? SCDShowStatus.SHOW_UNCHANGABLE.getCode() : child.getData().getValue().length()>0 || child.getIsSCDtoBeShown() ? SCDShowStatus.SHOW_CHANGABLE.getCode() : SCDShowStatus.HIDE_CHANGABLE.getCode(); child.getScdData().getScdDisplayInfo().setScdShowStatus(scdShowStatus); //child.getScdData().getScdDisplayInfo().setScdShowStatus(SCDShowStatus.getByCode(scdShowStatus)); } } } } if(rowStartIndex >= 0) { DisplayItemBean prevDib = allItems.get(rowStartIndex).getSingleItem(); SCDItemDisplayInfo dinfo = prevDib.getScdData().getScdDisplayInfo(); dinfo.setRowDisplayStatus(rowStatus); //dinfo.setRowDisplayStatus(SCDRowDisplayStatus.getByCode(rowStatus)); dinfo.setRowSCDShowIDStr(ids+"-"); dinfo.setRowFirstColIndex(rowStartIndex); } return section; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + rowDisplayStatus; result = prime * result + rowFirstColIndex; result = prime * result + rowNum; result = prime * result + (rowSCDShowIDStr == null ? 0 : rowSCDShowIDStr.hashCode()); result = prime * result + scdShowStatus; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; SCDItemDisplayInfo other = (SCDItemDisplayInfo) obj; if (rowDisplayStatus != other.rowDisplayStatus) return false; if (rowFirstColIndex != other.rowFirstColIndex) return false; if (rowNum != other.rowNum) return false; if (rowSCDShowIDStr == null) { if (other.rowSCDShowIDStr != null) return false; } else if (!rowSCDShowIDStr.equals(other.rowSCDShowIDStr)) return false; if (scdShowStatus != other.scdShowStatus) return false; return true; } public static boolean isSCDItem(DisplayItemBean displayItemBean) { int scdId = displayItemBean.getScdData().getScdItemMetadataBean().getScdItemFormMetadataId(); return scdId>0 && scdId == displayItemBean.getMetadata().getId() ? true : false; } public int getRowDisplayStatus() { return rowDisplayStatus; } public void setRowDisplayStatus(int rowDisplayStatus) { this.rowDisplayStatus = rowDisplayStatus; } public int getScdShowStatus() { return scdShowStatus; } public void setScdShowStatus(int scdShowStatus) { this.scdShowStatus = scdShowStatus; } public String getRowSCDShowIDStr() { return rowSCDShowIDStr; } public void setRowSCDShowIDStr(String rowSCDShowIDStr) { this.rowSCDShowIDStr = rowSCDShowIDStr; } public int getRowNum() { return rowNum; } public void setRowNum(int rowNum) { this.rowNum = rowNum; } public int getRowFirstColIndex() { return rowFirstColIndex; } public void setRowFirstColIndex(int rowFirstColIndex) { this.rowFirstColIndex = rowFirstColIndex; } }