package floobits.common;
import com.google.gson.Gson;
import floobits.utilities.Flog;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import java.io.File;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.HashMap;
public class DotFloo {
private static class DotFlooJson implements Serializable {
String url;
HashMap<String, String> hooks;
}
public static File path(String base_dir) {
return new File(FilenameUtils.concat(base_dir, ".floo"));
}
private static DotFlooJson parse(String base_dir) {
String floo;
try {
floo = FileUtils.readFileToString(path(base_dir), "UTF-8");
} catch (Throwable e) {
Flog.debug("no floo file %s", path(base_dir));
return null;
}
try {
return new Gson().fromJson(floo, (Type) DotFlooJson.class);
} catch (Throwable e) {
Flog.error(e);
}
return null;
}
public static FlooUrl read(String base_dir) {
DotFlooJson dotFlooJson = parse(base_dir);
if (dotFlooJson == null)
return null;
try {
return new FlooUrl(dotFlooJson.url);
} catch (MalformedURLException e) {
return null;
}
}
public static void write(String base_dir, String url) {
File file = path(base_dir);
DotFlooJson dotFlooJson = parse(base_dir);
if (dotFlooJson == null) {
Flog.warn("DotFloo isn't json.");
if (file.exists()) {
return;
}
dotFlooJson = new DotFlooJson();
}
String json = "{";
String spaces = " ";
String newline = "\n";
if (dotFlooJson.hooks != null) {
String[] strings = new String[dotFlooJson.hooks.size()];
dotFlooJson.hooks.keySet().toArray(strings);
Arrays.sort(strings);
json += String.format("%s%s\"hooks\": {", newline, spaces);
int i;
for(i=0; i<strings.length-1; i++) {
String key = strings[i];
json += String.format("%s%s%s\"%s\": \"%s\",", newline, spaces, spaces, key, dotFlooJson.hooks.get(key));
}
String key = strings[i];
json += String.format("%s%s%s\"%s\": \"%s\"", newline, spaces, spaces, key, dotFlooJson.hooks.get(key));
json += newline + spaces + "},";
}
json += String.format("%s%s\"url\": \"%s\"", newline, spaces, url);
json += newline + "}";
try {
FileUtils.write(path(base_dir), json, "UTF-8");
} catch (Throwable e) {
Flog.error(e);
}
}
}