/**
*
*/
package org.hyperdata.scute.sparql.table;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFactory;
import com.hp.hpl.jena.query.ResultSetRewindable;
import com.hp.hpl.jena.rdf.model.RDFNode;
import org.hyperdata.scute.rdf.RdfUtils;
import org.hyperdata.scute.system.Log;
public class ResultSetTableModel extends AbstractTableModel {
private ResultSetRewindable resultSet;
private List<String> columnNames;
private List<QuerySolution> results = new ArrayList<QuerySolution>();
public ResultSetTableModel(ResultSet resultSetRaw){
super();
this.resultSet = ResultSetFactory.copyResults(resultSetRaw); // just in case...
columnNames = resultSet.getResultVars();
while(resultSet.hasNext()){
results.add(resultSet.next());
}
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getColumnCount()
*/
@Override
public int getColumnCount() {
return columnNames.size();
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getColumnName(int)
*/
@Override
public String getColumnName(int i) {
// System.out.println("NAME="+columnNames.get(i));
return columnNames.get(i);
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getRowCount()
*/
@Override
public int getRowCount() {
if(results == null){
return 0; // on init
}
return results.size();
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
@Override
public Object getValueAt(int row, int column) {
QuerySolution solution =null;
try { // spurious...
solution = results.get(row);
}catch(Exception exception){
Log.exception(exception);
return "error!";
}
RDFNode node = solution.get(getColumnName(column));
if(node == null){
return "";
}
return RdfUtils.nodeToDisplayString(node);
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#isCellEditable(int, int)
*/
@Override
public boolean isCellEditable(int arg0, int arg1) {
return true; // might want to copy
}
/**
*
*/
public void clear() {
results.clear();
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
*/
// @Override
// public void setValueAt(Object arg0, int arg1, int arg2) {
// // TODO Auto-generated method stub
//
// }
}