Java tutorial
/************************************************************************************* * Product: SFAndroid (Sales Force Mobile) * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * Copyright (C) 2012-2014 E.R.P. Consultores y Asociados, S.A. All Rights Reserved. * * Contributor(s): Yamel Senih www.erpconsultoresyasociados.com * *************************************************************************************/ package org.spinsuite.view.report; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.security.InvalidParameterException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.logging.Level; import jxl.Workbook; import jxl.write.DateFormat; import jxl.write.DateTime; import jxl.write.Label; import jxl.write.Number; import jxl.write.NumberFormats; import jxl.write.WritableCell; import jxl.write.WritableCellFormat; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import org.spinsuite.base.DB; import org.spinsuite.base.R; import org.spinsuite.process.ProcessInfo; import org.spinsuite.process.ProcessInfoParameter; import org.spinsuite.util.DisplayType; import org.spinsuite.util.Env; import org.spinsuite.util.FilterValue; import org.spinsuite.util.LogM; import android.content.Context; import android.database.Cursor; import android.os.Build; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; /** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> * */ public class ReportPrintData { /** * * *** Constructor *** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 15:00:00 * @param ctx * @param m_pi * @param m_AD_PrintFormat_ID * @param conn */ public ReportPrintData(Context ctx, ProcessInfo m_pi, int m_AD_PrintFormat_ID, DB conn) { this.ctx = ctx; this.m_pi = m_pi; this.conn = conn; // New Query if (m_AD_PrintFormat_ID != 0) m_reportQuery = new ReportPrintQuery(ctx, m_AD_PrintFormat_ID, conn); // Get Total Prefix m_Value = ctx.getResources().getString(R.string.msg_Total); // Function Name instanceFunctionName(); } /** Context */ private Context ctx = null; /** Process Information */ private ProcessInfo m_pi = null; /** Connection */ private DB conn = null; /** Report Data */ private ArrayList<RowPrintData> m_data = null; /** Report Print SQL */ private ReportPrintQuery m_reportQuery = null; /** Current Summary Function Row */ private PrintDataFunction[] m_currentSummaryFunctionRow = null; /** Current Function Row */ private PrintDataFunction[] m_currentFunctionRow = null; /** Current Row per Changed */ private ColumnPrintData[] m_currentRow = null; /** Is Aggregate Function */ private boolean m_IsAggregateFunction = false; /** Is First Record */ private boolean m_IsFirst = true; /** Is Loaded */ private boolean m_IsLoaded = true; /** Total Prefix */ private String m_Value = ""; /** Symbols */ private String[] FUNCTION_NAME = null; /** * Instance Function Name * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 04/04/2014, 10:20:01 * @return void */ private void instanceFunctionName() { FUNCTION_NAME = new String[] { // Sum " (" + ctx.getString(R.string.msg_FunctionSum) + ")", // Mean " (" + ctx.getString(R.string.msg_FunctionMean) + ")", // Count " (" + ctx.getString(R.string.msg_FunctionCount) + ")", // Minimum " (" + ctx.getString(R.string.msg_FunctionMinimum) + ")", // Maximum " (" + ctx.getString(R.string.msg_FunctionMaximum) + ")", // Variance " (" + ctx.getString(R.string.msg_FunctionVariance) + ")", // Standard Deviation " (" + ctx.getString(R.string.msg_FunctionDeviation) + ")" }; } /** * Load Data from Print Format * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 15:00:04 * @param m_AD_PrintFormat_ID * @return * @return ArrayList<RowPrintData> */ public ArrayList<RowPrintData> loadData(int m_AD_PrintFormat_ID) { // Load new Print Format if (m_AD_PrintFormat_ID != 0) { m_reportQuery = new ReportPrintQuery(ctx, m_AD_PrintFormat_ID, conn); } // Valid Query if (m_reportQuery == null) { // Get Default Print Format int defaultPrintFormat_ID = getDefaultPritFormat_ID(); // if (defaultPrintFormat_ID != -1) { m_AD_PrintFormat_ID = defaultPrintFormat_ID; m_reportQuery = new ReportPrintQuery(ctx, m_AD_PrintFormat_ID, conn); } else throw new InvalidParameterException("Print Format not Found"); } // Set to default m_IsLoaded = false; m_IsFirst = true; // Load Data Query try { loadResult(); } catch (Exception e) { m_pi.setSummary(ctx.getResources().getString(R.string.msg_Error) + ":" + e.getMessage(), true); LogM.log(ctx, getClass(), Level.SEVERE, "Error In Load Report:", e); } // Result return m_data; } /** * Instance Data Function * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 29/03/2014, 11:41:41 * @param columns * @return void */ private void instanceDataFunction(InfoReportField[] columns) { // m_currentSummaryFunctionRow = new PrintDataFunction[columns.length]; m_currentFunctionRow = new PrintDataFunction[columns.length]; // Current Row m_currentRow = new ColumnPrintData[columns.length]; // for (int i = 0; i < columns.length; i++) { m_currentRow[i] = new ColumnPrintData(columns[i].PrintName, columns[i].PrintNameSuffix); m_currentSummaryFunctionRow[i] = new PrintDataFunction(); m_currentFunctionRow[i] = new PrintDataFunction(); // Set Aggregate Function if (columns[i].IsSummarized || columns[i].IsCounted || columns[i].IsMaxCalc || columns[i].IsMinCalc || columns[i].IsAveraged || columns[i].IsVarianceCalc || columns[i].IsDeviationCalc) m_IsAggregateFunction = true; } } /** * Reset Current Data Function * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 29/03/2014, 12:22:40 * @param columns * @return void */ private void resetDataFunction(InfoReportField[] columns) { for (int i = 0; i < columns.length; i++) { m_currentFunctionRow[i].reset(); // Set Aggregate Function if (columns[i].IsSummarized || columns[i].IsCounted || columns[i].IsMaxCalc || columns[i].IsMinCalc || columns[i].IsAveraged || columns[i].IsVarianceCalc || columns[i].IsDeviationCalc) m_IsAggregateFunction = true; } } /** * Load Data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 15:58:47 * @return * @return ArrayList<RowPrintData> */ public ArrayList<RowPrintData> loadData() { return loadData(0); } /** * Get Data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 20:55:42 * @return * @return ArrayList<RowPrintData> */ public ArrayList<RowPrintData> getData() { return m_data; } /** * Load Criteria filter from Parameters * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 27/03/2014, 16:42:11 * @param tableName * @return void */ private FilterValue loadCriteria(String tableName) { ProcessInfoParameter[] param = m_pi.getParameter(); // Get Parameter if (param != null) { StringBuffer sqlWhere = new StringBuffer(); FilterValue m_criteria = new FilterValue(); // Iterate for (ProcessInfoParameter para : param) { // Get SQL Name String name = tableName + "." + para.getParameterName(); // if (para.getParameter() == null && para.getParameter_To() == null) continue; else { // Add And if (sqlWhere.length() > 0) sqlWhere.append(" AND "); // // From and To is filled if (para.getParameter() != null && para.getParameter_To() != null) { // sqlWhere.append(name).append(" => ?").append(" AND ").append(name).append(" <= ?"); // Add Value m_criteria.addValue(DisplayType.getJDBC_Value(para.getDisplayType(), para.getParameter())); // Add To m_criteria .addValue(DisplayType.getJDBC_Value(para.getDisplayType(), para.getParameter_To())); // Only From } else if (para.getParameter() != null) { // sqlWhere.append(name).append(" = ?"); // Add Value m_criteria.addValue(DisplayType.getJDBC_Value(para.getDisplayType(), para.getParameter())); // Only To } else if (para.getParameter_To() != null) { // sqlWhere.append(name).append(" <= ?"); // Add Value m_criteria .addValue(DisplayType.getJDBC_Value(para.getDisplayType(), para.getParameter_To())); } } } // Add Where m_criteria.setWhereClause(sqlWhere.toString()); // Return Criteria return m_criteria; } // Return return null; } /** * Load Result from Data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 16:19:07 * @return void */ private void loadResult() { boolean handleConnection = false; // New Connection if (conn == null) { conn = new DB(ctx); handleConnection = true; } // Open if (!conn.isOpen()) conn.openDB(DB.READ_ONLY); // Add Criteria if exist FilterValue m_criteria = loadCriteria(m_reportQuery.getTableName()); // Where String where = null; // Values String[] values = null; // if (m_criteria != null) { where = m_criteria.getWhereClause(); values = m_criteria.getValues(); } // String sql = m_reportQuery.getSQL(where); // Get ResultSet Cursor rs = null; rs = conn.querySQL(sql, values); // New Data m_data = new ArrayList<RowPrintData>(); // if (rs.moveToFirst()) { // Columns InfoReportField[] columns = m_reportQuery.getColumns(); // instanceDataFunction(columns); m_IsLoaded = true; // Add Header do { // Add Row m_data.add(getRowData(columns, rs)); // Not Is First m_IsFirst = false; } while (rs.moveToNext()); // Add Summary Function addFunctionRowFunction(columns); } // Close Connection if (handleConnection) conn.closeDB(rs); } /** * Get Row Data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 21:35:57 * @param columns * @param rs * @return * @return RowPrintData */ private RowPrintData getRowData(InfoReportField[] columns, Cursor rs) { // New Row RowPrintData rPrintData = new RowPrintData(); // Get Values for (int i = 0; i < columns.length; i++) { // Current Column InfoReportField column = columns[i]; String value = rs.getString(i); // Add Data if (!isChanged(m_currentRow[i].getValue(), value) && column.IsSuppressRepeats) rPrintData.addColumn("", column.PrintNameSuffix); else rPrintData.addColumn(value, column.PrintNameSuffix); // Set Name on first row if (m_IsFirst && column.IsGroupBy) m_currentRow[i].setValue(value); // if (m_IsAggregateFunction) { // Add To Function m_currentSummaryFunctionRow[i].addRowValue(value, column); m_currentFunctionRow[i].addRowValue(value, column); // Add Function Row if (column.IsGroupBy && isChanged(m_currentRow[i].getValue(), value)) { // Add Function addRowFunction(columns, i); // Change m_currentRow[i].setValue(value); // Reset Current Function resetDataFunction(columns); } } } // Return return rPrintData; } /** * Add Row Function * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 29/03/2014, 14:31:59 * @param columns * @param indexGroup * @return void */ private void addRowFunction(InfoReportField[] columns, int indexGroup) { for (int function = 0; function < PrintDataFunction.getSupportedFunctionQty(); function++) { // Get Prefix String value = m_currentRow[indexGroup].getValue(); // Get Row Function RowPrintData functionRow = getRowFunction(columns, value, indexGroup, function, m_currentFunctionRow); // Have Function if (functionRow != null) m_data.add(functionRow); } } /** * Add Function to Report * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 29/03/2014, 14:41:44 * @param columns * @return void */ private void addFunctionRowFunction(InfoReportField[] columns) { // if (!m_IsAggregateFunction || !m_IsLoaded) return; // for (int i = 0; i < columns.length; i++) { // Only Group By if (!columns[i].IsGroupBy) continue; // Get Functions for (int function = 0; function < PrintDataFunction.getSupportedFunctionQty(); function++) { // Get Prefix String value = m_Value; // Get Row Function RowPrintData functionRow = getRowFunction(columns, value, i, function, m_currentSummaryFunctionRow); // Have Function if (functionRow != null) m_data.add(functionRow); } } } /** * Get Data Function Row * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 29/03/2014, 11:15:23 * @param columns * @param label * @param indexGroup * @param function * @param m_function * @return * @return RowPrintData */ private RowPrintData getRowFunction(InfoReportField[] columns, String label, int indexGroup, int function, PrintDataFunction[] m_function) { RowPrintData rPrintFunctionData = new RowPrintData(false, true); String functionLabel = label; // boolean isFunction = false; for (int i = 0; i < columns.length; i++) { ColumnPrintData column = new ColumnPrintData(null, null); PrintDataFunction currentFuctionColumn = m_function[i]; InfoReportField printFormatItem = columns[i]; // if (function == PrintDataFunction.F_SUM && printFormatItem.IsSummarized) { // Sum column.setValue(currentFuctionColumn.getSum().toString()); label += PrintDataFunction.getFunctionSymbol(function); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); isFunction = true; } else if (function == PrintDataFunction.F_COUNT && printFormatItem.IsCounted) { // Count column.setValue(String.valueOf(currentFuctionColumn.getCount())); label += PrintDataFunction.getFunctionSymbol(function); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); isFunction = true; } else if (function == PrintDataFunction.F_MAX && printFormatItem.IsMaxCalc) { // Maximum column.setValue(currentFuctionColumn.getMax().toString()); label += PrintDataFunction.getFunctionSymbol(function); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); isFunction = true; } else if (function == PrintDataFunction.F_MIN && printFormatItem.IsMinCalc) { // Minimum column.setValue(currentFuctionColumn.getMin().toString()); label += PrintDataFunction.getFunctionSymbol(function); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); isFunction = true; } else if (function == PrintDataFunction.F_MEAN && printFormatItem.IsAveraged) { // Average column.setValue(currentFuctionColumn.getAvgValue().toString()); label += PrintDataFunction.getFunctionSymbol(function); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); isFunction = true; } else if (function == PrintDataFunction.F_VARIANCE && printFormatItem.IsVarianceCalc) { // Variance column.setValue(currentFuctionColumn.getVariance().toString()); label += PrintDataFunction.getFunctionSymbol(function); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); isFunction = true; } else if (function == PrintDataFunction.F_DEVIATION && printFormatItem.IsDeviationCalc) { // Deviation column.setValue(currentFuctionColumn.getDeviation().toString()); functionLabel += PrintDataFunction.getFunctionName(function, FUNCTION_NAME); label += PrintDataFunction.getFunctionSymbol(function); isFunction = true; } // Add rPrintFunctionData.addColumn(column); } // Function if (isFunction) { // Set Prefix rPrintFunctionData.get(indexGroup).setValue(label); // Function Value rPrintFunctionData.get(indexGroup).setFunctionValue(functionLabel); // Return return rPrintFunctionData; } // return null; } /** * Verify if exists changes * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 28/03/2014, 16:48:36 * @param value1 * @param value2 * @return * @return boolean */ private boolean isChanged(String value1, String value2) { if ((value1 == null && value2 != null) || (value1 != null && value2 == null)) return true; // return !value1.equals(value2); } /** * Get a default print format or any if exists * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 14:20:21 * @return * @return int */ private int getDefaultPritFormat_ID() { StringBuffer sql = new StringBuffer( "SELECT MAX(pf.AD_PrintFormat_ID) " + "FROM AD_PrintFormat pf " + "WHERE "); // Report View if (m_pi.getAD_ReportView_ID() != 0) sql.append("pf.AD_ReportView_ID = ").append(m_pi.getAD_ReportView_ID()); // Print Format else if (m_pi.getAD_PrintFormat_ID() != 0) sql.append("pf.AD_PrintFormat_ID = ").append(m_pi.getAD_PrintFormat_ID()); // Show Log LogM.log(ctx, getClass(), Level.FINE, "SQL=" + sql.toString()); // Get Value return DB.getSQLValue(ctx, sql.toString()); } /** * Get Columns * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 27/03/2014, 10:32:04 * @return * @return InfoReportField[] */ public InfoReportField[] getColumns() { return m_reportQuery.getColumns(); } /** * Create a XLS from Data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 31/03/2014, 23:05:54 * @return * @throws IOException * @throws RowsExceededException * @throws WriteException * @return String */ public String createXLS() throws IOException, RowsExceededException, WriteException { String path = Env.getAppDirName(ctx); String title = m_reportQuery.getInfoReport().getName(); path = path + File.separator + title + ".xls"; File export = new File(path); // Delete before generate if (export.exists()) export.delete(); // Create createXLS(export); return path; } /** * Create a XLS File * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 31/03/2014, 15:09:51 * @param outFile * @return void * @throws IOException * @throws WriteException * @throws RowsExceededException */ private void createXLS(File outFile) throws IOException, RowsExceededException, WriteException { // if (outFile == null) return; // Create Sheet WritableWorkbook workbook = Workbook.createWorkbook(outFile); WritableSheet sheet = workbook.createSheet(m_pi.getTitle(), 0); // InfoReportField[] columns = m_reportQuery.getColumns(); // Add Header for (int col = 0; col < columns.length; col++) { sheet.addCell(new Label(col, 0, columns[col].PrintName)); } // Add Detail for (int row = 0; row < m_data.size(); row++) { // Get Row RowPrintData rPrintData = m_data.get(row); // Iterate for (int col = 0; col < columns.length; col++) { InfoReportField column = columns[col]; ColumnPrintData cPrintData = rPrintData.get(col); WritableCell cell = null; WritableCellFormat cellFormat = null; // if (DisplayType.INTEGER == column.DisplayType) { // Is Integer // Integer cellFormat = new WritableCellFormat(NumberFormats.INTEGER); // cell = new Number(col, row + 1, DisplayType.getNumber(cPrintData.getValue()).doubleValue(), cellFormat); } else if (DisplayType.isBigDecimal(column.DisplayType)) { // Is Big Decimal // Float cellFormat = new WritableCellFormat(NumberFormats.FLOAT); // cell = new Number(col, row + 1, DisplayType.getNumber(cPrintData.getValue()).doubleValue(), cellFormat); } else if (DisplayType.isText(column.DisplayType) || DisplayType.isLookup(column.DisplayType)) { // Is String cell = new Label(col, row + 1, cPrintData.getValue()); } else if (DisplayType.isDate(column.DisplayType)) { // Is Date String pattern = DisplayType.getDateFormat(ctx, column.DisplayType).toPattern(); DateFormat customDateFormat = new DateFormat(pattern); WritableCellFormat dateFormat = new WritableCellFormat(customDateFormat); long date = Long.getLong(cPrintData.getValue(), 0); cell = new DateTime(col, row + 1, new Date(date), dateFormat); } // Add to Sheet if (cell != null) sheet.addCell(cell); } } // Close File workbook.write(); workbook.close(); } /** * Create a PDF File from Data * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 02/04/2014, 22:54:14 * @return * @throws FileNotFoundException * @throws DocumentException * @return String */ public String createPDF() throws FileNotFoundException, DocumentException { String path = Env.getAppDirName(ctx); String title = m_reportQuery.getInfoReport().getName(); path = path + File.separator + title + ".pdf"; File export = new File(path); // Delete before generate if (export.exists()) export.delete(); // Create createPDF(export); return path; } /** * Create a PDF File * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 02/04/2014, 22:52:09 * @param outFile * @throws FileNotFoundException * @throws DocumentException * @return void */ private void createPDF(File outFile) throws FileNotFoundException, DocumentException { Document document = new Document(PageSize.LETTER); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outFile)); PDFHeaderAndFooter event = new PDFHeaderAndFooter(); writer.setPageEvent(event); document.open(); // document.addAuthor(ctx.getResources().getString(R.string.app_name)); document.addCreationDate(); // Paragraph title = new Paragraph(m_reportQuery.getInfoReport().getName()); // Set Font title.getFont().setStyle(Font.BOLD); // Set Alignment title.setAlignment(Paragraph.ALIGN_CENTER); // Add Title document.add(title); // Add New Line document.add(Chunk.NEWLINE); // Parameters ProcessInfoParameter[] param = m_pi.getParameter(); // Get Parameter if (param != null) { // boolean isFirst = true; // Iterate for (ProcessInfoParameter para : param) { // Get SQL Name String name = para.getInfo(); StringBuffer textParameter = new StringBuffer(); if (para.getParameter() == null && para.getParameter_To() == null) continue; else { // Add Parameters Title if (isFirst) { Paragraph titleParam = new Paragraph( ctx.getResources().getString(R.string.msg_ReportParameters)); // Set Font titleParam.getFont().setStyle(Font.BOLDITALIC); // Add to Document document.add(titleParam); isFirst = false; } // Add Parameters Name if (para.getParameter() != null && para.getParameter_To() != null) { // From and To is filled // textParameter.append(name).append(" => ").append(para.getDisplayValue()).append(" <= ") .append(para.getDisplayValue_To()); } else if (para.getParameter() != null) { // Only From // textParameter.append(name).append(" = ").append(para.getDisplayValue()); } else if (para.getParameter_To() != null) { // Only To // textParameter.append(name).append(" <= ").append(para.getDisplayValue_To()); } } // Add to Document Paragraph viewParam = new Paragraph(textParameter.toString()); document.add(viewParam); } } document.add(Chunk.NEWLINE); // InfoReportField[] columns = m_reportQuery.getColumns(); // Add Table PdfPTable table = new PdfPTable(columns.length); table.setSpacingBefore(4); // Add Header PdfPCell headerCell = new PdfPCell(new Phrase(m_reportQuery.getInfoReport().getName())); headerCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); headerCell.setColspan(columns.length); // Add to Table table.addCell(headerCell); // Add Header // Decimal and Date Format DecimalFormat[] cDecimalFormat = new DecimalFormat[columns.length]; SimpleDateFormat[] cDateFormat = new SimpleDateFormat[columns.length]; for (int i = 0; i < columns.length; i++) { InfoReportField column = columns[i]; // Only Numeric if (DisplayType.isNumeric(column.DisplayType)) cDecimalFormat[i] = DisplayType.getNumberFormat(ctx, column.DisplayType, column.FormatPattern); // Only Date else if (DisplayType.isDate(column.DisplayType)) cDateFormat[i] = DisplayType.getDateFormat(ctx, column.DisplayType, column.FormatPattern); // Phrase phrase = new Phrase(column.PrintName); PdfPCell cell = new PdfPCell(phrase); if (column.FieldAlignmentType.equals(InfoReportField.FIELD_ALIGNMENT_TYPE_TRAILING_RIGHT)) cell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT); else if (column.FieldAlignmentType.equals(InfoReportField.FIELD_ALIGNMENT_TYPE_CENTER)) cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); else cell.setHorizontalAlignment(PdfPCell.ALIGN_UNDEFINED); // table.addCell(cell); } // Add Detail for (int row = 0; row < m_data.size(); row++) { // Get Row RowPrintData rPrintData = m_data.get(row); // Iterate for (int col = 0; col < columns.length; col++) { InfoReportField column = columns[col]; ColumnPrintData cPrintData = rPrintData.get(col); Phrase phrase = null; PdfPCell cell = new PdfPCell(); // String value = cPrintData.getValue(); if (DisplayType.isNumeric(column.DisplayType)) { // Number // Format DecimalFormat decimalFormat = cDecimalFormat[col]; // Format if (decimalFormat != null) value = decimalFormat.format(DisplayType.getNumber(value)); // Set Value cell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT); } else if (DisplayType.isDate(column.DisplayType)) { // Is Date SimpleDateFormat dateFormat = cDateFormat[col]; if (dateFormat != null) { long date = Long.getLong(value, 0); value = dateFormat.format(new Date(date)); } } // Set Value phrase = new Phrase(value); // if (column.FieldAlignmentType.equals(InfoReportField.FIELD_ALIGNMENT_TYPE_TRAILING_RIGHT)) cell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT); else if (column.FieldAlignmentType.equals(InfoReportField.FIELD_ALIGNMENT_TYPE_CENTER)) cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); else cell.setHorizontalAlignment(PdfPCell.ALIGN_UNDEFINED); // Set Font if (rPrintData.isFunctionRow()) { // Set Function Value if (cPrintData.getFunctionValue() != null && cPrintData.getFunctionValue().length() > 0) phrase = new Phrase(cPrintData.getFunctionValue()); // Set Font phrase.getFont().setStyle(Font.BOLDITALIC); } // Add to Table cell.setPhrase(phrase); table.addCell(cell); } } // Add Table to Document document.add(table); // New Line document.add(Chunk.NEWLINE); // Add Footer StringBuffer footerText = new StringBuffer(Env.getContext(ctx, "#SUser")); footerText.append("("); footerText.append(Env.getContext(ctx, "#AD_Role_Name")); footerText.append("@"); footerText.append(Env.getContext(ctx, "#AD_Client_Name")); footerText.append("."); footerText.append(Env.getContext(ctx, "#AD_Org_Name")); footerText.append("{").append(Build.MANUFACTURER).append(".").append(Build.MODEL).append("}) "); // Date SimpleDateFormat pattern = DisplayType.getDateFormat(ctx, DisplayType.DATE_TIME); footerText.append(" ").append(ctx.getResources().getString(R.string.Date)).append(" = "); footerText.append(pattern.format(new Date())); // Paragraph footer = new Paragraph(footerText.toString()); footer.setAlignment(Paragraph.ALIGN_CENTER); // Set Font footer.getFont().setSize(8); // Add Footer document.add(footer); // Close Document document.close(); } /** * Get Report Information * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 02/04/2014, 21:44:32 * @return * @return InfoReport */ public InfoReport getInfoReport() { return m_reportQuery.getInfoReport(); } }