AtrBean.java
package sk.iway.iwcm.doc;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.StringTokenizer;
import org.apache.struts.util.ResponseUtils;
import sk.iway.iwcm.DB;
import sk.iway.iwcm.DBPool;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.tags.SelectTag;
/**
* Bean popisujuci atribut stranky (vratane definicii)
*
*@Title WebJET 4.0
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2002
*@author $Author: jeeff $
*@version $Revision: 1.2 $
*@created Streda, 2003, október 15
*@modified $Date: 2003/10/24 15:33:30 $
*/
@SuppressWarnings("java:S1659")
public class AtrBean implements Serializable
{
private int atrId;
private String atrName;
private String atrDescription;
private String atrDefaultValue;
private int atrType;
private int docId;
private double valueNumber;
private boolean valueBool;
private String valueString;
private int orderPriority;
private String atrGroup;
private String trueValue;
private String falseValue;
/**
* vygeneruje HTML podobu atributu
* @return
*/
public String getHtml()
{
return getHtml(false, null, null, null);
}
/**
* vygeneruje HTML podobu atributu
* @return
*/
public String getHtml(boolean onWebPage) {
return getHtml(onWebPage, null, null, null);
}
/**
* vygeneruje HTML podobu atributu
* @return
*/
public String getHtml(boolean onWebPage, String name, String id, String classes)
{
if (atrDefaultValue == null) atrDefaultValue = "";
StringBuilder ret = null;
String actualValue = "";
//ak mame docid, znamena to, ze uz to ma v DB nejaku hodnotu
if (docId > 0)
{
actualValue = getValue();
}
String delimeter = ",";
if(atrDefaultValue.indexOf("|") != -1 )
{
delimeter = "|"; //ak najdem '|', parsujem podla '|'
}
StringTokenizer st = new StringTokenizer(atrDefaultValue, delimeter);
if (st.countTokens()>1)
{
if(onWebPage)
{
Prop prop = Prop.getInstance();
ret = new StringBuilder("<option value=''>"+prop.getText("components.atr.doesntMatter")+"</option>");
}
else
{
if(Tools.isEmpty(name))
ret = new StringBuilder("<select name='atr_"+atrId+"' ");
else
ret = new StringBuilder("<select name='"+name+"' ");
if(Tools.isNotEmpty(id)) ret.append("id='"+id+"' ");
if(Tools.isNotEmpty(classes)) ret.append("class='"+classes+"' ");
ret.append(">");
ret.append("<option value=''></option>");
}
String tmp, selected;
while (st.hasMoreTokens())
{
tmp = st.nextToken();
if (atrType==AtrDB.TYPE_BOOL)
{
if ("true".equalsIgnoreCase(tmp) || "yes".equalsIgnoreCase(tmp))
{
tmp = "true";
}
else
{
tmp = "false";
}
}
Logger.debug(AtrBean.class, "Select atr");
if (tmp.compareTo(actualValue)==0)
{
selected = " selected";
}
else
{
selected = "";
}
ret.append("<option value='").append(ResponseUtils.filter(tmp)).append('\'').append(selected).append('>').append(tmp).append("</option>");
}
if(!onWebPage)
{
ret.append("</select>");
}
}
else
{
if (atrDefaultValue.startsWith("multiline"))
{
int cols=40;
int rows=4;
st = new StringTokenizer(atrDefaultValue, "-");
if (st.countTokens() == 3)
{
st.nextToken();
//pocet stlpcov
cols = Tools.getIntValue(st.nextToken(), cols);
rows = Tools.getIntValue(st.nextToken(), rows);
}
if (docId < 1)
{
actualValue = "";
}
ret = new StringBuilder("<textarea name='atr_"+atrId+"' rows='"+rows+"' cols='"+cols+"'>"+actualValue+"</textarea>");
}
else if (atrDefaultValue.equals("autoSelect"))
{
if(onWebPage)
{
ret = new StringBuilder("<option value=''>nezáleží</option>");
}
else
{
ret = new StringBuilder("<select name='atr_"+atrId+"' onChange='htmlSelectTagAddOption(this)'>");
ret.append("<option value=''></option>");
}
//ziskaj zoznam hodnot tohto atributu z DB
Connection db_conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
{
db_conn = DBPool.getConnection();
//nemozeme pouzit DISTINCT, pretoze MySQL nie je case sensitive
ps = db_conn.prepareStatement("SELECT value_string FROM doc_atr WHERE atr_id=? ORDER BY value_string");
ps.setInt(1, getAtrId());
rs = ps.executeQuery();
String value, selected;
Map<String, String> values = new Hashtable<>();
while (rs.next())
{
value = DB.getDbString(rs, "value_string");
if (values.get(value)!=null) continue;
values.put(value, value);
if (value.compareTo(actualValue)==0)
{
selected = " selected";
}
else
{
selected = "";
}
ret.append("<option value='").append(ResponseUtils.filter(value)).append('\'').append(selected).append('>').append(value).append("</option>");
}
rs.close();
ps.close();
db_conn.close();
rs = null;
ps = null;
db_conn = null;
if(!onWebPage)
{
ret.append("<option value='"+SelectTag.NEW_OPTION_VALUE+"'>+++</option>");
}
}
catch (Exception ex)
{
sk.iway.iwcm.Logger.error(ex);
}
finally
{
try
{
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (db_conn != null)
db_conn.close();
}
catch (Exception ex2)
{
sk.iway.iwcm.Logger.error(ex2);
}
}
//ret += "<option value='"+tmp+"'"+selected+">"+tmp+"</option>";
if(!onWebPage)
{
ret.append("</select>");
}
}
else
{
if (docId < 1)
{
actualValue = atrDefaultValue;
}
if (getAtrType()==AtrDB.TYPE_BOOL)
{
ret = new StringBuilder("<input type='radio' name='atr_"+atrId+"' value='false'");
if (isValueBool()==false) ret.append( " checked='checked'");
ret.append( "> "+getFalseValue());
ret.append( "<br>");
ret.append( "<input type='radio' name='atr_"+atrId+"' value='true'");
if (isValueBool()==true) ret.append( " checked='checked'");
ret.append( "> "+getTrueValue());
}
else
{
ret = new StringBuilder("<input name='atr_"+atrId+"'");
if (getAtrType()==AtrDB.TYPE_INT) ret.append(" onKeyUp='inputCheckNumberKey(this);' onBlur='inputCheckNumber(this);'");
else if (getAtrType()==AtrDB.TYPE_DOUBLE) ret.append(" onKeyUp='inputCheckNumberKeyFloat(this);' onBlur='inputCheckNumberKeyFloat(this);'");
else ret.append(" length='128' ");
ret.append( " value='"+ResponseUtils.filter(actualValue)+"'>");
}
}
}
return (ret.toString());
}
/**
* ziska hodnotu ako string
* @return
*/
public String getValue()
{
if (atrType==AtrDB.TYPE_INT)
{
return(Long.toString(Math.round(valueNumber)));
}
else if (atrType==AtrDB.TYPE_DOUBLE)
{
return(Double.toString(valueNumber));
}
else if (atrType==AtrDB.TYPE_BOOL)
{
return(Boolean.toString(valueBool));
}
return(valueString);
}
public String getValueHtml()
{
if (atrType==AtrDB.TYPE_INT)
{
return(Long.toString(Math.round(valueNumber)));
}
else if (atrType==AtrDB.TYPE_DOUBLE)
{
return(Tools.replace(Double.toString(valueNumber), ".", ","));
}
else if (atrType==AtrDB.TYPE_BOOL)
{
if (valueBool == true)
{
if (trueValue!=null && trueValue.length()>0)
{
return(trueValue);
}
}
else
{
if (falseValue!=null && falseValue.length()>0)
{
return(falseValue);
}
}
return(Boolean.toString(valueBool));
}
return(valueString);
}
/**
* Gets the atrId attribute of the AtrBean object
*
*@return The atrId value
*/
public int getAtrId()
{
return atrId;
}
/**
* Sets the atrId attribute of the AtrBean object
*
*@param atrId The new atrId value
*/
public void setAtrId(int atrId)
{
this.atrId = atrId;
}
/**
* Sets the atrName attribute of the AtrBean object
*
*@param atrName The new atrName value
*/
public void setAtrName(String atrName)
{
this.atrName = atrName;
}
/**
* Gets the atrName attribute of the AtrBean object
*
*@return The atrName value
*/
public String getAtrName()
{
return atrName;
}
public String getAtrName(String lang)
{
return parse(atrName,lang);
}
/**
* Sets the atrDescription attribute of the AtrBean object
*
*@param atrDescription The new atrDescription value
*/
public void setAtrDescription(String atrDescription)
{
this.atrDescription = atrDescription;
}
/**
* Gets the atrDescription attribute of the AtrBean object
*
*@return The atrDescription value
*/
public String getAtrDescription()
{
return atrDescription;
}
public String getAtrDescription(String lang)
{
return parse(atrDescription,lang);
}
/**
* Sets the atrDefaultValue attribute of the AtrBean object
*
*@param atrDefaultValue The new atrDefaultValue value
*/
public void setAtrDefaultValue(String atrDefaultValue)
{
this.atrDefaultValue = atrDefaultValue;
}
/**
* Gets the atrDefaultValue attribute of the AtrBean object
*
*@return The atrDefaultValue value
*/
public String getAtrDefaultValue()
{
if (atrDefaultValue == null) {
return "";
}
return atrDefaultValue;
}
/**
* Gets the atrDefaultValue attribute of the AtrBean object
*
*@return The atrDefaultValue value
*/
public String getAtrDefaultValue(String lang)
{
return parse(atrDefaultValue,lang);
}
/**
* Sets the atrType attribute of the AtrBean object
*
*@param atrType The new atrType value
*/
public void setAtrType(int atrType)
{
this.atrType = atrType;
}
/**
* Gets the atrType attribute of the AtrBean object
*
*@return The atrType value
*/
public int getAtrType()
{
return atrType;
}
/**
* Sets the docId attribute of the AtrBean object
*
*@param docId The new docId value
*/
public void setDocId(int docId)
{
this.docId = docId;
}
/**
* Gets the docId attribute of the AtrBean object
*
*@return The docId value
*/
public int getDocId()
{
return docId;
}
/**
* Sets the valueString attribute of the AtrBean object
*
*@param valueString The new valueString value
*/
public void setValueString(String valueString)
{
this.valueString = valueString;
}
/**
* Gets the valueString attribute of the AtrBean object
*
*@return The valueString value
*/
public String getValueString()
{
return valueString;
}
/**
* Sets the valueInt attribute of the AtrBean object
*
*@param valueInt The new valueInt value
*/
public void setValueNumber(double valueNumber)
{
this.valueNumber = valueNumber;
}
/**
* Gets the valueInt attribute of the AtrBean object
*
*@return The valueInt value
*/
public double getValueNumber()
{
return valueNumber;
}
public void setValueInt(int valueInt)
{
valueNumber = valueInt;
}
public int getValueInt()
{
return((int)Math.round(valueNumber));
}
/**
* Sets the valueBool attribute of the AtrBean object
*
*@param valueBool The new valueBool value
*/
public void setValueBool(boolean valueBool)
{
this.valueBool = valueBool;
}
/**
* Gets the valueBool attribute of the AtrBean object
*
*@return The valueBool value
*/
public boolean isValueBool()
{
return valueBool;
}
public void setOrderPriority(int orderPriority)
{
this.orderPriority = orderPriority;
}
public int getOrderPriority()
{
return orderPriority;
}
public void setAtrGroup(String atrGroup)
{
this.atrGroup = atrGroup;
}
public String getAtrGroup()
{
return atrGroup;
}
public String getAtrGroup(String lang)
{
return parse(atrGroup, lang);
}
public String getTrueValue()
{
return trueValue;
}
public void setTrueValue(String trueValue)
{
this.trueValue = trueValue;
}
public String getFalseValue()
{
return falseValue;
}
public void setFalseValue(String falseValue)
{
this.falseValue = falseValue;
}
/**
* vygeneruje HTML podobu atributu
* @param onWebPage HTML kod pre webovu stranku
* @return
*/
public String getHtml(String lang)
{
StringBuilder ret;
String actualValue = "";
//ak mame docid, znamena to, ze uz to ma v DB nejaku hodnotu
if (docId > 0)
{
actualValue = getValue();
}
String delimeter = ",";
if(getAtrDefaultValue() != null && getAtrDefaultValue().indexOf("|") != -1)
{
delimeter = "|"; //ak najdem '|', parsujem podla '|'
}
StringTokenizer st = new StringTokenizer(getAtrDefaultValue(), delimeter);
if (st.countTokens()>1)
{
ret = new StringBuilder("<select name='atr_"+atrId+"'>");
ret.append("<option value=''></option>");
String tmp, selected;
while (st.hasMoreTokens())
{
tmp = st.nextToken();
tmp=parse(tmp, lang);
if (atrType==AtrDB.TYPE_BOOL)
{
if ("true".equalsIgnoreCase(tmp) || "yes".equalsIgnoreCase(tmp))
{
tmp = "true";
}
else
{
tmp = "false";
}
}
if (tmp.compareTo(actualValue)==0)
{
selected = " selected";
}
else
{
selected = "";
}
ret.append("<option value='").append(ResponseUtils.filter(tmp)).append('\'').append(selected).append('>').append(tmp).append("</option>");
}
ret.append("</select>");
}
else
{
if (getAtrDefaultValue(lang)!=null && getAtrDefaultValue(lang).startsWith("multiline"))
{
int cols=40;
int rows=4;
st = new StringTokenizer(getAtrDefaultValue(lang), "-");
if (st.countTokens() == 3)
{
st.nextToken();
//pocet stlpcov
cols = Tools.getIntValue(st.nextToken(), cols);
rows = Tools.getIntValue(st.nextToken(), rows);
}
if (docId < 1)
{
actualValue = "";
}
ret = new StringBuilder("<textarea name='atr_").append(atrId).append("' rows='").append(rows).append("' cols='").append(cols).append("'>").append(actualValue).append("</textarea>");
}
else if (getAtrDefaultValue(lang)!=null && getAtrDefaultValue(lang).equals("autoSelect"))
{
ret = new StringBuilder("<select name='atr_").append(atrId);
ret.append("' onChange='htmlSelectTagAddOption(this)'>").append("<option value=''></option>");
//ziskaj zoznam hodnot tohto atributu z DB
Connection db_conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
{
db_conn = DBPool.getConnection();
//nemozeme pouzit DISTINCT, pretoze MySQL nie je case sensitive
ps = db_conn.prepareStatement("SELECT value_string FROM doc_atr WHERE atr_id=? ORDER BY value_string");
ps.setInt(1, getAtrId());
rs = ps.executeQuery();
String value, selected;
Map<String, String> values = new Hashtable<>();
while (rs.next())
{
value = DB.getDbString(rs, "value_string");
if (values.get(value)!=null) continue;
values.put(value, value);
if (value.compareTo(actualValue)==0)
{
selected = " selected";
}
else
{
selected = "";
}
ret.append("<option value='").append(ResponseUtils.filter(value)).append('\'').append(selected).append('>').append(value).append("</option>");
}
rs.close();
ps.close();
db_conn.close();
rs = null;
ps = null;
db_conn = null;
ret.append("<option value='").append(SelectTag.NEW_OPTION_VALUE).append("'>+++</option>");
}
catch (Exception ex)
{
sk.iway.iwcm.Logger.error(ex);
}
finally
{
try
{
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (db_conn != null)
db_conn.close();
}
catch (Exception ex2)
{
sk.iway.iwcm.Logger.error(ex2);
}
}
//ret += "<option value='"+tmp+"'"+selected+">"+tmp+"</option>";
ret.append("</select>");
}
else
{
if (docId < 1)
{
actualValue = getAtrDefaultValue(lang);
}
if (getAtrType()==AtrDB.TYPE_BOOL)
{
ret = new StringBuilder("<input type='radio' name='atr_").append(atrId).append("' value='false'");
if (isValueBool()==false) ret.append(" checked='checked'");
ret.append("> ").append(getFalseValue());
ret.append("<br>");
ret.append("<input type='radio' name='atr_").append(atrId+"' value='true'");
if (isValueBool()==true) ret.append(" checked='checked'");
ret.append("> ").append(getTrueValue());
}
else
{
ret = new StringBuilder("<input name='atr_").append(atrId+"'");
if (getAtrType()==AtrDB.TYPE_INT) ret.append(" onKeyUp='inputCheckNumberKey(this);' onBlur='inputCheckNumber(this);'");
else if (getAtrType()==AtrDB.TYPE_DOUBLE) ret.append(" onKeyUp='inputCheckNumberKeyFloat(this);' onBlur='inputCheckNumberKeyFloat(this);'");
ret.append(" value='").append(ResponseUtils.filter(actualValue)).append("'>");
}
}
}
return (ret.toString());
}
public static String parse(String str, String lang)
{
if (str == null)
return null;
String[] tokens = str.split("\\|");
if (tokens != null && tokens.length > 1)
{
for (String s : tokens)
{
if (s.indexOf(':') != -1)
{
if (s.substring(0, s.indexOf(':')).equalsIgnoreCase(lang))
{
return s.substring(s.indexOf(':') + 1, s.length());
}
}
}
}
else
{
if (tokens!=null && tokens.length==1){
if (tokens[0].indexOf(':') != -1){
return tokens[0].substring(tokens[0].indexOf(':') + 1, tokens[0].length());
}
}
return str;
}
return str;
}
}