package com.fitbank.homebanking; import java.io.PrintWriter; import java.io.StringWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; import com.fitbank.dto.management.Criterion; import com.fitbank.dto.management.Detail; import com.fitbank.dto.management.Record; import com.fitbank.dto.management.Table; public class LOV { private HttpServletRequest request; private String lovName; private int page = 1; private Map parameters = new HashMap(); private Detail detail = null; private List columns = new ArrayList(); private List columnLabels = new ArrayList(); private List columnWidth = new ArrayList(); public static final String LOV_NAME = "_lov_"; public static final String LOV_PAGE = "_page_"; public static final String LOV_TITLE_CTL = "LOV_TITLE"; public static final String LOV_COLUMNS_CTL = "LOV_COLUMNS"; public static final String LOV_COLUMN_LABELS_CTL = "LOV_COLUMN_LABELS"; public static final String LOV_COLUMN_WIDTH_CTL = "LOV_COLUMN_WIDTHS"; public static final String LOV_CODE_CTL = "LOV_CODE"; public static final String LOV_DATA_CTL = "LOV_DATA"; public static final String VALUE_SEPARATOR = ";"; private String url=""; @SuppressWarnings("unchecked") public LOV(HttpServletRequest pRequest) throws Exception { request = pRequest; lovName = request.getParameter(LOV_NAME); String aux = request.getParameter(LOV_PAGE); if (aux != null) { page = Integer.parseInt(aux); } Enumeration param = request.getParameterNames(); while (param.hasMoreElements()) { String paramName = param.nextElement(); if (paramName.indexOf("cLov_") < 0&¶mName.indexOf("pLov_") < 0) { continue; } String val = request.getParameter(paramName).trim(); if(paramName.indexOf("cLov_") >= 0) { this.url+="&"+paramName+"="+val; } if (val.compareTo("_") == 0) { val = ""; } paramName = paramName.replaceAll("cLov_", ""); paramName = paramName.replaceAll("pLov_", ""); parameters.put(paramName, val); } DataManage dm = (DataManage) request.getSession().getAttribute(DataManage.KEY); detail = new Detail(); detail.setType(MessageTypes.CON.name()); Object obj = null; try { obj = this.request.getSession().getAttribute(this.lovName); } catch (Exception e1) { return; } if (!(obj instanceof Transaction)) { return; } dm.prepareDetail(detail, (Transaction) obj); String alias = (String) detail.findFieldByNameCreate(LOV_DATA_CTL).getValue(); Table lov = detail.findTableByAlias(alias); if (lov == null) { throw new Exception("No se ha encontrado la Tabla " + alias); } lov.setPageNumber(this.page); List lCriteria = lov.getCriteria(); for (Criterion criterion : lCriteria) { if (this.parameters.containsKey(criterion.getName())) { criterion.setValue(this.parameters.get(criterion.getName())); } } for (Criterion criterion : lCriteria) { if (criterion.getCondition().compareTo("like") == 0 && (criterion.getValue() == null || criterion.getValue().toString().trim().compareTo("") == 0)) { criterion.setValue("%"); } } BussinessDelegate bd = new BussinessDelegate(); Transaction tt = (Transaction) request.getSession().getAttribute(DataManage.TRN_DATA); if (tt != null) detail.setRealtransaction(tt.getSubsystem() + ":" + tt.getTransaction()); this.detail = bd.process(detail); this.prepareColumns(); } @SuppressWarnings("unchecked") public String getLOVData() throws Exception { try { String data = ""; data += this.getHeader((String) detail.findFieldByName(LOV_TITLE_CTL).getValue()); String alias = (String) detail.findFieldByName(LOV_DATA_CTL).getValue(); data += this.getData(detail.findTableByAlias(alias).getRecords()); String has=detail.findTableByAlias(alias).getHasMorePages(); boolean mpg = false; if(has!=null && has.compareTo("1")==0){ mpg = true; } data += this.getFooter(mpg); return data; } catch (Exception e) { return e.getMessage(); } } private String getHeader(String pTitle) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("
"); pw.println(" "); pw.println(" "); pw.println(" "); for (int i = 0; i < this.columnLabels.size(); i++) { String label = this.columnLabels.get(i); if (this.columnWidth.size() == this.columnLabels.size()) { if(this.columnWidth.get(i).intValue()==-1){ pw.println(" "); }else{ pw.println(" "); } } else { pw.println(" "); } } pw.println(""); int i=0; for (String col : columns) { String value = this.request.getParameter("pLov_" + col); if (value == null || value.compareTo("_") == 0) { value = ""; } if(this.columnWidth.get(i).intValue()==-1){ pw.println(""); }else{ String disabledSearch = ""; if(detail.findFieldByNameCreate("DISABLE_SEARCH_BUTTON") .getValue()!=null){ if(detail.findFieldByNameCreate("DISABLE_SEARCH_BUTTON") .getValue().toString().compareTo("1")==0){ disabledSearch = "disabled='disabled'"; } } pw.println(""); } i++; } pw.println(""); pw.close(); return sw.toString(); } private String getFooter(boolean hasMore) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("
"); pw.println(pTitle); pw.println("
" + label + "" + label + "
"); pw.println(""); pw.println(""); String prev = this.lovName+url + ((this.page == 1) ? "" : ("&_page_=" + (page - 1))); String next = this.lovName+url + "&_page_=" + (page + 1); String disabledPrev = ""; if(this.page == 1){ disabledPrev = "disabled='true'"; } pw.println(" "); String disabledSearch = ""; if(detail.findFieldByNameCreate("DISABLE_SEARCH_BUTTON") .getValue()!=null){ if(detail.findFieldByNameCreate("DISABLE_SEARCH_BUTTON") .getValue().toString().compareTo("1")==0){ disabledSearch = "disabled='true'"; } } pw.println(" "); String disabledNext = ""; if(!hasMore){ disabledNext = "disabled='true'"; } pw.println(" "); pw.println("
"); pw.close(); return sw.toString(); } private String getData(Iterable pData)throws Exception { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); if(!pData.iterator().hasNext()){ pw.println(" Sin Datos para esta Búsqueda / No data for this search"); } for (Record record : pData) { pw.println(" "); int i=0; for (String col : columns) { Object value=record.findFieldByNameCreate(col).getValue(); if(value!=null){ if(this.columnWidth.get(i).intValue()==-1){ pw.println("" + value + ""); }else{ if(record.findFieldByNameCreate(col).getValue() instanceof BigDecimal ){ value=record.findFieldByNameCreate(col).getAmountValue(); pw.println("" + value + ""); }else{ pw.println("" + value + ""); } } } if(value==null){ value=""; pw.println("" + value + ""); } i++; } pw.println(" "); } pw.close(); return sw.toString(); } private void prepareColumns() throws Exception { String data = (String) this.detail.findFieldByName(LOV_COLUMNS_CTL).getValue(); if (data == null || data.compareTo("") == 0) { throw new Exception("Lista de valores no Tiene Columnas Definidas"); } this.columns = new ArrayList(); StringTokenizer st = new StringTokenizer(data, ";"); while (st.hasMoreElements()) { this.columns.add((String) st.nextElement()); } data = (String) this.detail.findFieldByName(LOV_COLUMN_LABELS_CTL).getValue(); if (data == null || data.compareTo("") == 0) { throw new Exception("Lista de valores no Tiene Columnas Definidas"); } this.columnLabels = new ArrayList(); st = new StringTokenizer(data, ";"); while (st.hasMoreElements()) { this.columnLabels.add((String) st.nextElement()); } if (this.columnLabels.size() != this.columns.size()) { throw new Exception("El número de elementos en la Lista de columnas y etiquetas no son iguales"); } data = (String) this.detail.findFieldByName(LOV_COLUMN_WIDTH_CTL).getValue(); if (!(data == null || data.compareTo("") == 0)) { this.columnWidth = new ArrayList(); st = new StringTokenizer(data, ";"); while (st.hasMoreElements()) { this.columnWidth.add(Integer.parseInt((String) st.nextElement())); } if (this.columnWidth.size() != this.columns.size()) { this.columnWidth = new ArrayList(); } } } }