[TASK] Finalize pretty-printing csparql results
This commit is contained in:
parent
896fe022a8
commit
e22e41d4f3
|
@ -8,6 +8,7 @@ import java.awt.Insets;
|
|||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
import java.util.StringTokenizer;
|
||||
|
@ -22,6 +23,8 @@ import javax.swing.text.SimpleAttributeSet;
|
|||
import javax.swing.text.StyleConstants;
|
||||
import javax.swing.text.StyleContext;
|
||||
|
||||
import com.sun.xml.internal.ws.resources.TubelineassemblyMessages;
|
||||
|
||||
import eu.larkc.csparql.cep.api.RdfQuadruple;
|
||||
import eu.larkc.csparql.common.RDFTable;
|
||||
import eu.larkc.csparql.common.RDFTuple;
|
||||
|
@ -140,6 +143,7 @@ public class TextObserverWindow extends JFrame implements Observer {
|
|||
JCheckBox autoscrollCheckbox = new JCheckBox();
|
||||
autoscrollCheckbox.setText("Automatically scroll to bottom");
|
||||
autoscrollCheckbox.setEnabled(true);
|
||||
autoscrollCheckbox.setSelected(true);
|
||||
autoscrollCheckbox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
@ -201,29 +205,50 @@ public class TextObserverWindow extends JFrame implements Observer {
|
|||
}
|
||||
|
||||
/**
|
||||
* Method to actually print the results of a Csparql query
|
||||
* Method to actually pretty-print the results of a Csparql query
|
||||
* @param CsparqlQueryResultProxy result
|
||||
* @param RDFTable table
|
||||
*/
|
||||
private void showCsparqlQueryResult(CsparqlQueryResultProxy result, RDFTable table) {
|
||||
String queryTupleNames = table.getNames().toString();
|
||||
long currentTime = System.currentTimeMillis();
|
||||
Collection<String> tupleElementNames = table.getNames();
|
||||
Collection<RDFTuple> tuples = table.getTuples();
|
||||
this.showText(queryTupleNames, Color.BLACK);
|
||||
Color[] palette = this.getColorPaletteWithSize(table.getNames().size());
|
||||
this.showText("SystemTime=["+currentTime+"], Results=["+tuples.size()+"]", Color.BLACK);
|
||||
// Show names in according color coding
|
||||
this.showToken("Columns in order: [", Color.BLACK);
|
||||
Iterator<String> elementNamesIterator = tupleElementNames.iterator();
|
||||
int nameIndex = 0;
|
||||
while(elementNamesIterator.hasNext()) {
|
||||
String elementName = elementNamesIterator.next();
|
||||
if(elementName == "") elementName = "[NO VALUE]";
|
||||
if(elementNamesIterator.hasNext()) {
|
||||
elementName += ", ";
|
||||
}
|
||||
this.showToken(elementName, palette[nameIndex]);
|
||||
nameIndex++;
|
||||
}
|
||||
this.showText("]", Color.BLACK);
|
||||
for(RDFTuple tuple : tuples) {
|
||||
// This one is separated with \t. Due to the implementation of RDFTuple, it is
|
||||
// implossible to access the list of its fields directly. Sorry for the mess. :-(
|
||||
// impossible to access the list of its fields directly. Sorry for the mess. :-(
|
||||
String tupleString = tuple.toString();
|
||||
// Explode tupleString by \t and show each field with alternating color.
|
||||
StringTokenizer tokenizer = new StringTokenizer(tupleString);
|
||||
Color[] palette = this.getColorPaletteWithSize(tokenizer.countTokens());
|
||||
int tokenIndex = 0;
|
||||
while(tokenizer.hasMoreTokens()) {
|
||||
String token = tokenizer.nextToken()+"\t";
|
||||
String token = tokenizer.nextToken();
|
||||
if(token == "") token = "[NO VALUE]";
|
||||
if(tokenizer.hasMoreTokens()) {
|
||||
token += "\t";
|
||||
} else {
|
||||
token += "\n";
|
||||
}
|
||||
this.showToken(token, palette[tokenIndex]);
|
||||
tokenIndex++;
|
||||
}
|
||||
this.showText("\n", Color.BLACK);
|
||||
}
|
||||
this.showText("-------------------------------------------------------------------------------- \n", Color.BLACK);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue