📄 mworkflow.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 + -