/**
* OpenKM, Open Document Management System (http://www.openkm.com)
* Copyright (c) 2006-2011 Paco Avila & Josep Llort
*
* No bytes were intentionally harmed during the development of this application.
*
* 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 2 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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package com.openkm.frontend.client.widget;
import java.util.Iterator;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasAlignment;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.openkm.frontend.client.Main;
import com.openkm.frontend.client.bean.GWTTestImap;
import com.openkm.frontend.client.bean.GWTWorkspace;
import com.openkm.frontend.client.contants.service.RPCService;
import com.openkm.frontend.client.service.OKMGeneralService;
import com.openkm.frontend.client.service.OKMGeneralServiceAsync;
import com.openkm.frontend.client.service.OKMWorkspaceService;
import com.openkm.frontend.client.service.OKMWorkspaceServiceAsync;
/**
* User popup
*
* @author jllort
*
*/
public class UserPopup extends DialogBox implements ClickHandler {
private final OKMWorkspaceServiceAsync workspaceService = (OKMWorkspaceServiceAsync) GWT.create(OKMWorkspaceService.class);
private final OKMGeneralServiceAsync generalService = (OKMGeneralServiceAsync) GWT.create(OKMGeneralService.class);
private VerticalPanel vPanel;
private FlexTable userFlexTable;
private FlexTable mailFlexTable;
private HTML userName;
private HTML userPassword;
//vissu touch to to add on oct'9th
private HTML confirmUserPassword;
private HTML userMail;
private HTML userRoles;
private HTML imapHost;
private HTML imapUser;
private HTML imapPassword;
private HTML imapFolder;
private TextBox hostText;
private TextBox imapUserText;
private TextBox imapFolderText;
private PasswordTextBox userPasswordText;
private PasswordTextBox userPasswordTextVerify;
private TextBox userMailText;
private VerticalPanel rolesPanel;
private PasswordTextBox imapUserPasswordText;
private Button update;
private Button cancel;
private Button delete;
private Button test;
private HorizontalPanel hPanel;
private HTML passwordError;
private HTML passwordValidationError;
private HTML imapPassordError;
private HTML imapError;
private HTML imapTestError;
private HTML imapTestOK;
private GroupBoxPanel userGroupBoxPanel;
private GroupBoxPanel mailGroupBoxPanel;
/**
* User popup
*/
public UserPopup() {
// Establishes auto-close when click outside
super(false,true);
int left = (Window.getClientWidth()-400)/2;
int top = (Window.getClientHeight()-220)/2;
vPanel = new VerticalPanel();
userFlexTable = new FlexTable();
mailFlexTable = new FlexTable();
userGroupBoxPanel = new GroupBoxPanel();
userGroupBoxPanel.setCaption(Main.i18n("user.preferences.user.data"));
userGroupBoxPanel.add(userFlexTable);
mailGroupBoxPanel = new GroupBoxPanel();
mailGroupBoxPanel.setCaption(Main.i18n("user.preferences.mail.data"));
mailGroupBoxPanel.add(mailFlexTable);
userName = new HTML(Main.i18n("user.preferences.user"));
userPassword = new HTML(Main.i18n("user.preferences.password"));
//vissu touch on oct'9th
confirmUserPassword = new HTML(Main.i18n("user.preferences.confirmpassword"));
userMail = new HTML(Main.i18n("user.preferences.mail"));
userRoles = new HTML(Main.i18n("user.preferences.roles"));
imapHost = new HTML(Main.i18n("user.preferences.imap.host"));
imapUser = new HTML(Main.i18n("user.preferences.imap.user"));
imapPassword = new HTML(Main.i18n("user.preferences.imap.user.password"));
imapFolder = new HTML(Main.i18n("user.preferences.imap.folder"));
userPasswordText = new PasswordTextBox();
userPasswordTextVerify = new PasswordTextBox();
userMailText = new TextBox();
rolesPanel = new VerticalPanel();
imapUserPasswordText = new PasswordTextBox();
passwordError = new HTML(Main.i18n("user.preferences.password.error"));
passwordValidationError = new HTML("");
imapPassordError = new HTML(Main.i18n("user.preferences.imap.password.error.void"));
imapError = new HTML(Main.i18n("user.preferences.imap.error"));
imapTestError = new HTML(Main.i18n("user.preferences.imap.test.error"));
imapTestOK = new HTML(Main.i18n("user.preferences.imap.test.ok"));
passwordError.setVisible(false);
passwordValidationError.setVisible(false);
imapPassordError.setVisible(false);
imapError.setVisible(false);
imapTestError.setVisible(false);
imapTestOK.setVisible(false);
hostText = new TextBox();
imapUserText = new TextBox();
imapFolderText = new TextBox();
update = new Button(Main.i18n("button.update"), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
passwordError.setVisible(false);
passwordValidationError.setVisible(false);
imapPassordError.setVisible(false);
imapError.setVisible(false);
imapTestError.setVisible(false);
imapTestOK.setVisible(false);
// Password always must be equals
if (!userPasswordText.getText().equals(userPasswordTextVerify.getText())) {
passwordError.setVisible(true);
// Case creation
} else if (Main.get().workspaceUserProperties.getWorkspace().getImapID()<0 && imapUserPasswordText.getText().equals("") &&
(imapFolderText.getText().length()>0 || imapUserText.getText().length()>0 || hostText.getText().length()>0) ) {
imapPassordError.setVisible(true);
// Case update
} else if( (imapUserPasswordText.getText().length()>0 || imapFolderText.getText().length()>0 || imapUserText.getText().length()>0 ||
hostText.getText().length()>0) && !(imapFolderText.getText().length()>0 && imapUserText.getText().length()>0
&& hostText.getText().length()>0) ) {
imapError.setVisible(true);
} else {
final GWTWorkspace workspace = new GWTWorkspace();
workspace.setUser(Main.get().workspaceUserProperties.getUser());
workspace.setEmail(userMailText.getText());
workspace.setImapFolder(imapFolderText.getText());
workspace.setImapHost(hostText.getText());
workspace.setImapUser(imapUserText.getText());
workspace.setImapPassword(imapUserPasswordText.getText());
workspace.setPassword(userPasswordText.getText());
workspace.setPassword(userPasswordTextVerify.getText()); //added by vissu on oct'11th
workspace.setImapID(Main.get().workspaceUserProperties.getWorkspace().getImapID());
ServiceDefTarget endPoint = (ServiceDefTarget) workspaceService;
endPoint.setServiceEntryPoint(RPCService.WorkspaceService);
// First must validate password
workspaceService.isValidPassword(userPasswordText.getText(), new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
if (result.equals("")) {
workspaceService.updateUserWorkspace(workspace, callbackUpdateUserWorkspace);
} else {
passwordValidationError.setHTML(result);
passwordValidationError.setVisible(true);
}
}
@Override
public void onFailure(Throwable caught) {
Main.get().showError("callbackIsValidPassword", caught);
}
});
}
}
});
cancel = new Button(Main.i18n("button.cancel"), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
hide();
}
});
test = new Button(Main.i18n("button.test"), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
imapTestError.setVisible(false);
imapTestOK.setVisible(false);
test.setEnabled(false);
ServiceDefTarget endPoint = (ServiceDefTarget) generalService;
endPoint.setServiceEntryPoint(RPCService.GeneralService);
generalService.testImapConnection(hostText.getText(), imapUserText.getText(), imapUserPasswordText.getText(), imapFolderText.getText(), new AsyncCallback<GWTTestImap>() {
@Override
public void onSuccess(GWTTestImap result) {
if (!result.isError()) {
imapTestError.setVisible(false);
imapTestOK.setVisible(true);
} else {
imapTestError.setHTML(Main.i18n("user.preferences.imap.test.error") + "<br>" + result.getErrorMsg());
imapTestError.setVisible(true);
imapTestOK.setVisible(false);
}
test.setEnabled(true);
}
@Override
public void onFailure(Throwable caught) {
imapTestError.setVisible(false);
imapTestOK.setVisible(false);
test.setEnabled(true);
Main.get().showError("testImapConnection", caught);
}
});
}
});
delete = new Button(Main.i18n("button.delete"), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int Id = Main.get().workspaceUserProperties.getWorkspace().getImapID();
if (Id>=0) {
ServiceDefTarget endPoint = (ServiceDefTarget) workspaceService;
endPoint.setServiceEntryPoint(RPCService.WorkspaceService);
workspaceService.deleteMailAccount(Id, callbackDeleteMailAccount);
}
}
});
hPanel = new HorizontalPanel();
hPanel.add(update);
hPanel.add(new HTML(" "));
hPanel.add(cancel);
userFlexTable.setCellPadding(0);
userFlexTable.setCellSpacing(2);
userFlexTable.setWidth("455");
//commented by vissu on oct'11th
/*
userFlexTable.setWidget(0, 0, userName);
userFlexTable.setWidget(1, 0, userPassword);
userFlexTable.setWidget(2, 0, userMail);
userFlexTable.setWidget(3, 0, userRoles); */
//added by vissu on oct'11th
userFlexTable.setWidget(0, 0, userName);
userFlexTable.setWidget(1, 0, userPassword);
userFlexTable.setWidget(2, 0, confirmUserPassword);
userFlexTable.setWidget(3, 0, userMail);
userFlexTable.setWidget(4, 0, userRoles);
userFlexTable.setWidget(1, 1, userPasswordText);
//commented by vissu on oct'11th
//userFlexTable.setWidget(1, 2, userPasswordTextVerify);
//added by vissu on oct'11th
userFlexTable.setWidget(2, 1, userPasswordTextVerify);
userFlexTable.setWidget(3, 1, userMailText);
userFlexTable.setWidget(4, 1, rolesPanel);
userFlexTable.getFlexCellFormatter().setVerticalAlignment(3, 0, HasAlignment.ALIGN_TOP);
userFlexTable.getFlexCellFormatter().setColSpan(2, 1, 2);
userFlexTable.getFlexCellFormatter().setColSpan(3, 1, 2);
mailFlexTable.setCellPadding(0);
mailFlexTable.setCellSpacing(2);
mailFlexTable.setWidth("455");
mailFlexTable.setWidget(1, 0, imapHost);
mailFlexTable.setWidget(2, 0, imapUser);
mailFlexTable.setWidget(3, 0, imapPassword);
mailFlexTable.setWidget(4, 0, imapFolder);
mailFlexTable.setWidget(1, 1, hostText);
mailFlexTable.setWidget(2, 1, imapUserText);
mailFlexTable.setWidget(3, 1, imapUserPasswordText);
mailFlexTable.setWidget(4, 1, imapFolderText);
mailFlexTable.setWidget(5, 0, new HTML(" "));
mailFlexTable.setWidget(5, 1, delete);
mailFlexTable.setWidget(5, 2, test);
mailFlexTable.getFlexCellFormatter().setColSpan(1, 1, 2);
mailFlexTable.getFlexCellFormatter().setAlignment(5, 1, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE);
mailFlexTable.getFlexCellFormatter().setAlignment(5, 2, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE);
userMailText.setWidth("275");
hostText.setWidth("275");
rolesPanel.setWidth("275");
userGroupBoxPanel.setWidth("460px");
mailGroupBoxPanel.setWidth("460px");
vPanel.setWidth("470px");
vPanel.setHeight("195px");
vPanel.add(new HTML("<br>"));
vPanel.add(userGroupBoxPanel);
vPanel.add(new HTML("<br>"));
//vissu touch commented below line to remove mail box on oct'9th
//vPanel.add(mailGroupBoxPanel);
vPanel.add(passwordError);
vPanel.add(passwordValidationError);
vPanel.add(imapPassordError);
vPanel.add(imapError);
vPanel.add(imapTestError);
vPanel.add(imapTestOK);
vPanel.add(new HTML("<br>"));
vPanel.add(hPanel);
vPanel.add(new HTML("<br>"));
vPanel.setCellHorizontalAlignment(userGroupBoxPanel, HasAlignment.ALIGN_CENTER);
//vissu touch commented below line to remove mail box on oct'9th
//vPanel.setCellHorizontalAlignment(mailGroupBoxPanel, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(hPanel, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(passwordError, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(passwordValidationError, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(imapPassordError, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(imapError, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(imapTestError, HasAlignment.ALIGN_CENTER);
vPanel.setCellHorizontalAlignment(imapTestOK, HasAlignment.ALIGN_CENTER);
userName.addStyleName("okm-NoWrap");
userPassword.addStyleName("okm-NoWrap");
confirmUserPassword.addStyleName("okm-NoWrap"); //added by vissu for zohoapi
userMail.addStyleName("okm-NoWrap");
imapHost.addStyleName("okm-NoWrap");
imapUser.addStyleName("okm-NoWrap");
imapPassword.addStyleName("okm-NoWrap");
imapFolder.addStyleName("okm-NoWrap");
userPasswordText.setStyleName("okm-Input");
userPasswordTextVerify.setStyleName("okm-Input");
userMailText.setStyleName("okm-Input");
hostText.setStyleName("okm-Input");
imapUserText.setStyleName("okm-Input");
imapUserPasswordText.setStyleName("okm-Input");
imapFolderText.setStyleName("okm-Input");
passwordError.setStyleName("okm-Input-Error");
passwordValidationError.setStyleName("okm-Input-Error");
imapPassordError.setStyleName("okm-Input-Error");
imapError.setStyleName("okm-Input-Error");
imapTestError.setStyleName("okm-Input-Error");
imapTestOK.setStyleName("okm-Input-Ok");
update.setStyleName("okm-Button");
cancel.setStyleName("okm-Button");
delete.setStyleName("okm-Button");
test.setStyleName("okm-Button");
setPopupPosition(left,top);
super.hide();
setWidget(vPanel);
}
/* (non-Javadoc)
* @see com.google.gwt.user.client.ui.ClickListener#onClick(com.google.gwt.user.client.ui.Widget)
*/
public void onClick(ClickEvent event) {
super.hide();
}
/**
* Language refresh
*/
public void langRefresh() {
setText(Main.i18n("user.preferences.label"));
userName.setHTML(Main.i18n("user.preferences.user"));
userPassword.setHTML(Main.i18n("user.preferences.password"));
confirmUserPassword.setHTML(Main.i18n("user.preferences.confirmpassword")); //added by vissu on oct'11th
userMail.setHTML(Main.i18n("user.preferences.mail"));
imapHost.setHTML(Main.i18n("user.preferences.imap.host"));
imapUser.setHTML(Main.i18n("user.preferences.imap.user"));
imapPassword.setHTML(Main.i18n("user.preferences.imap.user.password"));
imapFolder.setHTML(Main.i18n("user.preferences.imap.folder"));
passwordError.setHTML(Main.i18n("user.preferences.password.error"));
passwordValidationError.setHTML("");
imapPassordError.setHTML(Main.i18n("user.preferences.imap.password.error.void"));
imapError.setHTML(Main.i18n("user.preferences.imap.error"));
imapTestError.setHTML(Main.i18n("user.preferences.imap.error"));
imapTestOK.setHTML(Main.i18n("user.preferences.imap.ok"));
update.setText(Main.i18n("button.update"));
cancel.setText(Main.i18n("button.cancel"));
delete.setText(Main.i18n("button.delete"));
test.setText(Main.i18n("button.test"));
userGroupBoxPanel.setCaption(Main.i18n("user.preferences.user.data"));
mailGroupBoxPanel.setCaption(Main.i18n("user.preferences.mail.data"));
}
/**
* Reset values
*/
private void reset() {
userPasswordText.setText("");
userPasswordTextVerify.setText("");
imapUserPasswordText.setText("");
}
/**
* Show the popup user preferences
*
*/
public void show() {
setText(Main.i18n("user.preferences.label"));
GWTWorkspace workspace = Main.get().workspaceUserProperties.getWorkspace();
reset();
hostText.setText(workspace.getImapHost());
imapUserText.setText(workspace.getImapUser());
imapFolderText.setText(workspace.getImapFolder());
userFlexTable.setText(0, 1, workspace.getUser());
userFlexTable.getFlexCellFormatter().setColSpan(0, 1, 2);
userMailText.setText(workspace.getEmail());
for (Iterator<String> it = workspace.getRoleList().iterator(); it.hasNext();) {
rolesPanel.add(new HTML(it.next()));
}
passwordError.setVisible(false);
passwordValidationError.setVisible(false);
imapPassordError.setVisible(false);
imapError.setVisible(false);
imapTestError.setVisible(false);
imapTestOK.setVisible(false);
if (workspace.isChangePassword()) {
userMail.setVisible(true);
userMailText.setVisible(true);
userPassword.setVisible(true);
confirmUserPassword.setVisible(true); //added by vissu
userPasswordText.setVisible(true);
userPasswordTextVerify.setVisible(true);
} else {
userMail.setVisible(true);
userMailText.setVisible(false);
userPassword.setVisible(false);
confirmUserPassword.setVisible(false);
userPasswordText.setVisible(false);
userPasswordTextVerify.setVisible(false);
}
// Enables delete button only if there's some imap server configured to be removed
if (workspace.getImapID()>=0) {
delete.setVisible(true);
} else {
delete.setVisible(false);
}
super.show();
}
/**
* Call back update user workspace data
*/
final AsyncCallback<Object> callbackUpdateUserWorkspace = new AsyncCallback<Object>() {
public void onSuccess(Object result){
Main.get().workspaceUserProperties.refreshUserWorkspace(); // Refreshing workspace saved values
hide();
}
public void onFailure(Throwable caught) {
Main.get().showError("callbackUpdateUserWorkspace", caught);
}
};
/**
* Call back delete mail account
*/
final AsyncCallback<Object> callbackDeleteMailAccount = new AsyncCallback<Object>() {
public void onSuccess(Object result){
Main.get().workspaceUserProperties.getUserWorkspace(); // Refreshing workspace saved values
hostText.setText("");
imapUserText.setText("");
imapUserPasswordText.setText("");
imapFolderText.setText("");
delete.setVisible(false);
}
public void onFailure(Throwable caught) {
Main.get().showError("callbackDeleteMailAccount", caught);
}
};
}