package tv.dyndns.kishibe.qmaclone.client.chat; import java.util.Date; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import tv.dyndns.kishibe.qmaclone.client.Service; import tv.dyndns.kishibe.qmaclone.client.packet.PacketChatMessage; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.view.client.AsyncDataProvider; import com.google.gwt.view.client.HasData; import com.google.gwt.view.client.Range; public class PastChatDataProvider extends AsyncDataProvider<PacketChatMessage> { private static final Logger logger = Logger.getLogger(PastChatDataProvider.class.getName()); private final PanelPast panelPast; public PastChatDataProvider(PanelPast panelPast) { this.panelPast = panelPast; Service.Util.getInstance().getNumberOfChatLog(callbackGetNumberOfChatLog); } private final AsyncCallback<Integer> callbackGetNumberOfChatLog = new AsyncCallback<Integer>() { @Override public void onSuccess(Integer result) { updateRowCount(result, true); panelPast.getPager().lastPage(); } @Override public void onFailure(Throwable caught) { logger.log(Level.WARNING, "チャット過去ログ件数の取得に失敗しました", caught); } }; @Override protected void onRangeChanged(HasData<PacketChatMessage> display) { final Range range = display.getVisibleRange(); Service.Util.getInstance().getChatLog(range.getStart(), new AsyncCallback<List<PacketChatMessage>>() { @Override public void onSuccess(List<PacketChatMessage> result) { updateRowData(range.getStart(), result); if (result.isEmpty()) { return; } final PacketChatMessage first = result.get(0); panelPast.setValue(new Date(first.date), false); } @Override public void onFailure(Throwable caught) { logger.log(Level.WARNING, "チャット過去ログの取得に失敗しました", caught); } }); } }