diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/AEnv.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/AEnv.java index 7449b5c857..94eaccb2c2 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/AEnv.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/AEnv.java @@ -27,7 +27,9 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Enumeration; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Properties; import java.util.logging.Level; @@ -42,7 +44,6 @@ import org.compiere.interfaces.Server; import org.compiere.model.GridWindowVO; import org.compiere.model.Lookup; import org.compiere.model.MQuery; -import org.compiere.model.MRole; import org.compiere.util.CCache; import org.compiere.util.CLogger; import org.compiere.util.DB; @@ -191,43 +192,6 @@ public final class AEnv } - /** - * Is Workflow Process view enabled. - * @return true if enabled - */ - public static boolean isWorkflowProcess () - { - - if (s_workflow == null) - { - s_workflow = Boolean.FALSE; - int AD_Table_ID = 645; // AD_WF_Process - if (MRole.getDefault().isTableAccess (AD_Table_ID, true)) // RO - s_workflow = Boolean.TRUE; - else - { - AD_Table_ID = 644; // AD_WF_Activity - if (MRole.getDefault().isTableAccess (AD_Table_ID, true)) // RO - s_workflow = Boolean.TRUE; - else - log.config(s_workflow.toString()); - } - // Get Window - if (s_workflow.booleanValue()) - { - s_workflow_Window_ID = DB.getSQLValue (null, - "SELECT AD_Window_ID FROM AD_Table WHERE AD_Table_ID=?", AD_Table_ID); - if (s_workflow_Window_ID == 0) - s_workflow_Window_ID = 297; // fallback HARDCODED - // s_workflow = Boolean.FALSE; - log.config(s_workflow + ", Window=" + s_workflow_Window_ID); - } - } - return s_workflow.booleanValue(); - - } // isWorkflowProcess - - /** * Start Workflow Process Window * @param AD_Table_ID optional table @@ -235,13 +199,13 @@ public final class AEnv */ public static void startWorkflowProcess (int AD_Table_ID, int Record_ID) { - if (s_workflow_Window_ID == 0) + if (s_workflow_Window_ID <= 0) { int AD_Window_ID = DB.getSQLValue(null, "SELECT AD_Window_ID FROM AD_Window WHERE Name = 'Workflow Process'"); s_workflow_Window_ID = AD_Window_ID; } - if (s_workflow_Window_ID == 0) + if (s_workflow_Window_ID <= 0) return; MQuery query = new MQuery(); @@ -253,9 +217,7 @@ public final class AEnv /*************************************************************************/ - /** Workflow Menu */ - private static Boolean s_workflow = null; - /** Workflow Menu */ + /** Workflow Window */ private static int s_workflow_Window_ID = 0; /** Logger */ private static CLogger log = CLogger.getCLogger(AEnv.class); @@ -280,8 +242,7 @@ public final class AEnv } // getServerVersion /** Window Cache */ - private static CCache s_windows - = new CCache("AD_Window", 10); + private static Map> windowCache = new HashMap>(); /** * Get Window Model @@ -296,13 +257,21 @@ public final class AEnv log.config("Window=" + WindowNo + ", AD_Window_ID=" + AD_Window_ID); GridWindowVO mWindowVO = null; + String locale = Env.getLanguage(Env.getCtx()).getLocale().toString(); if (AD_Window_ID != 0 && Ini.isCacheWindow()) // try cache - { - mWindowVO = s_windows.get(AD_Window_ID); - if (mWindowVO != null) + { + synchronized (windowCache) { - mWindowVO = mWindowVO.clone(WindowNo); - log.info("Cached=" + mWindowVO); + CCache cache = windowCache.get(locale); + if (cache != null) + { + mWindowVO = cache.get(AD_Window_ID); + if (mWindowVO != null) + { + mWindowVO = mWindowVO.clone(WindowNo); + log.info("Cached=" + mWindowVO); + } + } } } @@ -312,7 +281,18 @@ public final class AEnv log.config("create local"); mWindowVO = GridWindowVO.create (Env.getCtx(), WindowNo, AD_Window_ID, AD_Menu_ID); if (mWindowVO != null) - s_windows.put(AD_Window_ID, mWindowVO); + { + synchronized (windowCache) + { + CCache cache = windowCache.get(locale); + if (cache == null) + { + cache = new CCache("AD_Window", 10); + windowCache.put(locale, cache); + } + cache.put(AD_Window_ID, mWindowVO); + } + } } // from Client if (mWindowVO == null) return null;