/* * WODictionaryRepetition.java * (c) Copyright 2001 Apple Computer, Inc. All rights reserved. * This a modified version. * Original license: http://www.opensource.apple.com/apsl/ */ package com.webobjects.woextensions; import com.webobjects.appserver.WOComponent; import com.webobjects.appserver.WOContext; import com.webobjects.eocontrol.EOSortOrdering; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSDictionary; public class WODictionaryRepetition 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; protected NSArray _keyList; protected NSDictionary _dictionary = null; public WODictionaryRepetition(WOContext aContext) { super(aContext); } @Override public boolean isStateless() { return true; } protected void _invalidateCaches() { // ** By setting these to null, we allow the dictionary to change after the action and before the next cycle of this component (if the component is on a page which is recycled) _dictionary = null; _keyList = null; } @Override public void reset() { _invalidateCaches(); } public NSDictionary dictionary() { if (_dictionary==null) { _dictionary = (NSDictionary)_WOJExtensionsUtil.valueForBindingOrNull("dictionary",this); if (_dictionary == null) { _dictionary = NSDictionary.EmptyDictionary; _keyList = NSArray.EmptyArray; } else { _keyList = _dictionary.allKeys(); _keyList = EOSortOrdering.sortedArrayUsingKeyOrderArray(_keyList, new NSArray<>(new EOSortOrdering("toString", EOSortOrdering.CompareAscending))); } } return _dictionary; } public NSArray keyList() { if (_keyList==null) { dictionary(); } return _keyList; } public Object currentKey() { // ** this is required by key/value coding. return ""; } public void setCurrentKey(Object aKey) { if ((dictionary()!=null) && (aKey!=null)) { Object anObject = dictionary().objectForKey(aKey); setValueForBinding(aKey, "key"); setValueForBinding(anObject, "item"); } } }