package com.intellij.flex.maven;
import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
public final class Utils {
private static final Charset UTF_8 = Charset.forName("UTF-8");
public static final Map<String, String> CHILD_TAG_NAME_MAP = new HashMap<String, String>(12);
private static final ThreadLocal<char[]> CHAR_BUFFER = new ThreadLocal<char[]>() {
protected char[] initialValue() {
return new char[1024 * 8];
}
};
static {
CHILD_TAG_NAME_MAP.put("keep-as3-metadata", "name");
CHILD_TAG_NAME_MAP.put("include-namespaces", "uri");
CHILD_TAG_NAME_MAP.put("include-classes", "class");
CHILD_TAG_NAME_MAP.put("include-libraries", "library");
CHILD_TAG_NAME_MAP.put("locale", "locale-element");
CHILD_TAG_NAME_MAP.put("managers", "manager-class");
CHILD_TAG_NAME_MAP.put("externs", "symbol");
CHILD_TAG_NAME_MAP.put("includes", "symbol");
CHILD_TAG_NAME_MAP.put("extensions", "extension");
CHILD_TAG_NAME_MAP.put("include-resource-bundles", "bundle");
CHILD_TAG_NAME_MAP.put("theme", "filename");
CHILD_TAG_NAME_MAP.put("defaults-css-files", "filename");
}
public static void copyFile(File fromFile, File toFile) throws IOException {
final FileChannel fromChannel = new FileInputStream(fromFile).getChannel();
final FileChannel toChannel = new FileOutputStream(toFile).getChannel();
try {
fromChannel.transferTo(0, fromFile.length(), toChannel);
//noinspection ResultOfMethodCallIgnored
toFile.setLastModified(fromFile.lastModified());
}
finally {
fromChannel.close();
toChannel.close();
}
}
public static void write(StringBuilder stringBuilder, File out) throws IOException {
final OutputStreamWriter streamWriter = new OutputStreamWriter(new FileOutputStream(out), UTF_8);
final char[] chars = CHAR_BUFFER.get();
final int totalLength = stringBuilder.length();
int srcBegin = 0;
int srcEnd = Math.min(chars.length, totalLength);
try {
while (true) {
stringBuilder.getChars(srcBegin, srcEnd, chars, 0);
streamWriter.write(chars, 0, srcEnd - srcBegin);
srcBegin += chars.length;
if (srcBegin >= totalLength) {
break;
}
srcEnd += chars.length;
if (totalLength < srcEnd) {
srcEnd = totalLength;
}
}
}
finally {
try {
streamWriter.close();
}
catch (IOException ignored) {
}
}
}
}