Revert 10480 due to EOL problems

This commit is contained in:
tspc 2009-10-04 11:13:10 +00:00
parent aaa62f6298
commit 87abf0e9ec
1 changed files with 337 additions and 353 deletions

View File

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