public void syncOptions(HtmlSelectOneMenu input, TextResolver textResolver, Options options, boolean hasEmpty, String nullText)
{
// Compare child-items with options
Iterator<OptionEntry> ioe = options.iterator();
OptionEntry oe =(ioe.hasNext() ? ioe.next() : null);
List<UIComponent> childList = input.getChildren();
Iterator<UIComponent> ico = childList.iterator();
int lastIndex = 0;
while (ico.hasNext())
{
lastIndex++;
UIComponent co = ico.next();
if (!(co instanceof UISelectItem))
continue;
UISelectItem si = (UISelectItem)co;
Object ov = si.getItemValue();
if (ObjectUtils.isEmpty(ov) && hasEmpty)
continue;
if (oe==null)
{ // remove obsolete items
lastIndex--;
for (int index = childList.size()-1; index>=lastIndex; index--)
childList.remove(index);
// done
return;
}
if (ObjectUtils.compareEqual(ov, oe.getValue()))
{ // next
oe =(ioe.hasNext() ? ioe.next() : null);
continue;
}
// Not equal - do a full reload
input.getChildren().clear();
if (hasEmpty)
addSelectItem(input, textResolver, new OptionEntry("", nullText));
for (OptionEntry e : options)
{ // Option entries
addSelectItem(input, textResolver, e);
}
// done