package games.strategy.engine.framework.map.download; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.yaml.snakeyaml.Yaml; import games.strategy.util.Version; /** * Utility class to parse an available map list file config file - used to determine which maps are available for * download. */ final class DownloadFileParser { private DownloadFileParser() {} enum Tags { url, mapType, version, mapName, description, mapCategory, img } enum ValueType { MAP, MAP_TOOL, MAP_SKIN, MAP_MOD } public static List<DownloadFileDescription> parse(final InputStream is) { @SuppressWarnings("unchecked") final List<Map<String, String>> yamlData = new Yaml().loadAs(is, List.class); final List<DownloadFileDescription> rVal = new ArrayList<>(); for (final Map<String, String> yaml : yamlData) { final String url = yaml.get(Tags.url.toString()); final String description = yaml.get(Tags.description.toString()); final String mapName = yaml.get(Tags.mapName.toString()); Version version = null; final Object versionObject = yaml.get(Tags.version.toString()); if (versionObject != null) { version = new Version(String.valueOf(versionObject)); } DownloadFileDescription.DownloadType downloadType = DownloadFileDescription.DownloadType.MAP; final String mapTypeString = yaml.get(Tags.mapType.toString()); if (mapTypeString != null) { downloadType = DownloadFileDescription.DownloadType.valueOf(mapTypeString); } DownloadFileDescription.MapCategory mapCategory = DownloadFileDescription.MapCategory.EXPERIMENTAL; String mapCategoryString = yaml.get(Tags.mapCategory.toString()); if (mapCategoryString != null) { mapCategory = DownloadFileDescription.MapCategory.valueOf(mapCategoryString); } String img = yaml.get(Tags.img.toString()); if (img == null) { img = ""; } final DownloadFileDescription dl = new DownloadFileDescription(url, description, mapName, version, downloadType, mapCategory, img); rVal.add(dl); } return rVal; } }