/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. 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 * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.compiere.apps; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.rmi.AccessException; import java.sql.Timestamp; import java.util.Locale; import java.util.Properties; import java.util.ResourceBundle; import javax.swing.JOptionPane; import javax.swing.JPasswordField; import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.adempiere.jbpm.Actor; import org.adempiere.plaf.AdempierePLAF; import org.compiere.Adempiere; import org.compiere.db.CConnection; import org.compiere.db.CConnectionEditor; import org.compiere.grid.ed.VComboBox; import org.compiere.grid.ed.VDate; import org.compiere.model.MSysConfig; import org.compiere.model.MSystem; import org.compiere.model.MUser; import org.compiere.print.CPrinter; import org.compiere.swing.CButton; import org.compiere.swing.CDialog; import org.compiere.swing.CLabel; import org.compiere.swing.CPanel; import org.compiere.swing.CTabbedPane; import org.compiere.swing.CTextField; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Ini; import org.compiere.util.KeyNamePair; import org.compiere.util.Language; import org.compiere.util.Login; import org.compiere.util.Msg; /** * Application Login Window * * @author Jorg Janke * @version $Id: ALogin.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ */ public final class ALogin extends CDialog implements ActionListener, ChangeListener { /** * */ private static final long serialVersionUID = -3057525535969948097L; /** * Construct the dialog. * Need to call initLogin for dynamic start * @param parent parent */ public ALogin (Frame parent) { super (parent, "Login", true); // Modal log.finer(""); setDefaultCloseOperation(DISPOSE_ON_CLOSE); m_WindowNo = Env.createWindowNo (null); res = ResourceBundle.getBundle(RESOURCE); // try { jbInit(); } catch(Exception e) { log.severe(e.toString()); } // Focus to OK this.getRootPane().setDefaultButton(confirmPanel.getOKButton()); parent.setIconImage(Adempiere.getImage16()); } // ALogin protected static final String RESOURCE = "org.compiere.apps.ALoginRes"; private static ResourceBundle res = ResourceBundle.getBundle(RESOURCE); /** Logger */ private static CLogger log = CLogger.getCLogger(ALogin.class); private CPanel mainPanel = new CPanel(new BorderLayout()); private CTabbedPane loginTabPane = new CTabbedPane(); // private BorderLayout conTabLayout = new BorderLayout(); private CPanel connectionPanel = new CPanel(); private CLabel hostLabel = new CLabel(); private CConnectionEditor hostField = new CConnectionEditor(); private CLabel userLabel = new CLabel(); private CTextField userTextField = new CTextField(); private CLabel passwordLabel = new CLabel(); private JPasswordField passwordField = new JPasswordField(); private CPanel defaultPanel = new CPanel(); // private BorderLayout defaultLayout = new BorderLayout(); private CLabel clientLabel = new CLabel(); private CLabel orgLabel = new CLabel(); private CLabel dateLabel = new CLabel(); private VDate dateField = new VDate(DisplayType.Date); private VComboBox orgCombo = new VComboBox(); private VComboBox clientCombo = new VComboBox(); private CLabel warehouseLabel = new CLabel(); private VComboBox warehouseCombo = new VComboBox(); private CLabel printerLabel = new CLabel(); private CPrinter printerField = new CPrinter(); private CLabel roleLabel = new CLabel(); private VComboBox roleCombo = new VComboBox(); private CLabel copy0Label = new CLabel(); private CLabel titleLabel = new CLabel(); private CLabel versionLabel = new CLabel(); private CLabel copy1Label = new CLabel(); private GridBagLayout connectionLayout = new GridBagLayout(); private GridBagLayout defaultPanelLayout = new GridBagLayout(); private CLabel languageLabel = new CLabel(); private VComboBox languageCombo = new VComboBox(Language.getNames()); private CLabel compileDate = new CLabel(); private CPanel southPanel = new CPanel(); private BorderLayout southLayout = new BorderLayout(); private StatusBar statusBar = new StatusBar(); private ConfirmPanel confirmPanel = new ConfirmPanel(true, false, false, false, false, false, false); //private OnlineHelp onlineHelp = new OnlineHelp(true); //private CPanel helpPanel = new CPanel(); // private JScrollPane helpScrollPane = new JScrollPane(); // private BorderLayout helpLayout = new BorderLayout(); /** Server Connection */ private CConnection m_cc; /** Application User */ private String m_user; /** Application Password */ private String m_pwd; /** Combo Active */ private boolean m_comboActive = false; /** Combo Active */ private boolean m_okPressed = false; /** Connection OK */ private boolean m_connectionOK = false; /** Window No */ private int m_WindowNo; /** Context */ private Properties m_ctx = Env.getCtx(); private Login m_login = null; /************************************************************************** * Component initialization * @throws Exception */ private void jbInit() throws Exception { this.setName("Login"); titleLabel.setFont(new java.awt.Font("Serif", 2, 10)); titleLabel.setForeground(Color.blue); titleLabel.setRequestFocusEnabled(false); titleLabel.setToolTipText(Adempiere.getURL()); titleLabel.setHorizontalTextPosition(SwingConstants.CENTER); titleLabel.setIcon(Adempiere.getImageIconLogo()); titleLabel.setText(Adempiere.getSubtitle()); titleLabel.setVerticalTextPosition(SwingConstants.BOTTOM); versionLabel.setRequestFocusEnabled(false); versionLabel.setHorizontalAlignment(SwingConstants.RIGHT); versionLabel.setHorizontalTextPosition(SwingConstants.RIGHT); hostLabel.setRequestFocusEnabled(false); hostLabel.setLabelFor(hostField); hostField.addActionListener(this); userLabel.setRequestFocusEnabled(false); userLabel.setLabelFor(userTextField); passwordLabel.setRequestFocusEnabled(false); passwordLabel.setLabelFor(passwordField); languageLabel.setLabelFor(languageCombo); copy0Label.setFont(new java.awt.Font("Serif", 2, 10)); copy0Label.setForeground(Color.blue); copy0Label.setRequestFocusEnabled(false); copy1Label.setRequestFocusEnabled(false); roleLabel.setRequestFocusEnabled(false); roleLabel.setLabelFor(roleCombo); clientLabel.setRequestFocusEnabled(false); orgLabel.setRequestFocusEnabled(false); dateLabel.setRequestFocusEnabled(false); warehouseLabel.setRequestFocusEnabled(false); printerLabel.setRequestFocusEnabled(false); compileDate.setHorizontalAlignment(SwingConstants.RIGHT); compileDate.setHorizontalTextPosition(SwingConstants.RIGHT); compileDate.setText(Adempiere.DATE_VERSION); compileDate.setToolTipText(Adempiere.getImplementationVendor()); southPanel.setLayout(southLayout); loginTabPane.addChangeListener(this); // ConnectionTab connectionPanel.setLayout(connectionLayout); // titleLabel.setHorizontalAlignment(SwingConstants.CENTER); versionLabel.setText(Adempiere.MAIN_VERSION); versionLabel.setToolTipText(Adempiere.getImplementationVersion()); hostLabel.setHorizontalAlignment(SwingConstants.RIGHT); hostLabel.setText("Host"); hostLabel.setLabelFor(hostField); connectionPanel.add(hostLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); connectionPanel.add(hostField, new GridBagConstraints(1, 2, 3, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); userLabel.setHorizontalAlignment(SwingConstants.RIGHT); userLabel.setText("User"); userLabel.setLabelFor(userTextField); connectionPanel.add(userLabel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); userTextField.setText("System"); // default connectionPanel.add(userTextField, new GridBagConstraints(1, 3, 3, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); passwordLabel.setHorizontalAlignment(SwingConstants.RIGHT); passwordLabel.setText("Password"); passwordLabel.setLabelFor(passwordField); connectionPanel.add(passwordLabel, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0)); passwordField.setText("System"); // default connectionPanel.add(passwordField, new GridBagConstraints(1, 4, 3, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 12), 0, 0)); languageLabel.setHorizontalAlignment(SwingConstants.RIGHT); languageLabel.setText("Language"); languageLabel.setLabelFor(languageCombo); languageCombo.addActionListener(this); // @Trifon - begin connectionPanel.add(languageLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); connectionPanel.add(languageCombo, new GridBagConstraints(1, 5, 3, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); // @Trifon - end copy0Label.setHorizontalAlignment(SwingConstants.RIGHT); connectionPanel.add(copy0Label, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); copy1Label.setText(Adempiere.COPYRIGHT); connectionPanel.add(copy1Label, new GridBagConstraints(1, 6, 2, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 12, 12), 0, 0)); connectionPanel.add(compileDate, new GridBagConstraints(2, 1, 2, 1, 0.0, 0.0 ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(2, 0, 0, 12), 0, 0)); connectionPanel.add(titleLabel, new GridBagConstraints(0, 0, 2, 2, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(12, 12, 5, 5), 0, 0)); connectionPanel.add(versionLabel, new GridBagConstraints(2, 0, 2, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(12, 5, 0, 12), 0, 0)); loginTabPane.add(connectionPanel, res.getString("Connection")); // DefaultTab defaultPanel.setLayout(defaultPanelLayout); // roleLabel.setText("Role"); roleLabel.setHorizontalAlignment(SwingConstants.RIGHT); roleLabel.setLabelFor(roleCombo); roleCombo.addActionListener(this); defaultPanel.add(roleLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(12, 12, 5, 5), 0, 0)); defaultPanel.add(roleCombo, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(12, 0, 5, 12), 0, 0)); clientLabel.setText("Client"); clientLabel.setHorizontalAlignment(SwingConstants.RIGHT); clientLabel.setLabelFor(clientCombo); defaultPanel.add(clientLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); clientCombo.addActionListener(this); defaultPanel.add(clientCombo, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); orgLabel.setText("Organization"); orgLabel.setHorizontalAlignment(SwingConstants.RIGHT); orgLabel.setLabelFor(orgCombo); defaultPanel.add(orgLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 5, 5), 0, 0)); orgCombo.addActionListener(this); defaultPanel.add(orgCombo, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 5, 12), 0, 0)); dateLabel.setText("Date"); dateLabel.setHorizontalAlignment(SwingConstants.RIGHT); dateLabel.setLabelFor(dateField); defaultPanel.add(dateLabel, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); defaultPanel.add(dateField, new GridBagConstraints(1, 4, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); // warehouseLabel.setText("Warehouse"); warehouseLabel.setHorizontalAlignment(SwingConstants.RIGHT); warehouseLabel.setLabelFor(warehouseCombo); printerLabel.setText("Printer"); printerLabel.setHorizontalAlignment(SwingConstants.RIGHT); printerLabel.setLabelFor(printerField); defaultPanel.add(printerLabel, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 12, 12, 5), 0, 0)); defaultPanel.add(printerField, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 12, 12), 0, 0)); defaultPanel.add(warehouseLabel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0 ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); defaultPanel.add(warehouseCombo, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); // @Trifon - begin /* defaultPanel.add(languageLabel, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0 , GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 12, 5, 5), 0, 0)); defaultPanel.add(languageCombo, new GridBagConstraints(1, 6, 3, 1, 1.0, 0.0 , GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 12), 0, 0)); */ // @Trifon - end // loginTabPane.add(defaultPanel, res.getString("Defaults")); // Help /* helpPanel.setLayout(helpLayout); helpPanel.setPreferredSize(new Dimension (100,100)); helpPanel.add(helpScollPane, BorderLayout.CENTER); loginTabPane.add(helpPanel, "?");*/ // this.getContentPane().add(mainPanel); mainPanel.add(loginTabPane, BorderLayout.CENTER); mainPanel.setName("loginMainPanel"); mainPanel.add(southPanel, BorderLayout.SOUTH); // southPanel.add(confirmPanel, BorderLayout.NORTH); southPanel.add(statusBar, BorderLayout.SOUTH); //helpScollPane.getViewport().add(onlineHelp, null); confirmPanel.addActionListener(this); CButton helpBtn = new CButton(Env.getImageIcon2("Help24")); helpBtn.setActionCommand("onlineLoginHelp"); helpBtn.addActionListener(this); helpBtn.setToolTipText(res.getString("Help")); confirmPanel.addComponent(helpBtn); statusBar.setStatusDB(null); } // jbInit /** * Set Initial & Ini Parameters * Optional Automatic login * @return true, if connected & parameters set */ public boolean initLogin() { m_cc = CConnection.get(Adempiere.getCodeBaseHost()); hostField.setValue(m_cc); if ( Ini.isPropertyBool(Ini.P_VALIDATE_CONNECTION_ON_STARTUP)) { validateConnection(); } // Application/PWD userTextField.setText(Ini.getProperty(Ini.P_UID)); if (Ini.isPropertyBool(Ini.P_STORE_PWD)) passwordField.setText(Ini.getProperty(Ini.P_PWD)); else passwordField.setText(""); // languageCombo.setSelectedItem(Ini.getProperty(Ini.P_LANGUAGE)); // AutoLogin - assumes that connection is OK if (Ini.isPropertyBool(Ini.P_A_LOGIN)) { connectionOK (); defaultsOK (); if (m_connectionOK) // simulate m_okPressed = true; return m_connectionOK; } return false; } // initLogin /** * Window Events - requestFocus * @param e event */ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_OPENED) { this.toFront(); confirmPanel.getOKButton().requestFocusInWindow(); } } // processWindowEvent private void validateAppServer() { if (!CConnection.isServerEmbedded()) m_cc.testAppsServer(); } private void connectToDatabase() { //Check connection DB.setDBTarget(m_cc); //direct DB.connect(); } /** * Validate Connection */ private void validateConnection() { m_connectionOK = false; validateAppServer(); //make sure connecting to new database DB.closeTarget(); connectToDatabase(); // hostField.setDisplay(); } // validateConnection /************************************************************************* * Exit action performed */ private void appExit() { m_connectionOK = false; dispose(); } // appExit_actionPerformed /** * Return true, if logged in * @return true if connected */ public boolean isConnected() { return m_connectionOK; } // isConnected /** * Did the user press OK * @return true if user pressed final OK button */ public boolean isOKpressed() { return m_okPressed; } // isOKpressed /************************************************************************** * Action Event handler * @param e event */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals(ConfirmPanel.A_OK)) { if (loginTabPane.getSelectedIndex() == 0) { connectionOK(); // first ok printerField.refresh(); } else { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); m_okPressed = true; // Dispose if OK - teo_sarca [ 1674663 ] if(!defaultsOK()) m_okPressed = false; setCursor(Cursor.getDefaultCursor()); } } else if (e.getActionCommand().equals(ConfirmPanel.A_CANCEL)) appExit(); // else if (e.getSource() == hostField) validateConnection(); else if (e.getSource() == languageCombo) languageComboChanged(); // else if (e.getSource() == roleCombo) roleComboChanged(); else if (e.getSource() == clientCombo) clientComboChanged(); else if (e.getSource() == orgCombo) orgComboChanged(); else if ("onlineLoginHelp".equals(e.getActionCommand())) OnlineHelp.openInDefaultBrowser(); } // actionPerformed /************************************************************************** * Connection OK pressed */ private void connectionOK () { log.info(""); // setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); confirmPanel.getOKButton().setEnabled(false); m_connectionOK = tryConnection(); if (m_connectionOK) { // Verify Language & Load Msg Language l = Language.getLoginLanguage(); Env.verifyLanguage (m_ctx, l); Env.setContext(m_ctx, Env.LANGUAGE, l.getAD_Language()); Msg.getMsg(m_ctx, "0"); // Migration MSystem system = MSystem.get(m_ctx); if (system.isJustMigrated()) { statusBar.setStatusLine("Running: After Migration ....", true); ADialog.info (m_WindowNo, this, "AfterMigration"); Thread.yield(); DB.afterMigration(m_ctx); } // Set Defaults printerField.setValue(Ini.getProperty(Ini.P_PRINTER)); // Change Tab to Default loginTabPane.setSelectedIndex(1); } confirmPanel.getOKButton().setEnabled(true); setCursor(Cursor.getDefaultCursor()); } // connectionOK /** * Change of tab <-> * @param e event */ public void stateChanged(ChangeEvent e) { if (loginTabPane.getSelectedIndex() == 2) // allow access to help return; if (!(String.valueOf(passwordField.getPassword()).equals(m_pwd) && userTextField.getText().equals(m_user))) m_connectionOK = false; // if (m_connectionOK) statusBar.setStatusLine(txt_LoggedIn); else { statusBar.setStatusLine(txt_NotConnected, true); loginTabPane.setSelectedIndex(0); } confirmPanel.getOKButton().requestFocus(); } // loginTabPane /************************************************************************** * Defaults OK pressed * @return true if ok */ private boolean defaultsOK () { log.info(""); KeyNamePair org = (KeyNamePair)orgCombo.getSelectedItem(); if (org == null) return false; // Set Properties Ini.setProperty(Ini.P_CONNECTION, CConnection.get().toStringLong()); Ini.setProperty(Ini.P_LANGUAGE, (String)languageCombo.getSelectedItem()); String error = m_login.validateLogin(org); if (error != null && error.length() > 0) { ADialog.info(m_WindowNo, this, error); appExit(); return false; } // Load Properties and save Ini values statusBar.setStatusLine("Loading Preferences"); String msg = m_login.loadPreferences (org, (KeyNamePair)warehouseCombo.getSelectedItem(), dateField.getTimestamp(), printerField.getDisplay()); if (msg.length() > 0) ADialog.info(m_WindowNo, this, msg); // Check Apps Server - DB Checked in Menu checkVersion(); // exits if conflict //omidp addJBPMActor(); // Close - we are done if (m_connectionOK) this.dispose(); return m_connectionOK; } // defaultsOK private void addJBPMActor() { Actor actor = Actor.getInstance(); Properties ctx = Env.getCtx(); actor.setId(Env.getContext(ctx, "#AD_User_Name")); actor.getGroupActorIds().add(Env.getContext(ctx, "#AD_Role_Name")); log.info("Add jbpm Actor : " + actor.getId()); } /************************************************************************** * Try to connect. * - Get Connection * - Compare User info * @return true if connected */ private boolean tryConnection() { m_user = userTextField.getText(); m_pwd = new String (passwordField.getPassword()); // Establish connection if (!DB.isConnected(false)) validateConnection(); if (!DB.isConnected(false)) { statusBar.setStatusLine(txt_NoDatabase, true); hostField.setBackground(AdempierePLAF.getFieldBackground_Error()); return false; } // Reference check Ini.setProperty(Ini.P_ADEMPIERESYS, "Reference".equalsIgnoreCase(CConnection.get().getDbUid())); // Reference check Ini.setProperty(Ini.P_LOGMIGRATIONSCRIPT, "Reference".equalsIgnoreCase(CConnection.get().getDbUid())); // Get Roles m_login = new Login(m_ctx); KeyNamePair[] roles = null; try { roles = m_login.getRoles(m_user, m_pwd); if (roles == null || roles.length == 0) { statusBar.setStatusLine(txt_UserPwdError, true); userTextField.setBackground(AdempierePLAF.getFieldBackground_Error()); passwordField.setBackground(AdempierePLAF.getFieldBackground_Error()); return false; } } catch (Throwable e) { if (e.getCause() instanceof AccessException) { statusBar.setStatusLine(txt_UserPwdError, true); userTextField.setBackground(AdempierePLAF.getFieldBackground_Error()); passwordField.setBackground(AdempierePLAF.getFieldBackground_Error()); return false; } else { log.severe(CLogger.getRootCause(e).getLocalizedMessage()); statusBar.setStatusLine(CLogger.getRootCause(e).getLocalizedMessage(), true); return false; } } // Delete existing role items m_comboActive = true; if (roleCombo.getItemCount() > 0) roleCombo.removeAllItems(); // Initial role KeyNamePair iniValue = null; String iniDefault = Ini.getProperty(Ini.P_ROLE); // fill roles for (int i = 0; i < roles.length; i++) { roleCombo.addItem(roles[i]); if (roles[i].getName().equals(iniDefault)) iniValue = roles[i]; } if (iniValue != null) roleCombo.setSelectedItem(iniValue); // If we have only one role, we can hide the combobox - metas-2009_0021_AP1_G94 if (roleCombo.getItemCount() == 1 && ! MSysConfig.getBooleanValue("ALogin_ShowOneRole", true)) { roleCombo.setSelectedIndex(0); roleLabel.setVisible(false); roleCombo.setVisible(false); } else { roleLabel.setVisible(true); roleCombo.setVisible(true); } userTextField.setBackground(AdempierePLAF.getFieldBackground_Normal()); passwordField.setBackground(AdempierePLAF.getFieldBackground_Normal()); // this.setTitle(hostField.getDisplay()); statusBar.setStatusLine(txt_LoggedIn); m_comboActive = false; roleComboChanged(); return true; } // tryConnection /** * Role changed - fill Client List */ private void roleComboChanged () { KeyNamePair role = (KeyNamePair)roleCombo.getSelectedItem(); if (role == null || m_comboActive) return; log.config(": " + role); m_comboActive = true; // KeyNamePair[] clients = m_login.getClients(role); // delete existing client/org items if (clientCombo.getItemCount() > 0) clientCombo.removeAllItems(); if (orgCombo.getItemCount() > 0) orgCombo.removeAllItems(); // No Clients if (clients == null || clients.length == 0) { statusBar.setStatusLine(txt_RoleError, true); m_comboActive = false; return; } // initial client KeyNamePair iniValue = null; String iniDefault = Ini.getProperty(Ini.P_CLIENT); // fill clients for (int i = 0; i < clients.length; i++) { clientCombo.addItem(clients[i]); if (clients[i].getName().equals(iniDefault)) iniValue = clients[i]; } // fini if (iniValue != null) clientCombo.setSelectedItem(iniValue); // m_comboActive = false; clientComboChanged(); } // roleComboChanged /** * Client changed - fill Org & Warehouse List */ private void clientComboChanged() { KeyNamePair client = (KeyNamePair)clientCombo.getSelectedItem(); if (client == null || m_comboActive) return; log.config(": " + client); m_comboActive = true; // @Trifon - Set Proper "#AD_Client_ID", #AD_User_ID and "#SalesRep_ID" // https://sourceforge.net/tracker/?func=detail&aid=2957215&group_id=176962&atid=879332 Env.setContext(m_ctx, "#AD_Client_ID", client.getKey()); MUser user = MUser.get (m_ctx, userTextField.getText(), new String (passwordField.getPassword()) ); if (user != null) { Env.setContext(m_ctx, "#AD_User_ID", user.getAD_User_ID() ); Env.setContext(m_ctx, "#SalesRep_ID", user.getAD_User_ID() ); } // KeyNamePair[] orgs = m_login.getOrgs(client); // delete existing cleint items if (orgCombo.getItemCount() > 0) orgCombo.removeAllItems(); // No Orgs if (orgs == null || orgs.length == 0) { statusBar.setStatusLine(txt_RoleError, true); m_comboActive = false; return; } // initial client KeyNamePair orgValue = null; KeyNamePair orgValue2 = null; String iniDefault = Ini.getProperty(Ini.P_ORG); // fill orgs for (int i = 0; i < orgs.length; i++) { orgCombo.addItem(orgs[i]); if (orgs[i].getName().equals(iniDefault)) orgValue = orgs[i]; if (orgValue2 == null && orgs[i].getKey() != 0) orgValue2 = orgs[i]; // first non-0 org } // Non-0 Org exists and last login was with 0 if (orgValue2 != null && orgValue != null && orgValue.getKey() == 0) orgValue = orgValue2; // Last Org if (orgValue != null) orgCombo.setSelectedItem(orgValue); // Get first Org else orgValue = (KeyNamePair)orgCombo.getSelectedItem(); // m_comboActive = false; orgComboChanged(); } // clientComboChanged /** * Org changed - fill Warehouse List */ private void orgComboChanged() { KeyNamePair org = (KeyNamePair)orgCombo.getSelectedItem(); if (org == null || m_comboActive) return; log.config(": " + org); m_comboActive = true; // KeyNamePair[] whs = m_login.getWarehouses(org); // Delete existing warehouse items if (warehouseCombo.getItemCount() > 0) warehouseCombo.removeAllItems(); // fill warehouses if (whs != null) { // initial warehouse KeyNamePair iniValue = null; String iniDefault = Ini.getProperty(Ini.P_WAREHOUSE); for (int i = 0; i < whs.length; i++) { warehouseCombo.addItem(whs[i]); if (whs[i].getName().equals(iniDefault)) iniValue = whs[i]; } if (iniValue != null) warehouseCombo.setSelectedItem(iniValue); } m_comboActive = false; } // orgComboChanged /** * Check Version * @return true if version is OK and * false if version could not be checked or is not the same * @see AEnv#getServerVersion */ private boolean checkVersion() { boolean retValue = false; try { String version = AEnv.getServerVersion(); if (Adempiere.DATE_VERSION.equals(version)) { log.config("Server = Client - " + version); retValue = true; } else if (version != null) { StringBuffer msg = new StringBuffer (">>\n"); msg.append(res.getString("VersionConflict")).append("\n") .append(res.getString("VersionInfo")).append("\n"); msg.append(version == null ? "null" : version).append(" <> ") .append(Adempiere.DATE_VERSION).append("\n"); msg.append(res.getString("PleaseUpgrade")).append("\n<<"); JOptionPane.showMessageDialog(null, msg.toString(), Adempiere.getName() + " - " + res.getString("VersionConflict"), JOptionPane.ERROR_MESSAGE); AEnv.exit(1); } } catch (Exception e) { log.severe("Contact Server failed - " + e.getClass().toString() + ": " + e.getMessage()); } return retValue; } // checkVersion /************************************************************************** * Language issues */ private String // txt_Connected, txt_NotConnected, txt_NoDatabase, txt_UserPwdError, txt_RoleError, txt_LoggedIn; /** * Change Language */ private void languageComboChanged () { String langName = (String)languageCombo.getSelectedItem(); // log.info( "Language: " + langName); Language language = Language.getLanguage(langName); Language.setLoginLanguage(language); Env.setContext(m_ctx, Env.LANGUAGE, language.getAD_Language()); // Locales Locale loc = language.getLocale(); Locale.setDefault(loc); this.setLocale(loc); res = ResourceBundle.getBundle(RESOURCE, loc); // this.setTitle(res.getString("Login")); hostLabel.setText(res.getString("Host")); userLabel.setText(res.getString("User")); userLabel.setToolTipText(res.getString("EnterUser")); passwordLabel.setText(res.getString("Password")); passwordLabel.setToolTipText(res.getString("EnterPassword")); languageLabel.setText(res.getString("Language")); languageLabel.setToolTipText(res.getString("SelectLanguage")); // roleLabel.setText(res.getString("Role")); clientLabel.setText(res.getString("Client")); orgLabel.setText(res.getString("Organization")); dateLabel.setText(res.getString("Date")); warehouseLabel.setText(res.getString("Warehouse")); printerLabel.setText(res.getString("Printer")); defaultPanel.setToolTipText(res.getString("Defaults")); connectionPanel.setToolTipText(res.getString("Connection")); // // txt_Connected = res.getString("Connected"); txt_NotConnected = res.getString("NotConnected"); txt_NoDatabase = res.getString("DatabaseNotFound"); txt_UserPwdError = res.getString("UserPwdError"); txt_RoleError = res.getString("RoleNotFound"); txt_LoggedIn = res.getString("Authorized"); // loginTabPane.setTitleAt(0, res.getString("Connection")); loginTabPane.setTitleAt(1, res.getString("Defaults")); confirmPanel.getOKButton().setToolTipText(res.getString("Ok")); confirmPanel.getCancelButton().setToolTipText(res.getString("Cancel")); // DateField with new format dateField.setFormat(); dateField.setValue(new Timestamp(System.currentTimeMillis())); // if (m_connectionOK) { this.setTitle(hostField.getDisplay()); statusBar.setStatusLine(txt_LoggedIn); } else { this.setTitle(res.getString("Login")); statusBar.setStatusLine(txt_NotConnected, true); } } // languageCombo_actionPerformed } // ALogin