/******************************************************************************* * Copyright 2011 Alex 'Ript' Malyshev <alexript@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package net.autosauler.ballance.client.gui; import net.autosauler.ballance.client.Ballance_autosauler_net; import net.autosauler.ballance.client.Services; import net.autosauler.ballance.client.gui.messages.M; import net.autosauler.ballance.shared.User; import net.autosauler.ballance.shared.UserRole; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; /** * The Class EditUserDialog. * * @author alexript */ // TODO: put into UserPanel on EAST public class EditUserDialog extends DialogBox { /** The receiver. */ private final IDialogYesReceiver receiver; /** The editlogin. */ private String editlogin; /** The user. */ private User user; /** The name. */ private TextBox name; /** The login. */ private TextBox login; /** The password. */ private TextBox password; /** The isactive. */ private CheckBox isactive; /** The isadmin. */ private CheckBox isadmin; /** The isdocuments. */ private CheckBox isdocuments; /** The isfinances. */ private CheckBox isfinances; /** The ismanager. */ private CheckBox ismanager; /** The Constant errorfieldstyle. */ final private static String errorfieldstyle = "errorFieldValue"; /** * Instantiates a new edits the user dialog. * * @param r * the r */ public EditUserDialog(IDialogYesReceiver r) { receiver = r; init(null); } /** * Instantiates a new edits the user dialog. * * @param login * the login * @param r * the r */ public EditUserDialog(String login, IDialogYesReceiver r) { receiver = r; init(login); } /** * Creates the gui. * */ private void createGUI() { if (editlogin == null) { setText(M.users.menuAddUser()); } else { setText(M.users.titleEditUser()); } setAnimationEnabled(true); setGlassEnabled(true); String addText = M.users.btnAdd(); if (editlogin != null) { addText = M.users.btnUpdate(); } Button btnAdd = new Button(addText); btnAdd.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (editlogin == null) { createUser(); } else { updateUser(); } } }); Button btnCancel = new Button(M.users.btnCancel()); btnCancel.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { EditUserDialog.this.hide(); } }); VerticalPanel vpanel = new VerticalPanel(); // vpanel.setWidth("400px"); FlexTable layout = new FlexTable(); layout.setCellSpacing(6); layout.setHTML(0, 0, M.users.fullName()); name = new TextBox(); name.setText(user.getUsername()); layout.setWidget(0, 1, name); layout.setHTML(1, 0, M.users.login()); login = new TextBox(); login.setText(user.getLogin()); if (editlogin != null) { login.setReadOnly(true); } layout.setWidget(1, 1, login); layout.setHTML(2, 0, M.users.password()); password = new TextBox(); password.setText(""); layout.setWidget(2, 1, password); layout.setHTML(3, 0, M.users.isactive()); isactive = new CheckBox(); isactive.setValue(user.isActive()); layout.setWidget(3, 1, isactive); layout.setHTML(4, 0, M.users.access()); UserRole role = user.getUserrole(); FlexTable access = new FlexTable(); access.setCellSpacing(6); access.setHTML(0, 0, M.users.isadmin()); isadmin = new CheckBox(); isadmin.setValue(role.isAdmin()); access.setWidget(0, 1, isadmin); access.setHTML(1, 0, M.users.isdocuments()); isdocuments = new CheckBox(); isdocuments.setValue(role.isDocuments()); access.setWidget(1, 1, isdocuments); access.setHTML(2, 0, M.users.isfinances()); isfinances = new CheckBox(); isfinances.setValue(role.isFinances()); access.setWidget(2, 1, isfinances); access.setHTML(3, 0, M.users.ismanager()); ismanager = new CheckBox(); ismanager.setValue(role.isManager()); access.setWidget(3, 1, ismanager); layout.setWidget(4, 1, access); vpanel.add(layout); HorizontalPanel buttons = new HorizontalPanel(); buttons.setWidth("100%"); buttons.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); HorizontalPanel bcontainer = new HorizontalPanel(); bcontainer.add(btnAdd); bcontainer.add(btnCancel); bcontainer.setSpacing(5); buttons.add(bcontainer); vpanel.add(buttons); setWidget(vpanel); /* * setPopupPosition( (Ballance_autosauler_net.mainpanel.getOffsetWidth() * / 2 - 200), 100); */ show(); } /** * Creates the user. */ private void createUser() { UserRole role = Ballance_autosauler_net.sessionId.getUserrole(); if (role.isAdmin()) { if (updateMembers()) { MainPanel.setCommInfo(true); Services.users.createUser(user, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { MainPanel.setCommInfo(false); new AlertDialog(caught).show(); } @Override public void onSuccess(Boolean result) { MainPanel.setCommInfo(false); if (result) { EditUserDialog.this.hide(); receiver.onDialogYesButtonClick("reload", null); } else { new AlertDialog(M.users.logCreateError()).show(); } } }); } } } /** * Gets the user. * * @return the user */ private void getUser() { user = null; if (editlogin == null) { user = new User(); user.initAsDefault(); createGUI(); } else { UserRole role = Ballance_autosauler_net.sessionId.getUserrole(); if (role.isAdmin()) { MainPanel.setCommInfo(true); Services.users.getUser(editlogin, new AsyncCallback<User>() { @Override public void onFailure(Throwable caught) { MainPanel.setCommInfo(false); new AlertDialog(caught).show(); } @Override public void onSuccess(User result) { user = result; EditUserDialog.this.createGUI(); MainPanel.setCommInfo(false); } }); } } } /** * Inits the. * * @param login * the login */ private void init(String login) { editlogin = login; getUser(); } /** * Update members. * * @return true, if successful */ private boolean updateMembers() { boolean cansync = true; name.removeStyleName(errorfieldstyle); if (editlogin != null) { login.removeStyleName(errorfieldstyle); } password.removeStyleName(errorfieldstyle); String sometext = name.getText().trim(); if (sometext.isEmpty()) { cansync = false; name.addStyleName(errorfieldstyle); } user.setUsername(sometext); if (editlogin == null) { sometext = login.getText().trim(); if (sometext.isEmpty()) { cansync = false; login.addStyleName(errorfieldstyle); } user.setLogin(sometext); } sometext = password.getText(); if ((editlogin == null) && sometext.isEmpty()) { cansync = false; password.addStyleName(errorfieldstyle); } user.setPassword(sometext); user.setActive(isactive.getValue()); UserRole role = new UserRole(); if (isadmin.getValue()) { role.setAdmin(); } if (isdocuments.getValue()) { role.setDocuments(); } if (isfinances.getValue()) { role.setFinances(); } if (ismanager.getValue()) { role.setManager(); } user.setUserrole(role); return cansync; } /** * Update user. */ private void updateUser() { if (updateMembers()) { UserRole role = Ballance_autosauler_net.sessionId.getUserrole(); if (role.isAdmin()) { MainPanel.setCommInfo(true); Services.users.updateUser(user, new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { MainPanel.setCommInfo(false); new AlertDialog(caught).show(); } @Override public void onSuccess(Boolean result) { MainPanel.setCommInfo(false); if (result) { EditUserDialog.this.hide(); receiver.onDialogYesButtonClick("reload", null); } else { new AlertDialog(M.users.logCreateError()).show(); } } }); } } } }