package tv.dyndns.kishibe.qmaclone.client.bbs;
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.PacketBbsThread;
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.LazyPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class PanelThreadList extends VerticalPanel {
private static final Logger logger = Logger.getLogger(PanelThreadList.class.getName());
public PanelThreadList(int bbsId) {
Service.Util.getInstance().getBbsThreads(bbsId, 0, Integer.MAX_VALUE, callbackGetBbsThread);
}
private final AsyncCallback<List<PacketBbsThread>> callbackGetBbsThread = new AsyncCallback<List<PacketBbsThread>>() {
public void onSuccess(List<PacketBbsThread> result) {
for (final PacketBbsThread thread : result) {
final LazyPanel lazyPanel = new LazyPanel() {
@Override
protected Widget createWidget() {
DecoratorPanel decoratorPanel = new DecoratorPanel();
decoratorPanel.setWidget(new PanelThread((int) thread.id, thread.title));
return decoratorPanel;
}
};
OpenHandler<DisclosurePanel> openHandler = new OpenHandler<DisclosurePanel>() {
@Override
public void onOpen(OpenEvent<DisclosurePanel> event) {
lazyPanel.ensureWidget();
}
};
DisclosurePanel disclosurePanel = new DisclosurePanel(thread.title);
disclosurePanel.setContent(lazyPanel);
disclosurePanel.addOpenHandler(openHandler);
add(disclosurePanel);
}
}
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "BBSスレッドの取得に失敗しました", caught);
}
};
}