From dde0f2b5f440d532e2833a24eaadaf4a992ad921 Mon Sep 17 00:00:00 2001 From: teo_sarca Date: Fri, 25 Sep 2009 11:45:33 +0000 Subject: [PATCH] BF [ 2866493 ] VTreePanel is not saving who did the node move https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2866493&group_id=176962 * refactored AD_TreeNode update part * fixed AD_TreeNode insertion too (from PO) Please help me with review --- base/src/org/compiere/model/PO.java | 4 +- .../org/compiere/grid/tree/VTreePanel.java | 103 ++++++++---------- 2 files changed, 50 insertions(+), 57 deletions(-) diff --git a/base/src/org/compiere/model/PO.java b/base/src/org/compiere/model/PO.java index 1e75858fee..35b94c9229 100644 --- a/base/src/org/compiere/model/PO.java +++ b/base/src/org/compiere/model/PO.java @@ -78,6 +78,8 @@ import org.w3c.dom.Element; * https://sourceforge.net/tracker/?func=detail&aid=2849122&group_id=176962&atid=879332 *
  • BF [ 2859125 ] Can't set AD_OrgBP_ID * https://sourceforge.net/tracker/index.php?func=detail&aid=2859125&group_id=176962&atid=879332 + *
  • BF [ 2866493 ] VTreePanel is not saving who did the node move + * https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2866493&group_id=176962 * @author Victor Perez, e-Evolution SC *
  • [ 2195894 ] Improve performance in PO engine *
  • http://sourceforge.net/tracker/index.php?func=detail&aid=2195894&group_id=176962&atid=879335 @@ -3324,7 +3326,7 @@ public abstract class PO .append(MTree_Base.getNodeTableName(treeType)) .append(" (AD_Client_ID,AD_Org_ID, IsActive,Created,CreatedBy,Updated,UpdatedBy, " + "AD_Tree_ID, Node_ID, Parent_ID, SeqNo) " - + "SELECT t.AD_Client_ID,0, 'Y', SysDate, 0, SysDate, 0," + + "SELECT t.AD_Client_ID, 0, 'Y', SysDate, "+getUpdatedBy()+", SysDate, "+getUpdatedBy()+"," + "t.AD_Tree_ID, ").append(get_ID()).append(", 0, 999 " + "FROM AD_Tree t " + "WHERE t.AD_Client_ID=").append(getAD_Client_ID()).append(" AND t.IsActive='Y'"); diff --git a/client/src/org/compiere/grid/tree/VTreePanel.java b/client/src/org/compiere/grid/tree/VTreePanel.java index f97d3367bd..aa225a6c5f 100644 --- a/client/src/org/compiere/grid/tree/VTreePanel.java +++ b/client/src/org/compiere/grid/tree/VTreePanel.java @@ -91,6 +91,7 @@ import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.util.Trx; +import org.compiere.util.TrxRunnable; import org.jdesktop.swingx.JXTaskPane; import org.jdesktop.swingx.JXTaskPaneContainer; @@ -111,8 +112,12 @@ import de.schaeffer.compiere.tools.DocumentSearch; * @author Jorg Janke * @version $Id: VTreePanel.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $ * - * Contributors: - * kthiemann / Carlos Ruiz - 2761420 - Advanced Search + * @author kthiemann / Carlos Ruiz + *
  • 2761420 - Advanced Search + * + * @author Teo Sarca + *
  • BF [ 2866493 ] VTreePanel is not saving who did the node move + * https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2866493&group_id=176962 */ public final class VTreePanel extends CPanel implements ActionListener, DragGestureListener, DragSourceListener, DropTargetListener @@ -627,12 +632,12 @@ public final class VTreePanel extends CPanel return; // remove - MTreeNode oldParent = (MTreeNode)movingNode.getParent(); + final MTreeNode oldParent = (MTreeNode)movingNode.getParent(); movingNode.removeFromParent(); treeModel.nodeStructureChanged(oldParent); // insert - MTreeNode newParent; + final MTreeNode newParent; int index; if (!toNode.isSummary()) // drop on a child node { @@ -648,68 +653,54 @@ public final class VTreePanel extends CPanel treeModel.nodeStructureChanged(newParent); // *** Save changes to disk - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - Trx trx = Trx.get (Trx.createTrxName("VTreePanel"), true); try { - //begin vpj-cd e-evolution 07/12/2005 PostgreSQL - //Statement stmt = trx.getConnection().createStatement(); - //end vpj-cd e-evolution 07/12/2005 PostgreSQL - // START TRANSACTION ************** - int no = 0; - for (int i = 0; i < oldParent.getChildCount(); i++) - { - MTreeNode nd = (MTreeNode)oldParent.getChildAt(i); - StringBuffer sql = new StringBuffer("UPDATE "); - sql.append(m_nodeTableName) - .append(" SET Parent_ID=").append(oldParent.getNode_ID()) - .append(", SeqNo=").append(i) - .append(", Updated=SysDate") - .append(" WHERE AD_Tree_ID=").append(m_AD_Tree_ID) - .append(" AND Node_ID=").append(nd.getNode_ID()); - log.fine(sql.toString()); - //begin vpj-cd e-evolution 07/12/2005 PostgreSQL - //stmt.executeUpdate(sql.toString()); - no = DB.executeUpdate(sql.toString(),trx.getTrxName()); - //end vpj-cd e-evolution 07/12/2005 PostgreSQL - } - if (oldParent != newParent) - for (int i = 0; i < newParent.getChildCount(); i++) - { - MTreeNode nd = (MTreeNode)newParent.getChildAt(i); - StringBuffer sql = new StringBuffer("UPDATE "); - sql.append(m_nodeTableName) - .append(" SET Parent_ID=").append(newParent.getNode_ID()) - .append(", SeqNo=").append(i) - .append(", Updated=SysDate") - .append(" WHERE AD_Tree_ID=").append(m_AD_Tree_ID) - .append(" AND Node_ID=").append(nd.getNode_ID()); - log.fine(sql.toString()); - //begin vpj-cd e-evolution 07/12/2005 PostgreSQL - //stmt.executeUpdate(sql.toString()); - no = DB.executeUpdate(sql.toString(),trx.getTrxName()); - //end vpj-cd e-evolution 07/12/2005 PostgreSQL + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + Trx.run(new TrxRunnable() { + public void run(String trxName) { + for (int i = 0; i < oldParent.getChildCount(); i++) + { + MTreeNode nd = (MTreeNode)oldParent.getChildAt(i); + updateTreeNode(nd.getNode_ID(), oldParent.getNode_ID(), i, trxName); + } + if (oldParent != newParent) + { + for (int i = 0; i < newParent.getChildCount(); i++) + { + MTreeNode nd = (MTreeNode)newParent.getChildAt(i); + updateTreeNode(nd.getNode_ID(), newParent.getNode_ID(), i, trxName); + } + } } - // COMMIT ********************* - trx.commit(true); - //begin vpj-cd e-evolution 07/12/2005 PostgreSQL - //stmt.close(); - //end vpj-cd e-evolution 07/12/2005 PostgreSQL + }); } - ///begin vpj-cd e-evolution 07/12/2005 PostgreSQL - //catch (SQLException e) - catch (Exception e) - //end vpj-cd e-evolution 07/12/2005 PostgreSQL + catch (Exception e) { - trx.rollback(); log.log(Level.SEVERE, "move", e); ADialog.error(m_WindowNo, this, "TreeUpdateError", e.getLocalizedMessage()); } - trx.close(); - trx = null; - setCursor(Cursor.getDefaultCursor()); + finally + { + setCursor(Cursor.getDefaultCursor()); + } log.config("complete"); } // moveNode + + private int updateTreeNode(int Node_ID, int Parent_ID, int SeqNo, String trxName) + { + // We do not use parametrized statements because we need to log these migration scripts + StringBuffer sql = new StringBuffer("UPDATE "); + sql.append(m_nodeTableName) + .append(" SET Parent_ID=").append(Parent_ID) + .append(", SeqNo=").append(SeqNo) + .append(", Updated=SysDate") + .append(", UpdatedBy=").append(Env.getAD_User_ID(Env.getCtx())) + .append(" WHERE AD_Tree_ID=").append(m_AD_Tree_ID) + .append(" AND Node_ID=").append(Node_ID); + log.fine(sql.toString()); + int no = DB.executeUpdateEx(sql.toString(), trxName); + return no; + } /*************************************************************************/