⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poinfo.java

📁 Java写的ERP系统
💻 JAVA
字号:
/******************************************************************************
 * The contents of this file are subject to the   Compiere License  Version 1.1
 * ("License"); You may not use this file except in compliance with the License
 * You may obtain a copy of the License at http://www.compiere.org/license.html
 * Software distributed under the License is distributed on an  "AS IS"  basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * The Original Code is                  Compiere  ERP & CRM  Business Solution
 * The Initial Developer of the Original Code is Jorg Janke  and ComPiere, Inc.
 * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
 * created by ComPiere are Copyright (C) ComPiere, Inc.;   All Rights Reserved.
 * Contributor(s): ______________________________________.
 *****************************************************************************/
package org.compiere.model;

import java.util.*;
import java.sql.*;

import org.compiere.util.*;

/**
 *  Persistet Object Info.
 *  Provides structural information
 *
 *  @author Jorg Janke
 *  @version $Id: POInfo.java,v 1.3 2003/02/22 04:27:41 jjanke Exp $
 */
public class POInfo
{
	/**
	 *  POInfo Factory
	 *  @param ctx context
	 *  @param AD_Table_ID AD_Table_ID
	 *  @return POInfo
	 */
	public static POInfo getPOInfo (Properties ctx, int AD_Table_ID)
	{
		Integer key = new Integer(AD_Table_ID);
		POInfo retValue = (POInfo)s_cache.get(key);
		if (retValue == null)
		{
			retValue = new POInfo(ctx, AD_Table_ID);
			if (retValue.getColumnCount() > 0)
				s_cache.put(key, retValue);
		}
		return retValue;
	}   //  getPOInfo

	/** Cache of POInfo     */
	private static HashMap  s_cache = new HashMap();

	/*************************************************************************/

	/**
	 *  Create Persistent Info
	 *  @param ctx context
	 *  @param AD_Table_ID AD_ Table_ID
	 */
	private POInfo (Properties ctx, int AD_Table_ID)
	{
		m_ctx = ctx;
		m_AD_Table_ID = AD_Table_ID;
		loadInfo ();
	}   //  PInfo

	/** Context             */
	private Properties  m_ctx = null;
	/** Table_ID            */
	private int         m_AD_Table_ID = 0;
	/** Table Name          */
	private String      m_TableName = null;
	/** Columns             */
	private Column[]    m_columns = null;


	/**
	 *  Load Table/Column Info
	 */
	private void loadInfo()
	{
		ArrayList list = new ArrayList(15);
		boolean english = Env.isBaseLanguage(m_ctx, "AD_Table");
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT t.TableName, c.ColumnName,c.AD_Reference_ID,"    //  1..3
			+ "c.IsMandatory,c.IsUpdateable,c.DefaultValue,"                //  4..6
			+ "e.Name,e.Description, c.AD_Column_ID, "						//  7..9
			+ "c.IsKey,c.IsParent ");										//	10..11
		sql.append("FROM AD_Table t, AD_Column c, AD_Element");
		if (!english)
			sql.append("_Trl");
		sql.append(" e "
			+ "WHERE t.AD_Table_ID=?"
			+ " AND t.AD_Table_ID=c.AD_Table_ID"
			+ " AND c.AD_Element_ID=e.AD_Element_ID");
		if (!english)
			sql.append(" AND e.AD_Language='").append(Env.getAD_Language(m_ctx)).append("'");
		//
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql.toString());
			pstmt.setInt(1, m_AD_Table_ID);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next())
			{
				if (m_TableName == null)
					m_TableName = rs.getString(1);
				Column col = new Column (
					rs.getInt(9), rs.getString(2), rs.getInt(3),
					"Y".equals(rs.getString(4)), "Y".equals(rs.getString(5)),
					rs.getString(6), rs.getString(7), rs.getString(8),
					"Y".equals(rs.getString(10)), "Y".equals(rs.getString(11)) );
				list.add(col);
			}
			rs.close();
			pstmt.close();
		}
		catch (SQLException e)
		{
			Log.error("POInfo.loadInfo - " + sql.toString(), e);
		}
		//  convert to array
		m_columns = new Column[list.size()];
		list.toArray(m_columns);
	}   //  loadInfo

	/**
	 *  String representation
	 *  @return String Representation
	 */
	public String toString()
	{
		return "POInfo[" + getTableName() + ",AD_Table_ID=" + getAD_Table_ID() + "]";
	}   //  toString

	/**
	 *  String representation for index
	 * 	@param index column index
	 *  @return String Representation
	 */
	public String toString (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return "POInfo[" + getTableName() + "-InvalidIndex]";
		return "POInfo[" + getTableName() + "-" + m_columns[index].toString() + "]";
	}   //  toString

	/**
	 *  Get Table Name
	 *  @return Table Name
	 */
	public String getTableName()
	{
		return m_TableName;
	}   //  getTableName

	/**
	 *  Get AD_Table_ID
	 *  @return AD_Table_ID
	 */
	public int getAD_Table_ID()
	{
		return m_AD_Table_ID;
	}   //  getAD_Table_ID

	/*************************************************************************/

	/**
	 *  Get ColumnCount
	 *  @return column count
	 */
	public int getColumnCount()
	{
		return m_columns.length;
	}   //  getColumnCount

	/**
	 *  Get ColumnIndex
	 *  @param ColumnName column name
	 *  @return index of column with ColumnName or -1 if not found
	 */
	public int getColumnIndex (String ColumnName)
	{
		for (int i = 0; i < m_columns.length; i++)
		{
			if (ColumnName.equals(m_columns[i].ColumnName))
				return i;
		}
		return -1;
	}   //  getColumnIndex

	/**
	 *  Get Column Name
	 *  @param index index
	 *  @return ColumnName column name
	 */
	public String getColumnName (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return null;
		return m_columns[index].ColumnName;
	}   //  getColumnName

	/**
	 *  Get Column Label
	 *  @param index index
	 *  @return column label
	 */
	public String getColumnLabel (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return null;
		return m_columns[index].ColumnLabel;
	}   //  getColumnLabel

	/**
	 *  Get Column Description
	 *  @param index index
	 *  @returncolumn description
	 */
	public String getColumnDescription (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return null;
		return m_columns[index].ColumnDescription;
	}   //  getColumnDescription

	/**
	 *  Get Column Class
	 *  @param index index
	 *  @return Class
	 */
	public Class getColumnClass (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return null;
		return m_columns[index].ColumnClass;
	}   //  getColumnClass

	/**
	 *  Get Column Display Type
	 *  @param index index
	 *  @return DisplayType
	 */
	public int getColumnDisplayType (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return DisplayType.String;
		return m_columns[index].DisplayType;
	}   //  getColumnDisplayType

	/**
	 *  Get Column Default Logic
	 *  @param index index
	 *  @return Default Logic
	 */
	public String getDefaultLogic (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return null;
		return m_columns[index].DefaultLogic;
	}   //  getDefaultLogic

	/**
	 *  Is Column Mandatory
	 *  @param index index
	 *  @return true if column mandatory
	 */
	public boolean isColumnMandatory (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return false;
		return m_columns[index].IsMandatory;
	}   //  isMandatory

	/**
	 *  Is Column Updateable
	 *  @param index index
	 *  @return true if column updateable
	 */
	public boolean isColumnUpdateable (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return false;
		return m_columns[index].IsUpdateable;
	}   //  isUpdateable

	/**
	 *  Set Column Updateable
	 *  @param index index
	 *  @param updateable column updateable
	 */
	public void setColumnUpdateable (int index, boolean updateable)
	{
		if (index < 0 || index >= m_columns.length)
			return;
		m_columns[index].IsUpdateable = updateable;
	}	//	setColumnUpdateable

	/**
	 * 	Set all columns updateable
	 * 	@param updateable updateable
	 */
	public void setUpdateable (boolean updateable)
	{
		for (int i = 0; i < m_columns.length; i++)
			m_columns[i].IsUpdateable = updateable;
	}	//	setUpdateable

	/**
	 *  Is Lookup Column
	 *  @param index index
	 *  @return true if it is a lookup column
	 */
	public boolean isColumnLookup (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return false;
		return DisplayType.isLookup(m_columns[index].DisplayType);
	}   //  isColumnLookup

	/**
	 *  Get Lookup
	 *  @param index index
	 *  @return Lookup
	 */
	public Lookup getColumnLookup(int index)
	{
		if (!isColumnLookup(index))
			return null;
		//
		int WindowNo = 0;
		//  List, Table, TableDir
		Lookup lookup = null;
		try
		{
			lookup = MLookupFactory.create (m_ctx, m_columns[index].AD_Column_ID, WindowNo, m_columns[index].DisplayType, false);
		}
		catch (Exception e)
		{
			lookup = null;          //  cannot create Lookup
		}
		return lookup;
		/** @todo other lookup types */
	}   //  getColumnLookup

	/**
	 *  Is Column Key
	 *  @param index index
	 *  @return true if column is the key
	 */
	public boolean isColumnKey (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return false;
		return m_columns[index].IsKey;
	}   //  isColumnKey

	/**
	 *  Is Column Parent
	 *  @param index index
	 *  @return true if column is a Parent
	 */
	public boolean isColumnParent (int index)
	{
		if (index < 0 || index >= m_columns.length)
			return false;
		return m_columns[index].IsParent;
	}   //  isColumnParent

	/*************************************************************************/

	/**
	 *  Column Info Vlaue Object
	 */
	class Column
	{
		/**
		 *  Constructor
		  * @param ad_Column_ID Column ID
		  * @param columnName Dolumn name
		  * @param displayType Display Type
		  * @param isMandatory Mandatory
		  * @param isUpdateable Updateable
		  * @param defaultLogic Default Logic
		  * @param columnLabel Column Label
		  * @param columnDescription Column Description
		  * @param isKey true if key
		  * @param isParent true if parent
		  */
		Column (int ad_Column_ID, String columnName, int displayType,
			boolean isMandatory, boolean isUpdateable, String defaultLogic,
			String columnLabel, String columnDescription,
			boolean isKey, boolean isParent)
		{
			AD_Column_ID = ad_Column_ID;
			ColumnName = columnName;
			DisplayType = displayType;
			if (columnName.equals("AD_Language"))
				ColumnClass = String.class;
			else if (columnName.equals("Posted"))
				ColumnClass = Boolean.class;
			else
				ColumnClass = org.compiere.util.DisplayType.getClass(displayType, true);
			IsMandatory = isMandatory;
			IsUpdateable = isUpdateable;
			DefaultLogic = defaultLogic;
			ColumnLabel = columnLabel;
			ColumnDescription = columnDescription;
			IsKey = isKey;
			IsParent = isParent;
		}   //  Column

		public int          AD_Column_ID;
		public String       ColumnName;
		public int          DisplayType;
		public Class        ColumnClass;
		public boolean      IsMandatory;
		public String       DefaultLogic;
		public boolean      IsUpdateable;
		public String       ColumnLabel;
		public String       ColumnDescription;
		public boolean		IsKey;
		public boolean		IsParent;

		/**
		 * 	String representation
		 *  @return info
		 */
		public String toString()
		{
			StringBuffer sb = new StringBuffer("POInfo.Column[");
			sb.append(ColumnName).append(",ID=").append(AD_Column_ID)
				.append(",DisplayType=").append(DisplayType)
				.append(",ColumnClass=").append(ColumnClass);
			sb.append("]");
			return sb.toString();
		}	//	toString
	}	//	Column
}   //  POInfo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -