package fr.whyt.parser; import static fr.whyt.item.enums.Type.ARMOR; import static fr.whyt.item.enums.Type.BACK; import static fr.whyt.item.enums.Type.BAG; import static fr.whyt.item.enums.Type.CONSUMABLE; import static fr.whyt.item.enums.Type.CONTAINER; import static fr.whyt.item.enums.Type.CRAFTMATERIAL; import static fr.whyt.item.enums.Type.GATHERING; import static fr.whyt.item.enums.Type.GIZMO; import static fr.whyt.item.enums.Type.MINIPET; import static fr.whyt.item.enums.Type.TOOL; import static fr.whyt.item.enums.Type.TRINKET; import static fr.whyt.item.enums.Type.TROPHY; import static fr.whyt.item.enums.Type.UPGRADE_COMPONENT; import static fr.whyt.item.enums.Type.WEAPON; import static fr.whyt.item.enums.Rarity.BASIC; import static fr.whyt.item.enums.Rarity.FINE; import static fr.whyt.item.enums.Rarity.MASTERWORK; import static fr.whyt.item.enums.Rarity.RARE; import static fr.whyt.item.enums.Rarity.EXOTIC; import static fr.whyt.item.enums.Rarity.ASCENDED; import static fr.whyt.item.enums.Rarity.LEGENDARY; import static fr.whyt.item.enums.Rarity.JUNK; import static fr.whyt.item.enums.WeaponType.AXE; //import static fr.whyt.item.enums.WeaponType.BAG; import static fr.whyt.item.enums.WeaponType.BULK; import static fr.whyt.item.enums.WeaponType.COMPONENT; //import static fr.whyt.item.enums.WeaponType.CONSUMABLE; import static fr.whyt.item.enums.WeaponType.DAGGER; import static fr.whyt.item.enums.WeaponType.DESSERT; import static fr.whyt.item.enums.WeaponType.DYE; import static fr.whyt.item.enums.WeaponType.EARRING; import static fr.whyt.item.enums.WeaponType.FEAST; import static fr.whyt.item.enums.WeaponType.FOCUS; import static fr.whyt.item.enums.WeaponType.GREATSWORD; import static fr.whyt.item.enums.WeaponType.HAMMER; import static fr.whyt.item.enums.WeaponType.HARPOON; import static fr.whyt.item.enums.WeaponType.INGREDIENT_COOKING; import static fr.whyt.item.enums.WeaponType.INSCRIPTION; import static fr.whyt.item.enums.WeaponType.INSIGNIA; import static fr.whyt.item.enums.WeaponType.LONGBOW; import static fr.whyt.item.enums.WeaponType.MACE; import static fr.whyt.item.enums.WeaponType.MEAL; import static fr.whyt.item.enums.WeaponType.PISTOL; import static fr.whyt.item.enums.WeaponType.POTION; import static fr.whyt.item.enums.WeaponType.REFINEMENT; import static fr.whyt.item.enums.WeaponType.RIFLE; import static fr.whyt.item.enums.WeaponType.SCEPTER; import static fr.whyt.item.enums.WeaponType.SEASONING; import static fr.whyt.item.enums.WeaponType.SHIELD; import static fr.whyt.item.enums.WeaponType.SHORTBOW; import static fr.whyt.item.enums.WeaponType.SNACK; import static fr.whyt.item.enums.WeaponType.SOUP; import static fr.whyt.item.enums.WeaponType.SPEARGUN; import static fr.whyt.item.enums.WeaponType.STAFF; import static fr.whyt.item.enums.WeaponType.SWORD; import static fr.whyt.item.enums.WeaponType.TORCH; import static fr.whyt.item.enums.WeaponType.TOY; import static fr.whyt.item.enums.WeaponType.TRIDENT; import static fr.whyt.item.enums.WeaponType.TWO_HANDED_TOY; //import static fr.whyt.item.enums.WeaponType.UPGRADE_COMPONENT; import static fr.whyt.item.enums.WeaponType.WARHORN; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Arrays; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import fr.whyt.item.Item; import fr.whyt.item.components.Damage; import fr.whyt.item.enums.AttributeType; import fr.whyt.item.enums.Rarity; import fr.whyt.item.enums.Type; import fr.whyt.item.enums.WeaponType; import fr.whyt.item.extend.CraftMaterial; import fr.whyt.item.extend.Weapon; /** * Cette classe impl�mente {@link DBConnect}.<br> * R�cup�re chaque �l�ment pr�sent dans la base de donn�es * et cr�e un objet le repr�sentant.<br> * Les objets cr�es sont des {@link Weapon} ou {@link CraftMaterial} h�rit�s de {@link Item}.<br> * <br> * @author WhyT * */ public class DataDBReader implements DBReader, DBConnect { private static Type getType (String type) { switch (type.toUpperCase()) { case "ARME": return WEAPON; case "ARTISANAT": return CRAFTMATERIAL; default: return null; } } private static Rarity getScarcity (String scarcity) { switch (scarcity.toUpperCase()) { case "BASIC": return BASIC; case "FINE": return FINE; case "MASTERWORK": return MASTERWORK; case "RARE": return RARE; case "EXOTIC": return EXOTIC; case "ASCENDED": return ASCENDED; case "LEGENDARY": return LEGENDARY; case "JUNK": return JUNK; default: return null; } } private static WeaponType getWeaponType (String weapontype) { switch (weapontype.toUpperCase()) { case "ARC_COURT": return ARC_COURT; case "ARC_LONG": return ARC_LONG; case "BATON": return BATON; case "BOUCLIER": return BOUCLIER; case "COR_DE_GUERRE": return COR_DE_GUERRE; case "DAGUE": return DAGUE; case "EPEE": return EPEE; case "ESPADON": return ESPADON; case "FOCUS": return FOCUS; case "FUSIL": return FUSIL; case "FUSIL_HARPON": return FUSIL_HARPON; case "HACHE": return HACHE; case "LANCE": return LANCE; case "MARTEAU": return MARTEAU; case "MASSE": return MASSE; case "PISTOLET": return PISTOLET; case "SCEPTRE": return SCEPTRE; case "TORCHE": return TORCHE; case "TRIDENT": return TRIDENT; default: return null; } } private static Bonus getBonus (String s_bonus) { Stat[] bonus = new Stat[0]; String regex = "(?<bonus>(?<value>\\d+) (?<type>\\w+)[ ]?)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(s_bonus); while(m.find()) { String type = m.group("type"); // to AttributeType String s_value = m.group("value"); // to int AttributeType stattype; switch (type.toUpperCase()) { case "PUISSANCE": stattype = PUISSANCE; break; case "ROBUSTESSE": stattype = ROBUSTESSE; break; case "VITALITE": stattype = VITALITE; break; case "PRECISION": stattype = PRECISION; break; case "GUERISON": stattype = GUERISON; break; case "ALTERATION": stattype = ALTERATION; break; case "CRITIQUE": stattype = CRITIQUE; break; default: stattype = null; break; } int value = Integer.parseInt(s_value != null && !s_value.isEmpty() ? s_value : "0"); bonus = Arrays.copyOf(bonus, bonus.length+1); bonus[bonus.length-1] = new Stat(stattype, value); } return new Bonus(bonus); } public static Map<Integer, Item> extractData () { if(!data.exists() || !data.canRead()) { return null; } try { BufferedReader br = new BufferedReader(new FileReader(data)); Pattern p = Pattern.compile(dataRegExp); for (String line; (line = br.readLine()) != null; ) { Matcher m = p.matcher(line); if(!m.matches()) continue; // ligne non valide String item = m.group("item"); if(item == null || item.isEmpty()) continue; // ligne vide ou commentaire String name = m.group("name"); Type type = getType(m.group("type")); Rarity rarity = getScarcity(m.group("scarcity")); int level = Integer.parseInt(m.group("level")); int price = Integer.parseInt(m.group("price")); switch (type) { case WEAPON: WeaponType weapontype = getWeaponType(m.group("weapontype")); Damage damage = new Damage( Integer.parseInt(m.group("highdamage")), Integer.parseInt(m.group("lowdamage"))); Bonus bonus = getBonus(m.group("bonuslist")); Item new_weapon = new Weapon(name, rarity, level, price, damage, bonus, weapontype); if(!items.containsKey(new_weapon.getId())) { items.put(new_weapon.getId(), new_weapon); } break; case CRAFTMATERIAL: Item new_craft_material = new CraftMaterial(name, rarity, level, price); if(!items.containsKey(new_craft_material.getId())) { items.put(new_craft_material.getId(), new_craft_material); } break; default: break; } } br.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return items; } }