package tv.dyndns.kishibe.qmaclone.client.setting;
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.Service;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketThemeModeEditor;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketThemeModeEditor.ThemeModeEditorStatus;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
public class PanelSettingThemeModeEditor extends VerticalPanel implements ClickHandler {
private static final Logger logger = Logger.getLogger(PanelSettingThemeModeEditor.class
.getName());
private final Grid grid = new Grid();
private final Button buttonUpdate = new Button("申請リスト更新", this);
public PanelSettingThemeModeEditor() {
add(new HTML("<h2>テーマモード編集権限管理</h2>"));
// TODO CellTable化
grid.addStyleName("gridFrame");
add(grid);
add(buttonUpdate);
updateThemeModeEditors();
}
private void updateThemeModeEditors() {
Service.Util.getInstance().getThemeModeEditors(callbackGetThemeModeEditors);
}
private final AsyncCallback<List<PacketThemeModeEditor>> callbackGetThemeModeEditors = new AsyncCallback<List<PacketThemeModeEditor>>() {
@Override
public void onSuccess(List<PacketThemeModeEditor> result) {
Collections.sort(result, new Comparator<PacketThemeModeEditor>() {
@Override
public int compare(PacketThemeModeEditor o1, PacketThemeModeEditor o2) {
return o1.themeModeEditorStatus.compareTo(o2.themeModeEditorStatus);
}
});
grid.resize(result.size() + 1, 5);
grid.setHTML(0, 0, "ユーザーコード");
grid.setHTML(0, 1, "プレイヤー名");
grid.setHTML(0, 2, "申請中");
grid.setHTML(0, 3, "承認");
grid.setHTML(0, 4, "却下");
int row = 1;
for (PacketThemeModeEditor editor : result) {
final int userCode = editor.userCode;
grid.setText(row, 0, Integer.toString(userCode));
grid.setText(row, 1, editor.name);
final RadioButton buttonApplying = new RadioButton(Integer.toString(userCode));
final RadioButton buttonAccepted = new RadioButton(Integer.toString(userCode));
final RadioButton buttonRejected = new RadioButton(Integer.toString(userCode));
grid.setWidget(row, 2, buttonApplying);
grid.setWidget(row, 3, buttonAccepted);
grid.setWidget(row, 4, buttonRejected);
if (editor.themeModeEditorStatus == ThemeModeEditorStatus.Applying) {
buttonApplying.setValue(true);
} else if (editor.themeModeEditorStatus == ThemeModeEditorStatus.Accepted) {
buttonAccepted.setValue(true);
} else if (editor.themeModeEditorStatus == ThemeModeEditorStatus.Refected) {
buttonRejected.setValue(true);
}
final ValueChangeHandler<Boolean> handlerApplying = new ValueChangeHandler<Boolean>() {
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (event.getValue()) {
Service.Util.getInstance().applyThemeModeEditor(userCode,
"(管理人により申請状態になりました)", callbackApplyThemeModeEditor);
}
}
};
buttonApplying.addValueChangeHandler(handlerApplying);
final ValueChangeHandler<Boolean> handlerAccepted = new ValueChangeHandler<Boolean>() {
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (event.getValue()) {
Service.Util.getInstance().acceptThemeModeEditor(userCode,
callbackAcceptThemeModeEditor);
}
}
};
buttonAccepted.addValueChangeHandler(handlerAccepted);
final ValueChangeHandler<Boolean> handlerReject = new ValueChangeHandler<Boolean>() {
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (event.getValue()) {
Service.Util.getInstance().rejectThemeModeEditor(userCode,
callbackAddValueChangeHandler);
}
}
};
buttonRejected.addValueChangeHandler(handlerReject);
++row;
}
}
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "テーマモード編集者一覧の取得に失敗しました", caught);
}
};
private final AsyncCallback<Void> callbackApplyThemeModeEditor = new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "テーマモードの申請に失敗しました(管理者モード)", caught);
}
};
private final AsyncCallback<Void> callbackAcceptThemeModeEditor = new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "テーマモード編集権限の承認に失敗しました", caught);
}
};
private final AsyncCallback<Void> callbackAddValueChangeHandler = new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "テーマモード編集権限の却下に失敗しました", caught);
}
};
@Override
public void onClick(ClickEvent event) {
final Object source = event.getSource();
if (source == buttonUpdate) {
updateThemeModeEditors();
}
}
}