-
Notifications
You must be signed in to change notification settings - Fork 208
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ZK-5535: TrackerImplEx#removeAllReference accesses map value by itera…
…tion instead of key, lowers performance
- Loading branch information
1 parent
56f1b15
commit 8bab816
Showing
13 changed files
with
658 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
112 changes: 112 additions & 0 deletions
112
zktest/src/main/java/org/zkoss/zktest/test2/B100_ZK_5535/Bug.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
package org.zkoss.zktest.test2.B100_ZK_5535; | ||
|
||
import org.zkoss.bind.BindUtils; | ||
import org.zkoss.bind.annotation.Command; | ||
public class Bug { | ||
private BugOasiListBoxLayoutModel gridTree=new BugOasiListBoxLayoutModel(); | ||
public BugOasiListBoxLayoutModel getGridTree() { | ||
return gridTree; | ||
} | ||
public void setGridTree(BugOasiListBoxLayoutModel gridTree) { | ||
this.gridTree = gridTree; | ||
} | ||
public Bug() | ||
{ | ||
} | ||
public void loadDati() | ||
{ | ||
BugOasiTreeNode<BugFormModel> nodeParent=this.loadDati(null); | ||
for (int i=0;i<2000;i++) | ||
nodeParent=this.loadDati(nodeParent); | ||
this.gridTree.setLeafNodes(); | ||
} | ||
public BugOasiTreeNode<BugFormModel> loadDati( | ||
BugOasiTreeNode<BugFormModel> parent) | ||
{ | ||
BugFormModel row=null; | ||
/* --------------------------------------- */ | ||
/* Popolo grid tree */ | ||
/* --------------------------------------- */ | ||
BugOasiTreeNode<BugFormModel> nodeParent; | ||
BugOasiTreeNode<BugFormModel> node; | ||
/* ------------------------- */ | ||
/* Creo nodo di root */ | ||
/* ------------------------- */ | ||
nodeParent=gridTree.addTreeNode(parent,true); | ||
row=nodeParent.getData(); | ||
row.get("coarfo").setStringVal("1"); | ||
row.get("descri").setStringVal("Nodo root"); | ||
nodeParent=gridTree.addTreeNode(true); | ||
row=nodeParent.getData(); | ||
row.get("coarfo").setStringVal("1"); | ||
row.get("descri").setStringVal("Nodo root2"); | ||
nodeParent=gridTree.addTreeNode(true); | ||
row=nodeParent.getData(); | ||
row.get("coarfo").setStringVal("1"); | ||
row.get("descri").setStringVal("Nodo root3"); | ||
nodeParent=gridTree.addTreeNode(true); | ||
row=nodeParent.getData(); | ||
row.get("coarfo").setStringVal("1"); | ||
row.get("descri").setStringVal("Nodo root4"); | ||
nodeParent=gridTree.addTreeNode(true); | ||
row=nodeParent.getData(); | ||
row.get("coarfo").setStringVal("1"); | ||
row.get("descri").setStringVal("Nodo root5"); | ||
nodeParent=gridTree.addTreeNode(true); | ||
row=nodeParent.getData(); | ||
row.get("coarfo").setStringVal("1"); | ||
row.get("descri").setStringVal("Nodo root6"); | ||
/* ---------------------------------- */ | ||
/* Creo primo nodo figlio senza figli */ | ||
/* ---------------------------------- */ | ||
node=gridTree.addTreeNode(nodeParent); | ||
node.setLeaf(true); | ||
row=node.getData(); | ||
row.get("coarfo").setStringVal("2"); | ||
row.get("descri").setStringVal("nodo figlio 1"); | ||
/* ---------------------------------- */ | ||
/* Creo secondo nodo figlio con figli */ | ||
/* ---------------------------------- */ | ||
node=gridTree.addTreeNode(nodeParent,false); | ||
row=node.getData(); | ||
row.get("coarfo").setStringVal("3"); | ||
row.get("descri").setStringVal("nodo figlio 2"); | ||
/* ---------------------------------- */ | ||
/* Creo figli secondo nodo figlio */ | ||
/* ---------------------------------- */ | ||
nodeParent=node; | ||
node=gridTree.addTreeNode(nodeParent,true); | ||
row=node.getData(); | ||
row.get("coarfo").setStringVal("4"); | ||
row.get("descri").setStringVal("primo figlio del cocondo figlio"); | ||
/* ---------------------------------- */ | ||
/* Creo secondo nodo figlio con figli */ | ||
/* ---------------------------------- */ | ||
node=gridTree.addTreeNode(nodeParent,true); | ||
row=node.getData(); | ||
row.get("coarfo").setStringVal("6"); | ||
row.get("descri").setStringVal("secondo figlio del cocondo figlio"); | ||
/* ---------------------------------- */ | ||
/* Creo figlio in mezzo */ | ||
/* ---------------------------------- */ | ||
node=gridTree.addTreeNode(nodeParent,true,1); | ||
row=node.getData(); | ||
row.get("coarfo").setStringVal("5"); | ||
row.get("descri").setStringVal("creato figlio in mezzo"); | ||
|
||
return nodeParent; | ||
} | ||
@Command | ||
public void showData() | ||
{ | ||
this.loadDati(); | ||
BindUtils.postNotifyChange(null, null, this, "gridTree"); | ||
} | ||
@Command | ||
public void clearTree() | ||
{ | ||
this.gridTree.clearTree(); | ||
BindUtils.postNotifyChange(null, null, this, "gridTree"); | ||
} | ||
} | ||
|
17 changes: 17 additions & 0 deletions
17
zktest/src/main/java/org/zkoss/zktest/test2/B100_ZK_5535/BugFieldLayout.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package org.zkoss.zktest.test2.B100_ZK_5535; | ||
|
||
public class BugFieldLayout { | ||
private String stringVal; | ||
|
||
public String getStringVal() { | ||
return stringVal; | ||
} | ||
|
||
public void setStringVal(String stringVal) { | ||
this.stringVal = stringVal; | ||
} | ||
public void detach() | ||
{ | ||
this.stringVal=null; | ||
} | ||
} |
56 changes: 56 additions & 0 deletions
56
zktest/src/main/java/org/zkoss/zktest/test2/B100_ZK_5535/BugFormModel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
package org.zkoss.zktest.test2.B100_ZK_5535; | ||
|
||
import java.util.LinkedHashMap; | ||
import java.util.Map.Entry; | ||
public class BugFormModel { | ||
public LinkedHashMap<String, BugFieldLayout> fields = new LinkedHashMap<String, BugFieldLayout>(); | ||
private BugOasiTreeNode<BugFormModel> node=null; | ||
|
||
/** | ||
* <LI>BugFormModel</LI> | ||
* <PRE> | ||
* Nel caso di un Tree restituisce il nodo associato | ||
* </PRE> | ||
* | ||
* @author m.spuri | ||
*/ | ||
public BugOasiTreeNode<BugFormModel> getNode() { | ||
return node; | ||
} | ||
/** | ||
* <LI>BugFormModel</LI> | ||
* <PRE> | ||
* Nel caso di un Tree restituisce il nodo associato | ||
* </PRE> | ||
* | ||
* @author m.spuri | ||
*/ | ||
public void setNode(BugOasiTreeNode<BugFormModel> node) { | ||
this.node = node; | ||
} | ||
public LinkedHashMap<String, BugFieldLayout> getFields() { | ||
return fields; | ||
} | ||
public void setFields(LinkedHashMap<String, BugFieldLayout> fields) { | ||
this.fields = fields; | ||
} | ||
public BugFieldLayout get(String name) | ||
{ | ||
return fields.get(name); | ||
} | ||
public BugFormModel() | ||
{ | ||
fields.put("coarfo",new BugFieldLayout()); | ||
fields.put("descri",new BugFieldLayout()); | ||
} | ||
public void detach() | ||
{ | ||
if ( this.fields!=null ) | ||
{ | ||
for(Entry<String, BugFieldLayout> obj: this.fields.entrySet()) | ||
obj.getValue().detach(); | ||
this.fields.clear(); | ||
this.fields=null; | ||
} | ||
} | ||
} |
178 changes: 178 additions & 0 deletions
178
zktest/src/main/java/org/zkoss/zktest/test2/B100_ZK_5535/BugOasiListBoxLayoutModel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
package org.zkoss.zktest.test2.B100_ZK_5535; | ||
|
||
import java.util.LinkedList; | ||
|
||
import org.zkoss.zul.DefaultTreeModel; | ||
import org.zkoss.zul.TreeModel; | ||
import org.zkoss.zul.TreeNode; | ||
public class BugOasiListBoxLayoutModel { | ||
private BugOasiTreeNode<BugFormModel> treeRoot = null; | ||
private TreeModel<TreeNode<BugFormModel>> treeNodes = null; | ||
private boolean enableMultiSelection = false; | ||
public boolean isEnableMultiSelection() { | ||
return enableMultiSelection; | ||
} | ||
|
||
public void setEnableMultiSelection(boolean enableMultiSelection) { | ||
this.enableMultiSelection = enableMultiSelection; | ||
} | ||
|
||
public BugOasiTreeNode<BugFormModel> getTreeRoot() { | ||
return treeRoot; | ||
} | ||
|
||
public void setTreeRoot(BugOasiTreeNode<BugFormModel> treeRoot) { | ||
this.treeRoot = treeRoot; | ||
} | ||
public TreeModel<TreeNode<BugFormModel>> getTreeNodes() { | ||
return this.treeNodes; | ||
} | ||
|
||
public void setTreeNodes(TreeModel<TreeNode<BugFormModel>> treeNodes) { | ||
this.treeNodes = treeNodes; | ||
} | ||
/** | ||
* <LI>OasiListBoxLayoutModel</LI> | ||
* | ||
* <PRE> | ||
* Aggiunge un nodo al tree | ||
* </PRE> | ||
* | ||
* Aggiungo nodo di root | ||
* | ||
* @author m.spuri | ||
*/ | ||
public BugOasiTreeNode<BugFormModel> addTreeNode(boolean open) { | ||
return this.addTreeNode(null, open); | ||
}/** | ||
* <LI>OasiListBoxLayoutModel</LI> | ||
* | ||
* <PRE> | ||
* Aggiunge un nodo al tree | ||
* </PRE> | ||
* | ||
* @author m.spuri | ||
*/ | ||
public BugOasiTreeNode<BugFormModel> addTreeNode( | ||
BugOasiTreeNode<BugFormModel> parent, | ||
boolean open) { | ||
return this.addTreeNode(parent, open, null); | ||
} | ||
public BugOasiTreeNode<BugFormModel> addTreeNode( | ||
BugOasiTreeNode<BugFormModel> parent, | ||
boolean open, Integer pos) { | ||
return this.addTreeNode(parent, null, null, open, pos); | ||
} | ||
private BugOasiTreeNode<BugFormModel> addTreeNode( | ||
BugOasiTreeNode<BugFormModel> parent, | ||
BugOasiTreeNode<BugFormModel> newnod, BugFormModel myrow, boolean open, | ||
Integer pos) { | ||
if (parent == null) { | ||
if (this.treeRoot == null) | ||
this.createTreeRoot(); | ||
parent = this.treeRoot; | ||
} | ||
BugFormModel row; | ||
if (newnod == null) { | ||
if (myrow == null) | ||
row = new BugFormModel(); | ||
else | ||
row = myrow; | ||
} else | ||
row = newnod.getData(); | ||
|
||
|
||
BugOasiTreeNode<BugFormModel> treeNode = null; | ||
if (newnod == null) | ||
treeNode = new BugOasiTreeNode<BugFormModel>(parent, row, | ||
new LinkedList<BugOasiTreeNode<BugFormModel>>(), treeNodes, open, | ||
pos); | ||
else { | ||
treeNode = newnod; | ||
parent.setLeaf(false); | ||
if (pos == null) | ||
parent.add(treeNode); | ||
else | ||
parent.getChildren().add(pos, treeNode); | ||
} | ||
row.setNode(treeNode); | ||
if (treeNode.isOpen()) | ||
((DefaultTreeModel<BugFormModel>) treeNodes).addOpenObject(treeNode); | ||
return treeNode; | ||
} | ||
private void createTreeRoot() { | ||
this.treeRoot = new BugOasiTreeNode<BugFormModel>(null, | ||
new LinkedList<BugOasiTreeNode<BugFormModel>>(), treeNodes, true); | ||
|
||
this.treeNodes = new DefaultTreeModel<BugFormModel>(this.treeRoot); | ||
((DefaultTreeModel<BugFormModel>)this.treeNodes).setMultiple(this.isEnableMultiSelection()); | ||
} | ||
/** | ||
* <LI>OasiListBoxLayoutModel</LI> | ||
* | ||
* <PRE> | ||
* Aggiunge un nodo al tree | ||
* </PRE> | ||
* | ||
* Di default � chiuso | ||
* | ||
* @author m.spuri | ||
*/ | ||
public BugOasiTreeNode<BugFormModel> addTreeNode( | ||
BugOasiTreeNode<BugFormModel> parent) { | ||
return this.addTreeNode(parent, false); | ||
} | ||
|
||
public void clearTree() { | ||
int n; | ||
if (this.treeRoot != null) { | ||
n = this.treeRoot.getChildren().size(); | ||
for (int k = 0; k < n; k++) | ||
this.clearTreeNode((BugOasiTreeNode<BugFormModel>) this.treeRoot.getChildren().get(k)); | ||
try { | ||
this.treeRoot.getChildren().clear(); | ||
} catch (Exception e) { | ||
// TODO: handle exception | ||
} | ||
|
||
this.treeRoot = null; | ||
} | ||
} | ||
private void clearTreeNode(BugOasiTreeNode<BugFormModel> node) { | ||
if (node == null) | ||
return; | ||
if (!node.isLeaf() && node.isOpen()) | ||
((DefaultTreeModel<BugFormModel>) treeNodes).removeOpenObject(node); | ||
|
||
BugFormModel row = (BugFormModel) node.getData(); | ||
row.detach(); | ||
if (node.getChildren() != null) { | ||
int n = node.getChildren().size(); | ||
for (int i = 0; i < n; i++) { | ||
this.clearTreeNode((BugOasiTreeNode<BugFormModel>) node.getChildren().get(i)); | ||
} | ||
node.getChildren().clear(); | ||
} | ||
} | ||
public void setLeafNodes() { | ||
int n; | ||
if (this.treeRoot != null) { | ||
n = this.treeRoot.getChildren().size(); | ||
for (int k = 0; k < n; k++) | ||
this.setLeaf((BugOasiTreeNode<BugFormModel>) this.treeRoot.getChildren().get(k)); | ||
} | ||
} | ||
private void setLeaf(BugOasiTreeNode<BugFormModel> node) { | ||
if (node == null) | ||
return; | ||
if (node.getChildren() != null && node.getChildren().size()>0 ) { | ||
int n = node.getChildren().size(); | ||
for (int i = 0; i < n; i++) { | ||
this.setLeaf((BugOasiTreeNode<BugFormModel>) node.getChildren().get(i)); | ||
} | ||
} | ||
else | ||
node.setLeaf(true); | ||
} | ||
|
||
} |
Oops, something went wrong.