package com.idega.block.reports.presentation;
import java.util.Map;
import com.idega.block.reports.business.ReportBusiness;
import com.idega.block.reports.business.ReportFinder;
import com.idega.block.reports.data.Report;
import com.idega.block.reports.data.ReportColumnInfo;
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.ui.CheckBox;
import com.idega.presentation.ui.DataTable;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.HiddenInput;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.util.Edit;
import com.lowagie.text.Font;
/**
* Title: idegaclasses
* Description:
* Copyright: Copyright (c) 2001
* Company: idega
* @author <a href="aron@idega.is">Aron Birkir</a>
* @version 1.0
*/
public class ReportPDFEditor extends Block implements Reports{
private final static String prmReportColId = "rcie_repcolid";
protected IWResourceBundle iwrb;
protected IWBundle iwb;
public final static String typeSticker = "sticker";
public final static String typeColumns = "columns";
public ReportPDFEditor() {
}
public String getBundleIdentifier(){
return REPORTS_BUNDLE_IDENTIFIER;
}
public String getLocalizedNameKey(){
return "pdf_report";
}
public String getLocalizedNameValue(){
return "PDF Report";
}
public void main(IWContext iwc){
this.iwrb = getResourceBundle(iwc);
this.iwb = getBundle(iwc);
if(iwc.isParameterSet(PRM_REPORTID)){
int reportColId = -1,colnr = -2;
if(iwc.isParameterSet(prmReportColId)) {
reportColId = Integer.parseInt(iwc.getParameter(prmReportColId));
}
if(iwc.isParameterSet("col_nr")) {
colnr = Integer.parseInt(iwc.getParameter("col_nr"));
}
Report eReport = ReportFinder.getReport(Integer.parseInt(iwc.getParameter(PRM_REPORTID)));
if(iwc.isParameterSet("savecols")||iwc.isParameterSet("savecols.x")){
if(colnr >= 0) {
saveColumnInfo(iwc,eReport,reportColId);
}
reportColId = -1;
colnr = -2;
}
else if(iwc.isParameterSet("dcols")){
deleteColumnInfo(iwc,reportColId);
}
Table T = new Table();
T.add(getReportColumnInfoForm(eReport.getID(),reportColId,colnr));
add(T);
}
}
private PresentationObject getReportColumnInfoForm(int iReportId,int id,int colnr){
DataTable T = new DataTable();
T.addTitle(this.iwrb.getLocalizedString("report_preferences","Report Preferences"));
T.setTitlesHorizontal(true);
T.addButton(new SubmitButton(this.iwrb.getLocalizedImageButton("save","Save"),"savecols"));
int row = 1;
int col = 1;
T.add(Edit.formatText(this.iwrb.getLocalizedString("name","Name")),col++,row);
T.add(Edit.formatText(this.iwrb.getLocalizedString("fontfamily","Font family")),col++,row);
T.add(Edit.formatText(this.iwrb.getLocalizedString("fontsize","Font size")),col++,row);
T.add(Edit.formatText(this.iwrb.getLocalizedString("fontstyle","Font style")),col++,row);
T.add(Edit.formatText(this.iwrb.getLocalizedString("colspan","Span")),col++,row);
T.add(Edit.formatText(this.iwrb.getLocalizedString("endstring","Ending")),col++,row);
row++;
Map map = ReportFinder.mapOfReportColumnInfoByColumnNumber(iReportId);
Report R = ReportFinder.getReport(iReportId);
String[] names = R.getHeaders();
DropdownMenu family = getFamilyDrop("family");
DropdownMenu size = getSizeDrop("size");
DropdownMenu style = getStyleDrop("style");
DropdownMenu span = getColumnDrop("span");
CheckBox useName = new CheckBox("usename");
DropdownMenu endString = getEndCharDrop("endstring");
boolean formAdded = false;
ReportColumnInfo info;
int firstRow = row;
for (int i = 0; i < names.length; i++) {
info = null;
col = 1;
T.add(getFontLink(names[i],i,iReportId),col++,row);
if(map!=null && map.containsKey(new Integer(i))){
info = (ReportColumnInfo) map.get(new Integer(i));
}
if(i == colnr){
if(info!=null){
family.setSelectedElement(String.valueOf(info.getFontFamily()));
size.setSelectedElement(String.valueOf(info.getFontSize()));
style.setSelectedElement(String.valueOf(info.getFontStyle()));
span.setSelectedElement(String.valueOf(info.getColumnSpan()));
endString.setSelectedElement((info.getEndChar()));
useName.setChecked(info.getShowName());
T.add(new HiddenInput(prmReportColId,String.valueOf(info.getID())));
}
T.add(new HiddenInput("col_nr",String.valueOf(colnr)));
T.add(family,col++,row);
T.add(size,col++,row);
T.add(style,col++,row);
T.add(span,col++,row);
T.add(endString,col++,row);
formAdded = true;
}
else{
if(info!=null){
T.add(Edit.formatText(getFontFamily(info.getFontFamily())),col++,row);
T.add(Edit.formatText(Float.toString(info.getFontSize())),col++,row);
T.add(Edit.formatText(getStyle(info.getFontStyle())),col++,row);
T.add(Edit.formatText(info.getColumnSpan()),col++,row);
T.add(Edit.formatText(getEndStringName(info.getEndChar())),col++,row);
Link delLi = new Link(this.iwb.getImage("/shared/deletex.gif"));
delLi.addParameter(prmReportColId,info.getID());
delLi.addParameter(PRM_REPORTID,iReportId);
delLi.addParameter("dcols","true");
T.add(delLi,col++,row);
}
}
row++;
}
if(!formAdded && colnr == -1){
T.add(new HiddenInput("col_nr",String.valueOf(0)));
T.add(family,col++,firstRow);
T.add(size,col++,firstRow);
T.add(style,col++,firstRow);
T.add(span,col++,firstRow);
T.add(endString,col++,firstRow);
formAdded = true;
}
T.add(new HiddenInput(PRM_REPORTID,Integer.toString(iReportId)));
Form F = new Form();
F.add(T);
return F;
}
public void deleteColumnInfo(IWContext iwc,int id){
ReportBusiness.deleteReportColumnInfo(id);
}
private void saveColumnInfo(IWContext iwc,Report report ,int id){
//System.err.println("saving");
int family = 0,size = 0,style = 0,colnr = -1,span = 1;;
boolean useName = iwc.isParameterSet("usename");
if(iwc.isParameterSet("col_nr")) {
colnr = Integer.parseInt(iwc.getParameter("col_nr"));
}
if(iwc.isParameterSet("family")) {
family = Integer.parseInt(iwc.getParameter("family"));
}
if(iwc.isParameterSet("size")) {
size = Integer.parseInt(iwc.getParameter("size"));
}
if(iwc.isParameterSet("style")) {
style = Integer.parseInt(iwc.getParameter("style"));
}
if(iwc.isParameterSet("span")) {
span = Integer.parseInt(iwc.getParameter("span"));
}
String endString = iwc.getParameter("endstring");
//endString = getEndStringName(endString);
ReportColumnInfo info = ((com.idega.block.reports.data.ReportColumnInfoHome)com.idega.data.IDOLookup.getHomeLegacy(ReportColumnInfo.class)).createLegacy();
if(id > 0) {
info = ReportFinder.getReportColumnInfo(id);
}
info.setColumnNumber(colnr);
info.setFontFamily(family);
info.setFontSize(size);
info.setFontStyle(style);
info.setEndChar(endString);
info.setShowName(useName);
info.setColumnSpan(span);
info.setReportId(report.getID());
ReportBusiness.saveReportColumnInfo(info);
}
private Link getFontLink(String name,int columnInfoId,int iReportId){
Link l = new Link(Edit.formatText(name));
l.addParameter(PRM_REPORTID,iReportId);
l.addParameter("col_nr",columnInfoId);
return l;
}
private DropdownMenu getFamilyDrop(String name){
DropdownMenu drp = new DropdownMenu(name);
drp.addMenuElement(String.valueOf(Font.HELVETICA),"HELVETICA");
drp.addMenuElement(String.valueOf(Font.COURIER),"COURIER");
drp.addMenuElement(String.valueOf(Font.TIMES_ROMAN),"TIMES_NEW_ROMAN");
return drp;
}
private String getFontFamily(int family){
switch (family) {
case Font.HELVETICA: return "HELVETICA";
case Font.COURIER: return "COURIER";
case Font.TIMES_ROMAN: return "TIMES_NEW_ROMAN";
}
return "";
}
private DropdownMenu getColumnDrop(String name){
DropdownMenu drp = new DropdownMenu(name);
for (int i = 1; i < 4; i++) {
drp.addMenuElement(String.valueOf(i));
}
return drp;
}
private DropdownMenu getSizeDrop(String name){
DropdownMenu drp = new DropdownMenu(name);
for (int i = 8; i < 21; i++) {
drp.addMenuElement(String.valueOf(i));
}
return drp;
}
private DropdownMenu getStyleDrop(String name){
DropdownMenu drp = new DropdownMenu(name);
drp.addMenuElement(String.valueOf(Font.NORMAL),"NORMAL");
drp.addMenuElement(String.valueOf(Font.BOLD),"BOLD");
drp.addMenuElement(String.valueOf(Font.BOLDITALIC),"BOLDITALIC");
drp.addMenuElement(String.valueOf(Font.ITALIC),"ITALIC");
drp.addMenuElement(String.valueOf(Font.STRIKETHRU),"STRIKETHRU");
drp.addMenuElement(String.valueOf(Font.UNDERLINE),"UNDERLINE");
return drp;
}
private String getStyle(int style){
switch (style) {
case Font.NORMAL: return "NORMAL";
case Font.BOLD: return "BOLD";
case Font.BOLDITALIC: return "BOLDITALIC";
case Font.ITALIC: return "ITALIC";
case Font.STRIKETHRU: return "STRIKETHRU";
case Font.UNDERLINE: return "UNDERLINE";
}
return "";
}
private DropdownMenu getEndCharDrop(String name){
DropdownMenu drp = new DropdownMenu(name);
drp.addMenuElement("space","Space");
drp.addMenuElement("newline","Newline");
drp.addMenuElement("tab","Tab");
drp.addMenuElement("tabtab","Two tabs");
return drp;
}
private String getEndStringName(String endstring){
if(endstring.equals("32")) {
return "space";
}
else if(endstring.equals("10")) {
return "newline";
}
else if(endstring.equals("\t")) {
return "tab";
}
else if(endstring.equals("\t\t")) {
return "tabtab";
}
return "";
}
private String getEndString(String stringName){
if(stringName.equals("space")) {
return "Space";
}
else if(stringName.equals("newline")) {
return "Newline";
}
else if(stringName.equals("tab")) {
return "Tab";
}
else if(stringName.equals("tabtab")) {
return "Double tab";
}
return "";
}
}