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

📄 mtable.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		//	Make Rows selectable
		if (col == 0)
			return true;

		//	Entire Table not editable
		if (m_readOnly)
			return false;
		//	Key & ID not editable
		if (col == m_IDColumnIndex || col == m_keyColumnIndex)
			return false;
		/** @todo check link columns */

		//	Check column range
		if (col < 0 && col >= m_fields.size())
			return false;
		//  IsActive Column always editable if no processed exists
		if (col == m_activeColumnIndex && m_processedColumnIndex == -1)
			return true;
		//	Row
		if (!isRowEditable(row))
			return false;

		//	Column
		return ((MField)m_fields.get(col)).isEditable(false);
	}	//	IsCellEditable


	/**
	 *	Is Current Row Editable
	 *  @param row row
	 *  @return true if editable
	 */
	public boolean isRowEditable (int row)
	{
	//	Log.trace(Log.l6_Database, "MTable.isRowEditable");
		//	Entire Table not editable or no row
		if (m_readOnly || row < 0)
			return false;
		//	If not Active - not editable
		if (m_activeColumnIndex > 0 && "N".equals(getValueAt(row, m_activeColumnIndex))) // && m_TabNo != Find.s_TabNo)
			return false;
		//	If Processed - not editable (Find always editable)
		if (m_processedColumnIndex > 0 && "Y".equals(getValueAt(row, m_processedColumnIndex)))   // && m_TabNo != Find.s_TabNo)
			return false;

		return true;
	}	//	isRowEditable

	/**
	 *	Set entire table as read only
	 *  @param value new read only value
	 */
	public void setReadOnly (boolean value)
	{
		Log.trace(Log.l4_Data, "MTable.setReadOnly " + value);
		m_readOnly = value;
	}	//	setReadOnly

	/**
	 *  Is Read/Only
	 *  @return true if read only
	 */
	public boolean isReadOnly()
	{
		return m_readOnly;
	}   //  isReadOnly

	/**
	 *  Is inserting
	 *  @return true if inserting
	 */
	public boolean isInserting()
	{
		return m_inserting;
	}   //  isInserting

	/**
	 *	Can Table rows be deleted
	 *  @param value new deleteable value
	 */
	public void setDeleteable (boolean value)
	{
		Log.trace(Log.l4_Data, "MTable.setDeleteable " + value);
		m_deleteable = value;
	}	//	setDeleteable

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

	/**
	 *	Read Data from Recordset
	 *  @param rs result set
	 *  @return Data Array
	 */
	private Object[] readData (ResultSet rs)
	{
		int size = m_fields.size();
		Object[] rowData = new Object[size];
		String columnName = null;
		int displayType = 0;

		try
		{
			//	get row data
			for (int j = 0; j < size; j++)
			{
				//	Column Info
				MField field = (MField)m_fields.get(j);
				columnName = field.getColumnName();
				displayType = field.getDisplayType();
				//	Number
				if (DisplayType.isNumeric(displayType))
					rowData[j] = rs.getBigDecimal(j+1);			//	BigDecimal
				//	ID, Lookup (UpdatedBy is a numeric column)
				else if (DisplayType.isID(displayType) && (columnName.endsWith("_ID")) || columnName.endsWith("edBy"))
				{
					rowData[j] = new Integer(rs.getInt(j+1));	//	Integer
					if (rs.wasNull())
						rowData[j] = null;
				}
				//	Date
				else if (DisplayType.isDate(displayType))
					rowData[j] = rs.getTimestamp(j+1);			//	Timestamp
				//	RowID or Key (and Selection)
				else if (displayType == DisplayType.RowID)
				{
					Object[] rid = new Object[3];
					if (columnName.equals("ROWID"))
						rid[0] = DB.getDatabase().getRowID(rs, j+1);
					else
						rid[2] = new Integer (rs.getInt(j+1));
					rid[1] = new Boolean(false);
					rowData[j] = rid;
				}
				//	String
				else
					rowData[j] = rs.getString(j+1);				//	String
			}
		}
		catch (SQLException e)
		{
			Log.error("MTable.readData - " + columnName + ", DT=" + displayType, e);
		}
		return rowData;
	}	//	readData

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

	/**
	 *	Remove Data Status Listener
	 *  @param l listener
	 */
	public synchronized void removeDataStatusListener(DataStatusListener l)
	{
		if (m_dataStatusListeners != null && m_dataStatusListeners.contains(l))
		{
			Vector v = (Vector) m_dataStatusListeners.clone();
			v.removeElement(l);
			m_dataStatusListeners = v;
		}
	}	//	removeDataStatusListener

	/**
	 *	Add Data Status Listener
	 *  @param l listener
	 */
	public synchronized void addDataStatusListener(DataStatusListener l)
	{
		Vector v = m_dataStatusListeners == null ? new Vector(2) : (Vector) m_dataStatusListeners.clone();
		if (!v.contains(l))
		{
			v.addElement(l);
			m_dataStatusListeners = v;
		}
	}	//	addDataStatusListener

	/**
	 *	Inform Listeners
	 *  @param e event
	 */
	private void fireDataStatusChanged (DataStatusEvent e)
	{
		if (m_dataStatusListeners != null)
		{
			Vector listeners = m_dataStatusListeners;
			int count = listeners.size();
			for (int i = 0; i < count; i++)
				((DataStatusListener) listeners.elementAt(i)).dataStatusChanged(e);
		}
	}	//	fireDataStatusChanged

	/**
	 *  Create Data Status Event
	 *  @return data status event
	 */
	private DataStatusEvent createDSE()
	{
		boolean changed = m_changed;
		if (m_rowChanged != -1)
			changed = true;
		DataStatusEvent dse = new DataStatusEvent(this, m_rowCount, changed,
			Env.isAutoCommit(m_ctx, m_WindowNo), m_inserting);
		return dse;
	}   //  createDSE

	/**
	 *  Create and fire Data Status Info Event
	 *  @param AD_Message message
	 */
	protected void fireDataStatusIEvent (String AD_Message)
	{
		DataStatusEvent e = createDSE();
		e.setInfo(AD_Message, "", false);
		fireDataStatusChanged (e);
	}   //  fireDataStatusEvent

	/**
	 *  Create and fire Data Status Error Event
	 *  @param AD_Message message
	 *  @param info info
	 */
	protected void fireDataStatusEEvent (String AD_Message, String info)
	{
		DataStatusEvent e = createDSE();
		e.setInfo(AD_Message, info, true);
		Log.saveError(AD_Message, info);
		fireDataStatusChanged (e);
	}   //  fireDataStatusEvent

	/**
	 *  Create and fire Data Status Event (from Error Log)
	 *  @param errorLog error log info
	 */
	protected void fireDataStatusEEvent (ValueNamePair errorLog)
	{
		if (errorLog != null)
			fireDataStatusEEvent (errorLog.getValue(), errorLog.getName());
	}   //  fireDataStatusEvent

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

	/**
	 * Adds a listener to the list that's notified each time a change
	 * to the data model occurs.
	 * @param	l		the TableModelListener
	 */
	public void addTableModelListener (TableModelListener l)
	{
		m_tableModelListeners.add (TableModelListener.class, l);
	}   //  addTableModelListener

	/**
	 * Removes a listener from the list that's notified each time a
	 * change to the data model occurs.
	 * @param	l		the TableModelListener
	 */
	public void removeTableModelListener (TableModelListener l)
	{
		m_tableModelListeners.remove (TableModelListener.class, l);
	}   //  removeTableModelListener

	/**
	 * Notifies all listeners that all cell values in the table's
	 * rows may have changed. The number of rows may also have changed
	 * and the <code>JTable</code> should redraw the
	 * table from scratch. The structure of the table (as in the order of the
	 * columns) is assumed to be the same.
	 *
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableDataChanged()
	{
		fireTableChanged (new TableModelEvent(this));
	}   //  fireTableDataChanged

	/**
	 * Notifies all listeners that the table's structure has changed.
	 * The number of columns in the table, and the names and types of
	 * the new columns may be different from the previous state.
	 * If the <code>JTable</code> receives this event and its
	 * <code>autoCreateColumnsFromModel</code>
	 * flag is set it discards any table columns that it had and reallocates
	 * default columns in the order they appear in the model. This is the
	 * same as calling <code>setModel(TableModel)</code> on the
	 * <code>JTable</code>.
	 *
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableStructureChanged()
	{
		fireTableChanged (new TableModelEvent(this, TableModelEvent.HEADER_ROW));
	}   //  fireTableStructureChanged

	/**
	 * Notifies all listeners that rows in the range
	 * <code>[firstRow, lastRow]</code>, inclusive, have been inserted.
	 *
	 * @param  firstRow  the first row
	 * @param  lastRow   the last row
	 *
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableRowsInserted (int firstRow, int lastRow)
	{
		fireTableChanged (new TableModelEvent(this, firstRow, lastRow,
								TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
	}   //  fireTableRowsInserted

	/**
	 * Notifies all listeners that rows in the range
	 * <code>[firstRow, lastRow]</code>, inclusive, have been updated.
	 *
	 * @param firstRow  the first row
	 * @param lastRow   the last row
	 *
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableRowsUpdated(int firstRow, int lastRow)
	{
		fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
								TableModelEvent.ALL_COLUMNS, TableModelEvent.UPDATE));
	}   //  fireTableRowsUpdated

	/**
	 * Notifies all listeners that rows in the range
	 * <code>[firstRow, lastRow]</code>, inclusive, have been deleted.
	 *
	 * @param firstRow  the first row
	 * @param lastRow   the last row
	 *
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableRowsDeleted(int firstRow, int lastRow)
	{
		fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
								TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE));
	}   //  fireTableRowsDeleted

	/**
	 * Notifies all listeners that the value of the cell at
	 * <code>[row, column]</code> has been updated.
	 *
	 * @param row  row of cell which has been updated
	 * @param column  column of cell which has been updated
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableCellUpdated(int row, int column)
	{
		fireTableChanged(new TableModelEvent(this, row, row, column));
	}   //  fireTableCellUpdated

	/**
	 * Forwards the given notification event to all
	 * <code>TableModelListeners</code> that registered
	 * themselves as listeners for this table model.
	 *
	 * @param e  the event to be forwarded
	 *
	 * @see #addTableModelListener
	 * @see TableModelEvent
	 * @see EventListenerList
	 */
	public void fireTableChanged(TableModelEvent e)
	{
		// Guaranteed to return a non-null array
		Object[] listeners = m_tableModelListeners.getListenerList();
		// Process the listeners last to first, notifying
		// those that are interested in this event
		for (int i = listeners.length-2; i>=0; i-=2)
		{
			if (listeners[i]==TableModelListener.class)
			{
				((TableModelListener)listeners[i+1]).tableChanged(e);
			}
		}
	}   //  fireTableChanged

	/**
	 * Returns an array of all the listeners of the given type that
	 * were added to this model.
	 *
	 * @returns all of the objects receiving <code>listenerType</code>
	 *		notifications from this model
	 * @since 1.3
	 *
	public EventListener[] getListeners(Class listenerType)
	{
		return m_tableModelListeners.getListeners(listenerType);
	}   //  getListeners

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

	/**
	 *  Remove Vetoable change listener for row changes
	 *  @param l listener
	 */
	public synchronized void removeVetoableChangeListener(VetoableChangeListener l)
	{
		m_vetoableChangeSupport.removeVetoableChangeListener(l);
	}   //  removeVetoableChangeListener

	/**
	 *  Add Vetoable change listener for row changes
	 *  @param l listener
	 */
	public synchronized void addVetoableChangeListener(VetoableChangeListener l)
	{
		m_vetoableChangeSupport.addVetoableChangeListener(l);
	}   //  addVetoableChangeListener

	/**
	 *  Fire Vetoable change listener for row changes
	 *  @param e event
	 *  @throws PropertyVetoException
	 */
	protected void fireVetoableChange(PropertyChangeEvent e) throws java.beans.PropertyVetoException
	{
		m_vetoableChangeSupport.fireVetoableChange(e);
	}   //  fireVetoableChange

	/**
	 *  toString
	 *  @return String representation
	 */
	public String toString()
	{
		return new StringBuffer("MTable[").append(m_tableName)
			.append(",WindowNo=").append(m_WindowNo)
			.append(",Tab=").append(m_TabNo).append("]").toString();
	}   //  toString


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

	/**
	 *	ASync Loader
	 */
	class Loader extends Thread implements Serializable
	{
		/**
		 *  Construct Loader
		 */
		public Loader()
		{
			super("TLoader");
		}	//	Loader

		private PreparedStatement   m_pstmt = null;
		private ResultSet 		    m_rs = null;

		/**
		 *	Open ResultSet
		 *	@return number of records
		 */
		private int open()
		{
		//	Log.trace(Log.l4_Data, "MTable Loader.open");
			//	Get Number of Rows
			int rows = 0;
			try
			{
				PreparedStatement pstmt = DB.prepareStatement(m_SQL_Count);
				setParameter (pstmt, true);
				ResultSet rs = pstmt.executeQuery();
				if (rs.next())
					rows = rs.getInt(1);
				rs.close();
				pstmt.close();
			}
			catch (SQLException e0)
			{
				Log.err

⌨️ 快捷键说明

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