Test and integrated Rev:10311 to Trunk
http://adempiere.svn.sourceforge.net/viewvc/adempiere?view=rev&revision=10311 Fix [2846601] - DB.isDatabaseOK() is not called https://sourceforge.net/tracker/index.php?func=detail&aid=2846601&group_id=176962&atid=955896
This commit is contained in:
parent
bc7e57b24e
commit
aaa62f6298
|
@ -1,337 +1,353 @@
|
|||
/******************************************************************************
|
||||
* Product: Posterita Ajax UI *
|
||||
* Copyright (C) 2007 Posterita Ltd. All Rights Reserved. *
|
||||
* This program is free software; you can redistribute it and/or modify it *
|
||||
* under the terms version 2 of the GNU General Public License as published *
|
||||
* by the Free Software Foundation. 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., *
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||
* For the text or an alternative of this public license, you may reach us *
|
||||
* Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius *
|
||||
* or via info@posterita.org or http://www.posterita.org/ *
|
||||
* *
|
||||
* Contributors: *
|
||||
* - Heng Sin Low *
|
||||
* *
|
||||
* Sponsors: *
|
||||
* - Idalica Corporation *
|
||||
*****************************************************************************/
|
||||
|
||||
package org.adempiere.webui.panel;
|
||||
|
||||
import java.util.Properties;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import org.adempiere.webui.LayoutUtils;
|
||||
import org.adempiere.webui.apps.AEnv;
|
||||
import org.adempiere.webui.component.Combobox;
|
||||
import org.adempiere.webui.component.ConfirmPanel;
|
||||
import org.adempiere.webui.component.Label;
|
||||
import org.adempiere.webui.component.Textbox;
|
||||
import org.adempiere.webui.component.Window;
|
||||
import org.adempiere.webui.session.SessionManager;
|
||||
import org.adempiere.webui.theme.ITheme;
|
||||
import org.adempiere.webui.theme.ThemeManager;
|
||||
import org.adempiere.webui.util.UserPreference;
|
||||
import org.adempiere.webui.window.LoginWindow;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Env;
|
||||
import org.compiere.util.KeyNamePair;
|
||||
import org.compiere.util.Language;
|
||||
import org.compiere.util.Login;
|
||||
import org.zkoss.util.Locales;
|
||||
import org.zkoss.zhtml.Div;
|
||||
import org.zkoss.zhtml.Table;
|
||||
import org.zkoss.zhtml.Td;
|
||||
import org.zkoss.zhtml.Tr;
|
||||
import org.zkoss.zk.au.out.AuFocus;
|
||||
import org.zkoss.zk.au.out.AuScript;
|
||||
import org.zkoss.zk.fn.ZkFns;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.Executions;
|
||||
import org.zkoss.zk.ui.Session;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.Clients;
|
||||
import org.zkoss.zul.Comboitem;
|
||||
import org.zkoss.zul.Image;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:agramdass@gmail.com">Ashley G Ramdass</a>
|
||||
* @date Feb 25, 2007
|
||||
* @version $Revision: 0.10 $
|
||||
* @author <a href="mailto:sendy.yagambrum@posterita.org">Sendy Yagambrum</a>
|
||||
* @date July 18, 2007
|
||||
*/
|
||||
public class LoginPanel extends Window implements EventListener
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -2243984359460922023L;
|
||||
private static final String RESOURCE = "org.compiere.apps.ALoginRes";
|
||||
private ResourceBundle res = ResourceBundle.getBundle(RESOURCE);
|
||||
|
||||
private Properties ctx;
|
||||
private Label lblUserId;
|
||||
private Label lblPassword;
|
||||
private Label lblLanguage;
|
||||
private Textbox txtUserId;
|
||||
private Textbox txtPassword;
|
||||
private Combobox lstLanguage;
|
||||
private LoginWindow wndLogin;
|
||||
|
||||
public LoginPanel(Properties ctx, LoginWindow loginWindow)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
this.wndLogin = loginWindow;
|
||||
initComponents();
|
||||
init();
|
||||
this.setId("loginPanel");
|
||||
|
||||
AuFocus auf = new AuFocus(txtUserId);
|
||||
Clients.response(auf);
|
||||
}
|
||||
|
||||
private void init()
|
||||
{
|
||||
Div div = new Div();
|
||||
div.setSclass(ITheme.LOGIN_BOX_HEADER_CLASS);
|
||||
Label label = new Label("Login");
|
||||
label.setSclass(ITheme.LOGIN_BOX_HEADER_TXT_CLASS);
|
||||
div.appendChild(label);
|
||||
this.appendChild(div);
|
||||
|
||||
Table table = new Table();
|
||||
table.setId("grdLogin");
|
||||
table.setDynamicProperty("cellpadding", "0");
|
||||
table.setDynamicProperty("cellspacing", "5");
|
||||
table.setSclass(ITheme.LOGIN_BOX_BODY_CLASS);
|
||||
|
||||
this.appendChild(table);
|
||||
|
||||
Tr tr = new Tr();
|
||||
table.appendChild(tr);
|
||||
Td td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_BOX_HEADER_LOGO_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.setDynamicProperty("colspan", "2");
|
||||
Image image = new Image();
|
||||
image.setSrc(ThemeManager.getLargeLogo());
|
||||
td.appendChild(image);
|
||||
|
||||
tr = new Tr();
|
||||
tr.setId("rowUser");
|
||||
table.appendChild(tr);
|
||||
td = new Td();
|
||||
tr.appendChild(td);
|
||||
td.setSclass(ITheme.LOGIN_LABEL_CLASS);
|
||||
td.appendChild(lblUserId);
|
||||
td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_FIELD_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.appendChild(txtUserId);
|
||||
|
||||
tr = new Tr();
|
||||
tr.setId("rowPassword");
|
||||
table.appendChild(tr);
|
||||
td = new Td();
|
||||
tr.appendChild(td);
|
||||
td.setSclass(ITheme.LOGIN_LABEL_CLASS);
|
||||
td.appendChild(lblPassword);
|
||||
td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_FIELD_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.appendChild(txtPassword);
|
||||
|
||||
tr = new Tr();
|
||||
tr.setId("rowLanguage");
|
||||
table.appendChild(tr);
|
||||
td = new Td();
|
||||
tr.appendChild(td);
|
||||
td.setSclass(ITheme.LOGIN_LABEL_CLASS);
|
||||
td.appendChild(lblLanguage);
|
||||
td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_FIELD_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.appendChild(lstLanguage);
|
||||
|
||||
div = new Div();
|
||||
div.setSclass(ITheme.LOGIN_BOX_FOOTER_CLASS);
|
||||
ConfirmPanel pnlButtons = new ConfirmPanel(false);
|
||||
pnlButtons.addActionListener(this);
|
||||
LayoutUtils.addSclass(ITheme.LOGIN_BOX_FOOTER_PANEL_CLASS, pnlButtons);
|
||||
pnlButtons.setWidth(null);
|
||||
pnlButtons.getButton(ConfirmPanel.A_OK).setSclass(ITheme.LOGIN_BUTTON_CLASS);
|
||||
div.appendChild(pnlButtons);
|
||||
this.appendChild(div);
|
||||
}
|
||||
|
||||
private void initComponents()
|
||||
{
|
||||
lblUserId = new Label();
|
||||
lblUserId.setId("lblUserId");
|
||||
lblUserId.setValue("User ID");
|
||||
|
||||
lblPassword = new Label();
|
||||
lblPassword.setId("lblPassword");
|
||||
lblPassword.setValue("Password");
|
||||
|
||||
lblLanguage = new Label();
|
||||
lblLanguage.setId("lblLanguage");
|
||||
lblLanguage.setValue("Language");
|
||||
|
||||
txtUserId = new Textbox();
|
||||
txtUserId.setId("txtUserId");
|
||||
txtUserId.setCols(25);
|
||||
txtUserId.setMaxlength(40);
|
||||
txtUserId.setWidth("220px");
|
||||
txtUserId.addEventListener(Events.ON_CHANGE, this); // Elaine 2009/02/06
|
||||
|
||||
txtPassword = new Textbox();
|
||||
txtPassword.setId("txtPassword");
|
||||
txtPassword.setType("password");
|
||||
txtPassword.setCols(25);
|
||||
txtPassword.setMaxlength(40);
|
||||
txtPassword.setWidth("220px");
|
||||
|
||||
lstLanguage = new Combobox();
|
||||
lstLanguage.setAutocomplete(true);
|
||||
lstLanguage.setAutodrop(true);
|
||||
lstLanguage.setId("lstLanguage");
|
||||
lstLanguage.addEventListener(Events.ON_SELECT, this);
|
||||
lstLanguage.setWidth("220px");
|
||||
|
||||
// Update Language List
|
||||
lstLanguage.getItems().clear();
|
||||
String[] availableLanguages = Language.getNames();
|
||||
for (String langName : availableLanguages) {
|
||||
Language language = Language.getLanguage(langName);
|
||||
lstLanguage.appendItem(langName, language.getAD_Language());
|
||||
}
|
||||
|
||||
//set base language
|
||||
String baseLanguage = Language.getBaseLanguage().getName();
|
||||
for(int i = 0; i < lstLanguage.getItemCount(); i++)
|
||||
{
|
||||
Comboitem li = lstLanguage.getItemAtIndex(i);
|
||||
if(li.getLabel().equals(baseLanguage))
|
||||
{
|
||||
lstLanguage.setSelectedIndex(i);
|
||||
languageChanged(li.getLabel());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onEvent(Event event)
|
||||
{
|
||||
Component eventComp = event.getTarget();
|
||||
|
||||
if (event.getTarget().getId().equals(ConfirmPanel.A_OK))
|
||||
{
|
||||
validateLogin();
|
||||
}
|
||||
if (event.getName().equals(Events.ON_SELECT))
|
||||
{
|
||||
if(eventComp.getId().equals(lstLanguage.getId())) {
|
||||
String langName = (String) lstLanguage.getSelectedItem().getLabel();
|
||||
languageChanged(langName);
|
||||
}
|
||||
}
|
||||
// Elaine 2009/02/06 - initial language
|
||||
if (event.getName().equals(Events.ON_CHANGE))
|
||||
{
|
||||
if(eventComp.getId().equals(txtUserId.getId()))
|
||||
{
|
||||
String userId = txtUserId.getValue();
|
||||
if(userId != null && userId.length() > 0)
|
||||
{
|
||||
int AD_User_ID = DB.getSQLValue(null, "SELECT AD_User_ID FROM AD_User WHERE Name = ?", userId);
|
||||
if(AD_User_ID > 0)
|
||||
{
|
||||
// Elaine 2009/02/06 Load preference from AD_Preference
|
||||
UserPreference userPreference = SessionManager.getSessionApplication().loadUserPreference(AD_User_ID);
|
||||
String initDefault = userPreference.getProperty(UserPreference.P_LANGUAGE);
|
||||
for(int i = 0; i < lstLanguage.getItemCount(); i++)
|
||||
{
|
||||
Comboitem li = lstLanguage.getItemAtIndex(i);
|
||||
if(li.getLabel().equals(initDefault))
|
||||
{
|
||||
lstLanguage.setSelectedIndex(i);
|
||||
languageChanged(li.getLabel()); // Elaine 2009/04/17 language changed
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
}
|
||||
|
||||
private void languageChanged(String langName)
|
||||
{
|
||||
Language language = findLanguage(langName);
|
||||
|
||||
res = ResourceBundle.getBundle(RESOURCE, language.getLocale());
|
||||
lblUserId.setValue(res.getString("User"));
|
||||
lblPassword.setValue(res.getString("Password"));
|
||||
lblLanguage.setValue(res.getString("Language"));
|
||||
}
|
||||
|
||||
private Language findLanguage(String langName) {
|
||||
Language tmp = Language.getLanguage(langName);
|
||||
Language language = new Language(tmp.getName(), tmp.getAD_Language(), tmp.getLocale(), tmp.isDecimalPoint(),
|
||||
tmp.getDateFormat().toPattern(), tmp.getMediaSize());
|
||||
Env.verifyLanguage(ctx, language);
|
||||
Env.setContext(ctx, Env.LANGUAGE, language.getAD_Language());
|
||||
Env.setContext(ctx, AEnv.LOCALE, language.getLocale().toString());
|
||||
return language;
|
||||
}
|
||||
/**
|
||||
* validates user name and password when logging in
|
||||
*
|
||||
**/
|
||||
public void validateLogin()
|
||||
{
|
||||
Login login = new Login(ctx);
|
||||
String userId = txtUserId.getValue();
|
||||
String userPassword = txtPassword.getValue();
|
||||
KeyNamePair rolesKNPairs[] = login.getRoles(userId, userPassword);
|
||||
if(rolesKNPairs == null || rolesKNPairs.length == 0)
|
||||
throw new WrongValueException("User Id or Password invalid!!!");
|
||||
|
||||
else
|
||||
{
|
||||
String langName = null;
|
||||
if ( lstLanguage.getSelectedItem() != null )
|
||||
langName = (String) lstLanguage.getSelectedItem().getLabel();
|
||||
else
|
||||
langName = Language.getBaseLanguage().getName();
|
||||
Language language = findLanguage(langName);
|
||||
wndLogin.loginOk(userId, userPassword);
|
||||
|
||||
Env.setContext(ctx, UserPreference.LANGUAGE_NAME, language.getName()); // Elaine 2009/02/06
|
||||
|
||||
Locales.setThreadLocal(language.getLocale());
|
||||
|
||||
Clients.response("zkLocaleJavaScript", new AuScript(null, ZkFns.outLocaleJavaScript()));
|
||||
}
|
||||
|
||||
// This temporary validation code is added to check the reported bug
|
||||
// [ adempiere-ZK Web Client-2832968 ] User context lost?
|
||||
// https://sourceforge.net/tracker/?func=detail&atid=955896&aid=2832968&group_id=176962
|
||||
// it's harmless, if there is no bug then this must never fail
|
||||
Session currSess = Executions.getCurrent().getDesktop().getSession();
|
||||
currSess.setAttribute("Check_AD_User_ID", Env.getAD_User_ID(ctx));
|
||||
// End of temporary code for [ adempiere-ZK Web Client-2832968 ] User context lost?
|
||||
}
|
||||
}
|
||||
/******************************************************************************
|
||||
* Product: Posterita Ajax UI *
|
||||
* Copyright (C) 2007 Posterita Ltd. All Rights Reserved. *
|
||||
* This program is free software; you can redistribute it and/or modify it *
|
||||
* under the terms version 2 of the GNU General Public License as published *
|
||||
* by the Free Software Foundation. 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., *
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||
* For the text or an alternative of this public license, you may reach us *
|
||||
* Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius *
|
||||
* or via info@posterita.org or http://www.posterita.org/ *
|
||||
* *
|
||||
* Contributors: *
|
||||
* - Heng Sin Low *
|
||||
* *
|
||||
* Sponsors: *
|
||||
* - Idalica Corporation *
|
||||
*****************************************************************************/
|
||||
|
||||
package org.adempiere.webui.panel;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Properties;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import org.adempiere.webui.LayoutUtils;
|
||||
import org.adempiere.webui.apps.AEnv;
|
||||
import org.adempiere.webui.component.Combobox;
|
||||
import org.adempiere.webui.component.ConfirmPanel;
|
||||
import org.adempiere.webui.component.Label;
|
||||
import org.adempiere.webui.component.Textbox;
|
||||
import org.adempiere.webui.component.Window;
|
||||
import org.adempiere.webui.exception.ApplicationException;
|
||||
import org.adempiere.webui.session.SessionManager;
|
||||
import org.adempiere.webui.theme.ITheme;
|
||||
import org.adempiere.webui.theme.ThemeManager;
|
||||
import org.adempiere.webui.util.UserPreference;
|
||||
import org.adempiere.webui.window.LoginWindow;
|
||||
import org.compiere.Adempiere;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Env;
|
||||
import org.compiere.util.KeyNamePair;
|
||||
import org.compiere.util.Language;
|
||||
import org.compiere.util.Login;
|
||||
import org.compiere.util.Msg;
|
||||
import org.zkoss.util.Locales;
|
||||
import org.zkoss.zhtml.Div;
|
||||
import org.zkoss.zhtml.Table;
|
||||
import org.zkoss.zhtml.Td;
|
||||
import org.zkoss.zhtml.Tr;
|
||||
import org.zkoss.zk.au.out.AuFocus;
|
||||
import org.zkoss.zk.au.out.AuScript;
|
||||
import org.zkoss.zk.fn.ZkFns;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.Executions;
|
||||
import org.zkoss.zk.ui.Session;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.Clients;
|
||||
import org.zkoss.zul.Comboitem;
|
||||
import org.zkoss.zul.Image;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:agramdass@gmail.com">Ashley G Ramdass</a>
|
||||
* @date Feb 25, 2007
|
||||
* @version $Revision: 0.10 $
|
||||
* @author <a href="mailto:sendy.yagambrum@posterita.org">Sendy Yagambrum</a>
|
||||
* @date July 18, 2007
|
||||
*/
|
||||
public class LoginPanel extends Window implements EventListener
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -2243984359460922023L;
|
||||
private static final String RESOURCE = "org.compiere.apps.ALoginRes";
|
||||
private ResourceBundle res = ResourceBundle.getBundle(RESOURCE);
|
||||
|
||||
private Properties ctx;
|
||||
private Label lblUserId;
|
||||
private Label lblPassword;
|
||||
private Label lblLanguage;
|
||||
private Textbox txtUserId;
|
||||
private Textbox txtPassword;
|
||||
private Combobox lstLanguage;
|
||||
private LoginWindow wndLogin;
|
||||
|
||||
public LoginPanel(Properties ctx, LoginWindow loginWindow)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
this.wndLogin = loginWindow;
|
||||
initComponents();
|
||||
init();
|
||||
this.setId("loginPanel");
|
||||
|
||||
AuFocus auf = new AuFocus(txtUserId);
|
||||
Clients.response(auf);
|
||||
}
|
||||
|
||||
private void init()
|
||||
{
|
||||
Div div = new Div();
|
||||
div.setSclass(ITheme.LOGIN_BOX_HEADER_CLASS);
|
||||
Label label = new Label("Login");
|
||||
label.setSclass(ITheme.LOGIN_BOX_HEADER_TXT_CLASS);
|
||||
div.appendChild(label);
|
||||
this.appendChild(div);
|
||||
|
||||
Table table = new Table();
|
||||
table.setId("grdLogin");
|
||||
table.setDynamicProperty("cellpadding", "0");
|
||||
table.setDynamicProperty("cellspacing", "5");
|
||||
table.setSclass(ITheme.LOGIN_BOX_BODY_CLASS);
|
||||
|
||||
this.appendChild(table);
|
||||
|
||||
Tr tr = new Tr();
|
||||
table.appendChild(tr);
|
||||
Td td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_BOX_HEADER_LOGO_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.setDynamicProperty("colspan", "2");
|
||||
Image image = new Image();
|
||||
image.setSrc(ThemeManager.getLargeLogo());
|
||||
td.appendChild(image);
|
||||
|
||||
tr = new Tr();
|
||||
tr.setId("rowUser");
|
||||
table.appendChild(tr);
|
||||
td = new Td();
|
||||
tr.appendChild(td);
|
||||
td.setSclass(ITheme.LOGIN_LABEL_CLASS);
|
||||
td.appendChild(lblUserId);
|
||||
td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_FIELD_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.appendChild(txtUserId);
|
||||
|
||||
tr = new Tr();
|
||||
tr.setId("rowPassword");
|
||||
table.appendChild(tr);
|
||||
td = new Td();
|
||||
tr.appendChild(td);
|
||||
td.setSclass(ITheme.LOGIN_LABEL_CLASS);
|
||||
td.appendChild(lblPassword);
|
||||
td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_FIELD_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.appendChild(txtPassword);
|
||||
|
||||
tr = new Tr();
|
||||
tr.setId("rowLanguage");
|
||||
table.appendChild(tr);
|
||||
td = new Td();
|
||||
tr.appendChild(td);
|
||||
td.setSclass(ITheme.LOGIN_LABEL_CLASS);
|
||||
td.appendChild(lblLanguage);
|
||||
td = new Td();
|
||||
td.setSclass(ITheme.LOGIN_FIELD_CLASS);
|
||||
tr.appendChild(td);
|
||||
td.appendChild(lstLanguage);
|
||||
|
||||
div = new Div();
|
||||
div.setSclass(ITheme.LOGIN_BOX_FOOTER_CLASS);
|
||||
ConfirmPanel pnlButtons = new ConfirmPanel(false);
|
||||
pnlButtons.addActionListener(this);
|
||||
LayoutUtils.addSclass(ITheme.LOGIN_BOX_FOOTER_PANEL_CLASS, pnlButtons);
|
||||
pnlButtons.setWidth(null);
|
||||
pnlButtons.getButton(ConfirmPanel.A_OK).setSclass(ITheme.LOGIN_BUTTON_CLASS);
|
||||
div.appendChild(pnlButtons);
|
||||
this.appendChild(div);
|
||||
}
|
||||
|
||||
private void initComponents()
|
||||
{
|
||||
lblUserId = new Label();
|
||||
lblUserId.setId("lblUserId");
|
||||
lblUserId.setValue("User ID");
|
||||
|
||||
lblPassword = new Label();
|
||||
lblPassword.setId("lblPassword");
|
||||
lblPassword.setValue("Password");
|
||||
|
||||
lblLanguage = new Label();
|
||||
lblLanguage.setId("lblLanguage");
|
||||
lblLanguage.setValue("Language");
|
||||
|
||||
txtUserId = new Textbox();
|
||||
txtUserId.setId("txtUserId");
|
||||
txtUserId.setCols(25);
|
||||
txtUserId.setMaxlength(40);
|
||||
txtUserId.setWidth("220px");
|
||||
txtUserId.addEventListener(Events.ON_CHANGE, this); // Elaine 2009/02/06
|
||||
|
||||
txtPassword = new Textbox();
|
||||
txtPassword.setId("txtPassword");
|
||||
txtPassword.setType("password");
|
||||
txtPassword.setCols(25);
|
||||
txtPassword.setMaxlength(40);
|
||||
txtPassword.setWidth("220px");
|
||||
|
||||
lstLanguage = new Combobox();
|
||||
lstLanguage.setAutocomplete(true);
|
||||
lstLanguage.setAutodrop(true);
|
||||
lstLanguage.setId("lstLanguage");
|
||||
lstLanguage.addEventListener(Events.ON_SELECT, this);
|
||||
lstLanguage.setWidth("220px");
|
||||
|
||||
// Update Language List
|
||||
lstLanguage.getItems().clear();
|
||||
String[] availableLanguages = Language.getNames();
|
||||
for (String langName : availableLanguages) {
|
||||
Language language = Language.getLanguage(langName);
|
||||
lstLanguage.appendItem(langName, language.getAD_Language());
|
||||
}
|
||||
|
||||
//set base language
|
||||
String baseLanguage = Language.getBaseLanguage().getName();
|
||||
for(int i = 0; i < lstLanguage.getItemCount(); i++)
|
||||
{
|
||||
Comboitem li = lstLanguage.getItemAtIndex(i);
|
||||
if(li.getLabel().equals(baseLanguage))
|
||||
{
|
||||
lstLanguage.setSelectedIndex(i);
|
||||
languageChanged(li.getLabel());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onEvent(Event event)
|
||||
{
|
||||
Component eventComp = event.getTarget();
|
||||
|
||||
if (event.getTarget().getId().equals(ConfirmPanel.A_OK))
|
||||
{
|
||||
validateLogin();
|
||||
}
|
||||
if (event.getName().equals(Events.ON_SELECT))
|
||||
{
|
||||
if(eventComp.getId().equals(lstLanguage.getId())) {
|
||||
String langName = (String) lstLanguage.getSelectedItem().getLabel();
|
||||
languageChanged(langName);
|
||||
}
|
||||
}
|
||||
// Elaine 2009/02/06 - initial language
|
||||
if (event.getName().equals(Events.ON_CHANGE))
|
||||
{
|
||||
if(eventComp.getId().equals(txtUserId.getId()))
|
||||
{
|
||||
String userId = txtUserId.getValue();
|
||||
if(userId != null && userId.length() > 0)
|
||||
{
|
||||
int AD_User_ID = DB.getSQLValue(null, "SELECT AD_User_ID FROM AD_User WHERE Name = ?", userId);
|
||||
if(AD_User_ID > 0)
|
||||
{
|
||||
// Elaine 2009/02/06 Load preference from AD_Preference
|
||||
UserPreference userPreference = SessionManager.getSessionApplication().loadUserPreference(AD_User_ID);
|
||||
String initDefault = userPreference.getProperty(UserPreference.P_LANGUAGE);
|
||||
for(int i = 0; i < lstLanguage.getItemCount(); i++)
|
||||
{
|
||||
Comboitem li = lstLanguage.getItemAtIndex(i);
|
||||
if(li.getLabel().equals(initDefault))
|
||||
{
|
||||
lstLanguage.setSelectedIndex(i);
|
||||
languageChanged(li.getLabel()); // Elaine 2009/04/17 language changed
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
}
|
||||
|
||||
private void languageChanged(String langName)
|
||||
{
|
||||
Language language = findLanguage(langName);
|
||||
|
||||
res = ResourceBundle.getBundle(RESOURCE, language.getLocale());
|
||||
lblUserId.setValue(res.getString("User"));
|
||||
lblPassword.setValue(res.getString("Password"));
|
||||
lblLanguage.setValue(res.getString("Language"));
|
||||
}
|
||||
|
||||
private Language findLanguage(String langName) {
|
||||
Language tmp = Language.getLanguage(langName);
|
||||
Language language = new Language(tmp.getName(), tmp.getAD_Language(), tmp.getLocale(), tmp.isDecimalPoint(),
|
||||
tmp.getDateFormat().toPattern(), tmp.getMediaSize());
|
||||
Env.verifyLanguage(ctx, language);
|
||||
Env.setContext(ctx, Env.LANGUAGE, language.getAD_Language());
|
||||
Env.setContext(ctx, AEnv.LOCALE, language.getLocale().toString());
|
||||
return language;
|
||||
}
|
||||
/**
|
||||
* validates user name and password when logging in
|
||||
*
|
||||
**/
|
||||
public void validateLogin()
|
||||
{
|
||||
Login login = new Login(ctx);
|
||||
String userId = txtUserId.getValue();
|
||||
String userPassword = txtPassword.getValue();
|
||||
KeyNamePair rolesKNPairs[] = login.getRoles(userId, userPassword);
|
||||
if(rolesKNPairs == null || rolesKNPairs.length == 0)
|
||||
throw new WrongValueException("User Id or Password invalid!!!");
|
||||
|
||||
else
|
||||
{
|
||||
String langName = null;
|
||||
if ( lstLanguage.getSelectedItem() != null )
|
||||
langName = (String) lstLanguage.getSelectedItem().getLabel();
|
||||
else
|
||||
langName = Language.getBaseLanguage().getName();
|
||||
Language language = findLanguage(langName);
|
||||
wndLogin.loginOk(userId, userPassword);
|
||||
|
||||
Env.setContext(ctx, UserPreference.LANGUAGE_NAME, language.getName()); // Elaine 2009/02/06
|
||||
|
||||
Locales.setThreadLocal(language.getLocale());
|
||||
|
||||
Clients.response("zkLocaleJavaScript", new AuScript(null, ZkFns.outLocaleJavaScript()));
|
||||
}
|
||||
|
||||
/* Check DB version */
|
||||
String version = DB.getSQLValueString(null, "SELECT Version FROM AD_System");
|
||||
// Identical DB version
|
||||
if (! Adempiere.DB_VERSION.equals(version)) {
|
||||
String AD_Message = "DatabaseVersionError";
|
||||
// Code assumes Database version {0}, but Database has Version {1}.
|
||||
String msg = Msg.getMsg(ctx, AD_Message); // complete message
|
||||
msg = MessageFormat.format(msg, new Object[] {Adempiere.DB_VERSION, version});
|
||||
throw new ApplicationException(msg);
|
||||
}
|
||||
|
||||
// This temporary validation code is added to check the reported bug
|
||||
// [ adempiere-ZK Web Client-2832968 ] User context lost?
|
||||
// https://sourceforge.net/tracker/?func=detail&atid=955896&aid=2832968&group_id=176962
|
||||
// it's harmless, if there is no bug then this must never fail
|
||||
Session currSess = Executions.getCurrent().getDesktop().getSession();
|
||||
currSess.setAttribute("Check_AD_User_ID", Env.getAD_User_ID(ctx));
|
||||
// End of temporary code for [ adempiere-ZK Web Client-2832968 ] User context lost?
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue