001/* 002 * (C) Copyright 2006-20011 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo - initial API and implementation 016 * 017 */ 018 019package org.nuxeo.ecm.platform.reporting.report; 020 021import java.text.ParseException; 022import java.text.SimpleDateFormat; 023import java.util.Calendar; 024import java.util.Date; 025 026import org.apache.commons.logging.Log; 027import org.apache.commons.logging.LogFactory; 028import org.eclipse.birt.report.engine.api.IParameterDefn; 029import org.eclipse.birt.report.engine.api.impl.ScalarParameterDefn; 030 031/** 032 * Wraps Birt Report parameters to manage Cast and Conversions 033 * 034 * @author Tiry (tdelprat@nuxeo.com) 035 */ 036public class ReportParameter { 037 038 private static final Log log = LogFactory.getLog(ReportParameter.class); 039 040 public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; 041 042 public static final String DATE_FORMAT = "yyyy-MM-dd"; 043 044 public static final String TIME_FORMAT = "hh:mm:ss"; 045 046 protected int type; 047 048 protected String stringValue; 049 050 protected String name; 051 052 protected String displayName; 053 054 protected String help; 055 056 protected boolean required; 057 058 protected boolean editable = true; 059 060 protected boolean error; 061 062 public ReportParameter(IParameterDefn paramDef) { 063 this(paramDef, null); 064 } 065 066 public ReportParameter(IParameterDefn paramDef, String value) { 067 type = paramDef.getDataType(); 068 name = paramDef.getName(); 069 displayName = paramDef.getDisplayName(); 070 help = paramDef.getHelpText(); 071 required = paramDef.isRequired(); 072 if (value != null && value.isEmpty()) { 073 stringValue = value; 074 } else { 075 if (paramDef instanceof ScalarParameterDefn) { 076 ScalarParameterDefn scalarParam = (ScalarParameterDefn) paramDef; 077 stringValue = scalarParam.getDefaultValue(); 078 079 } 080 } 081 } 082 083 public void setValue(String value) { 084 stringValue = value; 085 } 086 087 public boolean setAndValidateValue(String value) { 088 if (value == null) { 089 return false; 090 } 091 try { 092 if (type == IParameterDefn.TYPE_DATE) { 093 new SimpleDateFormat(DATE_FORMAT).parse(value); 094 } else if (type == IParameterDefn.TYPE_DATE_TIME) { 095 new SimpleDateFormat(DATETIME_FORMAT).parse(value); 096 } else if (type == IParameterDefn.TYPE_TIME) { 097 new SimpleDateFormat(TIME_FORMAT).parse(value); 098 } else if (type == IParameterDefn.TYPE_INTEGER) { 099 Integer.parseInt(value); 100 } else if (type == IParameterDefn.TYPE_FLOAT) { 101 Float.parseFloat(value); 102 } else if (type == IParameterDefn.TYPE_BOOLEAN) { 103 Boolean.parseBoolean(value); 104 } else { 105 if (value.trim().isEmpty()) { 106 return false; 107 } 108 } 109 stringValue = value; 110 return true; 111 } catch (NumberFormatException | ParseException e) { 112 return false; 113 } 114 } 115 116 public String getTypeName() { 117 if (type == IParameterDefn.TYPE_DATE) { 118 return "Date"; 119 } else if (type == IParameterDefn.TYPE_DATE_TIME) { 120 return "DateTime"; 121 } else if (type == IParameterDefn.TYPE_TIME) { 122 return "Time"; 123 } else if (type == IParameterDefn.TYPE_INTEGER) { 124 return "Integer"; 125 } else if (type == IParameterDefn.TYPE_FLOAT) { 126 return "Float"; 127 } else if (type == IParameterDefn.TYPE_BOOLEAN) { 128 return "Boolean"; 129 } 130 return "String"; 131 } 132 133 public String getTypeFormat() { 134 if (type == IParameterDefn.TYPE_DATE) { 135 return DATE_FORMAT; 136 } else if (type == IParameterDefn.TYPE_DATE_TIME) { 137 return DATETIME_FORMAT; 138 } else if (type == IParameterDefn.TYPE_TIME) { 139 return TIME_FORMAT; 140 } 141 return null; 142 } 143 144 public void setValue(Calendar value) { 145 setValue(value.getTime()); 146 } 147 148 public void setValue(Date value) { 149 if (type == IParameterDefn.TYPE_DATE) { 150 stringValue = new SimpleDateFormat(DATE_FORMAT).format(value); 151 } else if (type == IParameterDefn.TYPE_DATE_TIME) { 152 stringValue = new SimpleDateFormat(DATETIME_FORMAT).format(value); 153 } else if (type == IParameterDefn.TYPE_TIME) { 154 stringValue = new SimpleDateFormat(TIME_FORMAT).format(value); 155 } 156 } 157 158 public void setValue(Integer value) { 159 if (type == IParameterDefn.TYPE_INTEGER) { 160 stringValue = value.toString(); 161 } 162 } 163 164 public void setValue(Float value) { 165 if (type == IParameterDefn.TYPE_FLOAT) { 166 stringValue = value.toString(); 167 } 168 } 169 170 public void setValue(Boolean value) { 171 if (type == IParameterDefn.TYPE_BOOLEAN) { 172 stringValue = value.toString(); 173 } 174 } 175 176 public String getStringValue() { 177 return stringValue; 178 } 179 180 public Date getDateTimeValue() { 181 try { 182 if (type == IParameterDefn.TYPE_DATE) { 183 return new SimpleDateFormat(DATE_FORMAT).parse(stringValue); 184 } else if (type == IParameterDefn.TYPE_DATE_TIME) { 185 return new SimpleDateFormat(DATETIME_FORMAT).parse(stringValue); 186 } else if (type == IParameterDefn.TYPE_TIME) { 187 return new SimpleDateFormat(TIME_FORMAT).parse(stringValue); 188 } 189 } catch (ParseException e) { 190 String message = String.format("Error while parsing the '%s' date value", stringValue); 191 log.error(message, e); 192 } 193 return null; 194 } 195 196 public Boolean getBooleanValue() { 197 return Boolean.valueOf(stringValue); 198 } 199 200 public Integer getIntegerValue() { 201 return Integer.valueOf(stringValue); 202 } 203 204 public Float getFloatValue() { 205 return Float.valueOf(stringValue); 206 } 207 208 public int getType() { 209 return type; 210 } 211 212 public String getName() { 213 return name; 214 } 215 216 public String getDisplayName() { 217 if (displayName == null || displayName.isEmpty()) { 218 return name; 219 } 220 return displayName; 221 } 222 223 public String getHelp() { 224 return help; 225 } 226 227 public boolean isRequired() { 228 return required; 229 } 230 231 public Object getObjectValue() { 232 if (type == IParameterDefn.TYPE_DATE) { 233 return getDateTimeValue(); 234 } else if (type == IParameterDefn.TYPE_DATE_TIME) { 235 return getDateTimeValue(); 236 } else if (type == IParameterDefn.TYPE_TIME) { 237 return getDateTimeValue(); 238 } else if (type == IParameterDefn.TYPE_BOOLEAN) { 239 return getBooleanValue(); 240 } else if (type == IParameterDefn.TYPE_INTEGER) { 241 return getIntegerValue(); 242 } else if (type == IParameterDefn.TYPE_FLOAT) { 243 return getFloatValue(); 244 } else if (type == IParameterDefn.TYPE_DECIMAL) { 245 return getFloatValue(); 246 } 247 return stringValue; 248 } 249 250 public void setObjectValue(Object value) { 251 if (value instanceof Calendar) { 252 setValue((Calendar) value); 253 } else if (value instanceof Date) { 254 setValue((Date) value); 255 } else if (value instanceof Boolean) { 256 setValue((Boolean) value); 257 } else if (value instanceof Integer) { 258 setValue((Integer) value); 259 } else if (value instanceof Float) { 260 setValue((Float) value); 261 } else { 262 if (value != null) { 263 setValue(value.toString()); 264 } else { 265 setValue((String) null); 266 } 267 } 268 } 269 270 public boolean isEditable() { 271 return editable; 272 } 273 274 public void setEditable(boolean editable) { 275 this.editable = editable; 276 } 277 278 @Override 279 public String toString() { 280 return "" + name + ":" + type + "(" + stringValue + ")"; 281 } 282 283 public boolean isError() { 284 return error; 285 } 286 287 public void setError(boolean error) { 288 this.error = error; 289 } 290 291}