Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions src/openaf/IOBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,16 @@ public static Object gunzip(Object dataIn) throws IOException {
return openaf.core.IO.gunzip(dataIn);
}

@JSFunction
public static Object xz(Object dataIn) throws IOException {
return openaf.core.IO.xz(dataIn);
}

@JSFunction
public static Object unxz(Object dataIn) throws IOException {
return openaf.core.IO.unxz(dataIn);
}

@JSFunction
public static Object randomAccessFile(String filename, String mode) throws FileNotFoundException {
return openaf.core.IO.randomAccessFile(filename, mode);
Expand All @@ -144,6 +154,16 @@ public static Object writeFileGzipStream(String filename, boolean shouldAppend)
public static Object readFileGzipStream(String filename) throws IOException {
return openaf.core.IO.readFileGzipStream(filename);
}

@JSFunction
public static Object writeFileXzStream(String filename, boolean shouldAppend) throws IOException {
return openaf.core.IO.writeFileXzStream(filename, shouldAppend);
}

@JSFunction
public static Object readFileXzStream(String filename) throws IOException {
return openaf.core.IO.readFileXzStream(filename);
}

@JSFunction
public static Object readFileStream(String filename) throws IOException {
Expand Down
123 changes: 108 additions & 15 deletions src/openaf/core/IO.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.ArrayList;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.Set;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.Set;
import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.NativeArray;
import org.mozilla.javascript.ScriptableObject;
Expand Down Expand Up @@ -636,8 +638,8 @@ public static Object gzip(Object dataIn) throws IOException {
* @return
* @throws IOException
*/
@JSFunction
public static Object gunzip(Object dataIn) throws IOException {
@JSFunction
public static Object gunzip(Object dataIn) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();

if (dataIn instanceof org.mozilla.javascript.NativeJavaArray) {
Expand All @@ -650,8 +652,63 @@ public static Object gunzip(Object dataIn) throws IOException {
baos.flush();
baos.close();

return baos.toByteArray();
}
return baos.toByteArray();
}

/**
* <odoc>
* <key>io.xz(anObject) : anArrayOfBytes</key>
* Compresses an object into an xz array of bytes.
* </odoc>
*
* @param dataIn
* @return
* @throws IOException
*/
@JSFunction
public static Object xz(Object dataIn) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();

XZCompressorOutputStream xos = new XZCompressorOutputStream(baos);
if (dataIn instanceof org.mozilla.javascript.NativeJavaArray) {
dataIn = ((org.mozilla.javascript.NativeJavaArray) dataIn).unwrap();
}
IOUtils.write((byte[]) dataIn, xos);

xos.flush();
xos.close();
baos.flush();
baos.close();

return baos.toByteArray();
}

/**
* <odoc>
* <key>io.unxz(anArrayOfBytes) : anObject</key>
* Uncompresses an xzed array of bytes.
* </odoc>
*
* @param dataIn
* @return
* @throws IOException
*/
@JSFunction
public static Object unxz(Object dataIn) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();

if (dataIn instanceof org.mozilla.javascript.NativeJavaArray) {
dataIn = ((org.mozilla.javascript.NativeJavaArray) dataIn).unwrap();
}
XZCompressorInputStream xis = new XZCompressorInputStream(new ByteArrayInputStream((byte[]) dataIn));
IOUtils.copy(xis, baos);

xis.close();
baos.flush();
baos.close();

return baos.toByteArray();
}

/**
* <odoc>
Expand Down Expand Up @@ -703,10 +760,46 @@ public static Object writeFileGzipStream(String filename, boolean shouldAppend)
* \
* </odoc>
*/
@JSFunction
public static Object readFileGzipStream(String filename) throws IOException {
return new GZIPInputStream(FileUtils.openInputStream(new File(filename)));
}
@JSFunction
public static Object readFileGzipStream(String filename) throws IOException {
return new GZIPInputStream(FileUtils.openInputStream(new File(filename)));
}

/**
* <odoc>
* <key>io.writeFileXzStream(aFilename, shouldAppend) : JavaStream</key>
* Creates and returns a JavaStream to write to an xz aFilename. Optionally if shouldAppend=true
* it will append to an existing file. For example:\
* \
* var stream = io.writeFileXzStream("afile.txt.xz");\
* ioStreamWrite(stream, "Hello "); // you can also use ioStreamWriteBytes \
* ioStreamWrite(stream, "World!");\
* stream.close();\
* \
* </odoc>
*/
@JSFunction
public static Object writeFileXzStream(String filename, boolean shouldAppend) throws IOException {
return new XZCompressorOutputStream(FileUtils.openOutputStream(new File(filename), shouldAppend));
}

/**
* <odoc>
* <key>io.readFileXzStream(aFilename) : JavaStream</key>
* Creates and returns a JavaStream to read from an xz aFilename. For example:\
* \
* var stream = io.readFileXzStream("afile.txt.xz");\
* ioStreamRead(stream, function(buffer) { // you can also use ioStreamReadBytes \
* printnl(buffer);\
* });\
* stream.close();\
* \
* </odoc>
*/
@JSFunction
public static Object readFileXzStream(String filename) throws IOException {
return new XZCompressorInputStream(FileUtils.openInputStream(new File(filename)));
}

/**
* <odoc>
Expand Down
28 changes: 28 additions & 0 deletions tests/autoTestAll.IO.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,34 @@

ow.test.assert(orig.length, s.length, "Problem with gzip native java array to byte array conversion.");
};
exports.testXzNativeToByte = () => {
var orig = io.readFileString("../js/openaf.js", io.getDefaultEncoding());

io.writeFileBytes("autoTestAll.xz", io.xz(io.readFileBytes("../js/openaf.js")));
var a = Packages.org.apache.commons.io.IOUtils.toByteArray(io.readFileStream("autoTestAll.xz"));
var s = af.fromBytes2String(io.unxz(a));

ow.test.assert(orig.length, s.length, "Problem with xz native java array to byte array conversion.");
};

exports.testIOXzStream = function() {
var file = "autoTestAll.test.xz";
var stream = io.writeFileXzStream(file);
ioStreamWrite(stream, "Hello ", void 0, false);
ioStreamWrite(stream, "World! €áä", void 0, false);
stream.close();

stream = io.readFileXzStream(file);
var res = "";
ioStreamRead(stream, function(buffer) {
res += buffer;
}, void 0, false);
stream.close();

ow.test.assert(res, "Hello World! €áä", "Problem with read/writeFileXzStream or ioStreamRead/Write.");
io.rm(file);
};


exports.testBinaryFileDetection = () => {
ow.test.assert(io.isBinaryFile(getOpenAFJar()), true, "Problem with io.isBinaryFile detecting binary files.");
Expand Down
Loading