Beans.PlayersBean.java Source code

Java tutorial

Introduction

Here is the source code for Beans.PlayersBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import BusinessLogic.CodesImporter;
import Model.CodeAward;
import Model.MappingCodeAwards;
import Model.Player;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.query.Query;

/**
 *
 * @author LEVALLOIS
 */
@ManagedBean
@RequestScoped
public class PlayersBean implements Serializable {

    @Inject
    SingletonDB singleton;

    private List<Player> players;

    public PlayersBean() {
    }

    @PostConstruct
    public void init() {

        try {
            Set<CodeAward> codeAwards = CodesImporter.importCodes();
            MappingCodeAwards.initializeMapping();

            Datastore ds = singleton.getDatastore();
            Query q = ds.createQuery(Player.class);
            players = q.asList();

            if (players == null) {
                players = new ArrayList();
            }

            for (Player player : players) {

                //            Query<Player> qUNiquePlayer = ds.createQuery(Player.class).filter("twitter", player.getTwitter());
                //            Player foundPlayer = (Player) qUNiquePlayer.get();
                StringBuilder sb = new StringBuilder();

                Multiset<String> categoryCodeAwards = HashMultiset.create();

                for (String code : player.getCodes()) {
                    for (CodeAward codeAward : codeAwards) {
                        if (code.equals(codeAward.getCode())) {
                            categoryCodeAwards.add(codeAward.getCategory());
                            try {
                                player.setPoints(player.getPoints() + codeAward.getPoints());
                            } catch (Exception e) {
                                System.out.println("Exception when adding points: ");
                                System.out.println(e);
                            }
                            break;
                        }
                    }
                }

                for (String categoryCodeAward : categoryCodeAwards.elementSet()) {
                    if (MappingCodeAwards.getMapCategoryToFontIcon().get(categoryCodeAward) != null) {
                        sb.append("<i style=\"font-size:0.8em\" class=\"fa ")
                                .append(MappingCodeAwards.getMapCategoryToFontIcon().get(categoryCodeAward))
                                .append("\"></i> x ").append(categoryCodeAwards.count(categoryCodeAward));
                        sb.append(", ");
                    }
                }
                if (sb.lastIndexOf(", ") > 0) {
                    sb.delete(sb.lastIndexOf(","), sb.length() - 1);
                }
                player.setHtmlListOfCodeAwards(sb.toString());

            }
        } catch (IOException ex) {
            Logger.getLogger(PlayersBean.class.getName()).log(Level.SEVERE, null, ex);
        }

        Collections.sort(players);
        Collections.reverse(players);

        //find rank
        Player previous = null;
        int counterPlayers = 0;

        for (Player player : players) {
            counterPlayers++;
            if (previous != null) {
                if (player.getPoints() == previous.getPoints()) {
                    player.setRank(previous.getRank());
                } else {
                    player.setRank(counterPlayers);
                }
            } else {
                player.setRank(counterPlayers);
            }
            previous = player;

        }
    }

    public List<Player> getPlayers() {
        return players;
    }

}