/*
* Copyright 2009-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jdal.swing.table;
import java.awt.Dimension;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import org.jdal.logic.CollectionPersistenceService;
import org.jdal.swing.AbstractView;
import org.jdal.swing.GuiFactory;
import org.jdal.swing.ListTableModel;
import org.jdal.swing.PageableTable;
import org.jdal.swing.SimpleDialog;
import org.springframework.beans.factory.annotation.Autowired;
/**
* View for showing Lists in a TablePanel
*
* @author Jose Luis Martin - (jlm@joseluismartin.info)
*/
public class TableListView<T> extends AbstractView<List<T>> {
private TablePanel<T> table;
private CollectionPersistenceService<T, Serializable> dataSource = new CollectionPersistenceService<T, Serializable>();
private String tableName;
@Autowired
private GuiFactory guiFactory;
public TableListView() {
this(new ArrayList<T>());
}
public TableListView(List<T> model) {
super(model);
}
public TableListView(String tableName) {
this();
this.tableName = tableName;
}
@SuppressWarnings("unchecked")
public void init() {
if (guiFactory != null && tableName != null) {
table = (TablePanel<T>) guiFactory.getObject(tableName);
table.setPersistentService(dataSource);
}
}
/**
* {@inheritDoc}
*/
@Override
protected JComponent buildPanel() {
if (table == null)
buildTable();
return table;
}
private void buildTable() {
table = new TablePanel<T>();
PageableTable<T> pageableTable = new PageableTable<T>();
ListTableModel ltm = new ListTableModel();
ltm.setUsingIntrospection(true);
pageableTable.setTableModel(ltm);
pageableTable.init();
table.setTable(pageableTable);
table.setPersistentService(dataSource);
table.init();
}
@Override
public void onSetModel(List<T> model) {
if (model != null && table != null) {
dataSource.setCollection(model);
table.getTable().getPaginator().firstPage();
}
}
public static void main(String[] args) {
TableListView<Object> v = new TableListView<Object>();
SimpleDialog dlg = new SimpleDialog(v.getPanel());
dlg.setSize(new Dimension(1024, 800));
dlg.setVisible(true);
}
/**
* @return the guiFactory
*/
public GuiFactory getGuiFactory() {
return guiFactory;
}
/**
* @param guiFactory the guiFactory to set
*/
public void setGuiFactory(GuiFactory guiFactory) {
this.guiFactory = guiFactory;
}
}