package com.idega.block.reports.presentation; import java.util.Collections; import java.util.List; import java.util.Vector; import com.idega.block.reports.business.Content; import com.idega.block.reports.business.ContentComparator; import com.idega.block.reports.business.ReportService; import com.idega.block.reports.data.Report; 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 ContentViewer extends Block{ private final String sAction = "rcv_action"; private String sActPrm = ""; private int iAction = 0; private String prefix = "rcv_"; private List listOfContent = null; private String sLastOrder = "0"; private int iReport = -1; private int displayNumber = 20; private Report eReport = null; private int listStart = 1; private String[] sTitles = null; private boolean allowOrder = true; private boolean clear = false; private final String prmContent = "ctv.content"; private final String prmStart = "ctv.start"; private final String prmListStart = "ctv.liststart"; private final String prmHeaders = "ctv.headers"; private final String prmOrder = "ctv.order"; private final String prmLastOrder = "ctv.lastorder"; private Link headerLinkToClone = new Link(); private boolean isHeaderLinkCloned = false; { this.headerLinkToClone.setFontColor("#FFFFFF"); } protected final static int ACT1 = 1,ACT2 = 2, ACT3 = 3,ACT4 = 4,ACT5 = 5,ACT6=6; protected String MiddleColor,LightColor,DarkColor,WhiteColor,TextFontColor,HeaderFontColor,IndexFontColor; protected Table Frame,MainFrame,HeaderFrame; protected int BORDER = 0; protected String sHeader = null; protected int fontSize = 2; protected boolean fontBold = false; protected String styleAttribute = "font-size: 8pt"; private int iBorder = 2; private int iInstId = -1; public ContentViewer(){ this.clear = true; this.listOfContent = null; this.sTitles = null; this.LightColor = "#D7DADF"; this.MiddleColor = "#9fA9B3"; this.DarkColor = "#27334B"; this.WhiteColor = "#FFFFFF"; this.TextFontColor = "#000000"; this.HeaderFontColor = this.DarkColor; this.IndexFontColor = "#000000"; } public ContentViewer(String[] Titles,Vector Content){ this(); this.sTitles = Titles; this.listOfContent = Content; } public ContentViewer(String[] Titles,List listOfContent){ this(); this.sTitles = Titles; this.listOfContent = listOfContent; } public void setColors(String LightColor,String MainColor,String DarkColor){ if(LightColor.startsWith("#")) { this.LightColor = LightColor; } if(MainColor.startsWith("#")) { this.MiddleColor = MainColor; } if(DarkColor.startsWith("#")) { this.DarkColor = DarkColor; } } public void setBorder(int border){ this.iBorder = border; } public void setHeaderText(String sHeader){ this.sHeader = sHeader; } public void setTextFontColor(String color){ this.TextFontColor = color; } public void setHeaderFontColor(String color){ this.HeaderFontColor = color; } public void setIndexFontColor(String color){ this.IndexFontColor = color; } public void setTextFontSize(int size){ this.fontSize = size; } public void setTextFontBold(boolean bold){ this.fontBold = bold; } public void setStyleAttribute(String style){ this.styleAttribute = style; } public void setContent(Vector Content){ this.clear = true; this.listOfContent = Content; } public void setTitles(String[] Titles){ this.sTitles = Titles; } public void setDisplayNumber(int number){ this.displayNumber = number; } public void setAllowOrder(boolean allow){ this.allowOrder = allow; } protected void control(IWContext iwc){ this.iInstId = Math.abs(getICObjectInstanceID()); try{ if(iwc.getParameter(this.prmStart+this.iInstId)!=null){ this.listStart = Integer.parseInt(iwc.getParameter(this.prmStart+this.iInstId)); iwc.setSessionAttribute(this.prmStart+this.iInstId,String.valueOf(this.listStart)); } else if(iwc.getSessionAttribute(this.prmStart+this.iInstId)!=null){ this.listStart = Integer.parseInt((String) iwc.getSessionAttribute(this.prmStart+this.iInstId)); } iwc.setSessionAttribute(this.prmListStart+this.iInstId,new Integer(this.listStart)); if(iwc.getParameter(this.sAction+this.iInstId) != null){ this.sActPrm = iwc.getParameter(this.sAction+this.iInstId); try{ this.iAction = Integer.parseInt(this.sActPrm); switch(this.iAction){ case ACT1: break; case ACT2: doTable(iwc); break; } } catch(Exception e){ e.printStackTrace(); } } else { doMain(iwc); } } catch(Exception S){ S.printStackTrace(); } } protected PresentationObject makeLinkTable(int menuNr){ Table LinkTable = new Table(3,1); return LinkTable; } private void doMain(IWContext iwc){ if(this.clear && iwc.getSessionAttribute(this.prmContent+this.iInstId) != null) { iwc.removeSessionAttribute(this.prmContent+this.iInstId); } if(iwc.getSessionAttribute(this.prmContent+this.iInstId) == null){ String[] headers = this.sTitles; List L = this.listOfContent; iwc.setSessionAttribute(this.prmContent+this.iInstId,L); iwc.setSessionAttribute(this.prmHeaders+this.iInstId,headers); if(L != null){ add(this.doFooter(this.listStart,L.size())); add(this.doView(headers,L,this.listStart)); add(this.doFooter(this.listStart,L.size())); } else { add(new Text(" nothing to show")); } } else{ doTable(iwc); } } private void doTable(IWContext iwc){ if(iwc.getSession().getAttribute( this.prmContent+this.iInstId)!=null){ Vector v= (Vector) iwc.getSession().getAttribute(this.prmContent+this.iInstId); this.eReport = ReportService.getSessionReport(iwc); this.listStart = ((Integer)iwc.getSessionAttribute(this.prmListStart+this.iInstId)).intValue(); String[] headers = null; if(iwc.getSessionAttribute(this.prmHeaders+this.iInstId) != null){ headers = (String[]) iwc.getSessionAttribute(this.prmHeaders+this.iInstId); } if(this.allowOrder){ if(iwc.getSession().getAttribute(this.prmLastOrder+this.iInstId)!=null) { this.sLastOrder = (String) iwc.getSessionAttribute(this.prmLastOrder+this.iInstId); } else { this.sLastOrder = ""; } String sOrder = "0"; if(iwc.getParameter(this.prmOrder)!= null){ sOrder = iwc.getParameter(this.prmOrder+this.iInstId); } boolean reverse = false; if(this.sLastOrder.equalsIgnoreCase(sOrder)) { reverse = true; } int order = Integer.parseInt(sOrder); if(!(iwc.getParameter(this.prmStart+this.iInstId)!= null)) { OrderVector(v,order,reverse); } iwc.setSessionAttribute(this.prmLastOrder+this.iInstId,sOrder); } if(v != null){ add(this.doFooter(this.listStart,v.size())); add(this.doView(headers,v,this.listStart)); add(this.doFooter(this.listStart,v.size())); } else { add(new Text(" nothing to show")); } } } private PresentationObject doFooter(int start,int total){ Table T = new Table(5,1); T.setColor(this.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(this.prmStart+this.iInstId,start-this.displayNumber); leftLink.setFontColor(this.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(this.prmStart+this.iInstId,start+this.displayNumber); rightLink.setFontColor(this.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(this.prmStart+this.iInstId,1); PartLink.setFontColor(this.LightColor); T.add(PartLink,2,1); } Link WholeLink = new Link("All"); WholeLink.addParameter(this.prmStart+this.iInstId,-1); WholeLink.setFontColor(this.LightColor); T.add(WholeLink,4,1); return T; } private PresentationObject doView(String[] headers,List content,int start){ int len = content.size(); Table T; if(start != -1) { T= new Table(headers.length+1 ,this.displayNumber+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(this.LightColor,this.MiddleColor); T.setRowColor(1,this.DarkColor); for(int j = 0; j < headers.length ;j++){ Link HeaderLink = (Link) this.headerLinkToClone.clone(); HeaderLink.setText(headers[j]); if(this.allowOrder){ HeaderLink.addParameter(this.sAction,ContentViewer.ACT2); HeaderLink.addParameter(this.prmOrder+this.iInstId,String.valueOf(j)); //L.setFontColor(WhiteColor); T.add(HeaderLink,j+2,1); } else{ if (!this.isHeaderLinkCloned) { HeaderLink.setFontSize( 2); HeaderLink.setBold(); // (Text) HeaderLink.getObject(); } T.add( HeaderLink.getObject(), j+2, 1); } } Content C; int cols = headers.length; if(start != -1){ int index = start; int end = start+this.displayNumber; for(int i =0; index < end && index <= len;i++){ C = (Content)content.get((index)-1); for(int j = 0; j < cols;j++){ T.add(getBodyObject((C.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++) { C = (Content)content.get(i); for(int j = 0; j < cols;j++){ T.add(getBodyObject((C.getContent(j))),j+2,i+2); } T.add(getBodyText(String.valueOf(i+1)),1,i+2); } } return T; } private PresentationObject getBodyObject(Object Obj){ if(Obj instanceof PresentationObject) { return (PresentationObject)Obj; } else { return getBodyText(Obj.toString()); } } private Text getHeaderText(String text){ Text T = new Text(text,true,false,false); T.setFontColor(this.WhiteColor); T.setFontSize(2); return T; } private Text getBodyText(String text){ Text T = new Text(text); T.setFontColor( this.TextFontColor); T.setFontSize( this.fontSize); if(this.fontBold) { T.setBold(); } return T; } private void OrderVector(Vector mbs,int order,boolean reverse){ ContentComparator CC = new ContentComparator(order); if(reverse) { Collections.reverse(mbs); } else { Collections.sort(mbs,CC); } } private Table makeTable(String[] header,String[][] content){ Table T= new Table(); for(int j = 0; j < header.length ;j++){ Link L = new Link(header[j]); L.addParameter(this.sAction,ContentViewer.ACT2); L.addParameter( this.prmOrder+this.iInstId,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(content[i][j],j+1,i+2); } } return T; } public void setHeaderLinkProperties(Link linkToClonePropertiesFrom){ this.isHeaderLinkCloned = true; this.headerLinkToClone = linkToClonePropertiesFrom; } public void main(IWContext iwc){ control(iwc); } }