You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2014/06/16 20:55:45 UTC

svn commit: r1602962 - in /jena/trunk/jena-arq/src: main/java/com/hp/hpl/jena/sparql/util/FmtUtils.java main/java/org/apache/jena/riot/out/SinkQuadBracedOutput.java test/java/com/hp/hpl/jena/sparql/util/TestFmtUtils.java

Author: andy
Date: Mon Jun 16 18:55:44 2014
New Revision: 1602962

URL: http://svn.apache.org/r1602962
Log:
JENA-713 : Improvements to FmtUtils to avoid StringBuilder churning.

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/FmtUtils.java
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/out/SinkQuadBracedOutput.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestFmtUtils.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/FmtUtils.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/FmtUtils.java?rev=1602962&r1=1602961&r2=1602962&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/FmtUtils.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/FmtUtils.java Mon Jun 16 18:55:44 2014
@@ -49,7 +49,7 @@ import com.hp.hpl.jena.vocabulary.XSD ;
 
 public class FmtUtils
 {
-    // OLD CODE - being replaced by riot.NodeFmtLib 
+    // OLD CODE - being replaced by riot.NodeFmtLib
     
     // Consider withdrawing non-serialzation context forms of this.
     // Or a temporary SerialzationContext does not abbreviate bNodes.
@@ -70,24 +70,42 @@ public class FmtUtils
     }
 
     // Formatting various items
-    public static String stringForTriple(Triple triple)
+    public static String stringForTriple( Triple triple )
     {
-        return
-            stringForNode(triple.getSubject())+" "+
-            stringForNode(triple.getPredicate())+" "+
-            stringForNode(triple.getObject()) ;
+        StringBuilder result = new StringBuilder();
+        stringForNode( result, triple.getSubject() );
+        result.append( " " );
+        stringForNode( result, triple.getPredicate() );
+        result.append( " " );
+        stringForNode( result, triple.getObject() );
+        return result.toString();
     }
     
-    
     public static String stringForTriple(Triple triple, PrefixMapping prefixMap)
     {
-        return
-            stringForNode(triple.getSubject(), prefixMap)+" "+
-            stringForNode(triple.getPredicate(), prefixMap)+" "+
-            stringForNode(triple.getObject(), prefixMap) ;
+        return stringForTriple(triple, sCxt(prefixMap)) ;
     }
     
-    // Formatting various items
+    public static String stringForTriple(Triple triple, SerializationContext sCxt)
+    {
+        StringBuilder result = new StringBuilder();
+        stringForTriple(result, triple, sCxt) ;
+        return result.toString();
+    }
+    
+    public static void stringForTriple(StringBuilder result, Triple triple, SerializationContext sCxt)
+    {
+        stringForNode(result, triple.getSubject(), sCxt );
+        result.append( " " );
+        stringForNode(result, triple.getPredicate(), sCxt );
+        result.append( " " );
+        stringForNode(result, triple.getObject(), sCxt );
+    }
+    
+    public static String stringForQuad(Quad quad, PrefixMapping prefixMap) {
+        return stringForQuad(quad, sCxt(prefixMap)) ;
+    }
+
     public static String stringForQuad(Quad quad)
     {
         StringBuilder sb = new StringBuilder() ;
@@ -98,94 +116,51 @@ public class FmtUtils
             sb.append(" ") ;
         }
         
-        sb.append(stringForNode(quad.getSubject())) ;
+        stringForNode(sb, quad.getSubject() );
         sb.append(" ") ;
-        sb.append(stringForNode(quad.getPredicate())) ;
+        stringForNode(sb, quad.getPredicate());
         sb.append(" ") ;
-        sb.append(stringForNode(quad.getObject())) ;
+        stringForNode(sb, quad.getObject());
         return sb.toString() ;
     }
     
+    public static String stringForQuad(Quad quad, SerializationContext sCxt) {
+        StringBuilder sb = new StringBuilder() ;
+        stringForQuad(sb, quad, sCxt) ;
+        return sb.toString() ;
+    }
     
-    public static String stringForQuad(Quad quad, PrefixMapping prefixMap)
+    public static void stringForQuad(StringBuilder sb, Quad quad, SerializationContext sCxt)
     {
-        StringBuilder sb = new StringBuilder() ;
-        
         if ( quad.getGraph() != null )
         {
-            sb.append(stringForNode(quad.getGraph(), prefixMap)) ;
+            sb.append(stringForNode(quad.getGraph(), sCxt)) ;
             sb.append(" ") ;
         }
         
-        sb.append(stringForNode(quad.getSubject(), prefixMap)) ;
+        stringForNode(sb, quad.getSubject(), sCxt);
         sb.append(" ") ;
-        sb.append(stringForNode(quad.getPredicate(), prefixMap)) ;
+        stringForNode( sb, quad.getPredicate(), sCxt );
         sb.append(" ") ;
-        sb.append(stringForNode(quad.getObject(), prefixMap)) ;
-        return sb.toString() ;
-    }
-    
-    // To a Writer?
-    private static void formatTriple(IndentedWriter out, Triple triple, SerializationContext sCxt)
-    {
-        out.print(stringForNode(triple.getSubject(), sCxt)) ;
-        out.print(" ") ;
-        out.print(stringForNode(triple.getPredicate(), sCxt)) ;
-        out.print(" ") ;
-        out.print(stringForNode(triple.getObject(), sCxt)) ;
-        out.print(" .") ;
+        stringForNode(sb, quad.getObject(), sCxt);
     }
     
     public static void formatPattern(IndentedWriter out, BasicPattern pattern, SerializationContext sCxt)
     {
+        StringBuilder buffer = new StringBuilder() ;  
         boolean first = true ;
-        for (Triple t : pattern )
+        for (Triple triple : pattern )
         {
             if ( ! first )
-                out.println() ;
-            formatTriple(out, t, sCxt) ;
+                buffer.append("\n") ;
+            stringForTriple(buffer, triple, sCxt) ;
+            buffer.append(" ." ) ;
+            out.print(buffer.toString()) ;
+            buffer.setLength(0) ;
             first = false ;
         }
     }
     
-//    private static String stringForQuad(Quad quad)
-//    {
-//        return stringForQuad(quad, ARQConstants.getGlobalPrefixMap()) ;
-//    }
-//    
-//    
-//    private static String stringForQuad(Quad quad, PrefixMapping prefixMap)
-//    {
-//        StringBuilder buff = new StringBuilder() ;
-//        
-//        if ( ! quad.isDefaultGraph() )
-//        {
-//            if ( quad.isUnionGraph() )
-//                buff.append("*") ;
-//            else
-//                buff.append(stringForNode(quad.getGraph(), prefixMap)) ;
-//            buff.append(" ") ;
-//        }
-//        buff.append(stringForNode(quad.getSubject(), prefixMap)) ;
-//        buff.append(" ") ;
-//        buff.append(stringForNode(quad.getPredicate(), prefixMap)) ;
-//        buff.append(" ") ;
-//        buff.append(stringForNode(quad.getObject(), prefixMap)) ;
-//        return buff.toString() ;
-//    }
-//    
-//    public void formatQuad(IndentedWriter out, Quad quad, SerializationContext sCxt)
-//    {
-//        out.print(stringForNode(quad.getGraph(), sCxt)) ;
-//        out.print(" ") ;
-//        out.print(stringForNode(quad.getSubject(), sCxt)) ;
-//        out.print(" ") ;
-//        out.print(stringForNode(quad.getPredicate(), sCxt)) ;
-//        out.print(" ") ;
-//        out.print(stringForNode(quad.getObject(), sCxt)) ;
-//        out.print(" .") ;
-//    }
-    
     public static String stringForObject(Object obj)
     {
         if ( obj == null )
@@ -203,7 +178,7 @@ public class FmtUtils
     {
         Model m = null ;
         if ( obj instanceof Resource )
-            m = ((Resource)obj).getModel() ;
+            m = obj.getModel() ;
         return stringForRDFNode(obj, newSerializationContext(m)) ;
     }
 
@@ -214,10 +189,17 @@ public class FmtUtils
     
     public static String stringForLiteral(Node_Literal literal, SerializationContext context)
     {
+        StringBuilder result = new StringBuilder(  );
+        stringForLiteral( result, literal, context );
+        return result.toString();
+    }
+
+    public static void stringForLiteral(StringBuilder result, Node_Literal literal, SerializationContext context)
+    {
         String datatype = literal.getLiteralDatatypeURI() ;
         String lang = literal.getLiteralLanguage() ;
         String s = literal.getLiteralLexicalForm() ;
-        
+
         //For some literals we can use plain literal form unless the Serialization Context
         //explicitly says not to
         //For backwards compatibility if using a null context then we use plain literal
@@ -236,12 +218,13 @@ public class FmtUtils
                     if ( s.startsWith("+") )
                         s1 = s.substring(1) ;
                     new java.math.BigInteger(s1) ;
-                    return s ;
+                    result.append(s);
+                    return;
                 } catch (NumberFormatException nfe) {}
                 // No luck.  Continue.
                 // Continuing is always safe.
             }
-            
+
             if ( datatype.equals(XSD.decimal.getURI()) )
             {
                 if ( s.indexOf('.') > 0 )
@@ -249,12 +232,13 @@ public class FmtUtils
                     try {
                         // BigDecimal does allow a leading +
                         new java.math.BigDecimal(s) ;
-                        return s ;
+                        result.append(s);
+                        return;
                     } catch (NumberFormatException nfe) {}
                     // No luck.  Continue.
                 }
             }
-            
+
             if ( datatype.equals(XSD.xdouble.getURI()) )
             {
                 // Assumes SPARQL has decimals and doubles.
@@ -264,7 +248,8 @@ public class FmtUtils
                 {
                     try {
                         Double.parseDouble(s) ;
-                        return s ;  // returm the original lexical form. 
+                        result.append(s);
+                        return;  // returm the original lexical form.
                     } catch (NumberFormatException nfe) {}
                     // No luck.  Continue.
                 }
@@ -272,38 +257,38 @@ public class FmtUtils
 
             if ( datatype.equals(XSD.xboolean.getURI()) )
             {
-                // Pragmatics: if the data wrote "1"^^xsd:boolean, keep that form.  
-                // The lexical form must be lower case. 
+                // Pragmatics: if the data wrote "1"^^xsd:boolean, keep that form.
+                // The lexical form must be lower case.
 //                if ( s.equals("true") || s.equals("1") ) return s ;
 //                if ( s.equals("false") || s.equals("0")  ) return s ;
-                if ( s.equals("true") ) return s ;
-                if ( s.equals("false") ) return s ;
-                
+                if ( s.equals("true") || s.equals("false"))
+                {
+                    result.append(s);
+                    return;
+                }
+
             }
             // Not a recognized form.
         }
-        
-        StringBuilder sbuff = new StringBuilder() ;
-        sbuff.append("\"") ;
-        stringEsc(sbuff, s, true) ;
-        sbuff.append("\"") ;
-        
-        // Format the language tag 
+
+        result.append("\"") ;
+        stringEsc(result, s, true) ;
+        result.append("\"") ;
+
+        // Format the language tag
         if ( lang != null && lang.length()>0)
         {
-            sbuff.append("@") ;
-            sbuff.append(lang) ;
+            result.append("@") ;
+            result.append(lang) ;
         }
 
         if ( datatype != null )
         {
-            sbuff.append("^^") ;
-            sbuff.append(stringForURI(datatype, context)) ;
+            result.append("^^") ;
+            stringForURI( result, datatype, context );
         }
-        
-        return sbuff.toString() ;
     }
-    
+
     public static String stringForString(String str)
     {
         StringBuilder sbuff = new StringBuilder() ;
@@ -324,56 +309,105 @@ public class FmtUtils
     }
 
     public static String stringForNode(Node n)
-    { return stringForNode(n, ARQConstants.getGlobalPrefixMap()) ; }
+    {
+        StringBuilder sb = new StringBuilder();
+        stringForNode(sb, n, ARQConstants.getGlobalPrefixMap()) ;
+        return sb.toString();
+    }
+
+    public static void stringForNode(StringBuilder result, Node n)
+    {
+        stringForNode( result, n, ARQConstants.getGlobalPrefixMap()) ;
+    }
 
     public static String stringForNode(Node n, PrefixMapping prefixMap)
-    { return stringForNode(n, newSerializationContext(prefixMap)) ; }
-    
+    {
+        StringBuilder sb = new StringBuilder();
+        stringForNode(sb, n, newSerializationContext(prefixMap)) ;
+        return sb.toString();
+    }
+
+    public static void stringForNode(StringBuilder result, Node n, PrefixMapping prefixMap)
+    {
+        stringForNode( result, n, newSerializationContext(prefixMap)) ;
+    }
+
     public static String stringForNode(Node n, Prologue prologue)
-    { return stringForNode(n, newSerializationContext(prologue)) ; }
+    {
+        StringBuilder sb = new StringBuilder();
+        stringForNode(sb, n, newSerializationContext(prologue)) ;
+        return sb.toString();
+    }
 
     public static String stringForNode(Node n, SerializationContext context)
     {
-//        if ( context == null )
-//            context = new SerializationContext() ;
-        
-        if ( n == null )
-            return "<<null>>" ;
-        
+        StringBuilder sb = new StringBuilder(  );
+        stringForNode( sb, n, context );
+        return sb.toString();
+    }
+
+    public static void stringForNode(StringBuilder result, Node n, SerializationContext context)
+    {
+        if ( n == null )  {
+            result.append( "<<null>>");
+            return;
+        }
+
         // mappable?
         if ( context != null && context.getBNodeMap() != null )
         {
             String str = context.getBNodeMap().asString(n)  ;
             if ( str != null )
-                return str ;
+            {
+                result.append( str);
+                return;
+            }
         }
-        
-        if ( n.isBlank() )
-            return "_:"+n.getBlankNodeLabel() ;
-        
-        if ( n.isLiteral() )
-            return stringForLiteral((Node_Literal)n, context) ;
 
-        if ( n.isURI() )
+        if ( n.isBlank() )
         {
-            String uri = n.getURI() ;
-            return stringForURI(uri, context) ;
+            result.append( "_:" ).append( n.getBlankNodeLabel() );
+        }
+        else if ( n.isLiteral() )
+        {
+            stringForLiteral( result, (Node_Literal) n, context );
+        }
+        else if ( n.isURI() )
+        {
+            String uri = n.getURI();
+            stringForURI( result, uri, context );
+        }
+        else if ( n.isVariable() )
+        {
+            result.append( "?" ).append( n.getName() );
+        }
+        else if ( n.equals( Node.ANY ) )
+        {
+            result.append( "ANY" );
+        }
+        else
+        {
+            Log.warn( FmtUtils.class, "Failed to turn a node into a string: " + n );
+            result.append( n.toString() );
         }
-        
-        if ( n.isVariable() )
-            return "?"+n.getName() ;
-        
-        if ( n.equals(Node.ANY) )
-            return "ANY" ;
-
-        Log.warn(FmtUtils.class, "Failed to turn a node into a string: "+n) ;
-        return n.toString() ;
     }
 
     static public String stringForURI(String uri)
-    { return "<"+stringEsc(uri)+">" ; }
+    {
+        StringBuilder sb = new StringBuilder();
+        stringForURI(sb, uri);
+        return sb.toString();
+    }
 
-    static public String stringForURI(String uri, Prologue prologue)
+	static public void stringForURI(StringBuilder target, String uri)
+	{
+		target.append("<");
+		stringEsc(target, uri);
+		target.append(">");
+	}
+
+
+	static public String stringForURI(String uri, Prologue prologue)
     {
         return stringForURI(uri, prologue.getBaseURI(), prologue.getPrefixMapping()) ;
     }
@@ -387,33 +421,52 @@ public class FmtUtils
     {
         if ( context == null )
             return stringForURI(uri, null, null) ;
-//        if ( ! context.getPrologue().explicitlySetBaseURI() )
-//            return stringForURI(uri, null, context.getPrefixMapping()) ;
-        
         return stringForURI(uri, context.getBaseIRI(), context.getPrefixMapping()) ;
     }
 
+    static public void stringForURI(StringBuilder result, String uri, SerializationContext context)
+    {
+        if ( context == null )
+            stringForURI(result, uri, null, null) ;
+        else
+            stringForURI(result, uri, context.getBaseIRI(), context.getPrefixMapping()) ;
+    }
+
     static public String stringForURI(String uri, PrefixMapping mapping)
     { return stringForURI(uri, null, mapping) ; }
     
     static public String stringForURI(String uri, String base, PrefixMapping mapping)
     {
+        StringBuilder result = new StringBuilder(  );
+        stringForURI( result, uri, base, mapping );
+        return result.toString();
+    }
+
+    static public void stringForURI(StringBuilder result, String uri, String base, PrefixMapping mapping)
+    {
         if ( mapping != null )
         {
             String pname = prefixFor(uri, mapping) ;
             if ( pname != null )
-                return pname ;
+            {
+                result.append( pname);
+                return;
+            }
+
         }
         if ( base != null )
         {
             String x = abbrevByBase(uri, base) ;
-            if ( x != null ) 
-                return "<"+x+">" ;
+            if ( x != null ) {
+                result.append("<");
+                result.append(x);
+                result.append(">");
+                return;
+            }
         }
-        return stringForURI(uri) ; 
+        stringForURI( result, uri ) ;
     }
-    
-    
+
     static private int relFlags = IRIRelativize.SAMEDOCUMENT | IRIRelativize.CHILD ;
     
     static public String abbrevByBase(String uri, String base)
@@ -505,7 +558,7 @@ public class FmtUtils
     // take a string and make it safe for writing.
     public static String stringEsc(String s)
     { return stringEsc( s, true ) ; }
-    
+
     public static String stringEsc(String s, boolean singleLineString)
     {
         StringBuilder sb = new StringBuilder() ;

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/out/SinkQuadBracedOutput.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/out/SinkQuadBracedOutput.java?rev=1602962&r1=1602961&r2=1602962&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/out/SinkQuadBracedOutput.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/out/SinkQuadBracedOutput.java Mon Jun 16 18:55:44 2014
@@ -16,154 +16,122 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.out;
+package org.apache.jena.riot.out ;
 
-import java.io.OutputStream;
+import java.io.OutputStream ;
 
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.atlas.lib.Sink ;
 
-import com.hp.hpl.jena.graph.Node;
-import com.hp.hpl.jena.graph.Triple;
-import com.hp.hpl.jena.sparql.core.Quad;
-import com.hp.hpl.jena.sparql.serializer.SerializationContext;
-import com.hp.hpl.jena.sparql.util.FmtUtils;
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.graph.Triple ;
+import com.hp.hpl.jena.sparql.core.Quad ;
+import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
+import com.hp.hpl.jena.sparql.util.FmtUtils ;
 
 /**
  * A class that print quads, SPARQL style (maybe good for Trig too?)
  */
 public class SinkQuadBracedOutput implements Sink<Quad>, Closeable
 {
-    protected static final int BLOCK_INDENT = 2 ;
-    
-    protected final IndentedWriter out;
-    protected final SerializationContext sCxt;
-    protected boolean opened = false;
-    
-    protected Node currentGraph;
-    
-    public SinkQuadBracedOutput(OutputStream out)
-    {
-        this(out, null);
-    }
-    
-    public SinkQuadBracedOutput(OutputStream out, SerializationContext sCxt)
-    {
-        this(new IndentedWriter(out), sCxt);
-    }
-    
-    public SinkQuadBracedOutput(IndentedWriter out, SerializationContext sCxt)
-    {
-        if (out == null)
-        {
-            throw new IllegalArgumentException("out may not be null") ;
-        }
-        
-        if (sCxt == null)
-        {
-            sCxt = new SerializationContext();
-        }
-        
-        this.out = out;
-        this.sCxt = sCxt;
-    }
-    
-    public void open()
-    {
-        out.println("{");
-        out.incIndent(BLOCK_INDENT);
-        opened = true;
-    }
-    
-    private void checkOpen()
-    {
-        if (!opened)
-        {
-            throw new IllegalStateException("SinkQuadBracedOutput is not opened.  Call open() first.");
+    protected static final int           BLOCK_INDENT = 2 ;
+
+    protected final IndentedWriter       out ;
+    protected final SerializationContext sCxt ;
+    protected boolean                    opened       = false ;
+
+    protected Node                       currentGraph ;
+
+    public SinkQuadBracedOutput(OutputStream out) {
+        this(out, null) ;
+    }
+
+    public SinkQuadBracedOutput(OutputStream out, SerializationContext sCxt) {
+        this(new IndentedWriter(out), sCxt) ;
+    }
+
+    public SinkQuadBracedOutput(IndentedWriter out, SerializationContext sCxt) {
+        if ( out == null ) { throw new IllegalArgumentException("out may not be null") ; }
+
+        if ( sCxt == null ) {
+            sCxt = new SerializationContext() ;
         }
+
+        this.out = out ;
+        this.sCxt = sCxt ;
+    }
+
+    public void open() {
+        out.println("{") ;
+        out.incIndent(BLOCK_INDENT) ;
+        opened = true ;
+    }
+
+    private void checkOpen() {
+        if ( !opened ) { throw new IllegalStateException("SinkQuadBracedOutput is not opened.  Call open() first.") ; }
     }
-    
+
     @Override
-    public void send(Quad quad)
-    {
-        send(quad.getGraph(), quad.asTriple());
-    }
-    
-    public void send(Node graphName, Triple triple)
-    {
-        checkOpen();
-        if (Quad.isDefaultGraph(graphName))
-        {
-            graphName = null;
+    public void send(Quad quad) {
+        send(quad.getGraph(), quad.asTriple()) ;
+    }
+
+    public void send(Node graphName, Triple triple) {
+        checkOpen() ;
+        if ( Quad.isDefaultGraph(graphName) ) {
+            graphName = null ;
         }
-        
-        if (!Lib.equal(currentGraph, graphName))
-        {
-            if (null != currentGraph)
-            {
-                out.decIndent(BLOCK_INDENT);
-                out.println("}");
+
+        if ( !Lib.equal(currentGraph, graphName) ) {
+            if ( null != currentGraph ) {
+                out.decIndent(BLOCK_INDENT) ;
+                out.println("}") ;
             }
-            
-            if (null != graphName)
-            {
-                out.print("GRAPH ");
-                output(graphName);
-                out.println(" {");
-                out.incIndent(BLOCK_INDENT);
+
+            if ( null != graphName ) {
+                out.print("GRAPH ") ;
+                output(graphName) ;
+                out.println(" {") ;
+                out.incIndent(BLOCK_INDENT) ;
             }
         }
-        
-        output(triple);
-        out.println(" .");
-        
-        currentGraph = graphName;
-    }
-    
-    private void output(Node node)
-    { 
-        String n = FmtUtils.stringForNode(node, sCxt);
-        out.print(n);
-    }
-    
-    private void output(Triple triple)
-    {
-        String s = FmtUtils.stringForNode(triple.getSubject(), sCxt) ;
-        String p = FmtUtils.stringForNode(triple.getPredicate(), sCxt) ;
-        String o = FmtUtils.stringForNode(triple.getObject(), sCxt) ;
-        
-        out.print(s);
-        out.print(" ");
-        out.print(p);
-        out.print(" ");
-        out.print(o);
+
+        output(triple) ;
+        out.println(" .") ;
+
+        currentGraph = graphName ;
+    }
+
+    private void output(Node node) {
+        String n = FmtUtils.stringForNode(node, sCxt) ;
+        out.print(n) ;
+    }
+
+    private void output(Triple triple) {
+        out.print(FmtUtils.stringForTriple(triple)) ;
     }
 
     @Override
-    public void flush()
-    {
-        out.flush();
+    public void flush() {
+        out.flush() ;
     }
-    
+
     @Override
-    public void close()
-    {
-        if (opened)
-        {
-            if (null != currentGraph)
-            {
-                out.decIndent(BLOCK_INDENT);
-                out.println("}");
+    public void close() {
+        if ( opened ) {
+            if ( null != currentGraph ) {
+                out.decIndent(BLOCK_INDENT) ;
+                out.println("}") ;
             }
-            
-            out.decIndent(BLOCK_INDENT);
-            out.print("}");
-            
+
+            out.decIndent(BLOCK_INDENT) ;
+            out.print("}") ;
+
             // Since we didn't create the OutputStream, we'll just flush it
-            flush();
-            opened = false;
+            flush() ;
+            opened = false ;
         }
     }
 }

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestFmtUtils.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestFmtUtils.java?rev=1602962&r1=1602961&r2=1602962&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestFmtUtils.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestFmtUtils.java Mon Jun 16 18:55:44 2014
@@ -8,6 +8,7 @@ import static org.junit.Assert.assertEqu
 
 import java.io.ByteArrayOutputStream ;
 
+import org.apache.jena.atlas.io.IndentedLineBuffer ;
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.junit.Test ;
 
@@ -23,6 +24,7 @@ import com.hp.hpl.jena.shared.impl.Prefi
 import com.hp.hpl.jena.sparql.core.BasicPattern ;
 import com.hp.hpl.jena.sparql.core.Quad ;
 import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
+import com.hp.hpl.jena.sparql.sse.SSE ;
 
 public class TestFmtUtils
 {
@@ -35,7 +37,7 @@ public class TestFmtUtils
     public void stringForTriple_WithPrefixMapping() {
         assertEquals("zz:abs <n2> \"l3\"", stringForTriple(getPrefixedTriple(), getPrefixMapping())) ;
     }
-
+    
     @Test
     public void stringForQuadEncoding() {
         Node n1 = NodeFactory.createURI("q1") ;
@@ -147,6 +149,22 @@ public class TestFmtUtils
         assertEquals("\"a\\rbt\"", FmtUtils.stringForString("a\rbt")) ;
     }
 
+    @Test
+    public void testFormatBGP_1() {
+        IndentedLineBuffer b = new IndentedLineBuffer() ;
+        BasicPattern bgp = SSE.parseBGP("(prefix ((zz: <"+aUri+">)) (bgp (zz:s zz:p zz:o)))") ;
+        FmtUtils.formatPattern(b, bgp, getContext()) ;
+        assertEquals("zz:s zz:p zz:o .", b.toString()) ;
+    }
+
+    @Test
+    public void testFormatBGP_2() {
+        IndentedLineBuffer b = new IndentedLineBuffer() ;
+        BasicPattern bgp = SSE.parseBGP("(prefix ((zz: <"+aUri+">)) (bgp (zz:s zz:p zz:o) (zz:s zz:p 123) ))") ;
+        FmtUtils.formatPattern(b, bgp, getContext()) ;
+        assertEquals("zz:s zz:p zz:o .\nzz:s zz:p 123 .", b.toString()) ;
+    }
+
     private Triple getTriple() {
         Node n1 = aNode() ;
         Node n2 = NodeFactory.createURI("n2") ;