package no.ugland.utransprod.gui;
import java.awt.Component;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import no.ugland.utransprod.gui.handlers.TransportWeekViewHandler;
import no.ugland.utransprod.model.ProductAreaGroup;
import no.ugland.utransprod.model.Transport;
import no.ugland.utransprod.util.YearWeek;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
/**
* Klasse som h�ndterer visning av transportruter for et gitt �r og uke
* @author atle.brekka
*/
public class TransportWeekView {
private YearWeek routeDate;
private List<Transport> transportList;
private TransportWeekViewHandler viewHandler;
private JButton buttonAddTransport;
private JPanel panelTransport;
private JPanel panelTransportMain;
private JButton buttonRemoveTransport;
private JButton buttonEditTransport;
private WindowInterface currentWindow;
private ProductAreaGroup productAreaGroup;
public TransportWeekView(final YearWeek aRouteDate, final TransportWeekViewHandler aHandler,
final ProductAreaGroup aProductAreaGroup) {
productAreaGroup = aProductAreaGroup;
viewHandler = aHandler;
routeDate = aRouteDate;
}
/**
* Initierer komponenter
* @param window
*/
private void initComponents(final WindowInterface window) {
transportList = viewHandler.getTransportList(routeDate, productAreaGroup);
buttonAddTransport = viewHandler.getButtonAddTransport(window);
buttonRemoveTransport = viewHandler.getButtonRemoveTransport(window);
buttonRemoveTransport.setEnabled(false);
buttonEditTransport = viewHandler.getButtonEditTransport(window);
panelTransportMain = buildTransportMain();
}
/**
* Lager panel for transportvindu
* @return panel
*/
private JPanel buildTransportMain() {
FormLayout layout = new FormLayout("fill:p:grow", "p:grow");
PanelBuilder builder = new PanelBuilder(layout);
return builder.getPanel();
}
/**
* Bygger panel.
* @param window
* @return panel
*/
public final Component buildPanel(final WindowInterface window) {
currentWindow = window;
initComponents(window);
initEventHandling();
FormLayout layout = new FormLayout("fill:250dlu:grow", "fill:270dlu:grow,3dlu,p");
// PanelBuilder builder = new PanelBuilder(layout,new FormDebugPanel());
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
panelTransport = buildTransportPanel(window);
panelTransportMain.add(panelTransport, cc.xy(1, 1));
JScrollPane scrollPaneTransport = new JScrollPane(panelTransportMain);
scrollPaneTransport.setName("ScrollPaneTransport");
builder.add(scrollPaneTransport, cc.xy(1, 1));
builder.add(ButtonBarFactory.buildCenteredBar(buttonAddTransport, buttonEditTransport,
buttonRemoveTransport), cc.xy(1, 3));
return builder.getPanel();
}
/**
* Bygger panel for visning av transportruter
* @param window
* @return panel
*/
private JPanel buildTransportPanel(final WindowInterface window) {
return viewHandler.useListView() ? buildTransportPanelList()
: buildTransportPanelTransports(window);
}
private JPanel buildTransportPanelTransports(final WindowInterface window) {
FormLayout layout = new FormLayout("fill:p:grow", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
int number = 0;
for (Transport transport : transportList) {
number++;
builder.append(viewHandler.getTransportView(transport).buildPanel(window, number,
productAreaGroup));
}
builder.nextLine();
return builder.getPanel();
}
private JPanel buildTransportPanelList() {
return viewHandler.getTransportListView().buildPanel(productAreaGroup);
}
/**
* Initierer hendelseh�ndtering
*/
private void initEventHandling() {
viewHandler.addListDataListener(new TransportListListener());
}
/**
* Endring av uke og �r.
* @param newYear
*/
public final void changeWeek(final Integer newYear) {
if (newYear != null) {
routeDate.setYear(newYear);
}
viewHandler.clear();
ProductAreaGroup group = null;
if (!productAreaGroup.getProductAreaGroupName().equalsIgnoreCase("Alle")) {
group = productAreaGroup;
}
transportList = viewHandler.getTransportList(routeDate, group);
panelTransportMain.remove(panelTransport);
panelTransport = buildTransportPanel(currentWindow);
CellConstraints cc = new CellConstraints();
panelTransportMain.add(panelTransport, cc.xy(1, 1));
panelTransportMain.repaint();
panelTransportMain.validate();
panelTransportMain.getParent().repaint();
panelTransportMain.getParent().validate();
}
/**
* Klasse som lytter p� endring av data
* @author atle.brekka
*/
final class TransportListListener implements ListDataListener {
/**
* @see javax.swing.event.ListDataListener#contentsChanged(javax.swing.event.ListDataEvent)
*/
public void contentsChanged(final ListDataEvent arg0) {
changeWeek(null);
}
/**
* @see javax.swing.event.ListDataListener#intervalAdded(javax.swing.event.ListDataEvent)
*/
public void intervalAdded(final ListDataEvent arg0) {
changeWeek(null);
}
/**
* @see javax.swing.event.ListDataListener#intervalRemoved(javax.swing.event.ListDataEvent)
*/
public void intervalRemoved(final ListDataEvent arg0) {
changeWeek(null);
}
}
/**
* Henter ut anatll transporter
* @return antall
*/
public final int getNumberOfTransport() {
return transportList.size();
}
public final void setProductAreaGroup(final ProductAreaGroup aProductAreaGroup) {
this.productAreaGroup = aProductAreaGroup;
}
}