/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package net.pms.configuration;
import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
import net.pms.util.FileUtil;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author mfranco
*/
public class MapFileConfiguration {
private static final Logger logger = LoggerFactory.getLogger(MapFileConfiguration.class);
private String name;
private String thumbnailIcon;
private List<MapFileConfiguration> children;
private List<File> files;
public String getName() {
return name;
}
public String getThumbnailIcon() {
return thumbnailIcon;
}
public List<MapFileConfiguration> getChildren() {
return children;
}
public List<File> getFiles() {
return files;
}
public void setName(String n) {
name = n;
}
public void setThumbnailIcon(String t) {
thumbnailIcon = t;
}
public void setFiles(List<File> f) {
files = f;
}
public MapFileConfiguration() {
children = new ArrayList<MapFileConfiguration>();
files = new ArrayList<File>();
}
public static List<MapFileConfiguration> parse(String conf) {
if (conf != null && conf.startsWith("@")) {
File file = new File(conf.substring(1));
conf = null;
if (FileUtil.isFileReadable(file)) {
try {
conf = FileUtils.readFileToString(file);
} catch (IOException ex) {
return null;
}
} else {
logger.warn("Can't read file: {}", file.getAbsolutePath());
}
}
if (conf == null || conf.length() == 0) {
return null;
}
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(File.class, new FileSerializer());
Gson gson = gsonBuilder.create();
Type listType = (new TypeToken<ArrayList<MapFileConfiguration>>() { }).getType();
List<MapFileConfiguration> out = gson.fromJson(conf, listType);
return out;
}
}
class FileSerializer implements JsonSerializer<File>, JsonDeserializer<File> {
private static final Logger logger = LoggerFactory.getLogger(FileSerializer.class);
public JsonElement serialize(File src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.getAbsolutePath());
}
public File deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
File file = new File(json.getAsJsonPrimitive().getAsString());
if (!FileUtil.isDirectoryReadable(file)) {
logger.warn("Can't read directory: {}", file.getAbsolutePath());
return null;
} else {
return file;
}
}
}