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

📄 mworkflow.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-2002 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.*;

/**
 *	WorkFlow
 *
 * 	@author 	Jorg Janke
 * 	@version 	$Id: MWorkflow.java,v 1.1 2002/12/05 05:41:31 jjanke Exp $
 */
public class MWorkflow extends PO
{
	/**
	 * 	Load Workflow
	 * 	@param ctx Context
	 * 	@param AD_WorkFlow_ID ID
	 */
	public MWorkflow (Properties ctx, int AD_WorkFlow_ID)
	{
		super(ctx, AD_WorkFlow_ID);
		if (AD_WorkFlow_ID < 1)
			throw new IllegalArgumentException ("Cannot create new Workflow");
		Log.trace(Log.l4_Data, "MWorkflow " + AD_WorkFlow_ID);
		loadTrl();
		loadNodes();
	}	//	MWorkflow

	/**	WF Nodes				*/
	private ArrayList		m_nodes = new ArrayList();
	/**	Ordered Nodes in Array	*/
	private MWFNode[]		m_nodeArray = null;

	/**	Translated Name			*/
	private String			m_name_trl = null;
	/**	Translated Description	*/
	private String			m_description_trl = null;
	/**	Translated Help			*/
	private String			m_help_trl = null;
	/**	Translation Flag		*/
	private boolean			m_translated = false;

	/**
	 *  Initialize and return PO_Info
	 *  @param ctx context
	 *  @return POInfo
	 */
	protected POInfo initPO(Properties ctx)
	{
		int AD_Table_ID = 117;		//	Trl = 133
		POInfo poi = POInfo.getPOInfo (ctx, AD_Table_ID);
		return poi;
	}	//	initPO

	/**
	 * 	Load Translation
	 */
	private void loadTrl()
	{
		if (Env.isBaseLanguage(getCtx(), "AD_Workflow") || getID() == 0)
			return;
		String sql = "SELECT Name, Description, Help FROM AD_Workflow_Trl WHERE AD_Workflow_ID=? AND AD_Language=?";
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql);
			pstmt.setInt(1, getID());
			pstmt.setString(2, Env.getAD_Language(getCtx()));
			ResultSet rs = pstmt.executeQuery();
			if (rs.next())
			{
				m_name_trl = rs.getString(1);
				m_description_trl = rs.getString(2);
				m_help_trl = rs.getString(3);
				m_translated = true;
			}
			rs.close();
			pstmt.close();
		}
		catch (SQLException e)
		{
			Log.error("MWorkflow.loadTrl", e);
		}
		Log.trace(Log.l5_DData, "MWorkflow.loadTrl " + m_translated);
	}	//	loadTrl

	/**
	 * 	Load Nodes
	 */
	private void loadNodes()
	{
		String sql = "SELECT * FROM AD_WF_Node WHERE AD_WorkFlow_ID=?";
		try
		{
			PreparedStatement pstmt = DB.prepareStatement(sql);
			pstmt.setInt(1, getID());
			ResultSet rs = pstmt.executeQuery();
			while (rs.next())
				m_nodes.add (new MWFNode (getCtx(), rs));
			rs.close();
			pstmt.close();
		}
		catch (SQLException e)
		{
			Log.error("MWorkflow.loadNodes", e);
		}
		Log.trace(Log.l5_DData, "MWorkflow.loadNodes #" + m_nodes.size());
	}	//	loadNodes

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

	/**
	 * 	Get Number of Nodes
	 * 	@return number of nodes
	 */
	public int getNodeCount()
	{
		return m_nodes.size();
	}	//	getNextNodeCount

	/**
	 * 	Get the nodes
	 *  @param ordered ordered array
	 * 	@return array of nodes
	 */
	public MWFNode[] getNodes(boolean ordered)
	{
		if (ordered)
			return getNodesInOrder();
		//
		MWFNode[] retValue = new MWFNode [m_nodes.size()];
		m_nodes.toArray(retValue);
		return retValue;
	}	//	getNodes

	/**
	 * 	Get the first node
	 * 	@return array of next nodes
	 */
	public MWFNode getFirstNode()
	{
		return getNode (getAD_WF_Node_ID());
	}	//	getFirstNode

	/**
	 * 	Get Node with ID
	 * 	@param AD_WF_Node_ID ID
	 * 	@return node or null
	 */
	private MWFNode getNode (int AD_WF_Node_ID)
	{
		for (int i = 0; i < m_nodes.size(); i++)
		{
			MWFNode node = (MWFNode)m_nodes.get(i);
			if (node.getAD_WF_Node_ID() == AD_WF_Node_ID)
				return node;
		}
		return null;
	}	//	getNode

	/**
	 * 	Get the next nodes
	 * 	@param AD_WF_Node_ID ID
	 * 	@return array of next nodes or null
	 */
	public MWFNode[] getNextNodes (int AD_WF_Node_ID)
	{
		MWFNode node = getNode(AD_WF_Node_ID);
		if (node == null || node.getNextNodeCount() == 0)
			return null;
		//
		MWFNodeNext[] nexts = node.getNextNodes();
		ArrayList list = new ArrayList();
		for (int i = 0; i < nexts.length; i++)
		{
			MWFNode next = getNode (nexts[i].getAD_WF_Next_ID());
			if (next != null)
				list.add(next);
		}

		//	Return Nodes
		MWFNode[] retValue = new MWFNode [list.size()];
		list.toArray(retValue);
		return retValue;
	}	//	getNextNodes

	/**
	 * 	Get The Nodes in Sequence Order
	 * 	@return Nodes in sequence
	 */
	private MWFNode[] getNodesInOrder()
	{
		if (m_nodeArray == null)
		{
			ArrayList list = new ArrayList();
			addNode (list, getAD_WF_Node_ID());	//	first
			if (m_nodes.size() != list.size())
				Log.error("MWorkflow.getNodesInOrder - sizes different: " + m_nodes.size() + "<->" + list.size());
			//
			m_nodeArray = new MWFNode [list.size()];
			list.toArray(m_nodeArray);
		}
		return m_nodeArray;
	}	//	getNodesInOrder

	/**
	 * 	Add Node to Ordered List
	 *  @param list lsit tro add to
	 * 	@param AD_WF_Node_ID node id
	 */
	private void addNode (ArrayList list, int AD_WF_Node_ID)
	{
		MWFNode node = getNode (AD_WF_Node_ID);
		if (!list.contains(node))
		{
			list.add(node);
			MWFNodeNext[] nexts = node.getNextNodes();
			for (int i = 0; i < nexts.length; i++)
				addNode (list, nexts[i].getAD_WF_Next_ID());
		}
	}	//	addNode

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

	/**
	 * 	Get (first) Next Node of ID
	 * 	@param AD_WF_Node_ID id
	 * 	@return next AD_WF_Node_ID or 0
	 */
	public int getNext (int AD_WF_Node_ID)
	{
		MWFNode[] nodes = getNodesInOrder();
		for (int i = 0; i < nodes.length; i++)
		{
			if (nodes[i].getAD_WF_Node_ID() == AD_WF_Node_ID)
			{
				MWFNodeNext[] nexts = nodes[i].getNextNodes();
				if (nexts.length > 0)
					return nexts[0].getAD_WF_Next_ID();
				return 0;
			}
		}
		return 0;
	}	//	getNext

	/**
	 * 	Get (first) Previous Node of ID
	 * 	@param AD_WF_Node_ID id
	 * 	@return next AD_WF_Node_ID or 0
	 */
	public int getPrevious (int AD_WF_Node_ID)
	{
		MWFNode[] nodes = getNodesInOrder();
		for (int i = 0; i < nodes.length; i++)
		{
			if (nodes[i].getAD_WF_Node_ID() == AD_WF_Node_ID)
			{
				if (i > 0)
					return nodes[i-1].getAD_WF_Node_ID();
				return 0;
			}
		}
		return 0;
	}	//	getPrevious

	/**
	 * 	Get very Last Node
	 * 	@param AD_WF_Node_ID ignored
	 * 	@return next AD_WF_Node_ID or 0
	 */
	public int getLast (int AD_WF_Node_ID)
	{
		MWFNode[] nodes = getNodesInOrder();
		if (nodes.length > 0)
			return nodes[nodes.length-1].getAD_WF_Node_ID();
		return 0;
	}	//	getLast

	/**
	 * 	Is this the first Node
	 * 	@param AD_WF_Node_ID id
	 * 	@return true if first node
	 */
	public boolean isFirst (int AD_WF_Node_ID)
	{
		return AD_WF_Node_ID == getAD_WF_Node_ID();
	}	//	isFirst

	/**
	 * 	Is this the last Node
	 * 	@param AD_WF_Node_ID id
	 * 	@return true if last node
	 */
	public boolean isLast (int AD_WF_Node_ID)
	{
		MWFNode[] nodes = getNodesInOrder();
		return AD_WF_Node_ID == nodes[nodes.length-1].getAD_WF_Node_ID();
	}	//	isLast

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

	/**
	 * 	Get ID
	 * 	@return ID
	 */
	public int getAD_Workflow_ID()
	{
		return getID();
	}	//	getAD_Workflow_ID

	/**
	 * 	Get Name
	 * 	@return Name
	 */
	public String getName()
	{
		return (String)getValue("Name");
	}	//	getName

	/**
	 * 	Get Name
	 * 	@param translated translated
	 * 	@return Name
	 */
	public String getName(boolean translated)
	{
		if (translated && m_translated)
			return m_name_trl;
		return getName();
	}	//	getName

	/**
	 * 	Get Description
	 * 	@return Description
	 */
	public String getDescription()
	{
		return (String)getValue("Description");
	}	//	getDescription

	/**
	 * 	Get Description
	 * 	@param translated translated
	 * 	@return Description
	 */
	public String getDescription(boolean translated)
	{
		if (translated && m_translated)
			return m_description_trl;
		return getDescription();
	}	//	getDescription

	/**
	 * 	Get Help
	 * 	@return Help
	 */
	public String getHelp()
	{
		return (String)getValue("Help");
	}	//	getHelp

	/**
	 * 	Get Help
	 * 	@param translated translated
	 * 	@return Name
	 */
	public String getHelp(boolean translated)
	{
		if (translated && m_translated)
			return m_help_trl;
		return getHelp();
	}	//	getHelp

	/**
	 * 	Get First Node
	 * 	@return Node ID
	 */
	public int getAD_WF_Node_ID()
	{
		Integer ii = (Integer)getValue("AD_WF_Node_ID");
		if (ii != null)
			return ii.intValue();
		return 0;
	}	//	getAD_WF_Node_ID

	/**
	 *  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.trace(Log.l4_Data, "MWorkflow.saveComplete", "Success=" + success);
		//	save all nodes
		MWFNode[] nodes = getNodesInOrder();
		for (int i = 0; i < nodes.length; i++)
			nodes[i].save();
		return success;
	}   //  saveComplete

}	//	MWorkflow_ID

⌨️ 快捷键说明

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