package fr.prcaen.externalresources.model; import android.support.annotation.NonNull; import fr.prcaen.externalresources.converter.Converter; import fr.prcaen.externalresources.converter.JsonConverter; import fr.prcaen.externalresources.converter.XmlConverter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @SuppressWarnings("unused") public final class Resources { protected final ConcurrentHashMap<String, Resource> members; public Resources() { this.members = new ConcurrentHashMap<>(); } public Resources(@NonNull ConcurrentHashMap<String, Resource> members) { this.members = members; } public static Resources from(Reader reader, Converter converter) throws IOException { return converter.fromReader(reader); } public static Resources from(String string, Converter converter) throws IOException { return from(new StringReader(string), converter); } public static Resources fromJson(Reader reader) throws IOException { return from(reader, new JsonConverter()); } public static Resources fromJson(String string) throws IOException { return from(string, new JsonConverter()); } public static Resources fromJson(InputStream reader) throws IOException { return fromJson(new InputStreamReader(reader)); } public static Resources fromXml(Reader reader) throws IOException { return from(reader, new XmlConverter()); } public static Resources fromXml(String string) throws IOException { return from(string, new XmlConverter()); } public static Resources fromXml(InputStream reader) throws IOException { return fromXml(new InputStreamReader(reader)); } public Resource add(String key, Resource value) { return members.put(key, value); } @NonNull protected Set<Entry<String, Resource>> entrySet() { return members.entrySet(); } public boolean has(String key) { return members.containsKey(key); } public Resource get(String key) { return members.get(key); } public Resources merge(Resources resources) { members.putAll(resources.members); return this; } }