/* * Copyright (C) 2014 Jan Pokorsky * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.cas.lib.proarc.webapp.client.widget; import com.google.gwt.user.client.Window; import com.smartgwt.client.core.Function; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DSCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.rpc.RPCCallback; import com.smartgwt.client.rpc.RPCManager; import com.smartgwt.client.rpc.RPCRequest; import com.smartgwt.client.rpc.RPCResponse; import com.smartgwt.client.types.ClickMaskMode; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.events.SubmitValuesEvent; import com.smartgwt.client.widgets.form.events.SubmitValuesHandler; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.layout.VLayout; import cz.cas.lib.proarc.webapp.client.ClientMessages; import cz.cas.lib.proarc.webapp.client.ds.RestConfig; import cz.cas.lib.proarc.webapp.client.ds.UserDataSource; /** * Shows details about the active user. * * @author Jan Pokorsky */ public class UserInfoView { private final Canvas widget; private final DynamicForm form; public UserInfoView(ClientMessages i18n) { VLayout vLayout = new VLayout(); this.widget = vLayout; widget.setStyleName("pickListMenuBody"); widget.setShowShadow(true); form = UsersView.createUserEditor(false, i18n); form.addSubmitValuesHandler(new SubmitValuesHandler() { @Override public void onSubmitValues(SubmitValuesEvent event) { form.saveData(new DSCallback() { @Override public void execute(DSResponse response, Object rawData, DSRequest request) { if (RestConfig.isStatusOk(response)) { hide(); } } }); } }); FormItem cancel = form.getField("cancel"); cancel.setTitle(i18n.UserInfoView_UserForm_Logout_Title()); cancel.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { logout(); } }); vLayout.addMember(form); } public void show(Canvas otherWidget, String side, boolean canOcclude) { form.clearErrors(true); // canOcclude not fully supported in SmartGWT 4.0; introduce by patch 4.0-p; do not use yet // widget.showNextTo(otherWidget, side, canOcclude); widget.showNextTo(otherWidget, side); widget.showClickMask(new Function() { @Override public void execute() { hide(); } }, ClickMaskMode.SOFT, new Canvas[] {widget}); form.focus(); form.focusInItem(0); form.fetchData(new Criteria(UserDataSource.FIELD_WHOAMI, "true")); } private void hide() { widget.hide(); } private void logout() { RPCRequest request = new RPCRequest(); request.setActionURL(RestConfig.URL_LOGIN_SERVLET); request.setUseSimpleHttp(true); request.setHttpMethod("DELETE"); request.setShowPrompt(true); RPCManager.sendRequest(request, new RPCCallback() { @Override public void execute(RPCResponse response, Object rawData, RPCRequest request) { Window.Location.reload(); } }); } }