package tv.dyndns.kishibe.qmaclone.client.setting; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import tv.dyndns.kishibe.qmaclone.client.ServiceAsync; import tv.dyndns.kishibe.qmaclone.client.packet.RestrictionType; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; public class PanelSettingRestrictedUser implements IsWidget { interface View extends IsWidget { RestrictionType getType(); int getUserCode(); String getRemoteAddress(); void setUserCodes(Set<Integer> userCodes); void setRemoteAddresses(Set<String> remoteAddresses); } private static final Logger logger = Logger.getLogger(PanelSettingRestrictedUser.class .getName()); @VisibleForTesting View view; private final ServiceAsync service; public PanelSettingRestrictedUser(ServiceAsync service) { this.service = Preconditions.checkNotNull(service); } @VisibleForTesting PanelSettingRestrictedUser(ServiceAsync service, View view) { this.service = Preconditions.checkNotNull(service); this.view = Preconditions.checkNotNull(view); update(); } public void setView(View view) { this.view = Preconditions.checkNotNull(view); update(); } public void onTypeChanged() { update(); } @VisibleForTesting void update() { RestrictionType restrictionType = view.getType(); service.getRestrictedUserCodes(restrictionType, callbackGetRestrictedUserCodes); } @VisibleForTesting final AsyncCallback<Set<Integer>> callbackGetRestrictedUserCodes = new AsyncCallback<Set<Integer>>() { @Override public void onSuccess(Set<Integer> result) { view.setUserCodes(result); RestrictionType restrictionType = view.getType(); service.getRestrictedRemoteAddresses(restrictionType, callbackGetRestrictedRemoteAddresses); } @Override public void onFailure(Throwable caught) { logger.log(Level.WARNING, "制限ユーザーコードの取得に失敗しました"); } }; @VisibleForTesting final AsyncCallback<Set<String>> callbackGetRestrictedRemoteAddresses = new AsyncCallback<Set<String>>() { @Override public void onSuccess(Set<String> result) { view.setRemoteAddresses(result); } @Override public void onFailure(Throwable caught) { logger.log(Level.WARNING, "制限リモートアドレスの取得に失敗しました"); } }; public void onAddUserCodeButton() { int userCode = view.getUserCode(); RestrictionType restrictionType = view.getType(); service.addRestrictedUserCode(userCode, restrictionType, callbackRestrictedUser); } public void onRemoveUserCodeButton() { int userCode = view.getUserCode(); RestrictionType restrictionType = view.getType(); service.removeRestrictedUserCode(userCode, restrictionType, callbackRestrictedUser); } public void onClearUserCodesButton() { RestrictionType restrictionType = view.getType(); service.clearRestrictedUserCodes(restrictionType, callbackRestrictedUser); } public void onAddRemoteAddressButton() { String remoteAddress = view.getRemoteAddress(); RestrictionType restrictionType = view.getType(); service.addRestrictedRemoteAddress(remoteAddress, restrictionType, callbackRestrictedUser); } public void onRemoveRemoteAddressButton() { String remoteAddress = view.getRemoteAddress(); RestrictionType restrictionType = view.getType(); service.removeRestrictedRemoteAddress(remoteAddress, restrictionType, callbackRestrictedUser); } public void onClearRemoteAddressesButton() { RestrictionType restrictionType = view.getType(); service.clearRestrictedRemoteAddresses(restrictionType, callbackRestrictedUser); } @VisibleForTesting final AsyncCallback<Void> callbackRestrictedUser = new AsyncCallback<Void>() { @Override public void onSuccess(Void result) { update(); } @Override public void onFailure(Throwable caught) { logger.log(Level.WARNING, "制限ユーザーの追加/削除/クリアに失敗しました"); } }; @Override public Widget asWidget() { return view.asWidget(); } }