package gui.models;
import java.math.BigDecimal;
import java.util.Observable;
import java.util.Observer;
import javax.swing.DefaultComboBoxModel;
import org.mapdb.Fun.Tuple2;
import qora.naming.Name;
import qora.naming.NameSale;
import utils.ObserverMessage;
import utils.Pair;
import controller.Controller;
import database.SortableList;
import database.wallet.NameSaleMap;
@SuppressWarnings("serial")
public class NameSalesComboBoxModel extends DefaultComboBoxModel<NameSale> implements Observer {
private SortableList<Tuple2<String, String>, BigDecimal> nameSales;
public NameSalesComboBoxModel()
{
Controller.getInstance().addWalletListener(this);
}
@Override
public void update(Observable o, Object arg)
{
try
{
this.syncUpdate(o, arg);
}
catch(Exception e)
{
//GUI ERROR
}
}
@SuppressWarnings("unchecked")
public synchronized void syncUpdate(Observable o, Object arg)
{
ObserverMessage message = (ObserverMessage) arg;
//CHECK IF NEW LIST
if(message.getType() == ObserverMessage.LIST_NAME_SALE_TYPE)
{
if(this.nameSales == null)
{
this.nameSales = (SortableList<Tuple2<String, String>, BigDecimal>) message.getValue();
this.nameSales.registerObserver();
this.nameSales.sort(NameSaleMap.NAME_INDEX);
}
this.onDataChanged();
}
//CHECK IF LIST UPDATED
if(message.getType() == ObserverMessage.ADD_NAME_SALE_TYPE || message.getType() == ObserverMessage.REMOVE_NAME_SALE_TYPE)
{
this.onDataChanged();
}
/*9ObserverMessage message = (ObserverMessage) arg;
if(message.getType() == ObserverMessage.LIST_NAME_TYPE)
{
//GET SELECTED ITEM
Name selected = (Name) this.getSelectedItem();
//EMPTY LIST
this.removeAllElements();
//INSERT ALL ACCOUNTS
List<Pair<Account, Name>> names = (List<Pair<Account, Name>>) message.getValue();
for(Pair<Account, Name> name: names)
{
this.addElement(name.getB());
}
//RESET SELECTED ITEM
if(this.getIndexOf(selected) != -1)
{
this.setSelectedItem(selected);
}
}*/
}
public void onDataChanged()
{
//GET SELECTED ITEM
Name selected = (Name) this.getSelectedItem();
//EMPTY LIST
this.removeAllElements();
//INSERT ALL ACCOUNTS
for(Pair<Tuple2<String, String>, BigDecimal> entry: this.nameSales)
{
NameSale nameSale = new NameSale(entry.getA().b, entry.getB());
this.addElement(nameSale);
}
//RESET SELECTED ITEM
if(this.getIndexOf(selected) != -1)
{
this.setSelectedItem(selected);
}
}
}