/* * Copyright (C) NetStruxr, Inc. All rights reserved. * * This software is published under the terms of the NetStruxr * Public Software License version 0.5, a copy of which has been * included with this distribution in the LICENSE.NPL file. */ package er.directtoweb.components.dates; import java.text.Format; import com.webobjects.appserver.WOContext; import com.webobjects.foundation.NSTimestamp; import com.webobjects.foundation.NSValidation; import er.directtoweb.components.ERDCustomQueryComponent; import er.extensions.components._private.ERXWOForm; import er.extensions.components.javascript.ERXEditDateJavascript; import er.extensions.formatters.ERXTimestampFormatter; import er.extensions.localization.ERXLocalizer; import er.extensions.validation.ERXValidationFactory; /** * <span class="en">Used for building date queries with javascript.</span> * <span class="ja">Javascript を使用した日付ビルド・クエリ</span> */ public class ERDQueryDateRangeJavascript extends ERDCustomQueryComponent { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; protected static String _datePickerJavaScriptUrl; protected String key; protected Format _dateFormatter; protected String _minValue; protected String _maxValue; protected String _minName; protected String _formatter; protected String _maxName; protected String _formName; protected String _javascriptName; public ERDQueryDateRangeJavascript(WOContext context) { super(context); } public String propertyKey() { if(key == null) key = (String)valueForBinding("propertyKey"); return key; } public Format dateFormatter() { if(_dateFormatter == null) { _dateFormatter = ERXTimestampFormatter.dateFormatterForPattern(formatter()); } return _dateFormatter; } protected String stringForDate(NSTimestamp d) { String result=null; if(d != null) { try { result = dateFormatter().format(d); } catch(IllegalArgumentException nsfe) { } } return result; } public String javascriptName() { if(_javascriptName == null) _javascriptName = "date_" + context().elementID().replace('.', '_'); return _javascriptName; } public Object minValue() { if(_minValue == null){ _minValue=stringForDate((NSTimestamp)displayGroup().queryMin().valueForKey(propertyKey())); } return _minValue; } public Object maxValue() { if (_maxValue == null) { _maxValue=stringForDate((NSTimestamp)displayGroup().queryMax().valueForKey(propertyKey())); } return _maxValue; } public NSTimestamp dateForString(String dateString) { NSTimestamp date = null; try { if(dateString!=null) { date = (NSTimestamp)dateFormatter().parseObject(dateString); } } catch (java.text.ParseException nspe) { NSValidation.ValidationException v = ERXValidationFactory.defaultFactory().createException(null, propertyKey(), dateString, "InvalidDateFormatException"); parent().validationFailedWithException( v, date, propertyKey()); } catch (NSValidation.ValidationException v) { parent().validationFailedWithException(v,date,propertyKey()); } catch(Exception e) { parent().validationFailedWithException(e,date,propertyKey()); } return date; } public void setMinValue(String min) { _minValue=min; NSTimestamp minDate = dateForString(min); if(minDate != null) displayGroup().queryMin().takeValueForKey(minDate, propertyKey()); else displayGroup().queryMin().removeObjectForKey(propertyKey()); } public void setMaxValue(String max) { _maxValue=max; NSTimestamp maxDate = dateForString(max); if(maxDate != null) displayGroup().queryMax().takeValueForKey(maxDate, propertyKey()); else displayGroup().queryMax().removeObjectForKey(propertyKey()); } public String datePickerJavaScriptUrl() { if (_datePickerJavaScriptUrl==null) { _datePickerJavaScriptUrl= application().resourceManager().urlForResourceNamed("date-picker.js", "ERExtensions", null, context().request()); } return _datePickerJavaScriptUrl; } public String formName() { if (_formName==null) _formName=ERXWOForm.formName(context(), "QueryForm"); return _formName; } public String minName() { if (_minName==null) _minName=javascriptName()+ "min"; return _minName; } public String minHREF() { return "javascript:show_calendar('"+formName()+"." + minName() + "',null,null,'"+formatterStringForScript()+"')"; } public String maxName() { if (_maxName==null) _maxName=javascriptName()+ "max"; return _maxName; } public String maxHREF() { return "javascript:show_calendar('"+formName()+ "." + maxName() + "',null,null,'"+formatterStringForScript()+"')"; } public int formatLength() { String formatter = formatterStringForScript(); return formatter.length() < 12 ? 12 : formatter.length(); } public String localizedFormatString() { return ERXLocalizer.currentLocalizer().localizedStringForKeyWithDefault(formatter()); } public String formatter() { if(_formatter == null) { _formatter = (String)valueForBinding("formatter"); if(_formatter == null || _formatter.length() == 0) { _formatter = ERXTimestampFormatter.DEFAULT_PATTERN; } } return _formatter; } public String formatterStringForScript() { return ERXEditDateJavascript.formatterStringForScript(localizedFormatString()); } }