package com.prezi.haxe.gradle;
import com.google.common.collect.Iterators;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class EmbeddedResourceEncoding {
public static String encode(Map<String, File> resources) {
StringBuilder encoded = new StringBuilder();
for (Map.Entry<String, File> entry : resources.entrySet()) {
String name = entry.getKey();
File resource = entry.getValue();
if (name.contains("@")) {
throw new IllegalArgumentException("Resource name must not contain '@': " + name);
}
if (resource.getName().contains("@")) {
throw new IllegalArgumentException("Resource file name must not contain '@': " + name);
}
if (encoded.length() > 0) {
encoded.append(" ");
}
try {
encoded.append(URLEncoder.encode(resource.getName(), "utf-8"));
if (!name.equals(resource.getName())) {
encoded.append("@");
encoded.append(URLEncoder.encode(name, "utf-8"));
}
} catch (UnsupportedEncodingException ex) {
throw new AssertionError(ex);
}
}
return encoded.toString();
}
public static Map<String, File> decode(String encoded, File baseDir) {
LinkedHashMap<String, File> resources = new LinkedHashMap<String, File>();
if (encoded != null && !encoded.isEmpty()) {
for (String res : encoded.split(" ")) {
String fileName;
String name;
try {
if (res.indexOf('@') >= 0) {
Iterator<String> iterator = Iterators.forArray(res.split("@", 2));
String fileNameEnc = iterator.hasNext() ? iterator.next() : null;
String nameEnc = iterator.hasNext() ? iterator.next() : null;
fileName = URLDecoder.decode(fileNameEnc, "utf-8");
name = URLDecoder.decode(nameEnc, "utf-8");
} else {
fileName = URLDecoder.decode(res, "utf-8");
name = fileName;
}
} catch (UnsupportedEncodingException ex) {
throw new AssertionError(ex);
}
resources.put(name, new File(baseDir, fileName));
}
}
return resources;
}
}