package com.idega.builder.handler; import java.text.DateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.idega.presentation.IWContext; /** * Title: idegaWeb Generic Form Handler * Description: A class to parse forms and get output in a structured format * Copyright: Copyright (c) 2001 * Company: idega * @author <a href="tryggvi@idega.is">Tryggvi Larusson</a> * @version 1.0 */ public class IBGenericFormHandler implements java.lang.Cloneable { private Map parameterDescriptions; private Map parameterTypes; private List parameterNames; private static final String COLON = ":"; private static final String SPACE = " "; private static final String TAB = "\t"; private static final String NEWLINE = "\n"; public static final String STRING_TYPE = JavaTypesHandler.STRING_TYPE; public static final String INTEGER_TYPE = JavaTypesHandler.INTEGER_TYPE; public static final String BOOLEAN_TYPE = JavaTypesHandler.BOOLEAN_TYPE; public static final String FLOAT_TYPE = JavaTypesHandler.FLOAT_TYPE; public static final String DOUBLE_TYPE = JavaTypesHandler.DOUBLE_TYPE; public static final String DATE_TYPE = JavaTypesHandler.DATE_TYPE; public static final String TIMESTAMP_TYPE = JavaTypesHandler.TIMESTAMP_TYPE; public static final String TIME_TYPE = JavaTypesHandler.TIME_TYPE; public IBGenericFormHandler() { this.parameterDescriptions = new HashMap(); this.parameterTypes = new HashMap(); this.parameterNames = new ArrayList(); } public void addProcessedParameter(String parameterName, String parameterDescription, String parameterType) { getDescMap().put(parameterName, parameterDescription); getTypesMap().put(parameterName, parameterType); this.parameterNames.add(parameterName); } /*public void addProcessedParameter(String parameterName,String parameterDescription,String parameterType){ addProcessedParameter(parameterName,parameterDescription,STRING_TYPE); }*/ private Map getDescMap() { return this.parameterDescriptions; } private Map getTypesMap() { return this.parameterTypes; } /** * Formats the output of the form with descriptions in front of values and newlines between values */ public String processPlainTextFormatted(IWContext iwc) { StringBuffer buffer = new StringBuffer(); int count = this.parameterNames.size(); StringBuffer debugBuf = new StringBuffer(); for (int j = 0; j < count; j++) { String paramName = (String) this.parameterNames.get(j); debugBuf.append(paramName).append(" "); String[] paramValues = iwc.getParameterValues(paramName); if (paramValues != null) { String desc = getDescriptionForParameter(paramName); buffer.append(desc); buffer.append(COLON); buffer.append(TAB); buffer.append(TAB); if (paramValues.length == 1) { String currentDiplayedVal = getProcessedValueForDisplay(iwc, paramName, paramValues[0]); buffer.append(currentDiplayedVal); buffer.append(NEWLINE); } else { for (int i = 0; i < paramValues.length; i++) { String currentDiplayedVal = getProcessedValueForDisplay(iwc, paramName, paramValues[i]); if (i != 0) { buffer.append(TAB); buffer.append(TAB); buffer.append(TAB); } buffer.append(currentDiplayedVal); buffer.append(NEWLINE); } } } } System.out.println("Added " + count + " parameters to message, " + debugBuf); return buffer.toString(); } public String getParameterValue(IWContext iwc, String parameterName) { String[] paramValues = iwc.getParameterValues(parameterName); if (paramValues != null && paramValues.length >= 1) { return getProcessedValueForDisplay(iwc, parameterName, paramValues[0]); } return null; } private String getDescriptionForParameter(String parameterName) { return (String) getDescMap().get(parameterName); } private String getTypeForParameter(String parameterName) { String type = (String) getTypesMap().get(parameterName); return type == null ? STRING_TYPE : type; } private String getProcessedValueForDisplay(IWContext iwc, String parameterName, String parameterValue) { String parameterType = getTypeForParameter(parameterName); if (parameterType.equals(STRING_TYPE)) { return parameterValue; } else if (parameterType.equals(STRING_TYPE)) { return parameterValue; } else if (parameterType.equals(BOOLEAN_TYPE)) { if (parameterValue.equalsIgnoreCase("Y") || parameterValue.equalsIgnoreCase("T")) { /** * @todo: Localize */ return "True"; } else if (parameterValue.equalsIgnoreCase("N") || parameterValue.equalsIgnoreCase("F")) { return "False"; } return parameterValue; } else if (parameterType.equals(INTEGER_TYPE)) { return parameterValue; } else if (parameterType.equals(DOUBLE_TYPE)) { return parameterValue; } else if (parameterType.equals(FLOAT_TYPE)) { return parameterValue; } else if (parameterType.equals(DATE_TYPE)) { DateFormat format = DateFormat.getDateInstance(DateFormat.DEFAULT, iwc.getCurrentLocale()); com.idega.util.IWTimestamp its = new com.idega.util.IWTimestamp(parameterValue); java.util.Date date = its.getSQLDate(); return format.format(date); } else if (parameterType.equals(TIMESTAMP_TYPE)) { DateFormat format = DateFormat.getDateInstance(DateFormat.DEFAULT, iwc.getCurrentLocale()); com.idega.util.IWTimestamp its = new com.idega.util.IWTimestamp(parameterValue); java.util.Date date = its.getSQLDate(); return format.format(date); } else if (parameterType.equals(TIME_TYPE)) { return parameterValue; } return parameterValue; } public Object clone() { try { IBGenericFormHandler newHandler = (IBGenericFormHandler) super.clone(); if (this.parameterDescriptions != null) { newHandler.parameterDescriptions = (Map) ((HashMap) this.parameterDescriptions).clone(); } if (this.parameterTypes != null) { newHandler.parameterTypes = (Map) ((HashMap) this.parameterTypes).clone(); } if (this.parameterNames != null) { newHandler.parameterNames = (List) (((ArrayList) this.parameterNames).clone()); } return newHandler; } catch (java.lang.CloneNotSupportedException e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } } }