/** * Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados. * * e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro * dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do * Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão. * * Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA; * sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. * Veja a Licença Pública Geral Menor GNU para maiores detalhes. */ package br.gov.camara.edemocracia.portlets.wikilegis.ui.model; import java.util.Iterator; import java.util.Map; import org.apache.wicket.markup.repeater.IItemFactory; import org.apache.wicket.markup.repeater.IItemReuseStrategy; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.util.lang.Generics; /** * @author robson * */ public class ComentarioDisplayItemReuseStrategy implements IItemReuseStrategy { private static final long serialVersionUID = 1L; private static final ComentarioDisplayItemReuseStrategy instance = new ComentarioDisplayItemReuseStrategy(); public static ComentarioDisplayItemReuseStrategy getInstance() { return instance; } private ComentarioDisplayItemReuseStrategy() { } /** * Infelizmente, a interface não permite especializar o tipo * * @see org.apache.wicket.markup.repeater.IItemReuseStrategy#getItems(org.apache.wicket.markup.repeater.IItemFactory, * java.util.Iterator, java.util.Iterator) */ @Override public <T> Iterator<Item<T>> getItems(final IItemFactory<T> factory, final Iterator<IModel<T>> newModels, Iterator<Item<T>> existingItems) { final Map<Long, Item<ComentarioDisplay>> modelToItem = Generics.newHashMap(); while (existingItems.hasNext()) { @SuppressWarnings("unchecked") final Item<ComentarioDisplay> item = (Item<ComentarioDisplay>) existingItems.next(); if (item.getModel().getObject() != null) modelToItem.put(item.getModel().getObject().getMessageId(), item); } return new Iterator<Item<T>>() { private int index = 0; public boolean hasNext() { return newModels.hasNext(); } @SuppressWarnings("unchecked") public Item<T> next() { final IModel<ComentarioDisplay> model = (IModel<ComentarioDisplay>) newModels.next(); final Item<ComentarioDisplay> oldItem = modelToItem.get(model.getObject().getMessageId()); final Item<ComentarioDisplay> item; if (oldItem == null) { item = (Item<ComentarioDisplay>) factory.newItem(index, (IModel<T>) model); } else { oldItem.setIndex(index); item = oldItem; } index++; return (Item<T>) item; } public void remove() { throw new UnsupportedOperationException(); } }; } }