From 80194f7a37c972d7aed48a336d4dc7968dc9a931 Mon Sep 17 00:00:00 2001 From: Dirk Niemeyer Date: Tue, 3 Apr 2012 15:29:48 +0200 Subject: [PATCH] IDEMPIERE-177 AD_Language and name for entry made optional Caching best matching entry for UserDefWin --- ...830_IDEMPIERE-177_Window_Customization.sql | 30 ++++++++----- ...830_IDEMPIERE-177_Window_Customization.sql | 20 +++++++++ .../src/org/compiere/model/MUserDefField.java | 13 ++++-- .../src/org/compiere/model/MUserDefTab.java | 26 ++++++++--- .../src/org/compiere/model/MUserDefWin.java | 44 ++++++++++++++++--- 5 files changed, 107 insertions(+), 26 deletions(-) diff --git a/migration/360lts-release/oracle/830_IDEMPIERE-177_Window_Customization.sql b/migration/360lts-release/oracle/830_IDEMPIERE-177_Window_Customization.sql index f2c13cf806..ff93cc3158 100644 --- a/migration/360lts-release/oracle/830_IDEMPIERE-177_Window_Customization.sql +++ b/migration/360lts-release/oracle/830_IDEMPIERE-177_Window_Customization.sql @@ -73,21 +73,11 @@ UPDATE AD_Column SET DefaultValue='''''',Updated=TO_DATE('2010-08-09 20:52:43',' ALTER TABLE AD_UserDef_Field MODIFY DisplayLogic NVARCHAR2(2000) DEFAULT '' ; --- Aug 9, 2010 8:52:50 PM CEST --- Default comment for updating dictionary -ALTER TABLE AD_UserDef_Field MODIFY DisplayLogic NULL -; - -- Aug 9, 2010 8:55:45 PM CEST -- Default comment for updating dictionary ALTER TABLE AD_UserDef_Field MODIFY DefaultValue NVARCHAR2(2000) DEFAULT '' ; --- Aug 9, 2010 8:55:45 PM CEST --- Default comment for updating dictionary -ALTER TABLE AD_UserDef_Field MODIFY DefaultValue NULL -; - -- Mar 5, 2012 2:16:34 PM CET -- IDEMPIERE-177 Window Customization UPDATE AD_Column SET Callout='org.compiere.model.CalloutWindowCustomization.window',Updated=TO_TIMESTAMP('2012-03-05 14:16:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6395 @@ -175,3 +165,23 @@ INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Description,Help,Name, IsTran UPDATE AD_Field SET SeqNo=120,IsDisplayed='Y' WHERE AD_Field_ID=200003 ; +-- Apr 3, 2012 3:11:59 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_DATE('2012-04-03 15:11:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6396 +; + +-- Apr 3, 2012 3:13:25 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_DATE('2012-04-03 15:13:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6399 +; + +-- Apr 3, 2012 3:15:11 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_DATE('2012-04-03 15:15:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6381 +; + +-- Apr 3, 2012 3:16:32 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_DATE('2012-04-03 15:16:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6346 +; + diff --git a/migration/360lts-release/postgresql/830_IDEMPIERE-177_Window_Customization.sql b/migration/360lts-release/postgresql/830_IDEMPIERE-177_Window_Customization.sql index 9ef3e90452..ee8df52f74 100644 --- a/migration/360lts-release/postgresql/830_IDEMPIERE-177_Window_Customization.sql +++ b/migration/360lts-release/postgresql/830_IDEMPIERE-177_Window_Customization.sql @@ -175,3 +175,23 @@ INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Description,Help,Name, IsTran UPDATE AD_Field SET SeqNo=120,IsDisplayed='Y' WHERE AD_Field_ID=200003 ; +-- Apr 3, 2012 3:11:59 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2012-04-03 15:11:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6396 +; + +-- Apr 3, 2012 3:13:25 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2012-04-03 15:13:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6399 +; + +-- Apr 3, 2012 3:15:11 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2012-04-03 15:15:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6381 +; + +-- Apr 3, 2012 3:16:32 PM CEST +-- IDEMPIERE-177 Window Customization +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2012-04-03 15:16:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6346 +; + diff --git a/org.adempiere.base/src/org/compiere/model/MUserDefField.java b/org.adempiere.base/src/org/compiere/model/MUserDefField.java index 58dd863bcc..2a97dcb745 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserDefField.java +++ b/org.adempiere.base/src/org/compiere/model/MUserDefField.java @@ -23,7 +23,7 @@ import org.compiere.util.DB; /** - * + * User overrides for field model * @author Dirk Niemeyer, action42 GmbH * @version $Id$ */ @@ -32,7 +32,7 @@ public class MUserDefField extends X_AD_UserDef_Field /** * */ - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 20120403114400L; /** @@ -62,7 +62,14 @@ public class MUserDefField extends X_AD_UserDef_Field super (ctx, rs, trxName); } // MyModelExample - + /** + * Get matching MUserDefField related to current field and user definition for window and tab + * @param ctx + * @param AD_Field_ID + * @param AD_Tab_ID + * @param AD_Window_ID + * @return + */ public static MUserDefField get (Properties ctx, int AD_Field_ID, int AD_Tab_ID, int AD_Window_ID ) { diff --git a/org.adempiere.base/src/org/compiere/model/MUserDefTab.java b/org.adempiere.base/src/org/compiere/model/MUserDefTab.java index b9ad53bd19..2aa893877e 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserDefTab.java +++ b/org.adempiere.base/src/org/compiere/model/MUserDefTab.java @@ -23,16 +23,17 @@ import org.compiere.util.DB; /** - * + * User overrides for tab model * @author Dirk Niemeyer, action 42 GmbH * @version $Id$ + * */ public class MUserDefTab extends X_AD_UserDef_Tab { /** * */ - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 20120403111900L; /** * Standard constructor. @@ -44,7 +45,7 @@ public class MUserDefTab extends X_AD_UserDef_Tab public MUserDefTab (Properties ctx, int ID, String trxName) { super (ctx, ID, trxName); - } // MyModelExample + } // MUserDefTab /** * Optional Load Constructor. @@ -59,9 +60,15 @@ public class MUserDefTab extends X_AD_UserDef_Tab public MUserDefTab (Properties ctx, ResultSet rs, String trxName) { super (ctx, rs, trxName); - } // MyModelExample - + } // MUserDefTab + /** + * Get matching MUserDefTab related to current tab and user definition for window + * @param ctx + * @param AD_Tab_ID + * @param AD_UserDefWin_ID + * @return + */ public static MUserDefTab getMatch (Properties ctx, int AD_Tab_ID, int AD_UserDefWin_ID ) { @@ -102,6 +109,13 @@ public class MUserDefTab extends X_AD_UserDef_Tab return retValue; } + /** + * Get matching MUserDefTab related to current tab and window + * @param ctx + * @param AD_Tab_ID + * @param AD_Window_ID + * @return + */ public static MUserDefTab get (Properties ctx, int AD_Tab_ID, int AD_Window_ID) { MUserDefWin userdefWin = MUserDefWin.getBestMatch(ctx, AD_Window_ID); @@ -112,4 +126,4 @@ public class MUserDefTab extends X_AD_UserDef_Tab } -} // MyModelExample +} // MUserDefTab diff --git a/org.adempiere.base/src/org/compiere/model/MUserDefWin.java b/org.adempiere.base/src/org/compiere/model/MUserDefWin.java index e19d118074..21d2df1e57 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserDefWin.java +++ b/org.adempiere.base/src/org/compiere/model/MUserDefWin.java @@ -18,21 +18,23 @@ import java.sql.*; import java.util.*; import java.util.logging.Level; +import org.compiere.util.CCache; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.Env; /** - * + * User overrides for window model * @author Dirk Niemeyer, action42 GmbH * @version $Id$ + * */ public class MUserDefWin extends X_AD_UserDef_Win { /** * */ - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 20120403122300L; /** * Standard constructor. @@ -44,7 +46,7 @@ public class MUserDefWin extends X_AD_UserDef_Win public MUserDefWin (Properties ctx, int ID, String trxName) { super (ctx, ID, trxName); - } // MyModelExample + } // MUserDefWin /** * Optional Load Constructor. @@ -59,9 +61,14 @@ public class MUserDefWin extends X_AD_UserDef_Win public MUserDefWin (Properties ctx, ResultSet rs, String trxName) { super (ctx, rs, trxName); - } // MyModelExample - + } // MUserDefWin + /** + * Get all MUserDefWin entries related to window + * @param ctx context + * @param window_ID window + * @return Array of MUserDefWin for window + */ private static MUserDefWin[] getAll (Properties ctx, int window_ID ) { @@ -70,7 +77,8 @@ public class MUserDefWin extends X_AD_UserDef_Win StringBuffer sql = new StringBuffer("SELECT * " + " FROM AD_UserDef_Win w " + " WHERE w.AD_Window_ID=? AND w.IsActive='Y' " - + " AND w.AD_Language=? " + // limit to current login language or no specific language + + " AND (w.AD_Language=? OR w.AD_Language IS NULL)" + " AND w.AD_Client_ID=? "); PreparedStatement pstmt = null; ResultSet rs = null; @@ -108,8 +116,21 @@ public class MUserDefWin extends X_AD_UserDef_Win } + /** + * Get best matching MUserDefWin for current window + * the best match is cached + * @param ctx + * @param window_ID + * @return best matching MUserDefWin + */ public static MUserDefWin getBestMatch (Properties ctx, int window_ID) { + // Check Cache + Integer key = new Integer(window_ID); + MUserDefWin retValue = (MUserDefWin)s_cache.get(key); + if (retValue != null) + return retValue; + // parameters final int AD_Org_ID = Env.getAD_Org_ID(ctx); //final int anyOrg = 0; @@ -158,6 +179,10 @@ public class MUserDefWin extends X_AD_UserDef_Win weight[i] = -1; } } + // prefer if related to current login language + if (weight[i] > -1 && candidates[i].getAD_Language().equalsIgnoreCase(Env.getAD_Language(ctx))) { + weight[i] = weight[i] + 8; + } // others are implicit } @@ -171,10 +196,15 @@ public class MUserDefWin extends X_AD_UserDef_Win } if (weight[maxindex] > -1) { - return candidates[maxindex]; + retValue=candidates[maxindex]; + s_cache.put(key, retValue); + return retValue; } else { return null; } } + + /** Cache of selected MUserDefWin entries **/ + private static CCache s_cache = new CCache("AD_UserDef_Win", 3); // 3 weights } // MUserDefWin