package org.netomi.tracker.ui;
import java.util.Date;
import org.netomi.tracker.model.Satellite;
import org.netomi.tracker.service.SatelliteService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.vaadin.addons.lazyquerycontainer.EntityContainer;
import com.vaadin.ui.Table;
@Configurable(preConstruction = true)
public class SatelliteTable
extends Table {
private static final long serialVersionUID = -3668743563885962873L;
private final static Logger logger = LoggerFactory.getLogger(SatelliteTable.class);
@Autowired
private transient SatelliteService satService;
private EntityContainer<Satellite> entityContainer;
private static String[] visibleColumnIds = {
"catalogNumber", "commonName", "type", "designator", "country", "launchDate", "launchSite", "decayDate",
"period", "inclination", "apogee", "perigee", "rcs"
};
private static String[] visibleColumnLabels = {
"Catalog Number", "Common Name", "Sat Type", "Int. Designator", "Country", "Launch Date",
"Launch Site", "Decay Date", "Period", "Incl.", "Apogee", "Perigee", "Rcs"
};
public SatelliteTable() {
this(visibleColumnIds, visibleColumnLabels, 10);
}
public SatelliteTable(final String[] columnIds, final String[] columnLabels, int pageLength) {
entityContainer = new EntityContainer<Satellite>(satService.getEntityManager(), true, false, false,
Satellite.class, 100, new Object[] {
"catalogNumber", "commonName"
}, new boolean[] {
true, true
});
entityContainer.addContainerProperty("catalogNumber", Long.class, 0, true, true);
entityContainer.addContainerProperty("commonName", String.class, "", true, true);
entityContainer.addContainerProperty("type", String.class, "", true, true);
entityContainer.addContainerProperty("designator", String.class, "", true, true);
entityContainer.addContainerProperty("country", String.class, "", true, true);
entityContainer.addContainerProperty("launchDate", Date.class, null, true, true);
entityContainer.addContainerProperty("launchSite", String.class, "", true, true);
entityContainer.addContainerProperty("decayDate", Date.class, null, true, true);
entityContainer.addContainerProperty("period", Double.class, 0.0d, true, true);
entityContainer.addContainerProperty("inclination", Double.class, 0.0d, true, true);
entityContainer.addContainerProperty("apogee", Double.class, 0.0d, true, true);
entityContainer.addContainerProperty("perigee", Double.class, 0.0d, true, true);
entityContainer.addContainerProperty("rcs", Double.class, 0.0d, true, true);
// add a custom date formatter for the launch date and decay date
addGeneratedColumn("launchDate", new DateColumnGenerator());
addGeneratedColumn("decayDate", new DateColumnGenerator());
setPageLength(pageLength);
setContainerDataSource(entityContainer);
setVisibleColumns(columnIds);
setColumnHeaders(columnLabels);
String[] colAlignments = new String[columnIds.length];
for (int i = 0; i < colAlignments.length; i++) {
colAlignments[i] = Table.ALIGN_LEFT;
}
setColumnAlignments(colAlignments);
setEditable(false);
setMultiSelect(false);
setSelectable(true);
setWriteThrough(false);
}
public void refresh() {
if (logger.isDebugEnabled()) {
logger.debug("refreshing table");
}
entityContainer.refresh();
}
}