package e4s.tutorial;

import java.util.Vector;

import e4s.html.*;
import e4s.html.ajax.E4AjaxTable;
import e4s.servlet.E4ModuleImplementation;
import e4s.servlet.E4ServletImplementation_Intf;
import e4s.translate.E4LabelNone;
import e4s.util.E4Long;

/**
 * Example for E4AjaxTable.
 *
 * {@tutorial Example_E4AjaxTable}
 */
public class Example_E4AjaxTable extends E4ModuleImplementation
{
   public static E4Method start;
   
   private static class SortableTest extends E4AjaxTable
   {
      private Vector m_data = new Vector();
      
      public SortableTest()
      {
         super("TEST");

         // define some behavior
         setEnableSorting(true);
         setEnableChangeColumnOrder(true);
         setPageSize(12);
         
         
         setCaption(new E4LabelNone("E4AjaxTable-Test"));
         defineColumn(new E4LabelNone("Alpha"),Align.CENTER);
         E4AjaxTableColumn cTwo = defineColumn(new E4LabelNone("Beta"),Align.CENTER);
         cTwo.setColspan(2);
         defineColumn(new E4LabelNone("Gamma"),Align.CENTER);
         
         // init test data
         init();
      }
      
      /**
       * Init some test data
       */
      private void init()
      {
         for( int i = 0; i < 200; i++ )
         {
            String s[] = new String[1 + 3 + 1];
            for( int k = 0; k < s.length; k++ )
               s[k] = E4Long.format( (int) (Math.random() * 10000),5 );
            m_data.addElement(s);
         }
      }

      /**
       * Draw the data for a given row/column.
       */
      public void getData(TD td, int row, int col, E4ServletImplementation_Intf servlet)
      {
         String s[] = (String[])m_data.elementAt(row);
         td.println(s[col]);
      }

      /**
       * Provide the number of rows
       */
      public int getNumRows()
      {
         return m_data.size();
      }
      
      /**
       * Provide a sort function
       */
      public void changeSort(int column, boolean ascending)
      {
         int sz = m_data.size();
         
         for( int ia = 0; ia < sz - 1; ia++ )
         {
            String a[] = (String[])m_data.elementAt(ia);

            for( int ib = ia + 1; ib < sz; ib++ )
            {
               String b[] = (String[])m_data.elementAt(ib);

               int c = a[column].compareTo(b[column]);
               
               if (ascending)
                  c *= -1;
         
               if (c > 0)
               {
                  m_data.setElementAt(a,ib);
                  m_data.setElementAt(b,ia);
                  a = b;
               }
            }
         }
      }
   }
 
   /**
    * Create the Ajax-Table object by binding it to the HTML context.
    */
   public void start(HTML html)
   {
      // instanciate inheritated object of E4AjaxTable object
      SortableTest tbl = new SortableTest();
      
      // add it to the HTML context
      E4AjaxElement ae = html.AjaxElement(tbl, getServlet());
      
      // must be shown initially
      ae.setShowOnLoad(true);
   }
}