package com.idega.block.reports.presentation;
import java.sql.SQLException;
import java.util.List;
import com.idega.idegaweb.block.presentation.Builderaware;
import com.idega.block.category.data.ICCategory;
import com.idega.block.category.presentation.CategoryBlock;
import com.idega.block.reports.business.ReportBusiness;
import com.idega.block.reports.business.ReportEntityHandler;
import com.idega.block.reports.business.ReportFinder;
import com.idega.block.reports.business.ReportWriter;
import com.idega.block.reports.data.Report;
import com.idega.block.reports.data.ReportInfo;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWMainApplication;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.io.MediaWritable;
import com.idega.presentation.IWContext;
import com.idega.presentation.Image;
import com.idega.presentation.PresentationObject;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
import com.idega.presentation.ui.CheckBox;
import com.idega.presentation.ui.DataTable;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.HiddenInput;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.Window;
import com.idega.presentation.util.Edit;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company: idega multimedia
* @author <a href="mailto:aron@idega.is">aron@idega.is</a>
* @version 2.0
*/
public class Reporter extends CategoryBlock implements Builderaware,Reports{
private final String sAction = "rep_reporter_action";
private String sActPrm = "";
private int iAction = 0;
private static final String prefix = "rep_reporter_";
private static final String PermissionAdd = "add";
private static final String PermissionPref = "pref";
private String sLastOrder = "0";
private boolean sqlEditAdmin = true;
boolean newobjinst = false;
boolean isAdmin = false;
boolean hasEdit = false,hasPref = false,hasAdd = false;
protected IWResourceBundle iwrb;
protected IWBundle iwb;
private IWBundle core ;
private Image XLS,PDF,TXT;
public Reporter(){
super();
}
public Reporter(int iCategory){
this();
setCategoryId(iCategory);
}
public String getCategoryType(){
return "reports";
}
public boolean getMultible(){
return true;
}
public void setReportCategoryId(int iCategory){
setCategoryId(iCategory);
}
public void setSQLEdit(boolean value){
this.sqlEditAdmin = value;
}
public void registerPermissionKeys(){
registerPermissionKey(PermissionAdd);
registerPermissionKey(PermissionPref);
}
protected void control(IWContext iwc){
this.XLS = this.iwb.getImage("/shared/xls.gif");
this.PDF = this.iwb.getImage("/shared/pdf.gif");
this.TXT = this.iwb.getImage("/shared/txt.gif");
Table T = new Table();
T.setWidth("100%");
T.setCellpadding(0);
T.setCellspacing(0);
if(this.isAdmin){
T.add(getAdminPart(getCategoryId(),false,this.newobjinst,iwc),1,1);
}
Form form = new Form();
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: break;
case ACT3: doChange(iwc); break;
case ACT4: doDelete(iwc); break;
}
}
catch(Exception e){
e.printStackTrace();
}
}
T.add(doMain(iwc),1,2);
form.add(T);
add(form);
}
private PresentationObject getAdminPart(int iCategoryId,boolean enableDelete,boolean newObjInst,IWContext iwc){
Table T = new Table(3,1);
T.setCellpadding(2);
T.setCellspacing(2);
IWBundle core = iwc.getIWMainApplication().getBundle(IW_CORE_BUNDLE_IDENTIFIER);
if(iCategoryId > 0){
Link ne = new Link(core.getImage("/shared/create.gif","create"));
ne.setWindowToOpen(ReportViewWindow.class);
ne.addParameter(PRM_CATEGORYID,iCategoryId);
ne.addParameter(ReportViewer.getMenuStartClassParameter(ReportSQLEditor.class));
//ne.addParameter(ReportSQLEditorWindow.prmReportId,"-1");
if(this.hasEdit || this.hasPref || this.hasAdd ){
T.add(ne,1,1);
T.add(Table.getTransparentCell(iwc),1,1);
}
Link text = new Link(core.getImage("/shared/text.gif","text"));
text.setWindowToOpen(ReportItemWindow.class);
text.addParameter(ReportItemWindow.prmCategoryId,iCategoryId);
//text.addParameter(ReportItemWindow.prmItems,"true");
if(this.hasEdit || this.hasPref){
T.add(text,1,1);
T.add(Table.getTransparentCell(iwc),1,1);
}
Link category = getCategoryLink();
category.setImage(core.getImage("/shared/detach.gif","detach"));
if(this.hasEdit || this.hasPref) {
T.add(category,1,1);
}
if ( this.hasEdit && enableDelete ) {
T.add(Table.getTransparentCell(iwc),1,1);
Link delete = new Link(core.getImage("/shared/delete.gif"));
delete.setWindowToOpen(ReportEditorWindow.class);
delete.addParameter(ReportEditorWindow.prmDelete,iCategoryId);
T.add(delete,3,1);
}
}
if(newObjInst){
Link newLink = new Link(core.getImage("/shared/create.gif"));
newLink.setWindowToOpen(ReportEditorWindow.class);
if(newObjInst) {
newLink.addParameter(ReportEditorWindow.prmObjInstId,getICObjectInstanceID());
}
T.add(newLink,2,1);
}
T.setWidth("100%");
return T;
}
private PresentationObject doMain(IWContext iwc){
PresentationObject obj = (getCategoryReports(iwc,getCategoryId()));
return obj;
}
private PresentationObject getCategoryReports(IWApplicationContext iwac,int iCategoryId){
ICCategory RC = ReportFinder.getCategory(iCategoryId) ;
String name = RC!=null?RC.getName():"";
DataTable T = new DataTable();
T.setTitlesHorizontal(true);
T.addTitle(name+this.iwrb.getLocalizedString("reports","Reports"));
T.setWidth("100%");
int a = 1;
T.add(Edit.formatText(this.iwrb.getLocalizedString("name","Name")),2,a);
T.add(Edit.formatText(this.iwrb.getLocalizedString("info","Info")),3,a);
T.add(Edit.formatText(this.iwrb.getLocalizedString("custom","Custom")),4,a);
T.add(Edit.formatText(this.iwrb.getLocalizedString("default","Default")),5,a);
String prm = prefix+"chk";
if(this.hasEdit || this.hasPref){
T.add(Edit.formatText(this.iwrb.getLocalizedString("delete","Delete")),6,a);
}
List L = ReportEntityHandler.listOfReports(iCategoryId);
int row = 2;
if(L!=null){
int len = L.size();
for (int i = 0; i < len; i++) {
Report R = (Report) L.get(i);
List repinfos = ReportFinder.listOfRelatedReportInfo(R);
int col = 1;
// if(sqlEditAdmin){
// T.add(getAdminLink(R.getID(),iCategoryId),col,row);
// }
if(this.hasEdit || this.hasPref) {
T.add(getLink(R.getID(),iCategoryId),col,row);
}
col++;
T.add(Edit.formatText(R.getName()),col++,row);
T.add(Edit.formatText(R.getInfo()),col++,row);
T.add(getPrintTable(iwac,repinfos,R.getID()),col++,row);
Table def = new Table(3,1);
def.setCellspacing(2);
def.add(getXLSLink(iwac,this.XLS,R.getID()),1,1);
def.add(getTXTLink(iwac,this.TXT,R.getID()),2,1);
def.add(getPDFLink(iwac,this.PDF,R.getID()),3,1);
T.add(def,col,row);
col++;
if(this.hasEdit || this.hasPref ) {
T.add(getCheckBox(prm+i,R.getID()),col,row);
}
col++;
row++;
}
T.getContentTable().setColumnAlignment(5,"right");
T.getContentTable().setColumnAlignment(6,"right");
T.add(new HiddenInput(this.sAction,String.valueOf(Reports.ACT4)));
if(this.hasEdit|| this.hasPref){
SubmitButton deleteButtton = new SubmitButton(this.core.getImage("/shared/delete.gif"));//new Image("/reports/pics/delete.gif"));
T.add(new HiddenInput(this.sAction,String.valueOf(Reports.ACT4)));
T.addButton(deleteButtton);
HiddenInput countHidden = new HiddenInput(prefix+"count",String.valueOf(len));
T.add(countHidden);
}
}
return T;
}
private Table getPrintTable(IWApplicationContext iwac,List repinfos,int reportId){
Table T = new Table();
if(repinfos!=null){
java.util.Iterator iter = repinfos.iterator();
ReportInfo info;
int col = 1;
while(iter.hasNext()){
info = (ReportInfo) iter.next();
T.add(getPrintLink(iwac,this.PDF,reportId,info.getID()),col,1);
T.add(Edit.formatText(info.getDescription()),col,1);
T.setColumnAlignment(col,"center");
col++;
}
}
return T;
}
private CheckBox getCheckBox(String name,int id){
CheckBox chk = new CheckBox(name,String.valueOf(id));
Edit.setStyle(chk);
return chk;
}
private Link getLink(int id,int catid){
Link L = new Link(this.core.getImage("/shared/edit.gif"));// Image("/reports/pics/view.gif"));
L.setWindowToOpen(ReportViewWindow.class);
L.addParameter(PRM_REPORTID,id);
L.addParameter(PRM_CATEGORYID,catid);
L.addParameter(ReportViewer.getMenuStartClassParameter(ReportContentViewer.class));
return L;
}
private Link getAdminLink(int id,int catid){
Link L = new Link(this.core.getImage("/shared/edit.gif"));//new Image("/reports/pics/edit.gif"));
//L.setWindowToOpen(ReportSQLEditorWindow.class);
//L.addParameter(ReportSQLEditorWindow.prmReportId,id);
//L.addParameter(ReportSQLEditorWindow.prmCategoryId,catid);
return L;
}
public static Link getPrintLink(IWApplicationContext iwac,Image image,int iReportId,int iReportInfoId){
Link L = new Link( image );
L.setURL(iwac.getIWMainApplication().getMediaServletURI()+"report.pdf");
L.setTarget(Link.TARGET_BLANK_WINDOW);
L.addParameter(PRM_REPORTID,iReportId);
L.addParameter(ReportWriter.prmReportId,iReportId);
L.addParameter(ReportWriter.prmReportInfoId,iReportInfoId);
L.addParameter(MediaWritable.PRM_WRITABLE_CLASS,IWMainApplication.getEncryptedClassName(ReportWriter.class));
return L;
}
public static Link getTXTLink(IWApplicationContext iwac,Image image,int iReportId){
Link L = new Link( image );
L.setURL(iwac.getIWMainApplication().getMediaServletURI()+"report.txt");
L.setTarget(Link.TARGET_BLANK_WINDOW);
L.addParameter(PRM_REPORTID,iReportId);
L.addParameter(ReportWriter.prmReportId,iReportId);
L.addParameter(ReportWriter.prmPrintType,ReportWriter.TXT);
L.addParameter(MediaWritable.PRM_WRITABLE_CLASS,IWMainApplication.getEncryptedClassName(ReportWriter.class));
return L;
}
public static Link getPDFLink(IWApplicationContext iwac,Image image,int iReportId){
Link L = new Link( image );
L.setURL(iwac.getIWMainApplication().getMediaServletURI()+"report.pdf");
L.setTarget(Link.TARGET_BLANK_WINDOW);
L.addParameter(PRM_REPORTID,iReportId);
L.addParameter(ReportWriter.prmReportId,iReportId);
L.addParameter(ReportWriter.prmPrintType,ReportWriter.PDF);
L.addParameter(MediaWritable.PRM_WRITABLE_CLASS,IWMainApplication.getEncryptedClassName(ReportWriter.class));
return L;
}
public static Link getXLSLink(IWApplicationContext iwac,Image image,int iReportId){
Link L = new Link( image );
L.setURL(iwac.getIWMainApplication().getMediaServletURI()+"report.xls");
L.setTarget(Link.TARGET_BLANK_WINDOW);
L.addParameter(PRM_REPORTID,iReportId);
L.addParameter(ReportWriter.prmReportId,iReportId);
L.addParameter(ReportWriter.prmPrintType,ReportWriter.XLS);
L.addParameter(MediaWritable.PRM_WRITABLE_CLASS,IWMainApplication.getEncryptedClassName(ReportWriter.class));
return L;
}
public static Window getFileWindow(IWApplicationContext iwac){
Window w = new Window("Reports",iwac.getIWMainApplication().getMediaServletURI());
w.setResizable(true);
w.setMenubar(true);
w.setHeight(400);
w.setWidth(500);
return w;
}
protected void doChange(IWContext iwc) throws SQLException{
}
protected void doUpdate(IWContext iwc) throws SQLException{
}
public boolean deleteBlock(int iObjectInstanceId){
return ReportBusiness.deleteBlock(iObjectInstanceId);
}
protected void doDelete(IWContext iwc) throws SQLException{
String prm = prefix+"chk";
int count = Integer.parseInt(iwc.getParameter(prefix+"count"));
for (int i = 0; i < count; i++) {
if(iwc.getParameter(prm+i)!=null){
String sId = iwc.getParameter(prm+i);
try{
int id = Integer.parseInt(sId);
ReportBusiness.deleteReport(id);
}
catch(NumberFormatException ex){}
}
}
}
public void main(IWContext iwc){
this.isAdmin = iwc.hasEditPermission(this);
this.hasEdit = iwc.hasEditPermission(this);
this.hasPref = iwc.hasPermission(PermissionPref,this);
this.hasAdd = iwc.hasPermission(PermissionAdd,this);
this.iwrb = getResourceBundle(iwc);
this.iwb = getBundle(iwc);
this.core = iwc.getIWMainApplication().getBundle(IW_CORE_BUNDLE_IDENTIFIER);
control(iwc);
}
public synchronized Object clone() {
Reporter obj = null;
try {
obj = (Reporter)super.clone();
}
catch(Exception ex) {
ex.printStackTrace(System.err);
}
return obj;
}
public String getBundleIdentifier(){
return REPORTS_BUNDLE_IDENTIFIER;
}
}