package org.jboss.as.jdr.util;
import org.jboss.vfs.VirtualFile;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarFile;
/**
* User: csams
* Date: 11/4/12
* Time: 3:40 PM
*/
public final class Utils {
public static void safeClose(JarFile jf){
try{
if(jf != null) {
jf.close();
}
}catch(Exception e){
}
}
public static void safelyClose(InputStream is){
try{
if(is != null) {
is.close();
}
}catch(Exception e){
}
}
public static List<String> readLines(InputStream input) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
List<String> result = new ArrayList<String>();
String line = reader.readLine();
while(line != null){
result.add(line);
line = reader.readLine();
}
return result;
}
public static String toString(VirtualFile r) throws IOException {
return new String(toBytes(r));
}
public static byte[] toBytes(VirtualFile r) throws IOException {
byte [] buffer = new byte[1024];
InputStream is = r.openStream();
ByteArrayOutputStream os = new ByteArrayOutputStream();
int bytesRead = is.read(buffer);
while( bytesRead > -1 ) {
os.write(buffer, 0, bytesRead);
bytesRead = is.read(buffer);
}
Utils.safelyClose(is);
return os.toByteArray();
}
/**
* Ensure InputStream actually skips ahead the required number of bytes
* @param is
* @param amount
* @throws IOException
*/
public static void skip(InputStream is, long amount) throws IOException {
long leftToSkip = amount;
long amountSkipped = 0;
while(leftToSkip > 0 && amountSkipped >= 0){
amountSkipped = is.skip(leftToSkip);
leftToSkip -= amountSkipped;
}
}
public static boolean isSymlink(VirtualFile vFile) throws IOException {
File file = vFile.getPhysicalFile();
if(Utils.isWindows()){
return false;
}
File fileInCanonicalDir = null;
if (file.getParent() == null) {
fileInCanonicalDir = file;
} else {
File canonicalDir = file.getParentFile().getCanonicalFile();
fileInCanonicalDir = new File(canonicalDir, file.getName());
}
if (fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile())) {
return false;
} else {
return true;
}
}
public static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";
public static final String LINE_SEP = String.format("%n");
public static final char WIN_SEP = '\\';
public static final char SYS_SEP = File.separatorChar;
public static boolean isWindows() {
return SYS_SEP == WIN_SEP;
}
public static final long ONE_KB = 1024;
public static final long ONE_MB = ONE_KB * ONE_KB;
public static final long ONE_GB = ONE_KB * ONE_MB;
public static final long ONE_TB = ONE_KB * ONE_GB;
}