From 8f6ccfed70075485d9d8ef9c9228d562f6f88c57 Mon Sep 17 00:00:00 2001 From: vpj-cd Date: Thu, 7 Dec 2006 03:28:03 +0000 Subject: [PATCH] Adempiere 3.1.2 --- dbPort/src/org/compiere/model/MQuery.java | 1909 ++++++++++---------- dbPort/src/org/compiere/model/MSystem.java | 998 +++++----- 2 files changed, 1447 insertions(+), 1460 deletions(-) diff --git a/dbPort/src/org/compiere/model/MQuery.java b/dbPort/src/org/compiere/model/MQuery.java index fa58d8e549..c6084c43a8 100644 --- a/dbPort/src/org/compiere/model/MQuery.java +++ b/dbPort/src/org/compiere/model/MQuery.java @@ -3,994 +3,981 @@ * 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.model; - -import java.io.*; -import java.sql.*; -import java.util.*; -import java.util.logging.*; -import org.compiere.util.*; - -/** - * Query Descriptor. - * Maintains restrictions (WHERE clause) - * - * @author Jorg Janke - * @version $Id: MQuery.java,v 1.4 2006/07/30 00:58:04 jjanke Exp $ - */ -public class MQuery implements Serializable -{ - /** - * Get Query from Parameter - * @param ctx context (to determine language) - * @param AD_PInstance_ID instance - * @param TableName table name - * @return where clause - */ - static public MQuery get (Properties ctx, int AD_PInstance_ID, String TableName) - { - s_log.info("AD_PInstance_ID=" + AD_PInstance_ID + ", TableName=" + TableName); - MQuery query = new MQuery(TableName); - // Temporary Tables - add qualifier (not displayed) - if (TableName.startsWith("T_")) - query.addRestriction(TableName + ".AD_PInstance_ID=" + AD_PInstance_ID); - - // How many rows do we have? - int rows = 0; - String SQL = "SELECT COUNT(*) FROM AD_PInstance_Para WHERE AD_PInstance_ID=?"; - try - { - PreparedStatement pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, AD_PInstance_ID); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - rows = rs.getInt(1); - rs.close(); - pstmt.close(); - } - catch (SQLException e1) - { - s_log.log(Level.SEVERE, SQL, e1); - } - - if (rows < 1) - return query; - - // Msg.getMsg(Env.getCtx(), "Parameter") - boolean trl = !Env.isBaseLanguage(ctx, "AD_Process_Para"); - if (!trl) - SQL = "SELECT ip.ParameterName,ip.P_String,ip.P_String_To," // 1..3 - + "ip.P_Number,ip.P_Number_To," // 4..5 - + "ip.P_Date,ip.P_Date_To, ip.Info,ip.Info_To, " // 6..9 - + "pp.Name, pp.IsRange " // 10..11 - + "FROM AD_PInstance_Para ip, AD_PInstance i, AD_Process_Para pp " - + "WHERE i.AD_PInstance_ID=ip.AD_PInstance_ID" - + " AND pp.AD_Process_ID=i.AD_Process_ID" - + " AND pp.ColumnName=ip.ParameterName" - + " AND ip.AD_PInstance_ID=?"; - else - SQL = "SELECT ip.ParameterName,ip.P_String,ip.P_String_To, ip.P_Number,ip.P_Number_To," - + "ip.P_Date,ip.P_Date_To, ip.Info,ip.Info_To, " - + "ppt.Name, pp.IsRange " - + "FROM AD_PInstance_Para ip, AD_PInstance i, AD_Process_Para pp, AD_Process_Para_Trl ppt " - + "WHERE i.AD_PInstance_ID=ip.AD_PInstance_ID" - + " AND pp.AD_Process_ID=i.AD_Process_ID" - + " AND pp.ColumnName=ip.ParameterName" - + " AND pp.AD_Process_Para_ID=ppt.AD_Process_Para_ID" - + " AND ip.AD_PInstance_ID=?" - + " AND ppt.AD_Language=?"; - try - { - PreparedStatement pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, AD_PInstance_ID); - if (trl) - pstmt.setString(2, Env.getAD_Language(ctx)); - ResultSet rs = pstmt.executeQuery(); - // all records - for (int row = 0; rs.next(); row++) - { - if (row == rows) - { - s_log.log(Level.SEVERE, "(Parameter) - more rows than expected"); - break; - } - String ParameterName = rs.getString(1); - String P_String = rs.getString(2); - String P_String_To = rs.getString(3); - // - Double P_Number = null; - double d = rs.getDouble(4); - if (!rs.wasNull()) - P_Number = new Double(d); - Double P_Number_To = null; - d = rs.getDouble(5); - if (!rs.wasNull()) - P_Number_To = new Double(d); - // - Timestamp P_Date = rs.getTimestamp(6); - Timestamp P_Date_To = rs.getTimestamp(7); - // - String Info = rs.getString(8); - String Info_To = rs.getString(9); - // - String Name = rs.getString(10); - boolean isRange = "Y".equals(rs.getString(11)); - // - s_log.fine(ParameterName + " S=" + P_String + "-" + P_String_To - + ", N=" + P_Number + "-" + P_Number_To + ", D=" + P_Date + "-" + P_Date_To - + "; Name=" + Name + ", Info=" + Info + "-" + Info_To + ", Range=" + isRange); - - //------------------------------------------------------------- - if (P_String != null) - { - if (P_String_To == null) - { - if (P_String.indexOf("%") == -1) - query.addRestriction(ParameterName, MQuery.EQUAL, - P_String, Name, Info); - else - query.addRestriction(ParameterName, MQuery.LIKE, - P_String, Name, Info); - } - else - query.addRangeRestriction(ParameterName, - P_String, P_String_To, Name, Info, Info_To); - } - // Number - else if (P_Number != null || P_Number_To != null) - { - if (P_Number_To == null) - { - if (isRange) - query.addRestriction(ParameterName, MQuery.GREATER_EQUAL, - P_Number, Name, Info); - else - query.addRestriction(ParameterName, MQuery.EQUAL, - P_Number, Name, Info); - } + * 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.model; + +import java.io.*; +import java.sql.*; +import java.util.*; +import java.util.logging.*; +import org.compiere.util.*; + +/** + * Query Descriptor. + * Maintains restrictions (WHERE clause) + * + * @author Jorg Janke + * @version $Id: MQuery.java,v 1.4 2006/07/30 00:58:04 jjanke Exp $ + */ +public class MQuery implements Serializable +{ + /** + * Get Query from Parameter + * @param ctx context (to determine language) + * @param AD_PInstance_ID instance + * @param TableName table name + * @return where clause + */ + static public MQuery get (Properties ctx, int AD_PInstance_ID, String TableName) + { + s_log.info("AD_PInstance_ID=" + AD_PInstance_ID + ", TableName=" + TableName); + MQuery query = new MQuery(TableName); + // Temporary Tables - add qualifier (not displayed) + if (TableName.startsWith("T_")) + query.addRestriction(TableName + ".AD_PInstance_ID=" + AD_PInstance_ID); + + // How many rows do we have? + int rows = 0; + String SQL = "SELECT COUNT(*) FROM AD_PInstance_Para WHERE AD_PInstance_ID=?"; + try + { + PreparedStatement pstmt = DB.prepareStatement(SQL, null); + pstmt.setInt(1, AD_PInstance_ID); + ResultSet rs = pstmt.executeQuery(); + if (rs.next()) + rows = rs.getInt(1); + rs.close(); + pstmt.close(); + } + catch (SQLException e1) + { + s_log.log(Level.SEVERE, SQL, e1); + } + + if (rows < 1) + return query; + + // Msg.getMsg(Env.getCtx(), "Parameter") + boolean trl = !Env.isBaseLanguage(ctx, "AD_Process_Para"); + if (!trl) + SQL = "SELECT ip.ParameterName,ip.P_String,ip.P_String_To," // 1..3 + + "ip.P_Number,ip.P_Number_To," // 4..5 + + "ip.P_Date,ip.P_Date_To, ip.Info,ip.Info_To, " // 6..9 + + "pp.Name, pp.IsRange " // 10..11 + + "FROM AD_PInstance_Para ip, AD_PInstance i, AD_Process_Para pp " + + "WHERE i.AD_PInstance_ID=ip.AD_PInstance_ID" + + " AND pp.AD_Process_ID=i.AD_Process_ID" + + " AND pp.ColumnName=ip.ParameterName" + + " AND ip.AD_PInstance_ID=?"; + else + SQL = "SELECT ip.ParameterName,ip.P_String,ip.P_String_To, ip.P_Number,ip.P_Number_To," + + "ip.P_Date,ip.P_Date_To, ip.Info,ip.Info_To, " + + "ppt.Name, pp.IsRange " + + "FROM AD_PInstance_Para ip, AD_PInstance i, AD_Process_Para pp, AD_Process_Para_Trl ppt " + + "WHERE i.AD_PInstance_ID=ip.AD_PInstance_ID" + + " AND pp.AD_Process_ID=i.AD_Process_ID" + + " AND pp.ColumnName=ip.ParameterName" + + " AND pp.AD_Process_Para_ID=ppt.AD_Process_Para_ID" + + " AND ip.AD_PInstance_ID=?" + + " AND ppt.AD_Language=?"; + try + { + PreparedStatement pstmt = DB.prepareStatement(SQL, null); + pstmt.setInt(1, AD_PInstance_ID); + if (trl) + pstmt.setString(2, Env.getAD_Language(ctx)); + ResultSet rs = pstmt.executeQuery(); + // all records + for (int row = 0; rs.next(); row++) + { + if (row == rows) + { + s_log.log(Level.SEVERE, "(Parameter) - more rows than expected"); + break; + } + String ParameterName = rs.getString(1); + String P_String = rs.getString(2); + String P_String_To = rs.getString(3); + // + Double P_Number = null; + double d = rs.getDouble(4); + if (!rs.wasNull()) + P_Number = new Double(d); + Double P_Number_To = null; + d = rs.getDouble(5); + if (!rs.wasNull()) + P_Number_To = new Double(d); + // + Timestamp P_Date = rs.getTimestamp(6); + Timestamp P_Date_To = rs.getTimestamp(7); + // + String Info = rs.getString(8); + String Info_To = rs.getString(9); + // + String Name = rs.getString(10); + boolean isRange = "Y".equals(rs.getString(11)); + // + s_log.fine(ParameterName + " S=" + P_String + "-" + P_String_To + + ", N=" + P_Number + "-" + P_Number_To + ", D=" + P_Date + "-" + P_Date_To + + "; Name=" + Name + ", Info=" + Info + "-" + Info_To + ", Range=" + isRange); + + //------------------------------------------------------------- + if (P_String != null) + { + if (P_String_To == null) + { + if (P_String.indexOf("%") == -1) + query.addRestriction(ParameterName, MQuery.EQUAL, + P_String, Name, Info); + else + query.addRestriction(ParameterName, MQuery.LIKE, + P_String, Name, Info); + } + else + query.addRangeRestriction(ParameterName, + P_String, P_String_To, Name, Info, Info_To); + } + // Number + else if (P_Number != null || P_Number_To != null) + { + if (P_Number_To == null) + { + if (isRange) + query.addRestriction(ParameterName, MQuery.GREATER_EQUAL, + P_Number, Name, Info); + else + query.addRestriction(ParameterName, MQuery.EQUAL, + P_Number, Name, Info); + } else // P_Number_To != null { if (P_Number == null) - query.addRestriction("TRUNC("+ParameterName+",'DD')", MQuery.LESS_EQUAL, + query.addRestriction("TRUNC("+ParameterName+")", MQuery.LESS_EQUAL, P_Number_To, Name, Info); else query.addRangeRestriction(ParameterName, - P_Number, P_Number_To, Name, Info, Info_To); - } - } - // Date - else if (P_Date != null || P_Date_To != null) - { + P_Number, P_Number_To, Name, Info, Info_To); + } + } + // Date + else if (P_Date != null || P_Date_To != null) + { if (P_Date_To == null) { if (isRange) - query.addRestriction("TRUNC("+ParameterName+",'DD')", MQuery.GREATER_EQUAL, + query.addRestriction("TRUNC("+ParameterName+")", MQuery.GREATER_EQUAL, P_Date, Name, Info); else - query.addRestriction("TRUNC("+ParameterName+",'DD')", MQuery.EQUAL, + query.addRestriction("TRUNC("+ParameterName+")", MQuery.EQUAL, P_Date, Name, Info); } else // P_Date_To != null { if (P_Date == null) - query.addRestriction("TRUNC("+ParameterName+",'DD')", MQuery.LESS_EQUAL, + query.addRestriction("TRUNC("+ParameterName+")", MQuery.LESS_EQUAL, P_Date_To, Name, Info); else - query.addRangeRestriction("TRUNC("+ParameterName+",'DD')", + query.addRangeRestriction("TRUNC("+ParameterName+")", P_Date, P_Date_To, Name, Info, Info_To); } } - } - rs.close(); - pstmt.close(); - } - catch (SQLException e2) - { - s_log.log(Level.SEVERE, SQL, e2); - } - s_log.info(query.toString()); - return query; - } // get - - - /** - * Get Zoom Column Name. - * Converts Synonyms like SalesRep_ID to AD_User_ID - * @param columnName column name - * @return column name - */ - public static String getZoomColumnName (String columnName) - { - if (columnName == null) - return null; - if (columnName.equals("SalesRep_ID")) - return "AD_User_ID"; - if (columnName.equals("C_DocTypeTarget_ID")) - return "C_DocType_ID"; - if (columnName.equals("Bill_BPartner_ID")) - return "C_BPartner_ID"; - if (columnName.equals("Bill_Location_ID")) - return "C_BPartner_Location_ID"; - if (columnName.equals("Account_ID")) - return "C_ElementValue_ID"; - // See also MTab.validateQuery - // - return columnName; - } // getZoomColumnName - - /** - * Derive Zoom Table Name from column name. - * (e.g. drop _ID) - * @param columnName column name - * @return table name - */ - public static String getZoomTableName (String columnName) - { - String tableName = getZoomColumnName(columnName); - int index = tableName.lastIndexOf("_ID"); - if (index != -1) - return tableName.substring(0, index); - return tableName; - } // getZoomTableName - - - /************************************************************************* - * Create simple Equal Query. - * Creates columnName=value or columnName='value' - * @param columnName columnName - * @param value value - * @return quary - */ - public static MQuery getEqualQuery (String columnName, Object value) - { - MQuery query = new MQuery(); - query.addRestriction(columnName, EQUAL, value); - query.setRecordCount(1); // guess - return query; - } // getEqualQuery - - /** - * Create simple Equal Query. - * Creates columnName=value - * @param columnName columnName - * @param value value - * @return quary - */ - public static MQuery getEqualQuery (String columnName, int value) - { - MQuery query = new MQuery(); - if (columnName.endsWith("_ID")) - query.setTableName(columnName.substring(0, columnName.length()-3)); - query.addRestriction(columnName, EQUAL, new Integer(value)); - query.setRecordCount(1); // guess - return query; - } // getEqualQuery - - /** - * Create No Record query. - * @param tableName table name - * @param newRecord new Record Indicator (2=3) - * @return query - */ - public static MQuery getNoRecordQuery (String tableName, boolean newRecord) - { - MQuery query = new MQuery(tableName); - if (newRecord) - query.addRestriction(NEWRECORD); - else - query.addRestriction("1=2"); - query.setRecordCount(0); - return query; - } // getNoRecordQuery - - /** Static Logger */ - private static CLogger s_log = CLogger.getCLogger (MQuery.class); - - - /************************************************************************** - * Constructor w/o table name - */ - public MQuery () - { - } // MQuery - - /** - * Constructor - * @param TableName Table Name - */ - public MQuery (String TableName) - { - m_TableName = TableName; - } // MQuery - - /** - * Constructor get TableNAme from Table - * @param AD_Table_ID Table_ID - */ - public MQuery (int AD_Table_ID) - { // Use Client Context as r/o - m_TableName = MTable.getTableName (Env.getCtx(), AD_Table_ID); - } // MQuery - - /** Serialization Info **/ - static final long serialVersionUID = 1511402030597166113L; - - /** Table Name */ - private String m_TableName = ""; - /** List of Restrictions */ - private ArrayList m_list = new ArrayList(); - /** Record Count */ - private int m_recordCount = 999999; - /** New Record Query */ - private boolean m_newRecord = false; - /** New Record String */ - private static final String NEWRECORD = "2=3"; - - /** - * Get Record Count - * @return count - default 999999 - */ - public int getRecordCount() - { - return m_recordCount; - } // getRecordCount - - /** - * Set Record Count - * @param count count - */ - public void setRecordCount(int count) - { - m_recordCount = count; - } // setRecordCount - - - /** Equal */ - public static final String EQUAL = "="; - /** Equal - 0 */ - public static final int EQUAL_INDEX = 0; - /** Not Equal */ - public static final String NOT_EQUAL = "!="; - /** Like */ - public static final String LIKE = " LIKE "; - /** Not Like */ - public static final String NOT_LIKE = " NOT LIKE "; - /** Greater */ - public static final String GREATER = ">"; - /** Greater Equal */ - public static final String GREATER_EQUAL = ">="; - /** Less */ - public static final String LESS = "<"; - /** Less Equal */ - public static final String LESS_EQUAL = "<="; - /** Between */ - public static final String BETWEEN = " BETWEEN "; - /** Between - 8 */ - public static final int BETWEEN_INDEX = 8; - - /** Operators for Strings */ - public static final ValueNamePair[] OPERATORS = new ValueNamePair[] { - new ValueNamePair (EQUAL, " = "), // 0 - new ValueNamePair (NOT_EQUAL, " != "), - new ValueNamePair (LIKE, " ~ "), - new ValueNamePair (NOT_LIKE, " !~ "), - new ValueNamePair (GREATER, " > "), - new ValueNamePair (GREATER_EQUAL, " >= "), // 5 - new ValueNamePair (LESS, " < "), - new ValueNamePair (LESS_EQUAL, " <= "), - new ValueNamePair (BETWEEN, " >-< ") // 8 - }; - /** Operators for IDs */ - public static final ValueNamePair[] OPERATORS_ID = new ValueNamePair[] { - new ValueNamePair (EQUAL, " = "), // 0 - new ValueNamePair (NOT_EQUAL, " != ") - }; - /** Operators for Boolean */ - public static final ValueNamePair[] OPERATORS_YN = new ValueNamePair[] { - new ValueNamePair (EQUAL, " = ") - }; - - - /************************************************************************* - * Add Restriction - * @param ColumnName ColumnName - * @param Operator Operator, e.g. = != .. - * @param Code Code, e.g 0, All% - * @param InfoName Display Name - * @param InfoDisplay Display of Code (Lookup) - */ - public void addRestriction (String ColumnName, String Operator, - Object Code, String InfoName, String InfoDisplay) - { - Restriction r = new Restriction (ColumnName, Operator, - Code, InfoName, InfoDisplay); - m_list.add(r); - } // addRestriction - - /** - * Add Restriction - * @param ColumnName ColumnName - * @param Operator Operator, e.g. = != .. - * @param Code Code, e.g 0, All% - */ - public void addRestriction (String ColumnName, String Operator, - Object Code) - { - Restriction r = new Restriction (ColumnName, Operator, - Code, null, null); - m_list.add(r); - } // addRestriction - - /** - * Add Restriction - * @param ColumnName ColumnName - * @param Operator Operator, e.g. = != .. - * @param Code Code, e.g 0 - */ - public void addRestriction (String ColumnName, String Operator, - int Code) - { - Restriction r = new Restriction (ColumnName, Operator, - new Integer(Code), null, null); - m_list.add(r); - } // addRestriction - - /** - * Add Range Restriction (BETWEEN) - * @param ColumnName ColumnName - * @param Code Code, e.g 0, All% - * @param Code_to Code, e.g 0, All% - * @param InfoName Display Name - * @param InfoDisplay Display of Code (Lookup) - * @param InfoDisplay_to Display of Code (Lookup) - */ - public void addRangeRestriction (String ColumnName, - Object Code, Object Code_to, - String InfoName, String InfoDisplay, String InfoDisplay_to) - { - Restriction r = new Restriction (ColumnName, Code, Code_to, - InfoName, InfoDisplay, InfoDisplay_to); - m_list.add(r); - } // addRestriction - - /** - * Add Range Restriction (BETWEEN) - * @param ColumnName ColumnName - * @param Code Code, e.g 0, All% - * @param Code_to Code, e.g 0, All% - */ - public void addRangeRestriction (String ColumnName, - Object Code, Object Code_to) - { - Restriction r = new Restriction (ColumnName, Code, Code_to, - null, null, null); - m_list.add(r); - } // addRestriction - - /** - * Add Restriction - * @param r Restriction - */ - protected void addRestriction (Restriction r) - { - m_list.add(r); - } // addRestriction - - /** - * Add Restriction - * @param whereClause SQL WHERE clause - */ - public void addRestriction (String whereClause) - { - if (whereClause == null || whereClause.trim().length() == 0) - return; - Restriction r = new Restriction (whereClause); - m_list.add(r); - m_newRecord = whereClause.equals(NEWRECORD); - } // addRestriction - - /** - * New Record Query - * @return true if new nercord query - */ - public boolean isNewRecordQuery() - { - return m_newRecord; - } // isNewRecord - - /************************************************************************* - * Create the resulting Query WHERE Clause - * @return Where Clause - */ - public String getWhereClause () - { - return getWhereClause(false); - } // getWhereClause - - /** - * Create the resulting Query WHERE Clause - * @param fullyQualified fully qualified Table.ColumnName - * @return Where Clause - */ - public String getWhereClause (boolean fullyQualified) - { - boolean qualified = fullyQualified; - if (qualified && (m_TableName == null || m_TableName.length() == 0)) - qualified = false; - // - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < m_list.size(); i++) - { - Restriction r = (Restriction)m_list.get(i); - if (i != 0) - sb.append(r.andCondition ? " AND " : " OR "); - if (qualified) - sb.append(r.getSQL(m_TableName)); - else - sb.append(r.getSQL(null)); - } - return sb.toString(); - } // getWhereClause - - /** - * Get printable Query Info - * @return info - */ - public String getInfo () - { - StringBuffer sb = new StringBuffer(); - if (m_TableName != null) - sb.append(m_TableName).append(": "); - // - for (int i = 0; i < m_list.size(); i++) - { - Restriction r = (Restriction)m_list.get(i); - if (i != 0) - sb.append(r.andCondition ? " AND " : " OR "); - // - sb.append(r.getInfoName()) - .append(r.getInfoOperator()) - .append(r.getInfoDisplayAll()); - } - return sb.toString(); - } // getInfo - - - /** - * Create Query WHERE Clause. - * Not fully qualified - * @param index restriction index - * @return Where Clause or "" if not valid - */ - public String getWhereClause (int index) - { - StringBuffer sb = new StringBuffer(); - if (index >= 0 && index < m_list.size()) - { - Restriction r = (Restriction)m_list.get(index); - sb.append(r.getSQL(null)); - } - return sb.toString(); - } // getWhereClause - - /** - * Get Restriction Count - * @return number of restricctions - */ - public int getRestrictionCount() - { - return m_list.size(); - } // getRestrictionCount - - /** - * Is Query Active - * @return true if number of restricctions > 0 - */ - public boolean isActive() - { - return m_list.size() != 0; - } // isActive - - /** - * Get Table Name - * @return Table Name - */ - public String getTableName () - { - return m_TableName; - } // getTableName - - /** - * Set Table Name - * @param TableName Table Name - */ - public void setTableName (String TableName) - { - m_TableName = TableName; - } // setTableName - - - /************************************************************************* - * Get ColumnName of index - * @param index index - * @return ColumnName - */ - public String getColumnName (int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.ColumnName; - } // getColumnName - - /** - * Set ColumnName of index - * @param index index - * @param ColumnName new column name - */ - protected void setColumnName (int index, String ColumnName) - { - if (index < 0 || index >= m_list.size()) - return; - Restriction r = (Restriction)m_list.get(index); - r.ColumnName = ColumnName; - } // setColumnName - - /** - * Get Operator of index - * @param index index - * @return Operator - */ - public String getOperator (int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.Operator; - } // getOperator - - /** - * Get Operator of index - * @param index index - * @return Operator - */ - public Object getCode (int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.Code; - } // getCode - - /** - * Get Restriction Display of index - * @param index index - * @return Restriction Display - */ - public String getInfoDisplay (int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.InfoDisplay; - } // getOperator - - /** - * Get TO Restriction Display of index - * @param index index - * @return Restriction Display - */ - public String getInfoDisplay_to (int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.InfoDisplay_to; - } // getOperator - - /** - * Get Info Name - * @param index index - * @return Info Name - */ - public String getInfoName(int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.InfoName; - } // getInfoName - - /** - * Get Info Operator - * @param index index - * @return info Operator - */ - public String getInfoOperator(int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.getInfoOperator(); - } // getInfoOperator - - /** - * Get Display with optional To - * @param index index - * @return info display - */ - public String getInfoDisplayAll (int index) - { - if (index < 0 || index >= m_list.size()) - return null; - Restriction r = (Restriction)m_list.get(index); - return r.getInfoDisplayAll(); - } // getInfoDisplay - - /** - * String representation - * @return info - */ - public String toString() - { - if (isActive()) - return getWhereClause(true); - return "MQuery[" + m_TableName + ",Restrictions=0]"; - } // toString - - /** - * Get Display Name - * @param ctx context - * @return display Name - */ - public String getDisplayName(Properties ctx) - { - String keyColumn = null; - if (m_TableName != null) - keyColumn = m_TableName + "_ID"; - else - keyColumn = getColumnName(0); - String retValue = Msg.translate(ctx, keyColumn); - if (retValue != null && retValue.length() > 0) - return retValue; - return m_TableName; - } // getDisplayName - - /** - * Clone Query - * @return Query - */ - public MQuery deepCopy() - { - MQuery newQuery = new MQuery(m_TableName); - for (int i = 0; i < m_list.size(); i++) - newQuery.addRestriction((Restriction)m_list.get(i)); - return newQuery; - } // clone - -} // MQuery - -/***************************************************************************** - * Query Restriction - */ -class Restriction implements Serializable -{ - /** - * Restriction - * @param columnName ColumnName - * @param operator Operator, e.g. = != .. - * @param code Code, e.g 0, All% - * @param infoName Display Name - * @param infoDisplay Display of Code (Lookup) - */ - Restriction (String columnName, String operator, - Object code, String infoName, String infoDisplay) - { - this.ColumnName = columnName.trim(); - if (infoName != null) - InfoName = infoName; - else - InfoName = ColumnName; - // - this.Operator = operator; - // Boolean - if (code instanceof Boolean) - Code = ((Boolean)code).booleanValue() ? "Y" : "N"; - else if (code instanceof KeyNamePair) - Code = new Integer(((KeyNamePair)code).getKey()); - else if (code instanceof ValueNamePair) - Code = ((ValueNamePair)code).getValue(); - else - Code = code; - // clean code - if (Code instanceof String) - { - if (Code.toString().startsWith("'")) - Code = Code.toString().substring(1); - if (Code.toString().endsWith("'")) - Code = Code.toString().substring(0, Code.toString().length()-2); - } - if (infoDisplay != null) - InfoDisplay = infoDisplay.trim(); - else if (code != null) - InfoDisplay = code.toString(); - } // Restriction - - /** - * Range Restriction (BETWEEN) - * @param columnName ColumnName - * @param code Code, e.g 0, All% - * @param code_to Code, e.g 0, All% - * @param infoName Display Name - * @param infoDisplay Display of Code (Lookup) - * @param infoDisplay_to Display of Code (Lookup) - */ - Restriction (String columnName, - Object code, Object code_to, - String infoName, String infoDisplay, String infoDisplay_to) - { - this (columnName, MQuery.BETWEEN, code, infoName, infoDisplay); - - // Code_to - Code_to = code_to; - if (Code_to instanceof String) - { - if (Code_to.toString().startsWith("'")) - Code_to = Code_to.toString().substring(1); - if (Code_to.toString().endsWith("'")) - Code_to = Code_to.toString().substring(0, Code_to.toString().length()-2); - } - // InfoDisplay_to - if (infoDisplay_to != null) - InfoDisplay_to = infoDisplay_to.trim(); - else if (Code_to != null) - InfoDisplay_to = Code_to.toString(); - } // Restriction - - /** - * Create Restriction with dircet WHERE clause - * @param whereClause SQL WHERE Clause - */ - Restriction (String whereClause) - { - DircetWhereClause = whereClause; - } // Restriction - - /** Direct Where Clause */ - protected String DircetWhereClause = null; - /** Column Name */ - protected String ColumnName; - /** Name */ - protected String InfoName; - /** Operator */ - protected String Operator; - /** SQL Where Code */ - protected Object Code; - /** Info */ - protected String InfoDisplay; - /** SQL Where Code To */ - protected Object Code_to; - /** Info To */ - protected String InfoDisplay_to; - /** And/Or Condition */ - protected boolean andCondition = true; - - /** - * Return SQL construct for this restriction - * @param tableName optional table name - * @return SQL WHERE construct - */ - public String getSQL (String tableName) - { - if (DircetWhereClause != null) - return DircetWhereClause; - // - StringBuffer sb = new StringBuffer(); - if (tableName != null && tableName.length() > 0) - { - // Assumes - REPLACE(INITCAP(variable),'s','X') or UPPER(variable) - int pos = ColumnName.lastIndexOf('(')+1; // including ( - int end = ColumnName.indexOf(')'); - // We have a Function in the ColumnName - if (pos != -1 && end != -1) - sb.append(ColumnName.substring(0, pos)) - .append(tableName).append(".").append(ColumnName.substring(pos, end)) - .append(ColumnName.substring(end)); - else - sb.append(tableName).append(".").append(ColumnName); - } - else - sb.append(ColumnName); - //jz fix col=null in where - if ((Operator.equals("=") || Operator.equals("!="))&& - Code instanceof String && - (((String) Code).equals("null") ||((String) Code).equals("NULL") || Code == null)) - if (Operator.equals("=") ) - sb.append(" IS NULL "); - else - sb.append(" IS NOT NULL "); - else - { - // - sb.append(Operator); - - if (Code instanceof String) - sb.append(DB.TO_STRING(Code.toString())); - else if (Code instanceof Timestamp) - sb.append(DB.TO_DATE((Timestamp)Code)); - else - sb.append(Code); - - // Between - // if (Code_to != null && InfoDisplay_to != null) - if (MQuery.BETWEEN.equals(Operator)) - { - sb.append(" AND "); - if (Code_to instanceof String) - sb.append(DB.TO_STRING(Code_to.toString())); - else if (Code_to instanceof Timestamp) - sb.append(DB.TO_DATE((Timestamp)Code_to)); - else - sb.append(Code_to); } + rs.close(); + pstmt.close(); + } + catch (SQLException e2) + { + s_log.log(Level.SEVERE, SQL, e2); + } + s_log.info(query.toString()); + return query; + } // get + + + /** + * Get Zoom Column Name. + * Converts Synonyms like SalesRep_ID to AD_User_ID + * @param columnName column name + * @return column name + */ + public static String getZoomColumnName (String columnName) + { + if (columnName == null) + return null; + if (columnName.equals("SalesRep_ID")) + return "AD_User_ID"; + if (columnName.equals("C_DocTypeTarget_ID")) + return "C_DocType_ID"; + if (columnName.equals("Bill_BPartner_ID")) + return "C_BPartner_ID"; + if (columnName.equals("Bill_Location_ID")) + return "C_BPartner_Location_ID"; + if (columnName.equals("Account_ID")) + return "C_ElementValue_ID"; + // See also MTab.validateQuery + // + return columnName; + } // getZoomColumnName + + /** + * Derive Zoom Table Name from column name. + * (e.g. drop _ID) + * @param columnName column name + * @return table name + */ + public static String getZoomTableName (String columnName) + { + String tableName = getZoomColumnName(columnName); + int index = tableName.lastIndexOf("_ID"); + if (index != -1) + return tableName.substring(0, index); + return tableName; + } // getZoomTableName + + + /************************************************************************* + * Create simple Equal Query. + * Creates columnName=value or columnName='value' + * @param columnName columnName + * @param value value + * @return quary + */ + public static MQuery getEqualQuery (String columnName, Object value) + { + MQuery query = new MQuery(); + query.addRestriction(columnName, EQUAL, value); + query.setRecordCount(1); // guess + return query; + } // getEqualQuery + + /** + * Create simple Equal Query. + * Creates columnName=value + * @param columnName columnName + * @param value value + * @return quary + */ + public static MQuery getEqualQuery (String columnName, int value) + { + MQuery query = new MQuery(); + if (columnName.endsWith("_ID")) + query.setTableName(columnName.substring(0, columnName.length()-3)); + query.addRestriction(columnName, EQUAL, new Integer(value)); + query.setRecordCount(1); // guess + return query; + } // getEqualQuery + + /** + * Create No Record query. + * @param tableName table name + * @param newRecord new Record Indicator (2=3) + * @return query + */ + public static MQuery getNoRecordQuery (String tableName, boolean newRecord) + { + MQuery query = new MQuery(tableName); + if (newRecord) + query.addRestriction(NEWRECORD); + else + query.addRestriction("1=2"); + query.setRecordCount(0); + return query; + } // getNoRecordQuery + + /** Static Logger */ + private static CLogger s_log = CLogger.getCLogger (MQuery.class); + + + /************************************************************************** + * Constructor w/o table name + */ + public MQuery () + { + } // MQuery + + /** + * Constructor + * @param TableName Table Name + */ + public MQuery (String TableName) + { + m_TableName = TableName; + } // MQuery + + /** + * Constructor get TableNAme from Table + * @param AD_Table_ID Table_ID + */ + public MQuery (int AD_Table_ID) + { // Use Client Context as r/o + m_TableName = MTable.getTableName (Env.getCtx(), AD_Table_ID); + } // MQuery + + /** Serialization Info **/ + static final long serialVersionUID = 1511402030597166113L; + + /** Table Name */ + private String m_TableName = ""; + /** List of Restrictions */ + private ArrayList m_list = new ArrayList(); + /** Record Count */ + private int m_recordCount = 999999; + /** New Record Query */ + private boolean m_newRecord = false; + /** New Record String */ + private static final String NEWRECORD = "2=3"; + + /** + * Get Record Count + * @return count - default 999999 + */ + public int getRecordCount() + { + return m_recordCount; + } // getRecordCount + + /** + * Set Record Count + * @param count count + */ + public void setRecordCount(int count) + { + m_recordCount = count; + } // setRecordCount + + + /** Equal */ + public static final String EQUAL = "="; + /** Equal - 0 */ + public static final int EQUAL_INDEX = 0; + /** Not Equal */ + public static final String NOT_EQUAL = "!="; + /** Like */ + public static final String LIKE = " LIKE "; + /** Not Like */ + public static final String NOT_LIKE = " NOT LIKE "; + /** Greater */ + public static final String GREATER = ">"; + /** Greater Equal */ + public static final String GREATER_EQUAL = ">="; + /** Less */ + public static final String LESS = "<"; + /** Less Equal */ + public static final String LESS_EQUAL = "<="; + /** Between */ + public static final String BETWEEN = " BETWEEN "; + /** Between - 8 */ + public static final int BETWEEN_INDEX = 8; + + /** Operators for Strings */ + public static final ValueNamePair[] OPERATORS = new ValueNamePair[] { + new ValueNamePair (EQUAL, " = "), // 0 + new ValueNamePair (NOT_EQUAL, " != "), + new ValueNamePair (LIKE, " ~ "), + new ValueNamePair (NOT_LIKE, " !~ "), + new ValueNamePair (GREATER, " > "), + new ValueNamePair (GREATER_EQUAL, " >= "), // 5 + new ValueNamePair (LESS, " < "), + new ValueNamePair (LESS_EQUAL, " <= "), + new ValueNamePair (BETWEEN, " >-< ") // 8 + }; + /** Operators for IDs */ + public static final ValueNamePair[] OPERATORS_ID = new ValueNamePair[] { + new ValueNamePair (EQUAL, " = "), // 0 + new ValueNamePair (NOT_EQUAL, " != ") + }; + /** Operators for Boolean */ + public static final ValueNamePair[] OPERATORS_YN = new ValueNamePair[] { + new ValueNamePair (EQUAL, " = ") + }; + + + /************************************************************************* + * Add Restriction + * @param ColumnName ColumnName + * @param Operator Operator, e.g. = != .. + * @param Code Code, e.g 0, All% + * @param InfoName Display Name + * @param InfoDisplay Display of Code (Lookup) + */ + public void addRestriction (String ColumnName, String Operator, + Object Code, String InfoName, String InfoDisplay) + { + Restriction r = new Restriction (ColumnName, Operator, + Code, InfoName, InfoDisplay); + m_list.add(r); + } // addRestriction + + /** + * Add Restriction + * @param ColumnName ColumnName + * @param Operator Operator, e.g. = != .. + * @param Code Code, e.g 0, All% + */ + public void addRestriction (String ColumnName, String Operator, + Object Code) + { + Restriction r = new Restriction (ColumnName, Operator, + Code, null, null); + m_list.add(r); + } // addRestriction + + /** + * Add Restriction + * @param ColumnName ColumnName + * @param Operator Operator, e.g. = != .. + * @param Code Code, e.g 0 + */ + public void addRestriction (String ColumnName, String Operator, + int Code) + { + Restriction r = new Restriction (ColumnName, Operator, + new Integer(Code), null, null); + m_list.add(r); + } // addRestriction + + /** + * Add Range Restriction (BETWEEN) + * @param ColumnName ColumnName + * @param Code Code, e.g 0, All% + * @param Code_to Code, e.g 0, All% + * @param InfoName Display Name + * @param InfoDisplay Display of Code (Lookup) + * @param InfoDisplay_to Display of Code (Lookup) + */ + public void addRangeRestriction (String ColumnName, + Object Code, Object Code_to, + String InfoName, String InfoDisplay, String InfoDisplay_to) + { + Restriction r = new Restriction (ColumnName, Code, Code_to, + InfoName, InfoDisplay, InfoDisplay_to); + m_list.add(r); + } // addRestriction + + /** + * Add Range Restriction (BETWEEN) + * @param ColumnName ColumnName + * @param Code Code, e.g 0, All% + * @param Code_to Code, e.g 0, All% + */ + public void addRangeRestriction (String ColumnName, + Object Code, Object Code_to) + { + Restriction r = new Restriction (ColumnName, Code, Code_to, + null, null, null); + m_list.add(r); + } // addRestriction + + /** + * Add Restriction + * @param r Restriction + */ + protected void addRestriction (Restriction r) + { + m_list.add(r); + } // addRestriction + + /** + * Add Restriction + * @param whereClause SQL WHERE clause + */ + public void addRestriction (String whereClause) + { + if (whereClause == null || whereClause.trim().length() == 0) + return; + Restriction r = new Restriction (whereClause); + m_list.add(r); + m_newRecord = whereClause.equals(NEWRECORD); + } // addRestriction + + /** + * New Record Query + * @return true if new nercord query + */ + public boolean isNewRecordQuery() + { + return m_newRecord; + } // isNewRecord + + /************************************************************************* + * Create the resulting Query WHERE Clause + * @return Where Clause + */ + public String getWhereClause () + { + return getWhereClause(false); + } // getWhereClause + + /** + * Create the resulting Query WHERE Clause + * @param fullyQualified fully qualified Table.ColumnName + * @return Where Clause + */ + public String getWhereClause (boolean fullyQualified) + { + boolean qualified = fullyQualified; + if (qualified && (m_TableName == null || m_TableName.length() == 0)) + qualified = false; + // + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < m_list.size(); i++) + { + Restriction r = (Restriction)m_list.get(i); + if (i != 0) + sb.append(r.andCondition ? " AND " : " OR "); + if (qualified) + sb.append(r.getSQL(m_TableName)); + else + sb.append(r.getSQL(null)); } return sb.toString(); - } // getSQL - - /** - * Get String Representation - * @return info + } // getWhereClause + + /** + * Get printable Query Info + * @return info + */ + public String getInfo () + { + StringBuffer sb = new StringBuffer(); + if (m_TableName != null) + sb.append(m_TableName).append(": "); + // + for (int i = 0; i < m_list.size(); i++) + { + Restriction r = (Restriction)m_list.get(i); + if (i != 0) + sb.append(r.andCondition ? " AND " : " OR "); + // + sb.append(r.getInfoName()) + .append(r.getInfoOperator()) + .append(r.getInfoDisplayAll()); + } + return sb.toString(); + } // getInfo + + + /** + * Create Query WHERE Clause. + * Not fully qualified + * @param index restriction index + * @return Where Clause or "" if not valid + */ + public String getWhereClause (int index) + { + StringBuffer sb = new StringBuffer(); + if (index >= 0 && index < m_list.size()) + { + Restriction r = (Restriction)m_list.get(index); + sb.append(r.getSQL(null)); + } + return sb.toString(); + } // getWhereClause + + /** + * Get Restriction Count + * @return number of restricctions + */ + public int getRestrictionCount() + { + return m_list.size(); + } // getRestrictionCount + + /** + * Is Query Active + * @return true if number of restricctions > 0 + */ + public boolean isActive() + { + return m_list.size() != 0; + } // isActive + + /** + * Get Table Name + * @return Table Name + */ + public String getTableName () + { + return m_TableName; + } // getTableName + + /** + * Set Table Name + * @param TableName Table Name + */ + public void setTableName (String TableName) + { + m_TableName = TableName; + } // setTableName + + + /************************************************************************* + * Get ColumnName of index + * @param index index + * @return ColumnName + */ + public String getColumnName (int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.ColumnName; + } // getColumnName + + /** + * Set ColumnName of index + * @param index index + * @param ColumnName new column name + */ + protected void setColumnName (int index, String ColumnName) + { + if (index < 0 || index >= m_list.size()) + return; + Restriction r = (Restriction)m_list.get(index); + r.ColumnName = ColumnName; + } // setColumnName + + /** + * Get Operator of index + * @param index index + * @return Operator + */ + public String getOperator (int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.Operator; + } // getOperator + + /** + * Get Operator of index + * @param index index + * @return Operator + */ + public Object getCode (int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.Code; + } // getCode + + /** + * Get Restriction Display of index + * @param index index + * @return Restriction Display + */ + public String getInfoDisplay (int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.InfoDisplay; + } // getOperator + + /** + * Get TO Restriction Display of index + * @param index index + * @return Restriction Display + */ + public String getInfoDisplay_to (int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.InfoDisplay_to; + } // getOperator + + /** + * Get Info Name + * @param index index + * @return Info Name + */ + public String getInfoName(int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.InfoName; + } // getInfoName + + /** + * Get Info Operator + * @param index index + * @return info Operator + */ + public String getInfoOperator(int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.getInfoOperator(); + } // getInfoOperator + + /** + * Get Display with optional To + * @param index index + * @return info display + */ + public String getInfoDisplayAll (int index) + { + if (index < 0 || index >= m_list.size()) + return null; + Restriction r = (Restriction)m_list.get(index); + return r.getInfoDisplayAll(); + } // getInfoDisplay + + /** + * String representation + * @return info */ public String toString() { - return getSQL(null); //jz will it be used to generate update set clause??? + if (isActive()) + return getWhereClause(true); + return "MQuery[" + m_TableName + ",Restrictions=0]"; + } // toString + + /** + * Get Display Name + * @param ctx context + * @return display Name + */ + public String getDisplayName(Properties ctx) + { + String keyColumn = null; + if (m_TableName != null) + keyColumn = m_TableName + "_ID"; + else + keyColumn = getColumnName(0); + String retValue = Msg.translate(ctx, keyColumn); + if (retValue != null && retValue.length() > 0) + return retValue; + return m_TableName; + } // getDisplayName + + /** + * Clone Query + * @return Query + */ + public MQuery deepCopy() + { + MQuery newQuery = new MQuery(m_TableName); + for (int i = 0; i < m_list.size(); i++) + newQuery.addRestriction((Restriction)m_list.get(i)); + return newQuery; + } // clone + +} // MQuery + +/***************************************************************************** + * Query Restriction + */ +class Restriction implements Serializable +{ + /** + * Restriction + * @param columnName ColumnName + * @param operator Operator, e.g. = != .. + * @param code Code, e.g 0, All% + * @param infoName Display Name + * @param infoDisplay Display of Code (Lookup) + */ + Restriction (String columnName, String operator, + Object code, String infoName, String infoDisplay) + { + this.ColumnName = columnName.trim(); + if (infoName != null) + InfoName = infoName; + else + InfoName = ColumnName; + // + this.Operator = operator; + // Boolean + if (code instanceof Boolean) + Code = ((Boolean)code).booleanValue() ? "Y" : "N"; + else if (code instanceof KeyNamePair) + Code = new Integer(((KeyNamePair)code).getKey()); + else if (code instanceof ValueNamePair) + Code = ((ValueNamePair)code).getValue(); + else + Code = code; + // clean code + if (Code instanceof String) + { + if (Code.toString().startsWith("'")) + Code = Code.toString().substring(1); + if (Code.toString().endsWith("'")) + Code = Code.toString().substring(0, Code.toString().length()-2); + } + if (infoDisplay != null) + InfoDisplay = infoDisplay.trim(); + else if (code != null) + InfoDisplay = code.toString(); + } // Restriction + + /** + * Range Restriction (BETWEEN) + * @param columnName ColumnName + * @param code Code, e.g 0, All% + * @param code_to Code, e.g 0, All% + * @param infoName Display Name + * @param infoDisplay Display of Code (Lookup) + * @param infoDisplay_to Display of Code (Lookup) + */ + Restriction (String columnName, + Object code, Object code_to, + String infoName, String infoDisplay, String infoDisplay_to) + { + this (columnName, MQuery.BETWEEN, code, infoName, infoDisplay); + + // Code_to + Code_to = code_to; + if (Code_to instanceof String) + { + if (Code_to.toString().startsWith("'")) + Code_to = Code_to.toString().substring(1); + if (Code_to.toString().endsWith("'")) + Code_to = Code_to.toString().substring(0, Code_to.toString().length()-2); + } + // InfoDisplay_to + if (infoDisplay_to != null) + InfoDisplay_to = infoDisplay_to.trim(); + else if (Code_to != null) + InfoDisplay_to = Code_to.toString(); + } // Restriction + + /** + * Create Restriction with dircet WHERE clause + * @param whereClause SQL WHERE Clause + */ + Restriction (String whereClause) + { + DircetWhereClause = whereClause; + } // Restriction + + /** Direct Where Clause */ + protected String DircetWhereClause = null; + /** Column Name */ + protected String ColumnName; + /** Name */ + protected String InfoName; + /** Operator */ + protected String Operator; + /** SQL Where Code */ + protected Object Code; + /** Info */ + protected String InfoDisplay; + /** SQL Where Code To */ + protected Object Code_to; + /** Info To */ + protected String InfoDisplay_to; + /** And/Or Condition */ + protected boolean andCondition = true; + + /** + * Return SQL construct for this restriction + * @param tableName optional table name + * @return SQL WHERE construct + */ + public String getSQL (String tableName) + { + if (DircetWhereClause != null) + return DircetWhereClause; + // + StringBuffer sb = new StringBuffer(); + if (tableName != null && tableName.length() > 0) + { + // Assumes - REPLACE(INITCAP(variable),'s','X') or UPPER(variable) + int pos = ColumnName.lastIndexOf('(')+1; // including ( + int end = ColumnName.indexOf(')'); + // We have a Function in the ColumnName + if (pos != -1 && end != -1) + sb.append(ColumnName.substring(0, pos)) + .append(tableName).append(".").append(ColumnName.substring(pos, end)) + .append(ColumnName.substring(end)); + else + sb.append(tableName).append(".").append(ColumnName); + } + else + sb.append(ColumnName); + // + sb.append(Operator); + if (Code instanceof String) + sb.append(DB.TO_STRING(Code.toString())); + else if (Code instanceof Timestamp) + sb.append(DB.TO_DATE((Timestamp)Code)); + else + sb.append(Code); + // Between + // if (Code_to != null && InfoDisplay_to != null) + if (MQuery.BETWEEN.equals(Operator)) + { + sb.append(" AND "); + if (Code_to instanceof String) + sb.append(DB.TO_STRING(Code_to.toString())); + else if (Code_to instanceof Timestamp) + sb.append(DB.TO_DATE((Timestamp)Code_to)); + else + sb.append(Code_to); + } + return sb.toString(); + } // getSQL + + /** + * Get String Representation + * @return info + */ + public String toString() + { + return getSQL(null); } // toString /** - * Get Info Name - * @return Info Name - */ - public String getInfoName() - { - return InfoName; - } // getInfoName - - /** - * Get Info Operator - * @return info Operator - */ - public String getInfoOperator() - { - for (int i = 0; i < MQuery.OPERATORS.length; i++) - { - if (MQuery.OPERATORS[i].getValue().equals(Operator)) - return MQuery.OPERATORS[i].getName(); - } - return Operator; - } // getInfoOperator - - /** - * Get Display with optional To - * @return info display - */ - public String getInfoDisplayAll() - { - if (InfoDisplay_to == null) - return InfoDisplay; - StringBuffer sb = new StringBuffer(InfoDisplay); - sb.append(" - ").append(InfoDisplay_to); - return sb.toString(); - } // getInfoDisplay - -} // Restriction + * Get Info Name + * @return Info Name + */ + public String getInfoName() + { + return InfoName; + } // getInfoName + + /** + * Get Info Operator + * @return info Operator + */ + public String getInfoOperator() + { + for (int i = 0; i < MQuery.OPERATORS.length; i++) + { + if (MQuery.OPERATORS[i].getValue().equals(Operator)) + return MQuery.OPERATORS[i].getName(); + } + return Operator; + } // getInfoOperator + + /** + * Get Display with optional To + * @return info display + */ + public String getInfoDisplayAll() + { + if (InfoDisplay_to == null) + return InfoDisplay; + StringBuffer sb = new StringBuffer(InfoDisplay); + sb.append(" - ").append(InfoDisplay_to); + return sb.toString(); + } // getInfoDisplay + +} // Restriction diff --git a/dbPort/src/org/compiere/model/MSystem.java b/dbPort/src/org/compiere/model/MSystem.java index 5bb9ccbe32..dc0e634b48 100644 --- a/dbPort/src/org/compiere/model/MSystem.java +++ b/dbPort/src/org/compiere/model/MSystem.java @@ -3,160 +3,160 @@ * 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.model; - -import java.lang.management.*; -import java.sql.*; -import java.util.*; -import java.util.logging.*; -import org.compiere.db.*; -import org.compiere.util.*; - -/** - * System Record (just one) - * - * @author Jorg Janke - * @version $Id: MSystem.java,v 1.3 2006/10/09 00:22:28 jjanke Exp $ - */ -public class MSystem extends X_AD_System -{ - /** - * Load System Record - * @param ctx context - * @return System - */ - public static MSystem get (Properties ctx) - { - if (s_system != null) - return s_system; - // - String sql = "SELECT * FROM AD_System ORDER BY AD_System_ID"; // 0 first - PreparedStatement pstmt = null; - try - { - pstmt = DB.prepareStatement(sql, null); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) - s_system = new MSystem (ctx, rs, null); - rs.close(); - pstmt.close(); - pstmt = null; - } - catch (SQLException ex) - { - s_log.log(Level.SEVERE, "get", ex); - } - try - { - if (pstmt != null) - pstmt.close(); - } - catch (SQLException ex1) - { - } - pstmt = null; - if (s_system == null) - return null; - // - if (!Ini.isClient() && s_system.setInfo()) - s_system.save(); - return s_system; - } // get - - /** Logger */ - private static CLogger s_log = CLogger.getCLogger (MSystem.class); - /** System - cached */ - private static MSystem s_system = null; - - /************************************************************************** - * Default Constructor - * @param ctx context - * @param ignored id - * @param mtrxName transaction - */ - public MSystem (Properties ctx, int ignored, String mtrxName) - { - super(ctx, 0, mtrxName); - String trxName = null; - load(trxName); // load ID=0 - if (s_system == null) - s_system = this; - } // MSystem - - /** - * Load Constructor - * @param ctx context - * @param rs result set - * @param trxName transaction - */ - public MSystem (Properties ctx, ResultSet rs, String trxName) - { - super (ctx, rs, trxName); - if (s_system == null) - s_system = this; - } // MSystem - - /** - * Constructor - */ - public MSystem () - { - this (new Properties(), 0, null); - } // MSystem - - /** - * Is LDAP Authentification defined - * @return true if ldap defined - */ - public boolean isLDAP() - { - String host = getLDAPHost(); - if (host == null || host.length() == 0) - return false; - String domain = getLDAPDomain(); - return domain != null - && domain.length() > 0; - } // isLDAP - - /** - * LDAP Authentification. Assumes that LDAP is defined. - * @param userName user name - * @param password password - * @return true if ldap authenticated - */ - public boolean isLDAP (String userName, String password) - { - return LDAP.validate(getLDAPHost(), getLDAPDomain(), userName, password); - } // isLDAP - - /** - * Get DB Address - * @return address - */ - public String getDBAddress () - { - String s = super.getDBAddress (); - if (s == null || s.length() == 0) - s = CConnection.get().getConnectionURL(); - return s; - } // getDBAddress - - /** - * Get Statistics Info - * @param recalc recalculate - * @return statistics - */ + * 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.model; + +import java.lang.management.*; +import java.sql.*; +import java.util.*; +import java.util.logging.*; +import org.compiere.db.*; +import org.compiere.util.*; + +/** + * System Record (just one) + * + * @author Jorg Janke + * @version $Id: MSystem.java,v 1.3 2006/10/09 00:22:28 jjanke Exp $ + */ +public class MSystem extends X_AD_System +{ + /** + * Load System Record + * @param ctx context + * @return System + */ + public static MSystem get (Properties ctx) + { + if (s_system != null) + return s_system; + // + String sql = "SELECT * FROM AD_System ORDER BY AD_System_ID"; // 0 first + PreparedStatement pstmt = null; + try + { + pstmt = DB.prepareStatement(sql, null); + ResultSet rs = pstmt.executeQuery(); + if (rs.next()) + s_system = new MSystem (ctx, rs, null); + rs.close(); + pstmt.close(); + pstmt = null; + } + catch (SQLException ex) + { + s_log.log(Level.SEVERE, "get", ex); + } + try + { + if (pstmt != null) + pstmt.close(); + } + catch (SQLException ex1) + { + } + pstmt = null; + if (s_system == null) + return null; + // + if (!Ini.isClient() && s_system.setInfo()) + s_system.save(); + return s_system; + } // get + + /** Logger */ + private static CLogger s_log = CLogger.getCLogger (MSystem.class); + /** System - cached */ + private static MSystem s_system = null; + + /************************************************************************** + * Default Constructor + * @param ctx context + * @param ignored id + * @param mtrxName transaction + */ + public MSystem (Properties ctx, int ignored, String mtrxName) + { + super(ctx, 0, mtrxName); + String trxName = null; + load(trxName); // load ID=0 + if (s_system == null) + s_system = this; + } // MSystem + + /** + * Load Constructor + * @param ctx context + * @param rs result set + * @param trxName transaction + */ + public MSystem (Properties ctx, ResultSet rs, String trxName) + { + super (ctx, rs, trxName); + if (s_system == null) + s_system = this; + } // MSystem + + /** + * Constructor + */ + public MSystem () + { + this (new Properties(), 0, null); + } // MSystem + + /** + * Is LDAP Authentification defined + * @return true if ldap defined + */ + public boolean isLDAP() + { + String host = getLDAPHost(); + if (host == null || host.length() == 0) + return false; + String domain = getLDAPDomain(); + return domain != null + && domain.length() > 0; + } // isLDAP + + /** + * LDAP Authentification. Assumes that LDAP is defined. + * @param userName user name + * @param password password + * @return true if ldap authenticated + */ + public boolean isLDAP (String userName, String password) + { + return LDAP.validate(getLDAPHost(), getLDAPDomain(), userName, password); + } // isLDAP + + /** + * Get DB Address + * @return address + */ + public String getDBAddress () + { + String s = super.getDBAddress (); + if (s == null || s.length() == 0) + s = CConnection.get().getConnectionURL(); + return s; + } // getDBAddress + + /** + * Get Statistics Info + * @param recalc recalculate + * @return statistics + */ public String getStatisticsInfo (boolean recalc) { String s = super.getStatisticsInfo (); @@ -178,109 +178,109 @@ public class MSystem extends X_AD_System //jz to avoid data conversion String sql = "SELECT 'C'||(SELECT COUNT(*) FROM AD_Client)" String sql = "SELECT 'C'||(SELECT COUNT(*) FROM AD_Client)" + "||'U'||(SELECT COUNT(*) FROM AD_User)" - + "||'B'||(SELECT COUNT(*) FROM C_BPartner)" - + "||'P'||(SELECT COUNT(*) FROM M_Product)" - + "||'I'||(SELECT COUNT(*) FROM C_Invoice)" + + "||'B'||(SELECT COUNT(*) FROM C_BPartner)" + + "||'P'||(SELECT COUNT(*) FROM M_Product)" + + "||'I'||(SELECT COUNT(*) FROM C_Invoice)" + "||'M'||(SELECT COUNT(*) FROM M_Transaction)" + " FROM AD_System"; PreparedStatement pstmt = null; try - { - pstmt = DB.prepareStatement (sql, null); - ResultSet rs = pstmt.executeQuery (); - if (rs.next ()) - s = rs.getString(1); - rs.close (); - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - log.log (Level.SEVERE, sql, e); - } - try - { - if (pstmt != null) - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - pstmt = null; - } - } - return s; - } // getStatisticsInfo - - /** - * Get Profile Info - * @param recalc recalculate - * @return profile - */ - public String getProfileInfo (boolean recalc) - { - String s = super.getProfileInfo (); - if (s == null || recalc) - { - String sql = "SELECT Value FROM AD_Client " - + "WHERE IsActive='Y' ORDER BY AD_Client_ID DESC"; - PreparedStatement pstmt = null; - StringBuffer sb = new StringBuffer(); - try - { - pstmt = DB.prepareStatement (sql, null); - ResultSet rs = pstmt.executeQuery (); - while (rs.next ()) - sb.append(rs.getString(1)).append('|'); - rs.close (); - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - log.log (Level.SEVERE, sql, e); - } - try - { - if (pstmt != null) - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - pstmt = null; - } - s = sb.toString(); - } - return s; - } // getProfileInfo - - /** - * Before Save - * @param newRecord new - * @return true/false - */ - protected boolean beforeSave (boolean newRecord) - { - // Mandatory Values - if (get_Value("IsAutoErrorReport") == null) - setIsAutoErrorReport (true); - // - boolean userChange = Ini.isClient() && - (is_ValueChanged("Name") - || is_ValueChanged("UserName") - || is_ValueChanged("Password") - || is_ValueChanged("LDAPHost") - || is_ValueChanged("LDAPDomain") - || is_ValueChanged("CustomPrefix") - ); - if (userChange) - { - String name = getName(); - if (name.equals("?") || name.length() < 2) - { - log.saveError("Error", "Define a unique System name (e.g. Company name) not " + name); - return false; + { + pstmt = DB.prepareStatement (sql, null); + ResultSet rs = pstmt.executeQuery (); + if (rs.next ()) + s = rs.getString(1); + rs.close (); + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + log.log (Level.SEVERE, sql, e); + } + try + { + if (pstmt != null) + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + pstmt = null; + } + } + return s; + } // getStatisticsInfo + + /** + * Get Profile Info + * @param recalc recalculate + * @return profile + */ + public String getProfileInfo (boolean recalc) + { + String s = super.getProfileInfo (); + if (s == null || recalc) + { + String sql = "SELECT Value FROM AD_Client " + + "WHERE IsActive='Y' ORDER BY AD_Client_ID DESC"; + PreparedStatement pstmt = null; + StringBuffer sb = new StringBuffer(); + try + { + pstmt = DB.prepareStatement (sql, null); + ResultSet rs = pstmt.executeQuery (); + while (rs.next ()) + sb.append(rs.getString(1)).append('|'); + rs.close (); + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + log.log (Level.SEVERE, sql, e); + } + try + { + if (pstmt != null) + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + pstmt = null; + } + s = sb.toString(); + } + return s; + } // getProfileInfo + + /** + * Before Save + * @param newRecord new + * @return true/false + */ + protected boolean beforeSave (boolean newRecord) + { + // Mandatory Values + if (get_Value("IsAutoErrorReport") == null) + setIsAutoErrorReport (true); + // + boolean userChange = Ini.isClient() && + (is_ValueChanged("Name") + || is_ValueChanged("UserName") + || is_ValueChanged("Password") + || is_ValueChanged("LDAPHost") + || is_ValueChanged("LDAPDomain") + || is_ValueChanged("CustomPrefix") + ); + if (userChange) + { + String name = getName(); + if (name.equals("?") || name.length() < 2) + { + log.saveError("Error", "Define a unique System name (e.g. Company name) not " + name); + return false; } if (getUserName().equals("?") || getUserName().length() < 2) { @@ -293,200 +293,200 @@ public class MSystem extends X_AD_System return false; } } - // - setInfo(); - return true; - } // beforeSave - - /** - * Save Record (ID=0) - * @return true if saved - */ - public boolean save() - { - if (!beforeSave(false)) - return false; - return saveUpdate(); - } // save - - /** - * String Representation - * @return info - */ - public String toString() - { - return "MSystem[" + getName() - + ",User=" + getUserName() - + ",ReleaseNo=" + getReleaseNo() - + "]"; - } // toString - - - /************************************************************************** - * Check valididity - * @return true if valid - */ - public boolean isValid() - { - if (getName() == null || getName().length() < 2) - { - log.log(Level.WARNING, "Name not valid: " + getName()); - return false; - } - if (getPassword() == null || getPassword().length() < 2) - { - log.log(Level.WARNING, "Password not valid: " + getPassword()); - return false; - } - if (getInfo() == null || getInfo().length() < 2) - { - log.log(Level.WARNING, "Need to run Migration once"); - return false; - } - return true; - } // isValid - - /** - * Is there a PDF License - * @return true if there is a PDF License - */ - public boolean isPDFLicense() - { - String key = getSummary(); - return key != null && key.length() > 25; - } // isPDFLicense - - - /************************************************************************** - * Set/Derive Info if more then a day old - * @return true if set - */ - public boolean setInfo() - { - // log.severe("setInfo"); - if (!TimeUtil.getDay(getUpdated()).before(TimeUtil.getDay(null))) - return false; - try - { - setDBInfo(); - setInternalUsers(); - if (isAllowStatistics()) - { - setStatisticsInfo(getStatisticsInfo(true)); - setProfileInfo(getProfileInfo(true)); - } - } - catch (Exception e) - { - setSupportUnits(9999); - setInfo(e.getLocalizedMessage()); - log.log(Level.SEVERE, "", e); - } - return true; - } // setInfo - - /** - * Set Internal User Count - */ - private void setInternalUsers() - { - String sql = "SELECT COUNT(DISTINCT (u.AD_User_ID)) AS iu " - + "FROM AD_User u" - + " INNER JOIN AD_User_Roles ur ON (u.AD_User_ID=ur.AD_User_ID) " - + "WHERE u.AD_Client_ID<>11" // no Demo - + " AND u.AD_User_ID NOT IN (0,100)"; // no System/SuperUser - PreparedStatement pstmt = null; - try - { - pstmt = DB.prepareStatement (sql, null); - ResultSet rs = pstmt.executeQuery (); - if (rs.next ()) - { - int internalUsers = rs.getInt (1); - setSupportUnits(internalUsers); - } - rs.close (); - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - log.log(Level.SEVERE, sql, e); - } - try - { - if (pstmt != null) - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - pstmt = null; - } - } // setInternalUsers - - /** - * Set DB Info - */ - private void setDBInfo() - { - if (!DB.isRemoteObjects()) - { - String dbAddress = CConnection.get().getConnectionURL(); - setDBAddress(dbAddress.toLowerCase()); - } - // - if (!Ini.isClient()) - { - int noProcessors = Runtime.getRuntime().availableProcessors(); - setNoProcessors(noProcessors); - } - // - String dbName = null; - PreparedStatement pstmt = null; - String sql = null; - try - { - String dbType = CConnection.get().getDatabase().getName(); - sql = getDBInfoSQL(dbType); - pstmt = DB.prepareStatement (sql, null); - ResultSet rs = pstmt.executeQuery (); - if (rs.next()) - { - // dbAddress = rs.getString(1); - dbName = rs.getString(2); - setDBInstance(dbName.toLowerCase()); - } - rs.close (); - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - log.log(Level.SEVERE, sql, e); - } - try - { - if (pstmt != null) - pstmt.close (); - pstmt = null; - } - catch (Exception e) - { - pstmt = null; - } - } // setDBInfo - - /** - * Get DB Info SQL - * @param dbType database type - * @return sql - */ - public static String getDBInfoSQL (String dbType) - { - if (Database.DB_ORACLE.equals(dbType)) - return "SELECT SYS_CONTEXT('USERENV','HOST') || '/' || SYS_CONTEXT('USERENV','IP_ADDRESS') AS DBAddress," - + " SYS_CONTEXT('USERENV','CURRENT_USER') || '.' || SYS_CONTEXT('USERENV','DB_NAME')" + // + setInfo(); + return true; + } // beforeSave + + /** + * Save Record (ID=0) + * @return true if saved + */ + public boolean save() + { + if (!beforeSave(false)) + return false; + return saveUpdate(); + } // save + + /** + * String Representation + * @return info + */ + public String toString() + { + return "MSystem[" + getName() + + ",User=" + getUserName() + + ",ReleaseNo=" + getReleaseNo() + + "]"; + } // toString + + + /************************************************************************** + * Check valididity + * @return true if valid + */ + public boolean isValid() + { + if (getName() == null || getName().length() < 2) + { + log.log(Level.WARNING, "Name not valid: " + getName()); + return false; + } + if (getPassword() == null || getPassword().length() < 2) + { + log.log(Level.WARNING, "Password not valid: " + getPassword()); + return false; + } + if (getInfo() == null || getInfo().length() < 2) + { + log.log(Level.WARNING, "Need to run Migration once"); + return false; + } + return true; + } // isValid + + /** + * Is there a PDF License + * @return true if there is a PDF License + */ + public boolean isPDFLicense() + { + String key = getSummary(); + return key != null && key.length() > 25; + } // isPDFLicense + + + /************************************************************************** + * Set/Derive Info if more then a day old + * @return true if set + */ + public boolean setInfo() + { + // log.severe("setInfo"); + if (!TimeUtil.getDay(getUpdated()).before(TimeUtil.getDay(null))) + return false; + try + { + setDBInfo(); + setInternalUsers(); + if (isAllowStatistics()) + { + setStatisticsInfo(getStatisticsInfo(true)); + setProfileInfo(getProfileInfo(true)); + } + } + catch (Exception e) + { + setSupportUnits(9999); + setInfo(e.getLocalizedMessage()); + log.log(Level.SEVERE, "", e); + } + return true; + } // setInfo + + /** + * Set Internal User Count + */ + private void setInternalUsers() + { + String sql = "SELECT COUNT(DISTINCT (u.AD_User_ID)) AS iu " + + "FROM AD_User u" + + " INNER JOIN AD_User_Roles ur ON (u.AD_User_ID=ur.AD_User_ID) " + + "WHERE u.AD_Client_ID<>11" // no Demo + + " AND u.AD_User_ID NOT IN (0,100)"; // no System/SuperUser + PreparedStatement pstmt = null; + try + { + pstmt = DB.prepareStatement (sql, null); + ResultSet rs = pstmt.executeQuery (); + if (rs.next ()) + { + int internalUsers = rs.getInt (1); + setSupportUnits(internalUsers); + } + rs.close (); + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + log.log(Level.SEVERE, sql, e); + } + try + { + if (pstmt != null) + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + pstmt = null; + } + } // setInternalUsers + + /** + * Set DB Info + */ + private void setDBInfo() + { + if (!DB.isRemoteObjects()) + { + String dbAddress = CConnection.get().getConnectionURL(); + setDBAddress(dbAddress.toLowerCase()); + } + // + if (!Ini.isClient()) + { + int noProcessors = Runtime.getRuntime().availableProcessors(); + setNoProcessors(noProcessors); + } + // + String dbName = null; + PreparedStatement pstmt = null; + String sql = null; + try + { + String dbType = CConnection.get().getDatabase().getName(); + sql = getDBInfoSQL(dbType); + pstmt = DB.prepareStatement (sql, null); + ResultSet rs = pstmt.executeQuery (); + if (rs.next()) + { + // dbAddress = rs.getString(1); + dbName = rs.getString(2); + setDBInstance(dbName.toLowerCase()); + } + rs.close (); + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + log.log(Level.SEVERE, sql, e); + } + try + { + if (pstmt != null) + pstmt.close (); + pstmt = null; + } + catch (Exception e) + { + pstmt = null; + } + } // setDBInfo + + /** + * Get DB Info SQL + * @param dbType database type + * @return sql + */ + public static String getDBInfoSQL (String dbType) + { + if (Database.DB_ORACLE.equals(dbType)) + return "SELECT SYS_CONTEXT('USERENV','HOST') || '/' || SYS_CONTEXT('USERENV','IP_ADDRESS') AS DBAddress," + + " SYS_CONTEXT('USERENV','CURRENT_USER') || '.' || SYS_CONTEXT('USERENV','DB_NAME')" + " || '.' || SYS_CONTEXT('USERENV','DB_DOMAIN') AS DBName " + "FROM DUAL"; // @@ -494,55 +494,55 @@ public class MSystem extends X_AD_System } // getDBInfoSQL - /** - * Print info - */ - public void info() - { - if (!CLogMgt.isLevelFine()) - return; - // OS - // OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); - // log.fine(os.getName() + " " + os.getVersion() + " " + os.getArch() - // + " Processors=" + os.getAvailableProcessors()); - // Runtime - RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); - log.fine(rt.getName() + " (" + rt.getVmVersion() + ") Up=" + TimeUtil.formatElapsed(rt.getUptime())); - // Memory - if (CLogMgt.isLevelFiner()) - { - List list = ManagementFactory.getMemoryPoolMXBeans(); - Iterator it = list.iterator(); - while (it.hasNext()) - { - MemoryPoolMXBean pool = (MemoryPoolMXBean)it.next(); - log.finer(pool.getName() + " " + pool.getType() - + ": " + new CMemoryUsage(pool.getUsage())); - } - } - else - { - MemoryMXBean memory = ManagementFactory.getMemoryMXBean(); - log.fine("VM: " + new CMemoryUsage(memory.getNonHeapMemoryUsage())); - log.fine("Heap: " + new CMemoryUsage(memory.getHeapMemoryUsage())); - } - // Thread - ThreadMXBean th = ManagementFactory.getThreadMXBean(); - log.fine("Threads=" + th.getThreadCount() - + ", Peak=" + th.getPeakThreadCount() - + ", Demons=" + th.getDaemonThreadCount() - + ", Total=" + th.getTotalStartedThreadCount() - ); - } // info - - - /** - * Test - * @param args - */ - public static void main (String[] args) - { - new MSystem(); - } // main - -} // MSystem + /** + * Print info + */ + public void info() + { + if (!CLogMgt.isLevelFine()) + return; + // OS + // OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); + // log.fine(os.getName() + " " + os.getVersion() + " " + os.getArch() + // + " Processors=" + os.getAvailableProcessors()); + // Runtime + RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); + log.fine(rt.getName() + " (" + rt.getVmVersion() + ") Up=" + TimeUtil.formatElapsed(rt.getUptime())); + // Memory + if (CLogMgt.isLevelFiner()) + { + List list = ManagementFactory.getMemoryPoolMXBeans(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + MemoryPoolMXBean pool = (MemoryPoolMXBean)it.next(); + log.finer(pool.getName() + " " + pool.getType() + + ": " + new CMemoryUsage(pool.getUsage())); + } + } + else + { + MemoryMXBean memory = ManagementFactory.getMemoryMXBean(); + log.fine("VM: " + new CMemoryUsage(memory.getNonHeapMemoryUsage())); + log.fine("Heap: " + new CMemoryUsage(memory.getHeapMemoryUsage())); + } + // Thread + ThreadMXBean th = ManagementFactory.getThreadMXBean(); + log.fine("Threads=" + th.getThreadCount() + + ", Peak=" + th.getPeakThreadCount() + + ", Demons=" + th.getDaemonThreadCount() + + ", Total=" + th.getTotalStartedThreadCount() + ); + } // info + + + /** + * Test + * @param args + */ + public static void main (String[] args) + { + new MSystem(); + } // main + +} // MSystem