/** * */ package org.hyperdata.scute.validate; import java.awt.Color; import java.io.StringReader; import java.io.IOException; import org.openjena.atlas.io.IndentedLineBuffer; import org.openjena.atlas.io.IndentedWriter; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.sparql.ARQException; import com.hp.hpl.jena.sparql.algebra.Algebra; import com.hp.hpl.jena.sparql.algebra.Op; import com.hp.hpl.jena.sparql.serializer.SerializationContext; import javax.swing.text.*; import com.hp.hpl.jena.rdf.arp.ARP; import org.hyperdata.scute.status.StatusEvent; import org.hyperdata.scute.status.StatusMonitor; import org.hyperdata.scute.system.Log; /** * The Class ValidatableRDFXMLDocument. * * @author danny * * Wrapper around a Document with a method to validate contained SPARQL * syntax * * (the method will usually be called automatically by a * org.hyperdata.scute.validate.Validator) */ public class ValidatableSparqlDocument implements Validatable { private Document document; private String text; /** * Instantiates a new validatable rdfxml document. * * @param document * the document */ public ValidatableSparqlDocument(Document document) { this.document = document; } /* * (non-Javadoc) * * @see org.hyperdata.scute.validate.Validatable#validate() */ @Override public StatusEvent validate() throws InterruptedException { StatusEvent statusEvent = null; try { text = document.getText(0, document.getLength()); } catch (BadLocationException exception) { // unlucky! return new StatusEvent(StatusMonitor.RED, exception.getMessage()); } statusEvent = parseString(text); return statusEvent; } /** * Parses the string. * * @param text * the text * @return the status event */ public StatusEvent parseString(String queryString) { Query query = null; StatusEvent statusEvent = null; try { query = QueryFactory.create(queryString); System.out.println("DESCRIBE="+query.isDescribeType()); statusEvent = new StatusEvent(StatusMonitor.GREEN, ""); } catch (Exception exception) { String message = exception.getMessage(); statusEvent = new StatusEvent(StatusMonitor.RED, exception.getMessage(), true); if (statusEvent.getLine() > -1) { // highlightError(statusEvent); // doesn't work - because of // doc-level styling..? } } return statusEvent; } /** * @param statusEvent */ private void highlightError(StatusEvent statusEvent) { int location = DocUtils.getLocation(text, statusEvent.getLine(), statusEvent.getColumn()); // ((StyledDocument)document).putProperty("flag", location); couldn't // get that to work System.out.println("LOCATION=" + location); MutableAttributeSet attributes = new SimpleAttributeSet(); // or this... StyleConstants.setBackground(attributes, Color.red); ((StyledDocument) document).setCharacterAttributes(location, 1, attributes, false);// } }