You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pr@jena.apache.org by GitBox <gi...@apache.org> on 2021/03/12 14:33:52 UTC

[GitHub] [jena] afs opened a new pull request #952: Cleaning code

afs opened a new pull request #952:
URL: https://github.com/apache/jena/pull/952


   Many small changes, no effect on APIs except adding deprecation of old code which has placeholder delegates left in. 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscribe@jena.apache.org
For additional commands, e-mail: pr-help@jena.apache.org


[GitHub] [jena] kinow commented on a change in pull request #952: JENA-2067: Cleaning code

Posted by GitBox <gi...@apache.org>.
kinow commented on a change in pull request #952:
URL: https://github.com/apache/jena/pull/952#discussion_r593438120



##########
File path: jena-arq/src/main/java/org/apache/jena/riot/resultset/rw/ResultSetWriterCSV.java
##########
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot.resultset.rw;
+
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import org.apache.jena.atlas.io.AWriter;
+import org.apache.jena.atlas.io.IO;
+import org.apache.jena.graph.Node;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.riot.resultset.ResultSetLang;
+import org.apache.jena.riot.resultset.ResultSetWriter;
+import org.apache.jena.riot.resultset.ResultSetWriterFactory;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.resultset.ResultSetException;
+import org.apache.jena.sparql.util.Context;
+import org.apache.jena.sparql.util.NodeToLabelMap;
+
+public class ResultSetWriterCSV implements ResultSetWriter {
+
+    public static ResultSetWriterFactory factory = lang -> {
+        if ( !Objects.equals(lang, ResultSetLang.RS_CSV) )
+            throw new ResultSetException("ResultSetWriter for CSV asked for a " + lang);
+        return new ResultSetWriterCSV();
+    };
+
+    private ResultSetWriterCSV() {}
+
+    @Override
+    public void write(OutputStream out, ResultSet resultSet, Context context) {
+        output(IO.wrapUTF8(out), resultSet);
+    }
+
+    @Override
+    public void write(Writer out, ResultSet resultSet, Context context) {
+        output(IO.wrap(out), resultSet);
+    }
+
+    @Override
+    public void write(OutputStream out, boolean result, Context context) {
+        output(IO.wrapUTF8(out), result);
+    }
+
+    private static void output(AWriter out, boolean booleanResult) {
+        out.write(headerBytes);
+        if ( booleanResult )
+            out.write(yesBytes);
+        else
+            out.write(noBytes);
+        out.write(NL);
+    }
+
+    private static void output(AWriter out, ResultSet resultSet) {
+            try {
+            NodeToLabelMap bnodes = new NodeToLabelMap();
+
+            String sep = null;
+            List<String> varNames = resultSet.getResultVars();
+            List<Var> vars = new ArrayList<>(varNames.size());
+
+            // Convert to Vars and output the header line.
+            for ( String v : varNames ) {
+                if ( sep != null )
+                    out.write(sep);
+                else
+                    sep = ",";
+                out.write(csvSafe(v));
+                vars.add(Var.alloc(v));
+            }
+            out.write(NL);
+
+            // Data output
+            for ( ; resultSet.hasNext() ; ) {
+                sep = null;
+                Binding b = resultSet.nextBinding();
+
+                for ( Var v : vars ) {
+                    if ( sep != null )
+                        out.write(sep);
+                    sep = ",";
+
+                    Node n = b.get(v);
+                    if ( n != null )
+                        output(out, n, bnodes);
+                }
+                out.write(NL);
+            }
+        } finally { out.flush(); }
+    }
+
+    private static void output(AWriter w, Node n, NodeToLabelMap bnodes) {
+        // String str = FmtUtils.stringForNode(n) ;
+        String str = "?";
+        if ( n.isLiteral() )
+            str = n.getLiteralLexicalForm();
+        else if ( n.isURI() )
+            str = n.getURI();
+        else if ( n.isBlank() )
+            str = bnodes.asString(n);
+
+        str = csvSafe(str);
+        w.write(str);
+        w.flush();
+    }
+
+    static protected String csvSafe(String str) {
+        // Apparently, there are CSV parsers that only accept "" as an escaped quote
+        // if inside a "..."
+        if ( str.contains("\"") || str.contains(",") || str.contains("\r") || str.contains("\n") )
+            str = "\"" + str.replaceAll("\"", "\"\"") + "\"";
+        else if ( str.isEmpty() )
+            // Return the quoted empty string.
+            str = "\"\"";
+        return str;
+    }
+
+    static final String NL = "\r\n";
+    static final String headerBytes = "_askResult" + NL;
+    static final String yesBytes = "true";
+    static final String noBytes = "false";
+}

Review comment:
       Missing new line

##########
File path: jena-arq/src/main/java/org/apache/jena/riot/resultset/rw/ResultSetWriterTSV.java
##########
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.riot.resultset.rw;
+
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import org.apache.jena.atlas.io.AWriter;
+import org.apache.jena.atlas.io.IO;
+import org.apache.jena.graph.Node;
+import org.apache.jena.query.ResultSet;
+import org.apache.jena.riot.out.NodeFormatter;
+import org.apache.jena.riot.out.NodeFormatterTTL;
+import org.apache.jena.riot.resultset.ResultSetLang;
+import org.apache.jena.riot.resultset.ResultSetWriter;
+import org.apache.jena.riot.resultset.ResultSetWriterFactory;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.resultset.ResultSetException;
+import org.apache.jena.sparql.util.Context;
+
+public class ResultSetWriterTSV implements ResultSetWriter {
+
+    public static ResultSetWriterFactory factory = lang -> {
+        if (!Objects.equals(lang, ResultSetLang.RS_TSV ) )
+            throw new ResultSetException("ResultSetWriter for TSV asked for a "+lang);
+        return new ResultSetWriterTSV();
+    };
+
+    private ResultSetWriterTSV() {}
+
+    @Override
+    public void write(OutputStream out, ResultSet resultSet, Context context) {
+        output(IO.wrapUTF8(out), resultSet);
+    }
+
+    @Override
+    public void write(Writer out, ResultSet resultSet, Context context) {
+        output(IO.wrap(out), resultSet);
+    }
+
+    @Override
+    public void write(OutputStream out, boolean result, Context context) {}
+
+    private static void output(AWriter out, boolean booleanResult) {
+            out.write(headerBytes);
+            if ( booleanResult )
+                out.write(yesBytes);
+            else
+                out.write(noBytes);
+            out.write(NL);
+            out.flush();
+    }
+
+    private static void output(AWriter out, ResultSet resultSet) {
+        try {
+            NodeFormatter formatter = createNodeFormatter();
+            String sep = null;
+            List<String> varNames = resultSet.getResultVars();
+            List<Var> vars = new ArrayList<>(varNames.size());
+
+            // writes the variables on the first line
+            for ( String v : varNames ) {
+                if ( sep != null )
+                    out.write(sep);
+                else
+                    sep = SEP;
+                Var var = Var.alloc(v);
+                out.write(var.toString());
+                vars.add(var);
+            }
+            out.write(NL);
+
+            // writes one binding by line
+            for ( ; resultSet.hasNext() ; ) {
+                sep = null;
+                Binding b = resultSet.nextBinding();
+
+                for ( Var v : vars ) {
+                    if ( sep != null )
+                        out.write(sep);
+                    sep = SEP;
+
+                    Node n = b.get(v);
+                    if ( n != null ) {
+                        // This will not include a raw tab.
+                        formatter.format(out, n);
+                    }
+                }
+                out.write(NL);
+            }
+        } finally { out.flush();}
+    }
+
+    protected static NodeFormatter createNodeFormatter() {
+        // Use a Turtle formatter to format terms
+        return new NodeFormatterTTL(null, null);
+    }
+
+    private static final String NL   = "\n" ;
+    private static final String SEP  = "\t" ;
+            private static final String headerBytes = "?_askResult" + NL;
+    private static final String yesBytes    = "true";
+    private static final String noBytes     = "false";
+}

Review comment:
       Missing new line

##########
File path: jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
##########
@@ -35,62 +35,70 @@
  * except for iterators (and hence single threaded).
  * <p>
  * Style 1: functional style using statics.
- * 
+ *
  * <pre>
  *  import static org.apache.jena.atlas.iterator.Iter.* ;
- *  
+ *
  *  filter(map(iterator, function), predicate)
  * </pre>
- * 
+ *
  * Style 2: Stream-like: The class {@code Iter} provides methods to call on an iterator.
- * 
+ *
  * <pre>
  * import static org.apache.jena.atlas.iterator.Iter.iter ;
- * 
+ *
  * iter(iterator).map(...).filter(...)
  * </pre>
  *
  * @param <T> the type of element over which an instance of {@code Iter} iterates,
  */
 public class Iter<T> implements Iterator<T> {
-    
+
     /** Shorter form of "forEachRemaining" */
     public static <T> void forEach(Iterator<T> iter, Consumer<T> action) {
         iter.forEachRemaining(action);
     }
-    
+
     // IteratorSlotted needed? IteratorPeek
     //   IteratorSlotted.inspect
-    
+
     public static <T> Stream<T> asStream(Iterator<T> iterator) {
         return asStream(iterator, false);
     }
 
     public static <T> Stream<T> asStream(Iterator<T> iterator, boolean parallel) {
-        // Why isn't there a JDK operation for Iterator -> (sequential) stream?  
+        // Why isn't there a JDK operation for Iterator -> (sequential) stream?
         int characteristics = Spliterator.IMMUTABLE;
         return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, characteristics), parallel);
     }
 
-    // ---- Special iterators. 
-    
+    // ---- Special iterators.
+
     public static <T> Iterator<T> singleton(T item) {
         // There is a singleton iterator in Collections but it is not public.
         return new SingletonIterator<>(item) ;
     }
-    
+
     public static <T> Iterator<T> nullIterator() {
         // Java7 caught up.
         return Collections.emptyIterator();
     }
-    
+
+    /**
+     * Return an iterator that does permit remove.
+     * This is makes an "UnmodifiedIterator".

Review comment:
       s/This is makes/This makes




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscribe@jena.apache.org
For additional commands, e-mail: pr-help@jena.apache.org


[GitHub] [jena] afs merged pull request #952: JENA-2067: Cleaning code

Posted by GitBox <gi...@apache.org>.
afs merged pull request #952:
URL: https://github.com/apache/jena/pull/952


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscribe@jena.apache.org
For additional commands, e-mail: pr-help@jena.apache.org