/** * Logout * * @param expired expire */ public void logout(boolean expired) { // End Session MSession session = MSession.get(m_context); // finish if (session != null) { if (expired) { if (session.getDescription() == null) session.setDescription("Expired"); else session.setDescription(session.getDescription() + " Expired"); } session.logout(); // saves } if (m_context != null) { int gwtServerID = m_context.getContextAsInt(MRole.GWTSERVERID); if (gwtServerID > 0) MRole.resetGwt(gwtServerID); } // Clear Cache m_tabs.clear(); m_fields.clear(); // m_windows.clear(); m_context.clear(); m_results.clear(); // } // logout
/** * ************************************************************************* Get Window in default * context based on Role * * @param windowNO relative window * @param AD_Window_ID window * @param AD_Menu_ID menu * @return WindowVO or null */ public UIWindow getWindow(int windowNO, int AD_Window_ID, int AD_Menu_ID) { UIWindow win = null; // win = m_windows.get(AD_Window_ID); // if (win != null) // { // win.clearLookupCache(); // return win; // } UIWindowVOFactory winFactory = new UIWindowVOFactory(); UIWindowVO winVO = null; int AD_UserDef_Win_ID = -1; WindowVOCacheKey vokey = new WindowVOCacheKey( AD_Window_ID, m_context.getAD_Role_ID(), AD_Menu_ID, Env.getAD_Language(m_context)); // note, the usage of m_context below in constructing window is only for // language, menu, role, // and those are already included in the cache key, so we can safely // assume the win is correctly cached if (Userdef_Winids.get(null, vokey) == null) { winVO = winFactory.get(m_context, AD_Window_ID, AD_Menu_ID); if (winVO == null) { log.config("No Window - AD_Window_ID=" + AD_Window_ID + ",AD_Menu_ID=" + AD_Menu_ID); return null; } int theAD_UserDef_Win_ID = winVO.getAD_UserDef_Win_ID(); if (Userdef_Winids.putIfAbsent(vokey, theAD_UserDef_Win_ID) == null) AD_UserDef_Win_ID = theAD_UserDef_Win_ID; } else AD_UserDef_Win_ID = Userdef_Winids.get(m_context, vokey); WindowCacheKey key = new WindowCacheKey( AD_Window_ID, AD_UserDef_Win_ID, m_context.getAD_Role_ID(), AD_Menu_ID, Env.getAD_Language(m_context)); win = UIWindows.get(null, key); if (win == null) { // log.warning("key:" + key + " not found, create"); if (winVO == null) winVO = winFactory.get(m_context, AD_Window_ID, AD_Menu_ID); if (winVO == null) { log.config("No Window - AD_Window_ID=" + AD_Window_ID + ",AD_Menu_ID=" + AD_Menu_ID); return null; } UIWindow newWin = new UIWindow(winVO); AD_Window_ID = newWin.getAD_Window_ID(); // UIFieldVOFactory fieldFactory = new UIFieldVOFactory(); newWin.setFields(fieldFactory.getAll(m_context, AD_Window_ID, AD_UserDef_Win_ID)); // UITabVOFactory tabFactory = new UITabVOFactory(); // setTabVOs initrlize tabs but not fields, 'cuz fields needs to be // copied over and initialized later newWin.setTabVOsWithFieldsUninitialized( m_context, tabFactory.getAll(m_context, AD_Window_ID, AD_UserDef_Win_ID), windowNO); win = UIWindows.putIfAbsent(key, newWin); if (win == null) win = newWin; } // deep copy the window object so we hold a separate window object for // each user session UIWindow duplicatedWin = (UIWindow) DeepCopy.copy(win); log.fine(duplicatedWin.toString()); fillTabsFieldsAndInitFieldsAndCreateDependencyRelations(duplicatedWin, windowNO); MSession session = MSession.get(m_context); if (session != null) session.windowLog( m_context.getAD_Client_ID(), m_context.getAD_Org_ID(), duplicatedWin.getAD_Window_ID(), 0); return duplicatedWin; } // getWindowVO