
package tmcsim.client.cadclientgui.data;

import java.util.ArrayList;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import junit.framework.TestCase;
import static junit.framework.TestCase.assertTrue;

/**
 * Test of CADData tableForUnitStatus()
 * @author jdalbey
 */
public class CADDataConcurrencyTest extends TestCase {
    private Vector<Unit> units;
    private Unit alpha;
    public CADDataConcurrencyTest(String testName) {
        super(testName);
    }
    
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        units = new Vector<Unit>();
        alpha = new Unit("14-1");
        units.add(alpha);
        units.add(new Unit("14-2"));
        units.add(new Unit("14-3"));
        units.add(new Unit("14-4"));
        units.add(new Unit("14-5"));
    }
    
    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
        System.out.println("Tearing down");
        try
        {
            Thread.sleep(100);
        }
        catch(InterruptedException e)
        { ; }        
    }

 
    public void testThreads()
    {
        System.out.println("Testing tableForUnitStatus()");
        CADData caddata = new CADData();
        caddata.setUnitsFromXML(units); // add 5 units
        caddata.addIncident(new Incident(101,"Desc", 10L));
        String unitNum = "14-1";
        caddata.unitAssignedToIncident(unitNum, 101, true);
        caddata.unitAvailable(unitNum);
        Threadserve ts1=new Threadserve(caddata, "A");
        Threadserve ts2=new Threadserve(caddata, "B");
        Threadserve ts3=new Threadserve(caddata, "C");
        DefaultTableModel m = caddata.tableForUnitStatus();
        assertEquals("main Incorrect Row Count:",5,m.getRowCount());
    }

    class Threadserve implements Runnable
    {
        private CADData caddata;
        private String id;
        private Thread th;
        Threadserve(CADData caddata, String id)
        {
            this.caddata = caddata;
            this.id = id;
            th=new Thread(this);
            th.start();
        }
        public void run()
        {       
          //System.out.println("Start "+ id);
          DefaultTableModel m = caddata.tableForUnitStatus();
          int loopLimit = m.getRowCount();
          assertEquals(id + " Incorrect Row Count:"+loopLimit,5,loopLimit);
        }
    }    
}
