/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2008 SC ARHIPAC SERVICE SRL. All Rights Reserved. *
* 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. *
*****************************************************************************/
package org.adempiere.impexp;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import org.adempiere.base.IGridTabExporter;
import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.GridField;
import org.compiere.model.GridTab;
import org.compiere.model.Lookup;
import org.compiere.model.MLookup;
import org.compiere.model.MLookupFactory;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Msg;
/**
* Excel (XLS) Exporter Adapter for GridTab
* @author Teo Sarca, www.arhipac.ro
*
FR [ 1943731 ] Window data export functionality
*/
public class GridTabExcelExporter extends AbstractExcelExporter implements IGridTabExporter
{
private GridTab m_tab = null;
/**
* Default constructor
*/
public GridTabExcelExporter()
{
setFreezePane(0, 1);
}
@Override
public int getColumnCount()
{
return m_tab.getFieldCount();
}
@Override
public int getDisplayType(int row, int col)
{
return m_tab.getField(col).getDisplayType();
}
@Override
public String getHeaderName(int col)
{
return m_tab.getField(col).getHeader();
}
@Override
public int getRowCount()
{
return m_tab.getRowCount();
}
@Override
public Object getValueAt(int row, int col)
{
GridField f = m_tab.getField(col);
Object key = m_tab.getValue(row, f.getColumnName());
Object value = key;
Lookup lookup = f.getLookup();
if (lookup != null)
{
;
}
else if (f.getDisplayType() == DisplayType.Button)
{
lookup = getButtonLookup(f);
}
//
if (lookup != null)
{
value = lookup.getDisplay(key);
}
return value;
}
@Override
public boolean isColumnPrinted(int col)
{
GridField f = m_tab.getField(col);
// Hide not displayed fields
if (!f.isDisplayed())
return false;
// Hide encrypted fields
if (f.isEncrypted())
return false;
// Hide simple button fields without a value
if (f.getDisplayType() == DisplayType.Button && f.getAD_Reference_Value_ID() == 0)
return false;
return true;
}
@Override
public boolean isFunctionRow()
{
return false;
}
@Override
public boolean isPageBreak(int row, int col)
{
return false;
}
@Override
protected void setCurrentRow(int row)
{
; // nothing
}
@Override
protected int getCurrentRow()
{
return m_tab.getCurrentRow();
}
/** Column Name:MLookup */
private HashMap m_buttonLookups = new HashMap();
/**
* @param mField
* @return lookup for field
*/
private MLookup getButtonLookup(GridField mField)
{
MLookup lookup = m_buttonLookups.get(mField.getColumnName());
if (lookup != null)
return lookup;
// TODO: refactor with org.compiere.grid.ed.VButton.setField(GridField)
if (mField.getColumnName().endsWith("_ID") && !mField.getColumnName().equals("Record_ID"))
{
lookup = MLookupFactory.get(Env.getCtx(), mField.getWindowNo(), 0,
mField.getAD_Column_ID(), DisplayType.Search);
}
else if (mField.getAD_Reference_Value_ID() != 0)
{
// Assuming List
lookup = MLookupFactory.get(Env.getCtx(), mField.getWindowNo(), 0,
mField.getAD_Column_ID(), DisplayType.List);
}
//
m_buttonLookups.put(mField.getColumnName(), lookup);
return lookup;
}
@Override
public void export(GridTab gridTab, List childs, boolean currentRowOnly, File file,int indxDetailSelected) {
m_tab = gridTab;
setCurrentRowOnly(currentRowOnly);
try {
export(file, null);
} catch (Exception e) {
throw new AdempiereException(e);
}
}
@Override
public String getFileExtension() {
return "xls";
}
@Override
public String getFileExtensionLabel() {
return Msg.getMsg(Env.getCtx(), "FileXLS");
}
@Override
public String getContentType() {
return "application/vnd.ms-excel";
}
@Override
public String getSuggestedFileName(GridTab gridTab) {
return gridTab.getName() + "." + getFileExtension();
}
/**
* {@inheritDoc}
* no detail tab is support to export with excel
*/
@Override
public boolean isExportableTab(GridTab gridTab) {
return false;
}
@Override
public boolean isDisplayed(int row, int col)
{
return true;
}
}