package com.idega.block.reports.presentation; import java.sql.SQLException; import java.util.Collections; import java.util.List; import java.util.Vector; import com.idega.block.reports.business.ReportContent; import com.idega.block.reports.business.ReportContentComparator; import com.idega.block.reports.business.ReportMaker; import com.idega.block.reports.business.ReportService; import com.idega.block.reports.data.Report; import com.idega.event.IWPageEventListener; import com.idega.idegaweb.IWApplicationContext; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.Block; import com.idega.presentation.IWContext; import com.idega.presentation.PresentationObject; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; public class ReportContentViewer extends Block implements Reports,IWPageEventListener{ private final String sAction = "rcv_action"; private String sActPrm = ""; private int iAction = 0; private String prefix = "rcv_"; private Vector vReportContent; private List listReportContent; private String sLastOrder = "0"; private int iReport = -1; private int displayNumber = 20; private Report eReport = null; private int listStart = 1; //public final static String prmReportId = "rep.viewer.repid"; protected static String prmContent = "rep.view.content"; protected static String prmHeaders = "rep.view.headers"; protected static String prmLastOrder = "rep.view.lastorder"; protected static String prmListStart = "rep.view.liststart"; private IWBundle iwb; private IWResourceBundle iwrb; public ReportContentViewer(){ this.listReportContent = null; } public ReportContentViewer(Vector vRC){ this.listReportContent = vRC; } public ReportContentViewer(String sql){ ReportMaker rm = new ReportMaker(); this.listReportContent = rm.makeReport(sql); } public ReportContentViewer(Report R){ this.eReport = R; } public void setDisplayNumber(int number){ this.displayNumber = number; } public String getLocalizedNameKey(){ return "report_content"; } public String getLocalizedNameValue(){ return "Content"; } protected void control(IWContext iwc){ this.iwrb = getResourceBundle(iwc); this.iwb = getBundle(iwc); Table T = new Table(); T.setWidth("100%"); T.setCellpadding(0); T.setCellspacing(0); try{ if(iwc.getParameter("start")!=null){ this.listStart = Integer.parseInt(iwc.getParameter("start")); } iwc.setSessionAttribute(prmListStart,new Integer(this.listStart)); if(iwc.getParameter(PRM_REPORTID)!=null){ this.iReport = Integer.parseInt(iwc.getParameter(PRM_REPORTID)); if(this.iReport > 0){ this.eReport = ((com.idega.block.reports.data.ReportHome)com.idega.data.IDOLookup.getHomeLegacy(Report.class)).findByPrimaryKeyLegacy(this.iReport); ReportService.setSessionReport(iwc,this.eReport); T.add(doMain(iwc)); } else{ if(ReportService.isSessionReport(iwc)) { ReportService.removeSessionReport(iwc); } add("no report"); } } else if(iwc.getParameter(this.sAction) != null){ this.sActPrm = iwc.getParameter(this.sAction); try{ this.iAction = Integer.parseInt(this.sActPrm); switch(this.iAction){ case ACT1: break; case ACT2: T.add(doTable(iwc)); break; case ACT3: doChange(iwc); break; case ACT4: doUpdate(iwc); break; } } catch(Exception e){ e.printStackTrace(); } } else { T.add(doMain(iwc)); } } catch(Exception S){ S.printStackTrace(); } add(T); } protected PresentationObject makeLinkTable(int menuNr){ Table LinkTable = new Table(3,1); int last = 3; LinkTable.setWidth("100%"); LinkTable.setCellpadding(2); LinkTable.setCellspacing(1); LinkTable.setColor(Reports.DarkColor); LinkTable.setWidth(last,"100%"); Link Link1 = new Link("Stilltur"); Link1.setFontColor(Reports.LightColor); Link1.addParameter(this.sAction,String.valueOf(Reports.ACT1)); Link Link2 = new Link("Spakur"); Link2.setFontColor(Reports.LightColor); Link2.addParameter(this.sAction,String.valueOf(Reports.ACT2)); if(true){ LinkTable.add(Link1,1,1); LinkTable.add(Link2,2,1); } return LinkTable; } private PresentationObject doMain(IWContext iwc){ Table T = new Table(); T.setCellpadding(0); T.setCellspacing(0); T.setWidth("100%"); if(iwc.getParameter(PRM_REPORTID) != null){ String sql = this.eReport.getSQL(); String[] headers = this.eReport.getHeaders(); List v = new ReportMaker().makeReport(sql); iwc.setSessionAttribute(prmContent,v); iwc.setSessionAttribute(prmHeaders,headers); if(v != null){ T.add(this.doHeader(iwc,this.eReport),1,1); T.add(this.doFooter(this.listStart,v.size(),this.eReport.getID()),1,2); T.add(this.doView(headers,v,this.listStart,this.eReport.getID()),1,3); T.add(this.doFooter(this.listStart,v.size(),this.eReport.getID()),1,4); } else { T.add(new Text(" nothing to show"),1,1); //Link back = new Link(new Image("/reports/pics/newlist.gif"),"/reports/index.jsp"); //this.addToHeader(back); } } else{ return doTable(iwc); } return T; } protected void doChange(IWContext iwc) throws SQLException{ } protected void doUpdate(IWContext iwc) throws SQLException{ } private PresentationObject doTable(IWContext iwc){ Table T = new Table(); T.setCellpadding(0); T.setCellspacing(0); T.setWidth("100%"); if(iwc.getSession().getAttribute(prmContent)!=null){ Vector v= (Vector) iwc.getSession().getAttribute(prmContent); this.eReport = ReportService.getSessionReport(iwc); this.listStart = ((Integer)iwc.getSessionAttribute(prmListStart)).intValue(); String[] headers = null; if(iwc.getSessionAttribute(prmHeaders) != null){ headers = (String[]) iwc.getSessionAttribute(prmHeaders); } if(iwc.getSessionAttribute(prmLastOrder)!=null) { this.sLastOrder = (String) iwc.getSessionAttribute(prmLastOrder); } else { this.sLastOrder = ""; } String sOrder = "0"; if(iwc.getParameter("order")!= null){ sOrder = iwc.getParameter("order"); } boolean reverse = false; if(this.sLastOrder.equalsIgnoreCase(sOrder)) { reverse = true; } int order = Integer.parseInt(sOrder); if(!(iwc.getParameter("start")!= null)) { OrderVector(v,order,reverse); } iwc.setSessionAttribute(prmLastOrder,sOrder); if(v != null){ T.add(this.doHeader(iwc,this.eReport),1,1); T.add(this.doFooter(this.listStart,v.size(),this.eReport.getID()),1,2); T.add(this.doView(headers,v,this.listStart,this.eReport.getID()),1,3); T.add(this.doFooter(this.listStart,v.size(),this.eReport.getID()),1,4); } else { T.add(new Text(" nothing to show"),1,1); //Link back = new Link(new Image("/reports/pics/newlist.gif"),"/reports/index.jsp"); //this.addToHeader(back); } } return T; } private PresentationObject doHeader(IWApplicationContext iwac,Report R){ Table T2 = new Table(2,1); T2.setWidth("100%"); T2.setColumnAlignment(1,"left"); T2.setColumnAlignment(2,"right"); Table T = new Table(2,2); T.add(getBodyText("Name:"),1,1); T.add(getBodyText("Info:"),1,2); T.add(getBodyText(R.getName()),2,1); T.add(getBodyText(R.getInfo()),2,2); T2.add(T,1,1); Table T3 = new Table(3,1); Link XLS = Reporter.getXLSLink(iwac,this.iwb.getImage("/shared/xls.gif"),R.getID()); Link PDF = Reporter.getPDFLink(iwac,this.iwb.getImage("/shared/pdf.gif"),R.getID()); Link TXT = Reporter.getTXTLink(iwac,this.iwb.getImage("/shared/txt.gif"),R.getID()); T3.add(XLS,1,1); T3.add(PDF,2,1); T3.add(TXT,3,1); T2.add(T3,2,1); return T2; } private PresentationObject doFooter(int start,int total,int reportId){ Table T = new Table(5,1); T.setColor(Reports.DarkColor); T.setWidth("100%"); T.setWidth(1,"25%"); T.setWidth(5,"25%"); T.setColumnAlignment(1,"left"); T.setColumnAlignment(3,"center"); T.setColumnAlignment(5,"right"); int left = total%this.displayNumber; int nextstart = start+this.displayNumber; int nextend = nextstart + this.displayNumber-1; if(start != -1){ if(!(start == 1)){ Link leftLink = new Link("<< "); leftLink.addParameter("start",start-this.displayNumber); leftLink.addParameter(PRM_REPORTID,reportId); leftLink.setFontColor(Reports.LightColor); T.add(leftLink,1,1); T.add(getHeaderText((start-this.displayNumber)+"-"+(start-1)),1,1); } if(nextstart <= total){ String interval; if(nextend > total){ interval = nextstart + "-" +(nextstart+ left-1); } else{ interval = nextstart+"-"+(nextstart+this.displayNumber-1); } T.add(getHeaderText(interval),5,1); Link rightLink = new Link(" >>"); rightLink.addParameter("start",start+this.displayNumber); rightLink.addParameter(PRM_REPORTID,reportId); rightLink.setFontColor(Reports.LightColor); T.add(rightLink,5,1); } if(!((nextstart-1) < total) ) { T.add(getHeaderText(start+"-"+(start+left-1)+" of "+total),3,1); } else { T.add(getHeaderText(start+"-"+(start+this.displayNumber-1)+" of "+total),3,1); } } else{ T.add(getHeaderText("Total:"+total),3,1); Link PartLink = new Link("Partial"); PartLink.addParameter("start",1); PartLink.addParameter(PRM_REPORTID,reportId); PartLink.setFontColor(Reports.LightColor); T.add(PartLink,2,1); } Link WholeLink = new Link("All"); WholeLink.addParameter("start",-1); WholeLink.addParameter(PRM_REPORTID,reportId); WholeLink.setFontColor(Reports.LightColor); T.add(WholeLink,4,1); return T; } private PresentationObject doView(String[] headers,List content,int start,int reportId){ int len = content.size(); Table T; int depth = (len < this.displayNumber ? len : this.displayNumber)+1; if(start != -1) { T= new Table(headers.length+1 ,depth+1); } else { T= new Table(headers.length+1 ,len+1); } T.setWidth("100%"); T.setWidth(1,"30"); T.setCellpadding(2); T.setCellspacing(1); T.setVerticalZebraColored(LightColor,MiddleColor); T.setRowColor(1,DarkColor); for(int j = 0; j < headers.length ;j++){ Link L = new Link(getHeaderText(headers[j])); L.addParameter(PRM_REPORTID,reportId); L.addParameter(this.sAction,Reports.ACT2); L.addParameter("order",String.valueOf(j)); L.setFontColor(WhiteColor); T.add(L,j+2,1); } ReportContent RC; int cols = headers.length; if(start != -1){ int index = start; int end = start+this.displayNumber; for(int i =0; index < end && index <= len;i++){ RC = (ReportContent)content.get((index)-1); for(int j = 0; j < cols;j++){ T.add(getBodyText(RC.getContent(j)),j+2,i+2); } T.add(getBodyText(String.valueOf(index)),1,i+2); index++; } } else { int clen = content.size(); for (int i = 0; i < clen; i++) { RC = (ReportContent)content.get(i); for(int j = 0; j < cols;j++){ T.add(getBodyText(RC.getContent(j)),j+2,i+2); } T.add(getBodyText(String.valueOf(i+1)),1,i+2); } } return T; } private Text getHeaderText(String text){ Text T = new Text(text,true,false,false); T.setFontColor(WhiteColor); T.setFontSize(2); return T; } private Text getBodyText(String text){ Text T = new Text(text,true,false,false); T.setFontColor("#000000"); T.setFontSize(1); return T; } private void OrderVector(Vector mbs,int order,boolean reverse){ ReportContentComparator RCC = new ReportContentComparator(order); if(reverse) { Collections.reverse(mbs); } else { Collections.sort(mbs,RCC); } } private Table makeTable(String[] header,String[][] content,int reportId){ Table T= new Table(); for(int j = 0; j < header.length ;j++){ Link L = new Link(header[j]); L.addParameter(this.sAction,Reports.ACT2); L.addParameter(PRM_REPORTID,reportId); L.addParameter("order",String.valueOf(j)); T.add(L,j+1,1); } for(int i =0; i < content.length;i++){ for(int j = 0; j < content[i].length;j++){ T.add(ReportPresentation.formatText(content[i][j]),j+1,i+2); } } return T; } private String[][] makeStrings(Vector vContent){ int len = vContent.size(); String[][] s = null; if(len > 0){ ReportContent RC = (ReportContent) vContent.elementAt(0); int cols = RC.size(); s = new String[len][cols]; for(int i = 0; i < len; i++){ RC = (ReportContent)vContent.elementAt(i); for(int j = 0; j < cols ;j++){ s[i][j] = RC.getContent(j); //System.err.println(s[i][j]); } } } return s; } protected static void removeSessionParameters(IWContext iwc){ if(iwc.getSessionAttribute(prmContent)!=null){ iwc.removeSessionAttribute(prmContent ); } if(iwc.getSessionAttribute(prmHeaders)!=null){ iwc.removeSessionAttribute(prmHeaders ); } if(iwc.getSessionAttribute(prmLastOrder)!=null){ iwc.removeSessionAttribute(prmLastOrder ); } if(iwc.getSessionAttribute(prmListStart)!=null){ iwc.removeSessionAttribute(prmListStart ); } } public boolean actionPerformed(IWContext iwc){ removeSessionParameters(iwc); return true; } public String getBundleIdentifier(){ return REPORTS_BUNDLE_IDENTIFIER; } public void main(IWContext iwc){ control(iwc); } }