package tv.dyndns.kishibe.qmaclone.client.report; 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.common.base.Strings; 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.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; 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.TextBox; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.ListDataProvider; /** * 良問投票を行うためのダイアログの内容 * * @author nodchip */ public class ProblemFeedback extends Composite { private static ProblemFeedbackUiBinder uiBinder = GWT.create(ProblemFeedbackUiBinder.class); private static final Logger logger = Logger.getLogger(ProblemFeedback.class.getName()); interface ProblemFeedbackUiBinder extends UiBinder<Widget, ProblemFeedback> { } @UiField TextBox reasonTextBox; @UiField Button submitButton; @UiField HTML plusOneHtml; private final PacketProblem problem; private final ListDataProvider<PacketProblem> dataProvider; public ProblemFeedback(ListDataProvider<PacketProblem> dataProvider, PacketProblem problem) { this.dataProvider = dataProvider; this.problem = problem; initWidget(uiBinder.createAndBindUi(this)); plusOneHtml.setHTML(PlusOne.getButton(problem.id, true)); Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { PlusOne.render(); } }); } @UiHandler("submitButton") void onClick(ClickEvent e) { String reason = reasonTextBox.getText(); if (Strings.isNullOrEmpty(reason)) { return; } reasonTextBox.setEnabled(false); submitButton.setEnabled(false); int userCode = UserData.get().getUserCode(); String playerName = UserData.get().getPlayerName(); Service.Util.getInstance().voteToProblem(userCode, problem.id, true, reason, playerName, callbackVoteToProblem); } private final AsyncCallback<Void> callbackVoteToProblem = new AsyncCallback<Void>() { @Override public void onSuccess(Void result) { ++problem.voteGood; dataProvider.refresh(); } @Override public void onFailure(Throwable caught) { logger.log(Level.WARNING, "問題への投票に失敗しました", caught); } }; }