Package beans.core.db

Source Code of beans.core.db.PersoControl

package beans.core.db;

import beans.enumeration.Classe;
import beans.enumeration.Element;
import beans.enumeration.Stat;
import beans.enumeration.Type;
import beans.serializable.ChangeStatut;
import beans.serializable.Objet;
import beans.serializable.Skill;
import beans.serializable.Spell;
import beans.serializable.StatsPerso;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author mastersnes
*/
public class PersoControl {

    public static final String PERSO_OBJET = "PERSO_OBJET";
    public static final String PERSO_ABILITY = "PERSO_ABILITY";
   
    public static final String PERSO_NAME = "nomPerso";
    private final String CHARISMA = "charisma";
    private final String CONSTITUTION = "constitution";
    private final String DEXTERITY = "dexterity";
    private final String HPMAXMODIFIER = "hpMaxModifier";
    private final String STRENGTH = "strength";
    private final String WISDOM = "wisdom";
    private final String CLASSE = "classe";
   
    private final String TABLE_NAME = "PERSO";
   
    public StatsPerso getPerso(final String key) {
        // Stats retournés
        StatsPerso perso = new StatsPerso();
        retreiveComp(key, perso);
        PreparedStatement statement = null;
        try {
            // Préparer la requête
            statement = Database.getStatement("select * from " + TABLE_NAME + " where " + PERSO_NAME + " = ?");
            statement.setString(1, key);
           
            // Exécuter la requête
            ResultSet set = statement.executeQuery();
           
            // Récupérer la première ligne
            if (set.next()){
                getFromRowSet(set, perso);
            }
            // En cas d'erreur
            else{
                // Retourner une erreur dans les logs
                Logger.getLogger(ObjetControl.class.getName()).log(Level.SEVERE, null, new Exception(key + " not found in DB"));
            }
        } catch (final SQLException ex) {
            Logger.getLogger(ObjetControl.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            closeProperly(statement);
       
        return perso;
    }

    private void retreiveComp(final String key, final StatsPerso perso) {
        PersoJunctionControl persoJunctionControl = new PersoJunctionControl(PERSO_ABILITY);
        final List<String> idSpells = persoJunctionControl.getJunction(key);
        final List<Spell> spells = new ArrayList<Spell>();
        for (final String s : idSpells) {
            final SpellControl spellControl = new SpellControl();
            spells.add(spellControl.getSpell(s));
        }
       
        persoJunctionControl = new PersoJunctionControl(PERSO_ABILITY);
        final List<String> idSkills = persoJunctionControl.getJunction(key);
        final List<Skill> skills = new ArrayList<Skill>();
        for (final String s : idSkills) {
            final SkillControl skillControl = new SkillControl();
            skills.add(skillControl.getSkill(s));
        }
       
        persoJunctionControl = new PersoJunctionControl(PERSO_OBJET);
        final Map<String, Integer> idObjets = persoJunctionControl.getObjetJunction(key);
        final Map<Objet, Integer> objets = new HashMap<Objet, Integer>();
        for (final Entry<String, Integer> s : idObjets.entrySet()) {
            final ObjetControl objetControl = new ObjetControl();
            objets.put(objetControl.getObjet(s.getKey()), s.getValue());
        }
        perso.setSpells(spells);
        perso.setSkills(skills);
        perso.setObjets(objets);
    }

    private void closeProperly(final Statement statement) {
        if (statement != null) {
            try {
                statement.close();
            } catch (final SQLException ex) {
                Logger.getLogger(PersoControl.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    private void getFromRowSet(final ResultSet set, final StatsPerso perso) {
        try {
            perso.setName(set.getString(PERSO_NAME));
            perso.setCharisma(set.getInt(CHARISMA));
            perso.setConstitution(set.getInt(CONSTITUTION));
            perso.setDexterity(set.getInt(DEXTERITY));
            perso.setHpMaxModifier(set.getInt(HPMAXMODIFIER));
            perso.setStrength(set.getInt(STRENGTH));
            perso.setWisdom(set.getInt(WISDOM));
            perso.setClasse(Classe.valueOf(set.getString(CLASSE)));
        } catch (final SQLException ex) {
            Logger.getLogger(PersoControl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void saveChangeStatut(final StatsPerso perso) {
        PreparedStatement statement = null;
        ResultSet set = null;
        try {
            statement = Database.getStatement("insert into " + TABLE_NAME + " values (?, ?, ?, ?, ?, ?, ?, ?)");
            statement.setString(1, perso.getName());
            statement.setInt(2, perso.getCharisma());
            statement.setInt(3, perso.getConstitution());
            statement.setInt(4, perso.getDexterity());
            statement.setInt(5, perso.getHpMaxModifier());
            statement.setInt(6, perso.getStrength());
            statement.setInt(7, perso.getWisdom());
            statement.setString(8, perso.getClasse().name());
            statement.executeUpdate();
           
            saveJunction(perso);

        } catch (final SQLException ex) {
            Logger.getLogger(ObjetControl.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            closeProperly(statement);
        }
    }

    private void saveJunction(final StatsPerso perso) {
        PersoJunctionControl persoJunctionControl = new PersoJunctionControl(PERSO_ABILITY);
        for (final Spell spell : perso.getSpells()) {
            persoJunctionControl.saveJunction(perso.getName(), spell.getName());
        }
        persoJunctionControl = new PersoJunctionControl(PERSO_ABILITY);
        for (final Skill skill : perso.getSkills()) {
            persoJunctionControl.saveJunction(perso.getName(), skill.getName());
        }
        persoJunctionControl = new PersoJunctionControl(PERSO_OBJET);
        for (final Entry<Objet, Integer> entry : perso.getObjets().entrySet()) {
            final Objet objet = entry.getKey();
            final int nombre = entry.getValue();
            persoJunctionControl.saveJunction(perso.getName(), objet.getName(), nombre);
        }
    }
}
TOP

Related Classes of beans.core.db.PersoControl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.