com.alee.extended.filechooser.WebFileTableModel Maven / Gradle / Ivy
/*
* This file is part of WebLookAndFeel library.
*
* WebLookAndFeel library is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* WebLookAndFeel library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WebLookAndFeel library. If not, see .
*/
package com.alee.extended.filechooser;
import com.alee.managers.language.LM;
import com.alee.utils.CollectionUtils;
import com.alee.utils.FileUtils;
import javax.swing.table.AbstractTableModel;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* {@link javax.swing.table.TableModel} implementation for {@link WebFileTable}.
*
* @author Mikle Garin
*/
public class WebFileTableModel extends AbstractTableModel implements FileTableColumns
{
/**
* List of displayed column ids.
*/
private List columns;
/**
* List of displayed files.
*/
private final List files;
/**
* Constructs empty model with default displayed columns.
*/
public WebFileTableModel ()
{
this ( new ArrayList (), CollectionUtils.copy ( DEFAULT_COLUMNS ) );
}
/**
* Constructs empty model with specified displayed columns.
*
* @param columns columns to display
*/
public WebFileTableModel ( final String... columns )
{
this ( new ArrayList (), CollectionUtils.asList ( columns ) );
}
/**
* Constructs empty model with specified displayed columns.
*
* @param columns columns to display
*/
public WebFileTableModel ( final List columns )
{
this ( new ArrayList (), columns );
}
/**
* Constructs model with specified displayed columns and files.
*
* @param files files to display
*/
public WebFileTableModel ( final Collection files )
{
this ( files, CollectionUtils.copy ( DEFAULT_COLUMNS ) );
}
/**
* Constructs model with specified displayed columns and files.
*
* @param files files to display
* @param columns columns to display
*/
public WebFileTableModel ( final Collection files, final String... columns )
{
this ( files, CollectionUtils.asList ( columns ) );
}
/**
* Constructs model with specified displayed columns and files.
*
* @param files files to display
* @param columns columns to display
*/
public WebFileTableModel ( final Collection files, final List columns )
{
super ();
this.columns = columns;
this.files = new ArrayList ( files );
}
/**
* Sets displayed files.
*
* @param files files to display
*/
public void setFiles ( final Collection files )
{
this.files.clear ();
this.files.addAll ( files );
fireTableDataChanged ();
}
/**
* Adds displayed files.
*
* @param files files to display
*/
public void addFiles ( final Collection files )
{
if ( files.size () > 0 )
{
final int lastIndex = this.files.size ();
this.files.addAll ( files );
fireTableRowsInserted ( lastIndex, lastIndex + files.size () - 1 );
}
}
/**
* Returns index of row with the specified file.
*
* @param file file to find
* @return index of row with the specified file
*/
public int getFileRow ( final File file )
{
return files.indexOf ( file );
}
/**
* Returns file for the specified row.
*
* @param row row to process
* @return file for the specified row
*/
public File getFileAtRow ( final int row )
{
return files.get ( row );
}
/**
* Sets displayed column ids list.
*
* @param columns displayed column ids list
*/
public void setColumns ( final List columns )
{
this.columns = columns;
fireTableStructureChanged ();
}
/**
* Returns column id at the specified index.
*
* @param column column index
* @return column id at the specified index
*/
public String getColumnId ( final int column )
{
return columns.get ( column );
}
/**
* Returns whether the specified column is displayed or not.
*
* @param column column to process
* @return true if the specified column is displayed, false otherwise
*/
public boolean isColumnDisplayed ( final String column )
{
return columns.contains ( column );
}
/**
* Returns index of the specified column.
*
* @param column column to process
* @return index of the specified column
*/
public int getColumnIndex ( final String column )
{
return columns.indexOf ( column );
}
@Override
public String getColumnName ( final int column )
{
return LM.get ( columns.get ( column ) );
}
@Override
public int getRowCount ()
{
return files.size ();
}
@Override
public int getColumnCount ()
{
return columns.size ();
}
@Override
public Object getValueAt ( final int rowIndex, final int columnIndex )
{
return files.get ( rowIndex );
}
@Override
public void setValueAt ( final Object aValue, final int rowIndex, final int columnIndex )
{
files.set ( rowIndex, ( File ) aValue );
}
@Override
public Class> getColumnClass ( final int columnIndex )
{
return File.class;
}
@Override
public boolean isCellEditable ( final int rowIndex, final int columnIndex )
{
return getColumnId ( columnIndex ).equals ( NAME_COLUMN ) && FileUtils.isNameEditable ( getFileAtRow ( rowIndex ) );
}
}