package jeql.monitor;
import java.util.ArrayList;
import java.util.List;
import jeql.monitor.MonitorRowList.MonitorRowIterator;
import com.vividsolutions.jts.util.Stopwatch;
public class MonitorModel
{
public static String lineDisplay(int line)
{
//return "(line " + line + ") ";
return line + " : ";
}
private Stopwatch sw = new Stopwatch();
private List<MonitorItem> items = new ArrayList<MonitorItem>();
public MonitorModel() {
}
public List<MonitorItem> getItems()
{
return items;
}
public MonitorItem getItem(int i)
{
return items.get(i);
}
public void add(MonitorRowIterator mri)
{
MonitorRowList mrl = mri.getRowList();
// find location of mrl, or insert new mrl at appropriate location
int i = findIndex(mrl);
if (i < 0) {
MonitorItem mi = new MonitorItem(mrl, mri);
items.add(mi);
}
else {
// i is index of existing mrl, or location to insert new one
MonitorItem mi = items.get(i);
if (mi.isEqual(mrl)) {
mi.setIterator(mri);
}
else {
mi = new MonitorItem(mrl, mri);
items.add(i, mi);
}
}
}
private int findIndex(MonitorRowList mrl)
{
for (int i = 0; i < items.size(); i++) {
MonitorItem mi = items.get(i);
if (mi.isEqual(mrl)) return i;
// found location in script line order
if (mi.getLine() > mrl.getLine()) return i;
}
return -1;
}
public void update()
{
rowTotal = 0;
for (int i = 0; i < items.size(); i++) {
MonitorItem mi = items.get(i);
mi.updateActive();
rowTotal += mi.getTotalRowCount();
}
}
public void stop()
{
sw.stop();
}
private long rowTotal = 0;
public long getRowTotal()
{
return rowTotal;
}
public long getTime()
{
return sw.getTime();
}
public String getTimeString()
{
return sw.getTimeString();
}
public String scriptView()
{
rowTotal = 0;
try {
StringBuilder sb = new StringBuilder();
for (MonitorItem mi : items) {
sb.append(mi.toString());
sb.append("\n");
rowTotal += mi.getTotalRowCount();
}
return sb.toString();
}
catch (Exception ex) {
return ex.toString();
}
}
}