       1 /*
       2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
       3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       4  *
       5  * This code is free software; you can redistribute it and/or modify it
       6  * under the terms of the GNU General Public License version 2 only, as
       7  * published by the Free Software Foundation.  Oracle designates this
       8  * particular file as subject to the "Classpath" exception as provided
       9  * by Oracle in the LICENSE file that accompanied this code.
      10  *
      11  * This code is distributed in the hope that it will be useful, but WITHOUT
      12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14  * version 2 for more details (a copy is included in the LICENSE file that
      15  * accompanied this code).
      16  *
      17  * You should have received a copy of the GNU General Public License version
      18  * 2 along with this work; if not, write to the Free Software Foundation,
      19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
      20  *
      21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
      22  * or visit www.oracle.com if you need additional information or have any
      23  * questions.
      24  */
      25
      26 package jdk.nashorn.api.scripting;
      27
      28 import java.io.CharArrayReader;
      29 import java.io.IOException;
      30 import java.io.Reader;
      31 import java.net.URL;
      32 import java.nio.charset.Charset;
      33 import java.util.Objects;
      34 import jdk.nashorn.internal.runtime.Source;
      35
      36 /**
      37  * A Reader that reads from a URL. Used to make sure that the reader
      38  * reads content from given URL and can be trusted to do so.
      39  *
      40  * @deprecated Nashorn JavaScript script engine and APIs, and the jjs tool
      41  * are deprecated with the intent to remove them in a future release.
      42  *
      43  * @since 1.8u40
      44  */
      45 @Deprecated(since="11", forRemoval=true)
      46 public final class URLReader extends Reader {
      47     // underlying URL
      48     private final URL url;
      49     // Charset used to convert
      50     private final Charset cs;
      51
      52     // lazily initialized underlying reader for URL
      53     private Reader reader;
      54
      55     /**
      56      * Constructor
      57      *
      58      * @param url URL for this URLReader
      59      * @throws NullPointerException if url is null
      60      */
      61     public URLReader(final URL url) {
      62         this(url, (Charset)null);
      63     }
      64
      65     /**
      66      * Constructor
      67      *
      68      * @param url URL for this URLReader
      69      * @param charsetName  Name of the Charset used to convert bytes to chars
      70      * @throws NullPointerException if url is null
      71      */
      72     public URLReader(final URL url, final String charsetName) {
      73         this(url, Charset.forName(charsetName));
      74     }
      75
      76     /**
      77      * Constructor
      78      *
      79      * @param url URL for this URLReader
      80      * @param cs  Charset used to convert bytes to chars
      81      * @throws NullPointerException if url is null
      82      */
      83     public URLReader(final URL url, final Charset cs) {
      84         this.url = Objects.requireNonNull(url);
      85         this.cs  = cs;
      86     }
      87
      88     @Override
      89     public int read(final char cbuf[], final int off, final int len) throws IOException {
      90         return getReader().read(cbuf, off, len);
      91     }
      92
      93     @Override
      94     public void close() throws IOException {
      95         getReader().close();
      96     }
      97
      98     /**
      99      * URL of this reader
     100      * @return the URL from which this reader reads.
     101      */
     102     public URL getURL() {
     103         return url;
     104     }
     105
     106     /**
     107      * Charset used by this reader
     108      *
     109      * @return the Charset used to convert bytes to chars
     110      */
     111     public Charset getCharset() {
     112         return cs;
     113     }
     114
     115     // lazily initialize char array reader using URL content
     116     private Reader getReader() throws IOException {
     117         synchronized (lock) {
     118             if (reader == null) {
     119                 reader = new CharArrayReader(Source.readFully(url, cs));
     120             }
     121         }
     122
     123         return reader;
     124     }
     125 }
    --- EOF ---