*/
package jalview.io;
-import jalview.api.AlignExportSettingsI;
-import jalview.api.AlignViewportI;
-import jalview.api.AlignmentViewPanel;
-import jalview.api.FeatureSettingsModelI;
-import jalview.util.MessageManager;
-
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.net.URLConnection;
import java.util.zip.GZIPInputStream;
+import jalview.api.AlignExportSettingsI;
+import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.Cache;
+import jalview.util.MessageManager;
import jalview.util.Platform;
/**
}
return error;
}
-
+
/**
* Recognise the 2-byte magic header for gzip streams
*
* https://recalll.co/ask/v/topic/java-How-to-check-if-InputStream-is-Gzipped/555aadd62bd27354438b90f6
*
- * @param bytes - at least two bytes
- * @return
+ * @param bytes
+ * - at least two bytes
+ * @return
+ * @throws IOException
*/
- private static boolean isGzipStream(byte[] bytes) {
- int head = ((int) bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00);
- return (GZIPInputStream.GZIP_MAGIC == head);
+ public static boolean isGzipStream(InputStream input) throws IOException
+ {
+ if (!input.markSupported())
+ {
+ Cache.log.error("FileParse.izGzipStream: input stream must support mark/reset");
+ return false;
+ }
+ input.mark(4);
+ byte[] bytes = { (byte) input.read(), (byte) input.read() }; // input.readNBytes(2);
+ input.reset();
+ if (bytes.length == 2)
+ {
+ int header = (bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00);
+ return (GZIPInputStream.GZIP_MAGIC == header);
+ }
+ return false;
}
/**
* @param input
* @return
*/
- private BufferedReader checkForGzipStream(InputStream input) throws Exception {
-
- // NB: stackoverflow https://stackoverflow.com/questions/4818468/how-to-check-if-inputstream-is-gzipped
+ private BufferedReader checkForGzipStream(InputStream input)
+ throws Exception
+ {
+ // NB: stackoverflow
+ // https://stackoverflow.com/questions/4818468/how-to-check-if-inputstream-is-gzipped
// could use a PushBackInputStream rather than a BufferedInputStream
-
- BufferedInputStream bufinput;
- if (!input.markSupported()) {
- bufinput= new BufferedInputStream(input,16);
- input = bufinput;
+ if (!input.markSupported())
+ {
+ input = new BufferedInputStream(input, 16);
}
- input.mark(4);
- byte[] bytes=input.readNBytes(2);
- input.reset();
- if (bytes.length==2 && isGzipStream(bytes)) {
+ if (isGzipStream(input))
+ {
return getGzipReader(input);
}
// return a buffered reader for the stream.
- InputStreamReader isReader= new InputStreamReader(input);
- BufferedReader toReadFrom=new BufferedReader(isReader);
+ InputStreamReader isReader = new InputStreamReader(input);
+ BufferedReader toReadFrom = new BufferedReader(isReader);
return toReadFrom;
}
+
/**
* Returns a {@code BufferedReader} which wraps the input stream with a
* GZIPInputStream. Throws a {@code ZipException} if a GZIP format error
throw new IOException(
"Response status from " + urlStr + " was " + rc);
}
- } else {
- try {
- dataIn = checkForGzipStream(_conn.getInputStream());
- dataName=urlStr;
+ }
+ else
+ {
+ try
+ {
+ dataIn = checkForGzipStream(_conn.getInputStream());
+ dataName = urlStr;
} catch (IOException ex)
{
- throw new IOException("Failed to handle non-HTTP URI stream",ex);
+ throw new IOException("Failed to handle non-HTTP URI stream", ex);
} catch (Exception ex)
{
- throw new IOException("Failed to determine type of input stream for given URI",ex);
+ throw new IOException(
+ "Failed to determine type of input stream for given URI",
+ ex);
}
return;
}
*/
package jalview.io;
-import jalview.gui.JvOptionPane;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import java.io.BufferedInputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import jalview.bin.Cache;
+import jalview.gui.JvOptionPane;
+
/**
* @author jimp
*
@BeforeClass(alwaysRun = true)
public static void setUpBeforeClass() throws Exception
{
+ Cache.initLogger();
}
/**
public void testStarsInFasta1() throws IOException
{
String uri;
- FileParse fp = new FileParse(uri = STARS_FA_FILE1.getAbsoluteFile()
- .toString(), DataSourceType.FILE);
+ FileParse fp = new FileParse(
+ uri = STARS_FA_FILE1.getAbsoluteFile().toString(),
+ DataSourceType.FILE);
assertValidFormat(FileFormat.Fasta, uri, fp);
}
public void testStarsInFasta2() throws IOException
{
String uri;
- FileParse fp = new FileParse(uri = STARS_FA_FILE2.getAbsoluteFile()
- .toString(), DataSourceType.FILE);
+ FileParse fp = new FileParse(
+ uri = STARS_FA_FILE2.getAbsoluteFile().toString(),
+ DataSourceType.FILE);
assertValidFormat(FileFormat.Fasta, uri, fp);
}
public void testGzipIo() throws IOException
{
String uri;
- FileParse fp = new FileParse(uri = ALIGN_FILE.getAbsoluteFile().toURI()
- .toString(), DataSourceType.URL);
+ FileParse fp = new FileParse(
+ uri = ALIGN_FILE.getAbsoluteFile().toURI().toString(),
+ DataSourceType.URL);
assertValidFormat(FileFormat.Fasta, uri, fp);
}
public void testGziplocalFileIO() throws IOException
{
String filepath;
- FileParse fp = new FileParse(filepath = ALIGN_FILE.getAbsoluteFile()
- .toString(), DataSourceType.FILE);
+ FileParse fp = new FileParse(
+ filepath = ALIGN_FILE.getAbsoluteFile().toString(),
+ DataSourceType.FILE);
assertValidFormat(FileFormat.Fasta, filepath, fp);
}
@Test(groups = { "Functional" })
+ public void testIsGzipInputStream() throws IOException
+ {
+ InputStream is = new FileInputStream(ALIGN_FILE);
+
+ /*
+ * first try fails - FileInputStream does not support mark/reset
+ */
+ assertFalse(FileParse.isGzipStream(is));
+
+ /*
+ * wrap in a BufferedInputStream and try again
+ */
+ is = new BufferedInputStream(is, 16);
+ assertTrue(FileParse.isGzipStream(is));
+ }
+
+ @Test(groups = { "Functional" })
public void testNonGzipURLIO() throws IOException
{
String uri;
- FileParse fp = new FileParse(uri = NOTGZALIGN_FILE.getAbsoluteFile()
- .toURI().toString(), DataSourceType.URL);
+ FileParse fp = new FileParse(
+ uri = NOTGZALIGN_FILE.getAbsoluteFile().toURI().toString(),
+ DataSourceType.URL);
assertValidFormat(FileFormat.Fasta, uri, fp);
}
public void testNonGziplocalFileIO() throws IOException
{
String filepath;
- FileParse fp = new FileParse(filepath = NOTGZALIGN_FILE
- .getAbsoluteFile().toString(), DataSourceType.FILE);
+ FileParse fp = new FileParse(
+ filepath = NOTGZALIGN_FILE.getAbsoluteFile().toString(),
+ DataSourceType.FILE);
assertValidFormat(FileFormat.Fasta, filepath, fp);
}
}