/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.directory.editors;
import cli_fmw.delegate.directory.simple.DirectorySimple;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.utils.MessageBox;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.Selector;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
/**
*
* @author vip
*/
public class TableModelDirectoryEdit extends AbstractTableModel{
public static final int COLCOUNT = 5;
public static final int COL_ID = 0;
public static final int COL_TITLE = 1;
public static final int COL_EXT_CODE = 2;
public static final int COL_DIRTY = 3;
public static final int COL_TRASH = 4;
DirectorySimple directory;
String filter;
ArrayList<DirectorySimpleItem> itemList = new ArrayList<DirectorySimpleItem>();
public TableModelDirectoryEdit(DirectorySimple directory, String filter) throws ClipsException {
this.directory = directory;
this.filter = filter;
itemList.clear();
if (directory != null) {
Selector iie = directory.getItems();
for (int i = 0; i < iie.size(); i++) {
DirectorySimpleItem item = (DirectorySimpleItem) iie.get(i);
if (satisfyFilter(item)) {
itemList.add(item);
}
}
}
}
@Override
public int getRowCount() {
return itemList.size();
}
@Override
public int getColumnCount() {
return COLCOUNT;
}
@Override
public String getColumnName(int col) {
switch (col) {
case COL_ID : return "ID";
case COL_TITLE: return "Наименование";
case COL_EXT_CODE: return "Внешний ключ";
case COL_DIRTY: return "Новая запись";
case COL_TRASH: return "Удален";
}
return null;
}
@Override
public Class<?> getColumnClass(int col) {
if (col == COL_DIRTY || col == COL_TRASH) {
return Boolean.class;
}
return super.getColumnClass(col);
}
@Override
public Object getValueAt(int row, int col) {
switch (col) {
case COL_ID : return itemList.get(row).getID();
case COL_TITLE: return itemList.get(row).getTitle();
case COL_EXT_CODE: return itemList.get(row).getExtKey();
case COL_DIRTY: return itemList.get(row).getDirty();
case COL_TRASH: return !itemList.get(row).isVisible();
default: return null;
}
}
public DirectorySimpleItem getItemAt(int row) {
return itemList.get(row);
}
@Override
public boolean isCellEditable(int row, int col) {
if (itemList.get(row).getID() == 0) {
return false;
}
if (col == COL_ID) {
return false;
}
return true;
}
@Override
public void setValueAt(Object value, int row, int col) {
try {
switch (col) {
case COL_TITLE: {
itemList.get(row).setTitle((String) value);
break;
}
case COL_EXT_CODE: {
itemList.get(row).setExtKey((String) value);
break;
}
case COL_DIRTY: {
itemList.get(row).setDirty((Boolean) value);
break;
}
case COL_TRASH: {
itemList.get(row).setVisible(!(Boolean) value);
break;
}
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
/**
* возвращает индекс в соответствии с фильтром
* @param index
* @return
*/
private DirectorySimpleItem getItemByIndex(int index) throws ClipsException {
/*SelectorEditable iie = directory.getItems();
int count = -1;
for (int i = 0; i < iie.size(); i++) {
DirectorySimpleItem item = (DirectorySimpleItem) iie.get(i);
if (satisfyFilter(item)) {
count++;
}
if (count == index) {
return item;
}
}*/
return itemList.get(index);
// throw new ClipsException("Неизвестный элемент справичника с фильтром",ex);
}
private boolean satisfyFilter(DirectorySimpleItem item) {
return item.getTitle().indexOf(filter) >= 0;
}
}