package net.dirtyfilthy.Bitten;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.google.bitcoin.core.GraphTransaction;
public class VisibilityManager {
protected HashMap<GraphTransaction,ArrayList<TransactionTreeTable>> transactionMap;
protected HashMap<GraphTransaction,Boolean> visibilityMap;
protected WalletView view;
VisibilityManager(WalletView view){
this.view=view;
this.transactionMap=new HashMap<GraphTransaction,ArrayList<TransactionTreeTable>>();
this.visibilityMap=new HashMap<GraphTransaction,Boolean>();
}
public synchronized void registerTable(TransactionTreeTable table){
for(GraphTransaction t : ((RootTransactionTreeNode) table.getTreeTableModel().getRoot()).list){
if(transactionMap.containsKey(t)){
transactionMap.get(t).add(table);
setTransactionVisibilityForTable(table,t,visibilityMap.get(t).booleanValue());
}
else{
ArrayList<TransactionTreeTable> a=new ArrayList<TransactionTreeTable>();
a.add(table);
transactionMap.put(t, a);
visibilityMap.put(t, false);
}
}
table.repaint();
}
public synchronized void unregisterTable(TransactionTreeTable table){
for(Iterator<Entry<GraphTransaction, ArrayList<TransactionTreeTable>>> it = transactionMap.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<GraphTransaction, ArrayList<TransactionTreeTable>> entry = it.next();
ArrayList a=entry.getValue();
if(a.contains(table)){
a.remove(table);
if(a.size()==0){
GraphTransaction t=entry.getKey();
it.remove();
if(visibilityMap.get(t)){
view.removeTransaction(t);
}
visibilityMap.remove(t);
}
}
}
}
public void setTransactionVisibilityForTable(TransactionTreeTable table, GraphTransaction t, boolean visible){
((RootTransactionTreeNode) table.getTreeTableModel().getRoot()).findNodeBySqlTransaction(t).setValueAtNoTrigger(visible, 6);
}
public void setTransactionVisibility(GraphTransaction t, boolean visible){
if(!transactionMap.containsKey(t) || visibilityMap.get(t).booleanValue()==visible){
return;
}
ArrayList<TransactionTreeTable> tables=transactionMap.get(t);
for(TransactionTreeTable table : tables){
setTransactionVisibilityForTable(table,t,visible);
table.repaint();
}
if(visible){
view.addTransaction(t);
}
else{
view.removeTransaction(t);
}
visibilityMap.put(t, visible);
}
}