diff --git a/base/src/org/eevolution/model/MEXPFormat.java b/base/src/org/eevolution/model/MEXPFormat.java
index a70ae4b336..30f2f30cc6 100644
--- a/base/src/org/eevolution/model/MEXPFormat.java
+++ b/base/src/org/eevolution/model/MEXPFormat.java
@@ -22,6 +22,7 @@
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
+ * - Antonio CaƱaveral, e-Evolution
* *
* Sponsors: *
* - e-Evolution (http://www.e-evolution.com/) *
@@ -37,11 +38,17 @@ import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
+import org.compiere.model.MTable;
+import org.compiere.model.Query;
+import org.compiere.util.CCache;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/**
* @author Trifon N. Trifonov
+ * @author Antonio CaƱaveral, e-Evolution
+ *
[ 2195090 ] Implementing ExportFormat cache
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=2195090&group_id=176962&atid=879335
*/
public class MEXPFormat extends X_EXP_Format {
@@ -53,6 +60,7 @@ public class MEXPFormat extends X_EXP_Format {
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MEXPFormat.class);
+ private static CCache s_cache = new CCache("MEXPFormat", 50 );
public MEXPFormat(Properties ctx, int EXP_Format_ID, String trxName) {
super(ctx, EXP_Format_ID, trxName);
@@ -146,75 +154,41 @@ public class MEXPFormat extends X_EXP_Format {
public static MEXPFormat getFormatByValueAD_Client_IDAndVersion(Properties ctx, String value, int AD_Client_ID, String version, String trxName)
throws SQLException
{
- MEXPFormat result = null;
-
- StringBuffer sql = new StringBuffer("SELECT * ")
- .append(" FROM ").append(X_EXP_Format.Table_Name)
- .append(" WHERE ").append(X_EXP_Format.COLUMNNAME_Value).append("=?")
- //.append(" AND IsActive = ?")
- .append(" AND AD_Client_ID = ?")
- .append(" AND ").append(X_EXP_Format.COLUMNNAME_Version).append(" = ?")
- ;
- PreparedStatement pstmt = null;
- try {
- pstmt = DB.prepareStatement (sql.toString(), trxName);
- pstmt.setString(1, value);
- pstmt.setInt(2, AD_Client_ID);
- pstmt.setString(3, version);
- ResultSet rs = pstmt.executeQuery ();
- if ( rs.next() ) {
- result = new MEXPFormat (ctx, rs, trxName);
- }
- rs.close ();
- pstmt.close ();
- pstmt = null;
- } catch (SQLException e) {
- s_log.log(Level.SEVERE, sql.toString(), e);
- throw e;
- } finally {
- try {
- if (pstmt != null) pstmt.close ();
- pstmt = null;
- } catch (Exception e) { pstmt = null; }
- }
+ String key = new String(value+version);
+ MEXPFormat retValue=null;
+ if(retValue!=null)
+ return retValue;
+
+ StringBuffer whereCluse = new StringBuffer(X_EXP_Format.COLUMNNAME_Value).append("=?")
+ .append(" AND AD_Client_ID = ?")
+ .append(" AND ").append(X_EXP_Format.COLUMNNAME_Version).append(" = ?");
- return result;
+ retValue = (MEXPFormat) new Query(ctx,X_EXP_Format.Table_Name,whereCluse.toString(),trxName)
+ .setParameters(new Object[] {value,AD_Client_ID,version}).first();
+ s_cache.put (key, retValue);
+
+ return retValue;
}
public static MEXPFormat getFormatByAD_Client_IDAD_Table_IDAndVersion(Properties ctx, int AD_Client_ID, int AD_Table_ID, String version, String trxName) throws SQLException
{
- MEXPFormat result = null;
-
- StringBuffer sql = new StringBuffer("SELECT * ")
- .append(" FROM ").append(X_EXP_Format.Table_Name)
- .append(" WHERE ").append(" AD_Client_ID = ? ")
- .append(" AND ").append(X_EXP_Format.COLUMNNAME_AD_Table_ID).append(" = ? ")
- .append(" AND ").append(X_EXP_Format.COLUMNNAME_Version).append(" = ?")
- ;
- PreparedStatement pstmt = null;
- try {
- pstmt = DB.prepareStatement (sql.toString(), trxName);
- pstmt.setInt(1, AD_Client_ID);
- pstmt.setInt(2, AD_Table_ID);
- pstmt.setString(3, version);
- ResultSet rs = pstmt.executeQuery ();
- if ( rs.next() ) {
- result = new MEXPFormat (ctx, rs, trxName);
- }
- rs.close ();
- pstmt.close ();
- pstmt = null;
- } catch (SQLException e) {
- s_log.log(Level.SEVERE, sql.toString(), e);
- throw e;
- } finally {
- try {
- if (pstmt != null) pstmt.close ();
- pstmt = null;
- } catch (Exception e) { pstmt = null; }
- }
+ String key = new String(MTable.getTableName(ctx, AD_Table_ID)+version);
+ MEXPFormat retValue=null;
- return result;
+ retValue = (MEXPFormat)s_cache.get(key);
+ if(retValue!=null)
+ return retValue;
+
+ StringBuffer whereCluse = new StringBuffer(" AD_Client_ID = ? ")
+ .append(" AND ").append(X_EXP_Format.COLUMNNAME_AD_Table_ID).append(" = ? ")
+ .append(" AND ").append(X_EXP_Format.COLUMNNAME_Version).append(" = ?");
+
+ retValue = (MEXPFormat) new Query(ctx,X_EXP_Format.Table_Name,whereCluse.toString(),trxName)
+ .setParameters(new Object[] {AD_Client_ID,AD_Table_ID,version}).first();
+
+ s_cache.put (key, retValue);
+
+ return retValue;
}
@Override