package commons.ui.views.param;
import java.awt.Component;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.swing.Box;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import basics.application.Binder;
import commons.application.ctx.Context;
import commons.ui.toolbox.GU;
public class ParamView
{

int    SCR_W, SCR_H;
JTable table = new JTable(new DefaultTableModel());

public ParamView(Dimension size)
{
   SCR_W = (int) size.getWidth();
   SCR_H = (int) size.getHeight();
}

public Box getView ()
{
   JScrollPane pane = GU.tablepane(new String[] { "type", "key", "value" }, table, null, null);
   GU.size(pane, SCR_W, SCR_H);
   GU.defaultborder(pane);
   return GU.hbox(new Component[] { pane });
}

/**
 * Notification comes when a context parameter has changed (set, unset, etc). This will refresh the
 * context parameters table.
 */
public void fireCtxHasChanged (Context ctx)
{
   try
   {
      Object[] rowObject = new Object[3];
      DefaultTableModel tm = (DefaultTableModel) table.getModel();
      while (tm.getRowCount() > 0)
         tm.removeRow(0);
      {
         List<String> keylist = new ArrayList<String>();
         for (Iterator<String> I = ctx.keyIterator(); I.hasNext();)
            keylist.add(I.next());
         Collections.sort(keylist);
         for (String k : keylist)
         {
            rowObject[0] = "ctx";
            rowObject[1] = k;
            rowObject[2] = ctx.getr(k);
            tm.addRow(rowObject);
         }
      }
      {
         for (Iterator<String> I = Binder.bindingNamesIterator(); I.hasNext();)
         {
            String k = I.next();
            rowObject[0] = "bean (named)";
            rowObject[1] = k;
            rowObject[2] = Binder.createNew(k).getClass().getName();
            tm.addRow(rowObject);
         }
      }
      {
         for (Iterator<Class<?>> I = Binder.autoBoundClassesIterator(); I.hasNext();)
         {
            Class k = I.next();
            rowObject[0] = "bean (auto)";
            rowObject[1] = k;
            rowObject[2] = Binder.createNew(k).getClass().getName();
            tm.addRow(rowObject);
         }
      }
      {
         List<String> keylist = new ArrayList<String>();
         for (Iterator<Object> I = ctx.getAutoBoundBeans().iterator(); I.hasNext();)
            keylist.add(I.next().toString());
         Collections.sort(keylist);
         for (String k : keylist)
         {
            rowObject[0] = "bean";
            rowObject[1] = "auto";
            rowObject[2] = k;
            tm.addRow(rowObject);
         }
      }
      {
         List<String> keylist = new ArrayList<String>();
         for (Iterator<String> I = ctx.env().keySet().iterator(); I.hasNext();)
            keylist.add(I.next());
         Collections.sort(keylist);
         for (String k : keylist)
         {
            rowObject[0] = "env";
            rowObject[1] = k;
            rowObject[2] = ctx.env().get(k);
            tm.addRow(rowObject);
         }
      }
   }
   catch (Throwable e)
   {
      e.printStackTrace();
   }
}
}
