details: https://code.openbravo.com/erp/devel/pi/rev/d9446ef6dac0 changeset: 32017:d9446ef6dac0 user: Asier Lostalé <asier.lostale <at> openbravo.com> date: Wed May 03 14:15:41 2017 +0200 summary: fixed bug 35729: OrgTree.getAccessibleTree is slow with many organizations
Added some minor refactors on top of what was done for #35590: * When inserting nodes, just prepend them, don't add position * Simplified some loops with for each statements * Improved toString method preventing String concatenations diffstat: src/org/openbravo/base/secureApp/OrgTree.java | 51 +++++++++++++++----------- 1 files changed, 29 insertions(+), 22 deletions(-) diffs (100 lines): diff -r fe0d2aa9d5c1 -r d9446ef6dac0 src/org/openbravo/base/secureApp/OrgTree.java --- a/src/org/openbravo/base/secureApp/OrgTree.java Wed May 03 12:25:25 2017 +0200 +++ b/src/org/openbravo/base/secureApp/OrgTree.java Wed May 03 14:15:41 2017 +0200 @@ -14,7 +14,6 @@ import java.io.Serializable; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import org.openbravo.database.ConnectionProvider; @@ -24,6 +23,8 @@ private static final long serialVersionUID = 1L; private List<OrgTreeNode> nodes; private static final String AD_ORG_TABLE_ID = "155"; + private static final char QUOUTE = '\''; + private static final String QUOUTE_COMMA = "',"; /** * Creates a new Organization tree with all the nodes @@ -106,17 +107,15 @@ * Example: "'0','1000000'" */ public static String getTransactionAllowedOrgs(String strOrgs) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); OrgTree orgTree = new OrgTree(strOrgs); - Iterator<OrgTreeNode> iterator = orgTree.iterator(); - while (iterator.hasNext()) { - OrgTreeNode n = iterator.next(); - if (n.getIsReady() == "true" && n.getOrgType().isTransactionsAllowed()) { - sb.append("'" + n.getId() + "',"); + for (OrgTreeNode n : orgTree.nodes) { + if ("true".equals(n.getIsReady()) && n.getOrgType().isTransactionsAllowed()) { + sb.append(QUOUTE).append(n.getId()).append(QUOUTE_COMMA); } } // Remove the last ',' - if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ',') { + if (sb.length() > 0) { sb.deleteCharAt(sb.length() - 1); } return sb.toString(); @@ -193,22 +192,30 @@ } } - private Iterator<OrgTreeNode> iterator() { - return nodes.iterator(); - } - /** * Converts the tree into String. Nodes comma separated. */ public String toString() { - String s = ""; - if (nodes == null) + if (nodes == null) { return ""; - for (int i = 0; i < nodes.size(); i++) { - if (nodes.get(i) != null) - s += "'" + nodes.get(i).getId() + "'" + ((i < nodes.size() - 1) ? "," : ""); } - return s; + + StringBuilder s = new StringBuilder(); + int size = nodes.size(); + int i = 0; + for (OrgTreeNode node : nodes) { + if (node == null) { + continue; + } + i++; + s.append(QUOUTE).append(node.getId()); + if (i == size) { + s.append(QUOUTE); + } else { + s.append(QUOUTE_COMMA); + } + } + return s.toString(); } /** @@ -330,11 +337,11 @@ */ private List<OrgTreeNode> getNodesWithParent(String parentId) { List<OrgTreeNode> vecNodes = new ArrayList<OrgTreeNode>(); - int idx = 0; - for (int i = 0; i < nodes.size(); i++) - if (nodes.get(i).getParentId().equals(parentId)) { - vecNodes.add(idx++, nodes.get(i)); + for (OrgTreeNode node : nodes) { + if (node.getParentId().equals(parentId)) { + vecNodes.add(node); } + } return vecNodes; } ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits