package com.traxel.lumbermill.event;
import com.traxel.lumbermill.filter.FilterSetControl;
import com.traxel.lumbermill.log.LogControl;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.JMenu;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class TableControl implements ListSelectionListener {
public static final String FIRST_SELECTED_EVENT = "First Selected Event";
public static final String LAST_SELECTED_EVENT = "Last Selected Event";
private final LogControl LOG_CONTROL = new LogControl();
private final FilterSetControl FILTER_SET_CONTROL = new FilterSetControl();
private final ColumnSetControl COLUMN_SET_CONTROL = new ColumnSetControl();
private final TableView TABLE_VIEW = new TableView(LOG_CONTROL.getLog(),
FILTER_SET_CONTROL.getFilterSet(),
COLUMN_SET_CONTROL.getColumnSet());
private final TableStatus TABLE_STATUS = new TableStatus();
private final Set LISTENERS = Collections.synchronizedSet(new HashSet());
private Event _previousFirst;
private Event _previousLast;
{
final ListSelectionModel model;
model = getView().getSelectionModel();
model.addListSelectionListener(this);
}
return TABLE_VIEW;
}
return LOG_CONTROL;
}
return FILTER_SET_CONTROL;
}
return TABLE_STATUS;
}
return COLUMN_SET_CONTROL.getMenu();
}
@Override
setElapsed();
}
LISTENERS.add(l);
}
return TABLE_VIEW.getFirstSelectedEvent();
}
return TABLE_VIEW.getLastSelectedEvent();
}
boolean change = false;
final Event newFirst = getFirstSelectedEvent();
final Event newLast = getLastSelectedEvent();
if ((newFirst != _previousFirst) && (newFirst != null)) {
change = true;
firePropertyChange(FIRST_SELECTED_EVENT,
_previousFirst,
newFirst);
_previousFirst = newFirst;
}
if ((newLast != _previousLast) && (newLast != null)) {
change = true;
firePropertyChange(LAST_SELECTED_EVENT,
_previousLast,
newLast);
_previousLast = newLast;
}
if (change) {
TABLE_STATUS.setElapsed(newFirst, newLast);
}
}
private void firePropertyChange(
final String property,
final Object oldValue,
final Object newValue) {
synchronized (LISTENERS) {
final Iterator it;
PropertyChangeListener listener;
final PropertyChangeEvent event;
event = new PropertyChangeEvent(this, property, oldValue, newValue);
it = LISTENERS.iterator();
while (it.hasNext()) {
listener = (PropertyChangeListener)it.next();
listener.propertyChange(event);
}
}
}
}