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

📄 po.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	/**
	 *  Load record with m_ID[0]
	 */
	protected void load ()
	{
		String keyColumn = m_KeyColumns[0];
		if (getColumnIndex(keyColumn) < 0)
			throw new UnsupportedOperationException("PO.load - TableColumn not found: " + keyColumn);
		StringBuffer sql = new StringBuffer("SELECT ");
		int size = getColumnCount();
		for (int i = 0; i < size; i++)
		{
			if (i != 0)
				sql.append(",");
			sql.append(getColumnName(i));
		}
		sql.append(" FROM ").append(getTableName())
			.append(" WHERE ").append(keyColumn).append("=?");
		//
		int index = -1;
		if (Log.isTraceLevel(10))
			log.debug("load - " + keyColumn + "=" + m_IDs[0]);
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql.toString());
			pstmt.setInt(1, m_IDs[0]);
			ResultSet rs = pstmt.executeQuery();
			if (rs.next())
			{
				//  load column values
				for (index = 0; index < size; index++)
				{
					Class clazz = p_info.getColumnClass(index);
					if (clazz == Integer.class)
						m_oldValues[index] = new Integer(rs.getInt(index+1));
					else if (clazz == BigDecimal.class)
						m_oldValues[index] = rs.getBigDecimal(index+1);
					else if (clazz == Boolean.class)
						m_oldValues[index] = new Boolean ("Y".equals(rs.getString(index+1)));
					else if (clazz == Timestamp.class)
						m_oldValues[index] = rs.getTimestamp(index+1);
					else if (clazz == String.class)
						m_oldValues[index] = rs.getString(index+1);
					else
						m_oldValues[index] = loadSpecial(rs, index);
					if (rs.wasNull() && m_oldValues[index] != null)
						m_oldValues[index] = null;
					if (Log.isTraceLevel(10))
						log.debug(String.valueOf(index) + ": " + p_info.getColumnName(index) + "(" + p_info.getColumnClass(index) + ") = " + m_oldValues[index]);
				}
			}
			else
			{
				log.error("load - NO Data found for " + m_KeyColumns[0] + "=" + m_IDs[0]);
				m_IDs = new int[] {0};
			}
			rs.close();
			pstmt.close();
			m_createNew = false;
			//	reset new values
			m_newValues = new Object[size];
		}
		catch (SQLException e)
		{
			log.error ("load - ID=" + m_IDs[0]
				+ ", Index=" + index + ", Column=" + getColumnName(index)
				+ ", " + p_info.toString(index)
				+ ", SQL=" + sql.toString(), e);
		}
	}   //  load


	/**
	 * 	Load from the current position of a ResultSet
	 * 	@param rs result set
	 */
	protected void load (ResultSet rs)
	{
		int size = getColumnCount();
		int index = 0;
		if (Log.isTraceLevel(10))
			log.debug("load (rs)");
		try
		{
			//  load column values
			for (index = 0; index < size; index++)
			{
				String columnName = p_info.getColumnName(index);
				Class clazz = p_info.getColumnClass(index);
				if (clazz == Integer.class)
					m_oldValues[index] = new Integer(rs.getInt(columnName));
				else if (clazz == BigDecimal.class)
					m_oldValues[index] = rs.getBigDecimal(columnName);
				else if (clazz == Boolean.class)
					m_oldValues[index] = new Boolean ("Y".equals(rs.getString(columnName)));
				else if (clazz == Timestamp.class)
					m_oldValues[index] = rs.getTimestamp(columnName);
				else if (clazz == String.class)
					m_oldValues[index] = rs.getString(columnName);
				else
					m_oldValues[index] = loadSpecial(rs, index);
				if (rs.wasNull() && m_oldValues[index] != null)
					m_oldValues[index] = null;
				if (Log.isTraceLevel(10))
					log.debug(String.valueOf(index) + ": " + p_info.getColumnName(index) + "(" + p_info.getColumnClass(index) + ") = " + m_oldValues[index]);
			}
			m_createNew = false;
		}
		catch (SQLException e)
		{
			log.error (p_info.getTableName() + "_PO.load rs - Index="
				+ index + ", Column=" + getColumnName(index), e);
		}
	}	//	load


	/**
	 *  Load Special data (images, ..).
	 *  To be extended by sub-classes
	 *  @param rs result set
	 *  @param index zero based index
	 *  @return value value
	 *  @throws SQLException
	 */
	protected Object loadSpecial (ResultSet rs, int index) throws SQLException
	{
		if (Log.isTraceLevel(Log.l4_Data))
			log.debug("loadSpecial - " + p_info.getColumnName(index));
		return null;
	}   //  loadSpecial

	/**
	 *	Load Defaults
	 */
	protected void loadDefaults()
	{
		setStandardDefaults();
		//
		/** @todo defaults from Field */
	//	MField.getDefault(p_info.getDefaultLogic(i));
	}	//	loadDefaults

	/**
	 *  Set Default values.
	 *  Client, Org, Created/Updated, *By, IsActive
	 */
	protected void setStandardDefaults()
	{
		int size = getColumnCount();
		for (int i = 0; i < size; i++)
		{
			String colName = p_info.getColumnName(i);
			//  Set Standard Values
			if (colName.endsWith("tedBy"))
				m_newValues[i] = new Integer (Env.getContextAsInt(p_ctx, "#AD_User_ID"));
			else if (colName.equals("Created") || colName.equals("Updated"))
				m_newValues[i] = new Timestamp (System.currentTimeMillis());
			else if (colName.equals(getTableName() + "_ID"))    //  KeyColumn
				m_newValues[i] = new Integer(0);
			else if (colName.equals("IsActive"))
				m_newValues[i] = new Boolean(true);
			else if (colName.equals("AD_Client_ID"))
				m_newValues[i] = new Integer(Env.getContextAsInt(p_ctx, "#AD_Client_ID"));
			else if (colName.equals("AD_Org_ID"))
				m_newValues[i] = new Integer(Env.getContextAsInt(p_ctx, "#AD_Org_ID"));
		}
	}   //  setDefaults

	/**
	 *  Are all mandatory Fields filled (i.e. can we save)?.
	 *  Stops at first null mandatory field
	 *  @return true if all mandatory fields are ok
	 */
	protected boolean isMandatoryOK()
	{
		int size = getColumnCount();
		for (int i = 0; i < size; i++)
		{
			if (p_info.isColumnMandatory(i))
			{
				if (getValue(i) == null || getValue(i).equals(NULL))
				{
					log.info("isMandatoryOK " + p_info.getColumnName(i));
					return false;
				}
			}
		}
		return true;
	}   //  isMandatoryOK

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

	/**
	 * 	Set AD_Client
	 * 	@param AD_Client_ID client
	 */
	final void setAD_Client_ID (int AD_Client_ID)
	{
		setValueNoCheck ("AD_Client_ID", new Integer(AD_Client_ID));
	}	//	setAD_Client_ID

	/**
	 * 	Get AD_Client
	 * 	@return AD_Client_ID
	 */
	public final int getAD_Client_ID()
	{
		return ((Integer)getValue("AD_Client_ID")).intValue();
	}	//	getAD_Client_ID

	/**
	 * 	Set AD_Org
	 * 	@param AD_Org_ID org
	 */
	final void setAD_Org_ID (int AD_Org_ID)
	{
		setValueNoCheck ("AD_Org_ID", new Integer(AD_Org_ID));
	}	//	setAD_Org_ID

	/**
	 * 	Get AD_Org
	 * 	@return AD_Org_ID
	 */
	public final int getAD_Org_ID()
	{
		return ((Integer)getValue("AD_Org_ID")).intValue();
	}	//	getAD_Org_ID

	/**
	 * 	Set Active
	 * 	@param active active
	 */
	public final void setActive (boolean active)
	{
		setValue("IsActive", new Boolean(active));
	}	//	setActive

	/**
	 *	Is Active
	 *  @return is active
	 */
	public final boolean isActive()
	{
		Boolean bb = (Boolean)getValue("IsActive");
		if (bb != null)
			return bb.booleanValue();
		return false;
	}	//	isActive

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

	/**
	 *  Update Value or create new record
	 *  @return true if saved
	 */
	public boolean save()
	{
		log.info("save - " + p_info.getTableName() + " ID=" + m_IDs[0]);
		//	New
		if (!m_createNew && m_IDs[0] == 0)
			m_createNew = true;
		if (m_createNew)
			return saveNew();

		//
		boolean changes = false;
		StringBuffer sql = new StringBuffer ("UPDATE ");
		sql.append(getTableName()).append( " SET ");

		int size = getColumnCount();
		for (int i = 0; i < size; i++)
		{
			//  we have a change
			if (m_newValues[i] != null)
			{
				if (changes)
					sql.append(", ");
				sql.append(p_info.getColumnName(i)).append("=");
				//  values
				if (m_newValues[i] == NULL)
					sql.append("NULL");
				else if (p_info.getColumnClass(i) == Integer.class || p_info.getColumnClass(i) == BigDecimal.class)
					sql.append(m_newValues[i]);
				else if (p_info.getColumnClass(i) == Boolean.class)
				{
					String value = "'N'";
					if (((Boolean)m_newValues[i]).booleanValue())
						value = "'Y'";
					sql.append(value);
				}
				else if (p_info.getColumnClass(i) == Timestamp.class)
					sql.append(DB.TO_DATE((Timestamp)m_newValues[i],p_info.getColumnDisplayType(i) == DisplayType.Date));
				else
					sql.append(DB.TO_STRING(m_newValues[i].toString()));
				changes = true;
			}	// changed field
		}	//   for all fields
		//
		sql.append(getWhereClause());
		/** @todo optimistic locking goes here */

		if (changes)
		{
			int no = DB.executeUpdate(sql.toString());
			return saveComplete (false, no == 1);
		}
		//  nothing changed, so OK
		return saveComplete (false, true);
	}   //  save

	/**
	 *  Create New Record
	 *  @return true if new record inserted
	 */
	private boolean saveNew()
	{
		//  Set ID for single key - Multi-Key values need explicitly be set previously
		if (m_IDs.length == 1)
		{
			String CompiereSys = Env.getContext(p_ctx, "#CompiereSys");
			m_IDs[0] = DB.getKeyNextNo(getAD_Client_ID(), CompiereSys, getTableName());
			setValueNoCheck(m_KeyColumns[0], new Integer (m_IDs[0]));
		}
		log.info("saveNew - " + p_info.getTableName() + " ID=" + m_IDs[0]);

		//	SQL
		StringBuffer sql = new StringBuffer("INSERT INTO ");
		sql.append(getTableName()).append(" (");
		int size = getColumnCount();
		for (int i = 0; i < size; i++)
		{
			if (i > 0)
				sql.append(",");
			sql.append(p_info.getColumnName(i));
		}
		sql.append(") VALUES (");
		for (int i = 0; i < size; i++)
		{
			if (i > 0)
				sql.append(",");
			Object value = getValue(i);
			//  Based on class of definition, not class of value
			Class c = p_info.getColumnClass(i);
			try
			{
				//
				if (c == Object.class) //  may have need to deal with null values differently
					sql.append (saveNewSpecial (value, i));
				else if (value == null || value.equals (NULL))
					sql.append ("NULL");
				else if (c == Integer.class)
					sql.append (((Integer)value).intValue ());
				else if (c == BigDecimal.class)
					sql.append (((BigDecimal)value).toString ());
				else if (c == Boolean.class)
					sql.append (((Boolean)value).booleanValue () ? "'Y'"
					  : "'N'");
				else if (c == Timestamp.class)
					sql.append (DB.TO_DATE ((Timestamp)value,
					  p_info.getColumnDisplayType (i) == DisplayType.Date));
				else if (c == String.class)
					sql.append (DB.TO_STRING ((String)value));
				else
					sql.append (saveNewSpecial (value, i));
			}
			catch (Exception e)
			{
				log.error("PO.saveNew - " + p_info.toString(i), e);
				throw new RuntimeException (e);
			}
		}
		sql.append(")");
		//
		int no = DB.executeUpdate(sql.toString());
		if (no == 1)
			load();		//	re-read Info
		else
			log.error("PO.saveNew - Not inserted - " + sql.toString());
		//
		return saveComplete(true, no == 1);
	}   //  createNew

	/**
	 * 	Create Single/Multi Key Where Clause
	 * 	@return where clause
	 */
	private String getWhereClause()
	{
		StringBuffer sb = new StringBuffer(" WHERE ");
		for (int i = 0; i < m_IDs.length; i++)
		{
			if (i != 0)
				sb.append(" AND ");
			sb.append(m_KeyColumns[i]).append("=").append(m_IDs[i]);
		}
		return sb.toString();
	}	//	getWhereClause


	/**
	 *  Save Special Data.
	 *  To be extended by sub-classes
	 *  @param value value
	 *  @param index index
	 *  @return SQL code for INSERT VALUES clause
	 */
	protected String saveNewSpecial (Object value, int index)
	{
		String colName = p_info.getColumnName(index);
		String colClass = p_info.getColumnClass(index).toString();
		String colValue = value == null ? "null" : value.getClass().toString();
		log.error("PO.saveNewSpecial - Unknown class for column " + colName
			+ " (" + colClass + ") - Value=" + colValue);
		if (value == null)
			return "NULL";
		return value.toString();
	}   //  saveNewSpecial

	/**
	 *  Save new or update complete.
	 *  To be extended by sub-classes
	 *  @param newRecord new record
	 *  @param success success
	 *  @return true if save complete (if not overwritten true)
	 */
	protected boolean saveComplete (boolean newRecord, boolean success)
	{
		log.debug("saveComplete - Success=" + success);
		return success;
	}   //  saveComplete

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

	/**
	 * 	Delete Current Record
	 * 	@return true if deleted
	 */
	public boolean delete()
	{
		if (m_IDs[0] == 0)		//	new
			return true;

		StringBuffer sql = new StringBuffer ("DELETE ");
		sql.append(getTableName()).append(getWhereClause());
		//
		int no = DB.executeUpdate(sql.toString());
		if (no == 0)
			m_IDs[0] = 0;
		return no == 1;
	}	//	delete

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

	/**
	 *  Dump Record
	 */
	public void dump ()
	{
		if (Log.isTraceLevel(8))
		{
			log.debug (getWhereClause ());
			for (int i = 0; i < getColumnCount (); i++)
				dump (i);
		}
	}   //  dump

	/**
	 *  Dump column
	 *  @param index index
	 */
	public void dump (int index)
	{
		StringBuffer sb = new StringBuffer(" ").append(index);
		if (index < 0 || index >= getColumnCount())
		{
			log.debug(sb.append(": invalid").toString());
			return;
		}
		sb.append(": ").append(getColumnName(index))
			.append(" = ").append(m_oldValues[index])
			.append(" (").append(m_newValues[index]).append(")");
		log.debug(sb.toString());
	}   //  dump

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

	/**
	 * 	Get All IDs of Table
	 * 	@param TableName table name (key column with _ID)
	 * 	@param WhereClause optional where clause
	 * 	@return array of IDs
	 */
	public static int[] getAllIDs (String TableName, String WhereClause)
	{
		ArrayList list = new ArrayList();
		StringBuffer sql = new StringBuffer("SELECT ");
		sql.append(TableName).append("_ID FROM ").append(TableName);
		if (WhereClause != null && WhereClause.length() > 0)
			sql.append(" WHERE ").append(WhereClause);
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql.toString());
			ResultSet rs = pstmt.executeQuery();
			while (rs.next())
				list.add(new Integer(rs.getInt(1)));
			rs.close();
			pstmt.close();
		}
		catch (SQLException e)
		{
			s_log.error("getAllIDs\nSQL=" + sql.toString(), e);
		}
		//	Convert to array
		int[] retValue = new int[list.size()];
		for (int i = 0; i < retValue.length; i++)
			retValue[i] = ((Integer)list.get(i)).intValue();
		return retValue;
	}	//	getAllIDs
}   //  PO

⌨️ 快捷键说明

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