package com.dedupeer.gui.component.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import javax.swing.table.AbstractTableModel;
import com.dedupeer.navigation.DFile;
import com.dedupeer.navigation.Navigable;
/**
* @author Paulo Fernando (pf@paulofernando.net.br)
*/
public class StoredFileDataModel extends AbstractTableModel implements Observer {
private List<Navigable> navigablesList = new ArrayList<Navigable>();
private static final long serialVersionUID = 6620911388379308486L;
private String[] columnNames = {"File", "Progress", "Storage economy"};
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return navigablesList.size();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
};
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Navigable dFile = navigablesList.get(rowIndex);
if(dFile == null) return null;
switch(columnIndex) {
case Navigable.NAME:
return dFile.getName();
case Navigable.PROGRESS:
return dFile.getProgressInfo();
case DFile.ECONOMY:
return dFile.getStorageEconomy();
}
return null;
}
public List<Navigable> getStoredFileList() {
return navigablesList;
}
/**
* Retrieves the list of the StoredFiles that still was not calculated the economy
* @return List with the StoredFiles that still was not calculated the economy
*/
public List<Navigable> getStoredFileWithoutEconomyCalculated() {
List<Navigable> listWithoutEconomyCalculated = new ArrayList<Navigable>();
for(Navigable sf: navigablesList) {
if((sf.getStorageEconomy() == null) || (sf.getStorageEconomy().equals(""))) {
listWithoutEconomyCalculated.add(sf);
}
}
return listWithoutEconomyCalculated;
}
public Navigable getStoredFileByRow(int row) {
return navigablesList.get(row);
}
public void addNavigable(Navigable navigable) {
if(navigable instanceof DFile) {
((DFile)(navigable)).addObserver(this);
}
navigablesList.add(navigable);
fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
}
public void removeStoredFile(DFile backup, int row) {
navigablesList.remove(row);
fireTableRowsDeleted(row, row);
}
public void removeAllStoredFiles() {
int size = navigablesList.size();
if(size > 0) {
navigablesList.clear();
fireTableRowsDeleted(0, size - 1);
}
}
@Override
public void update(Observable observable, Object obj) {
int row = navigablesList.indexOf(observable);
if(row >= 0)
fireTableRowsUpdated(row, row);
}
public void updateAll() {
fireTableStructureChanged();
}
}