package ru.gazprom.gtnn.minos.models;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import ru.gazprom.gtnn.minos.entity.PersonNode;
import ru.gazprom.gtnn.minos.entity.RoundActorsNode;
import ru.gazprom.gtnn.minos.util.DatabaseConnectionKeeper;
import ru.gazprom.gtnn.minos.util.TableKeeper;
import com.google.common.base.Preconditions;
import com.google.common.cache.LoadingCache;
public class RoundActorsTableModel implements TableModel{
public RoundActorsTableModel(DatabaseConnectionKeeper kdb,
LoadingCache<Integer, RoundActorsNode> cacheRoundActors,
LoadingCache<Integer, PersonNode> cachePerson,
String sqlLoadRoundActorsIDs,
String pattern) {
this.cacheRoundActors = cacheRoundActors;
this.cachePerson = cachePerson;
this.sqlLoadRoundActorsIDs = sqlLoadRoundActorsIDs;
this.pattern = pattern;
this.kdb = kdb;
lstRounActorsIDs = Collections.emptyList();
}
@Override
public Class<?> getColumnClass(int arg) {
return String.class;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int columnIndex) {
return columnIndex == 0 ? "�������" : "�����������";
}
@Override
public int getRowCount() {
return lstRounActorsIDs.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Preconditions.checkState( (0 <= rowIndex) && (rowIndex < lstRounActorsIDs.size()),
"RoundActorsTableModel.getValueAt() : rowIndex out of bounds");
String result = "not found";
try {
RoundActorsNode nodeActors = cacheRoundActors.get(lstRounActorsIDs.get(rowIndex));
PersonNode nodePerson = (columnIndex == 0 ? cachePerson.get(nodeActors.roundActorsMinosID)
: cachePerson.get(nodeActors.roundActorsSinnerID));
result = nodePerson.personSurname + " " + nodePerson.personName + " " + nodePerson.personPatronymic;
} catch (Exception e) {
result = "not found";
e.printStackTrace();
}
return result;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
}
@Override
public void addTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
public RoundActorsNode getActors(int rowIndex) {
Preconditions.checkState( (0 <= rowIndex) && (rowIndex < lstRounActorsIDs.size()),
"RoundActorsTableModel.getActors() : rowIndex out of bounds");
RoundActorsNode node = null;
try {
node = cacheRoundActors.get(lstRounActorsIDs.get(rowIndex));
} catch (Exception e) {
e.printStackTrace();
node = null;
}
return node;
}
public void load(int roundID) {
if( (lstRounActorsIDs != null) && (lstRounActorsIDs.size() > 0) ) {
lstRounActorsIDs.clear();
lstRounActorsIDs = Collections.emptyList();
cacheRoundActors.cleanUp();
}
try {
String request = kdb.makeSQLString(sqlLoadRoundActorsIDs, pattern, String.valueOf(roundID));
Preconditions.checkNotNull(request, "RoundActorsTableModel.load() : makeSQLString return null");
TableKeeper tk = kdb.selectRows(request);
if( (tk == null) || (tk.getRowCount() <= 0) ) {
lstRounActorsIDs = Collections.emptyList();
return;
}
Preconditions.checkState(tk.getColumnCount() == 1,
"RoundActorsTableModel.load() : selectRows() return incorrect column count (" + tk.getColumnCount() + ")");
lstRounActorsIDs = new ArrayList<>();
for(int i = 1; i <= tk.getRowCount(); i++) {
lstRounActorsIDs.add((Integer)tk.getValue(i, 1));
}
cacheRoundActors.getAll(lstRounActorsIDs);
} catch(Exception e) {
e.printStackTrace();
lstRounActorsIDs = Collections.emptyList();
}
}
private List<Integer> lstRounActorsIDs;
private LoadingCache<Integer, RoundActorsNode> cacheRoundActors;
private LoadingCache<Integer, PersonNode> cachePerson;
private String sqlLoadRoundActorsIDs;
private String pattern;
private DatabaseConnectionKeeper kdb;
}