package tv.dyndns.kishibe.qmaclone.client.report;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import tv.dyndns.kishibe.qmaclone.client.PlusOne;
import tv.dyndns.kishibe.qmaclone.client.Service;
import tv.dyndns.kishibe.qmaclone.client.UserData;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.LoadingStateChangeEvent;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
public class ProblemReportUi extends Composite {
private static final Logger logger = Logger.getLogger(ProblemReportUi.class.getName());
private static ProblemReportUiUiBinder uiBinder = GWT.create(ProblemReportUiUiBinder.class);
interface ProblemReportUiUiBinder extends UiBinder<Widget, ProblemReportUi> {
}
@UiField
HTML htmlHits;
@UiField(provided = true)
SimplePager pager;
@UiField(provided = true)
CellTableProblem cellTableProblem;
@UiField
Button buttonRegisterAll;
private final List<PacketProblem> problems;
public ProblemReportUi(List<PacketProblem> problems, boolean regist, boolean initialSort,
int maxProblemsPerPage) {
this.problems = problems;
if (initialSort) {
Collections.sort(problems, new Comparator<PacketProblem>() {
@Override
public int compare(PacketProblem o1, PacketProblem o2) {
return o1.id - o2.id;
}
});
}
cellTableProblem = new CellTableProblem(problems, regist, maxProblemsPerPage);
final SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
pager.setDisplay(cellTableProblem);
// cellTableProblem.addRangeChangeHandler(new RangeChangeEvent.Handler() {
// @Override
// public void onRangeChange(RangeChangeEvent EVENT) {
// Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
// @Override
// public void execute() {
// PlusOne.render();
// }
// });
// }
// });
cellTableProblem.addLoadingStateChangeHandler(new LoadingStateChangeEvent.Handler() {
@Override
public void onLoadingStateChanged(LoadingStateChangeEvent event) {
if (event.getLoadingState() != LoadingStateChangeEvent.LoadingState.LOADED) {
return;
}
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
PlusOne.render();
}
});
}
});
if (problems.size() < maxProblemsPerPage) {
pager.setVisible(false);
}
initWidget(uiBinder.createAndBindUi(this));
final int count = problems.size();
htmlHits.setHTML(SafeHtmlUtils.fromString(count + "件ヒット"));
if (!regist) {
buttonRegisterAll.setVisible(false);
}
}
@UiHandler("buttonRegisterAll")
void onButtonRegisterAll(ClickEvent e) {
buttonRegisterAll.setEnabled(false);
final int userCode = UserData.get().getUserCode();
final List<Integer> problemIds = new ArrayList<Integer>();
for (PacketProblem problem : problems) {
problemIds.add(problem.id);
}
Service.Util.getInstance().addProblemIdsToReport(userCode, problemIds,
callbackAddProblemIdsToReport);
}
private final AsyncCallback<Void> callbackAddProblemIdsToReport = new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "問題の登録に失敗しました", caught);
}
};
}