/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. 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. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
package org.compiere.print;
import java.math.BigDecimal;
import java.sql.Timestamp;
import org.compiere.model.MLocation;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.KeyNamePair;
import org.compiere.util.Language;
import org.compiere.util.NamePair;
import org.omidp.util.LocaleUtil;
import org.omidp.util.PersianCalendar;
/**
* Print Data Element
*
* @author Jorg Janke
* @version $Id: PrintDataElement.java,v 1.2 2006/07/30 00:53:02 jjanke Exp $
*/
public class PrintDataElement
{
/**
* Print Data Element Constructor
* @param columnName name
* @param value display value
* @param displayType optional displayType
* @param isPKey is primary key
* @param isPageBreak if true force page break
*/
public PrintDataElement (String columnName, Object value, int displayType, boolean isPKey, boolean isPageBreak, String format)
{
if (columnName == null)
throw new IllegalArgumentException("PrintDataElement - Name cannot be null");
m_columnName = columnName;
m_value = value;
m_displayType = displayType;
m_isPKey = isPKey;
m_isPageBreak = isPageBreak;
m_formatPattern = format;
} // PrintDataElement
/**
* Print Data Element Constructor
* @param columnName name
* @param value display value
* @param pattern Number/date format pattern
* @param displayType optional displayType
*/
public PrintDataElement(String columnName, Object value, int displayType, String pattern)
{
this (columnName, value, displayType, false, false, pattern);
} // PrintDataElement
/** Data Name */
private String m_columnName;
/** Data Value */
private Object m_value;
/** Display Type */
private int m_displayType;
/** Is Primary Key */
private boolean m_isPKey;
/** Is Page Break */
private boolean m_isPageBreak;
/** Value format pattern */
private String m_formatPattern;
/** XML Element Name */
public static final String XML_TAG = "element";
/** XML Attribute Name */
public static final String XML_ATTRIBUTE_NAME = "name";
/** XML Attribute Key */
public static final String XML_ATTRIBUTE_KEY = "key";
/**
* Get Name
* @return name
*/
public String getColumnName()
{
return m_columnName;
} // getName
/**
* Get Node Value
* @return value
*/
public Object getValue()
{
return m_value;
} // getValue
/**
* Get Function Value
* @return length or numeric value
*/
public BigDecimal getFunctionValue()
{
if (m_value == null)
return Env.ZERO;
// Numbers - return number value
if (m_value instanceof BigDecimal)
return (BigDecimal)m_value;
if (m_value instanceof Number)
return new BigDecimal(((Number)m_value).doubleValue());
// Boolean - return 1 for true 0 for false
if (m_value instanceof Boolean)
{
if (((Boolean)m_value).booleanValue())
return Env.ONE;
else
return Env.ZERO;
}
// Return Length
String s = m_value.toString();
return new BigDecimal(s.length());
} // getFunctionValue
/**
* Get Node Value Display
* @param language optional language - if null numbers/dates are not formatted
* @return display value optionally formatted
*/
public String getValueDisplay (Language language)
{
if (m_value == null)
return "";
String retValue = m_value.toString();
if (m_displayType == DisplayType.Location)
return getValueDisplay_Location();
// ID columns should be printed as ID numbers - teo_sarca [ 1673363 ]
else if (DisplayType.ID == m_displayType && m_value instanceof KeyNamePair)
return ((KeyNamePair)m_value).getID();
else if (m_columnName.equals("C_BPartner_Location_ID") || m_columnName.equals("Bill_Location_ID"))
return getValueDisplay_BPLocation();
else if (m_displayType == 0 || m_value instanceof String || m_value instanceof NamePair)
;
else if (language != null) // Optional formatting of Numbers and Dates
{
if (DisplayType.isNumeric(m_displayType)) {
retValue = DisplayType.getNumberFormat(m_displayType, language, m_formatPattern).format(m_value);
}
else if (DisplayType.isDate(m_displayType)){
if(LocaleUtil.isIranLocale())
retValue =new PersianCalendar().GregorianToSolar(DisplayType.getDateFormat(m_displayType, Language.getLoginLanguage()).format(m_value));
else
retValue = DisplayType.getDateFormat(m_displayType, language).format(m_value);
}
}
return retValue;
} // getValueDisplay
/**
* Get Node Data Value as String
* @return data value
*/
public String getValueAsString()
{
if (m_value == null)
return "";
String retValue = m_value.toString();
if (m_value instanceof NamePair)
retValue = ((NamePair)m_value).getID();
return retValue;
} // getValueDisplay
/**
* Return Address String not just name
* @return Address String
*/
private String getValueDisplay_BPLocation ()
{
try
{
int C_BPartner_Location_ID = Integer.parseInt (getValueKey ());
if (C_BPartner_Location_ID != 0)
{
MLocation loc = MLocation.getBPLocation(Env.getCtx(), C_BPartner_Location_ID, null);
if (loc != null)
return loc.toStringCR();
}
}
catch (Exception ex)
{
}
return m_value.toString();
} // getValueDisplay_BPLocation
/**
* Return Address String not just City
* @return Address String
*/
private String getValueDisplay_Location ()
{
try
{
int C_Location_ID = Integer.parseInt (getValueKey ());
if (C_Location_ID != 0)
{
MLocation loc = new MLocation (Env.getCtx(), C_Location_ID, null);
if (loc != null)
return loc.toStringCR();
}
}
catch (Exception ex)
{
}
return m_value.toString();
} // getValueDisplay_Location
/**
* Get Node Value Key
* @return key
*/
public String getValueKey()
{
if (m_value == null)
return "";
if (m_value instanceof NamePair)
return ((NamePair)m_value).getID();
return "";
} // getValueKey
/**
* Is Value Null
* @return true if value is null
*/
public boolean isNull()
{
return m_value == null;
} // isNull
/*************************************************************************/
/**
* Get Display Type
* @return Display Type
*/
public int getDisplayType()
{
return m_displayType;
} // getDisplayType
/**
* Is Value numeric
* @return true if value is a numeric
*/
public boolean isNumeric()
{
if (m_displayType == 0)
return m_value instanceof BigDecimal;
return DisplayType.isNumeric(m_displayType);
} // isNumeric
/**
* Is Value a date
* @return true if value is a date
*/
public boolean isDate()
{
if (m_displayType == 0)
return m_value instanceof Timestamp;
return DisplayType.isDate(m_displayType);
} // isDate
/**
* Is Value an ID
* @return true if value is an ID
*/
public boolean isID()
{
// ID columns are considered numbers - teo_sarca [ 1673363 ]
if (DisplayType.ID == m_displayType)
return false;
return DisplayType.isID(m_displayType);
} // isID
/**
* Is Value boolean
* @return true if value is a boolean
*/
public boolean isYesNo()
{
if (m_displayType == 0)
return m_value instanceof Boolean;
return DisplayType.YesNo == m_displayType;
} // isYesNo
/**
* Is Value the primary key of row
* @return true if value is the PK
*/
public boolean isPKey()
{
return m_isPKey;
} // isPKey
/**
* Column value forces page break
* @return true if page break
*/
public boolean isPageBreak()
{
return m_isPageBreak;
} // isPageBreak
/*************************************************************************/
/**
* HashCode
* @return hash code
*/
public int hashCode()
{
if (m_value == null)
return m_columnName.hashCode();
return m_columnName.hashCode() + m_value.hashCode();
} // hashCode
/**
* Equals
* @param compare compare object
* @return true if equals
*/
public boolean equals (Object compare)
{
if (compare instanceof PrintDataElement)
{
PrintDataElement pde = (PrintDataElement)compare;
if (pde.getColumnName().equals(m_columnName))
{
if (pde.getValue() != null && pde.getValue().equals(m_value))
return true;
if (pde.getValue() == null && m_value == null)
return true;
}
}
return false;
} // equals
/**
* String representation
* @return info
*/
public String toString()
{
StringBuffer sb = new StringBuffer(m_columnName).append("=").append(m_value);
if (m_isPKey)
sb.append("(PK)");
return sb.toString();
} // toString
/**
* Value Has Key
* @return true if value has a key
*/
public boolean hasKey()
{
return m_value instanceof NamePair;
} // hasKey
/**
* String representation with key info
* @return info
*/
public String toStringX()
{
if (m_value instanceof NamePair)
{
NamePair pp = (NamePair)m_value;
StringBuffer sb = new StringBuffer(m_columnName);
sb.append("(").append(pp.getID()).append(")")
.append("=").append(pp.getName());
if (m_isPKey)
sb.append("(PK)");
return sb.toString();
}
else
return toString();
} // toStringX
public String getM_formatPattern() {
return m_formatPattern;
}
public void setM_formatPattern(String pattern) {
m_formatPattern = pattern;
}
} // PrintDataElement