/* * 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.extensions.components; import com.webobjects.appserver.WOComponent; import com.webobjects.appserver.WOContext; import com.webobjects.appserver.WODisplayGroup; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSTimestamp; import er.extensions.eof.ERXConstant; import er.extensions.foundation.ERXTimestampUtilities; /** * Nice for adjusting the query specs for dates on a display group. * * @binding displayGroup * @binding key */ public class ERXQueryRecentDates extends WOComponent { /** * 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; public ERXQueryRecentDates(WOContext aContext) { super(aContext); } public WODisplayGroup displayGroup; public String key; static final int[] daysAgoArray={ 0,1,3,7,30,90,180 }; static final String[] daysAgoString={ "-", "day", "3 days", "week", "month", "3 months", "6 months" }; private static NSArray<Integer> indexes = new NSArray<>( ERXConstant.ZeroInteger, ERXConstant.OneInteger, ERXConstant.TwoInteger, ERXConstant.integerForInt(3), ERXConstant.integerForInt(4), ERXConstant.integerForInt(5), ERXConstant.integerForInt(6) ); public NSArray<Integer> indexes() { return indexes; } public Integer dateItem; public String displayString() { return daysAgoString[dateItem.intValue()]; } // FIXME the return type should be Integer public Object date() { int found=0; NSTimestamp dateFromQueryMin=(NSTimestamp)displayGroup.queryMatch().valueForKey(key); if (dateFromQueryMin!=null) { NSTimestamp now=new NSTimestamp(); int d = (int)ERXTimestampUtilities.differenceByDay(dateFromQueryMin, now); if (d>0) { for (int i=0;i<daysAgoArray.length-1;i++) { if (d>=daysAgoArray[i] && d<= daysAgoArray[i+1]) { found=i+1; break; } } } } return indexes.objectAtIndex(found); } public void setDate(Integer dateIndex) { NSTimestamp now=new NSTimestamp(); int howManyDaysAgo=dateIndex!=null ? daysAgoArray[dateIndex.intValue()] : 0; if(howManyDaysAgo==0) { displayGroup.queryMatch().removeObjectForKey(key); displayGroup.queryOperator().removeObjectForKey(key); } else { displayGroup.queryMatch().takeValueForKey(now.timestampByAddingGregorianUnits(0,0,-howManyDaysAgo,0,0,0), key); displayGroup.queryOperator().takeValueForKey(">", key); } } }