/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.script.gui;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.Arrays;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
/**
* Utility for handling script in editor.
*
* @author Arne Bachmann
* @author Doreen Seider
*/
public final class ScriptHandler {
private static final int BUF_SIZE = 1024 * 8;
private ScriptHandler() {}
/**
* Decode the given byte sequence into a String.
* @param data The data to decode
* @param encoding The encoding
* @return The resulting String
*/
public static String decodeString(final byte[] data, final String encoding) {
return Charset.forName(encoding).decode(ByteBuffer.wrap(data)).toString();
}
/**
* Reads a script from the workspace into a String.
* @param file The script representing {@link IFile} object
* @param encoding The scripts's encoding to decode from
* @return The scripts's contents as String
* @throws CoreException if an error occurs
* @throws IOException if an error occurs
*/
public static String loadSciptAsString(final IFile file, final String encoding) throws CoreException, IOException {
final byte[] bytes = loadScriptAsBytes(file.getContents());
return decodeString(bytes, encoding);
}
/**
* Reads a {@link InputStream} into a byte array.
*
* @param is {@link InputStream} (with script contents)
* @return The scripts's contents as byte arrays.
* @throws CoreException if an error occurs.
* @throws IOException if an error occurs.
*/
public static byte[] loadScriptAsBytes(final InputStream is) throws CoreException, IOException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final byte[] buffer = new byte[BUF_SIZE];
int num;
while ((num = is.read(buffer)) > 0) {
baos.write(buffer, 0, num);
}
is.close();
baos.close(); // effect-less
return baos.toByteArray();
}
/**
* Encode a Java string to byte array.
* @param string The string to encode
* @param encoding The encoding to produce
* @return The resulting byte sequence
*/
public static byte[] encodeString(final String string, final String encoding) {
final ByteBuffer bb = Charset.forName(encoding).encode(string);
final byte[] buffer = bb.array();
return Arrays.copyOfRange(buffer, 0, bb.limit());
}
}