package application.vues;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Vector;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import application.exceptions.DataFormatException;
import application.modeles.ModeleClassement;
import application.modeles.ModeleClassementCollection;
import application.modeles.ModeleVideotheque;
import application.modeles.ModeleRepartition;
import application.modeles.ModeleRepartitionCollection;
@SuppressWarnings("serial")
public class VuePanelStats extends JPanel{
private JLabel _lbltop10Acteur;
private JLabel _lbltop10Realisateur;
private JLabel _lblRepartition;
private JScrollPane _jsAfficheTop10Act;
private JScrollPane _jsAfficheTop10Real;
private JLabel _lblAfficheRepartition;
private JPanel _pnlLabelInfo;
private JPanel _pnlLabelListe;
private ModeleRepartitionCollection _repart;
private ModeleClassementCollection _ladder;
private ModeleVideotheque _mod;
public VuePanelStats(ModeleVideotheque mod) {
_mod = mod;
_lbltop10Acteur = new JLabel("Top 10 des meilleurs acteurs : ");
_lbltop10Realisateur = new JLabel("Top 10 des meilleurs réalisateurs : ");
_lblRepartition = new JLabel("Répartition par genre : ");
_lblAfficheRepartition = new JLabel();
_pnlLabelInfo = new JPanel(new GridLayout(4,1));
_pnlLabelListe = new JPanel (new GridLayout(2,1));
JPanel pnlTab = new JPanel (new GridLayout(2,2));
_repart = new ModeleRepartitionCollection(_mod.get_DB());
_ladder = new ModeleClassementCollection(_mod.get_DB());
_pnlLabelInfo.add(_lbltop10Acteur);
_pnlLabelInfo.add(_lbltop10Realisateur);
_pnlLabelInfo.add(_lblRepartition);
this.VuePanelStatsLoad();
pnlTab.add(_jsAfficheTop10Act);
pnlTab.add(_jsAfficheTop10Real);
_pnlLabelListe.add(pnlTab);
_pnlLabelListe.add(_lblAfficheRepartition);
setVisible(true);
setLayout(new BorderLayout());
add(_pnlLabelInfo, BorderLayout.WEST);
add(_pnlLabelListe, BorderLayout.EAST);
add(_pnlLabelInfo,BorderLayout.WEST);
add(_pnlLabelListe, BorderLayout.CENTER);
}
/**
*
* Methode qui permet de construire les outils statistiques
* (diagrammes et tableaux).
*
*/
public void VuePanelStatsLoad(){
try {
String[] columnNames = {"Prénom", "Nom", "Nombre de film"};
Object[][] data1 = {
{"Mary", "Campione", 25},
{"Barbara", "Goa'Uld", 23},
{"Polly", "Nôme", 15},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3}
};
Object[][] data2 = {
{"Mary", "Campione", 25},
{"Barbara", "Goa'Uld", 23},
{"Polly", "Nôme", 15},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3},
{"Aron", "Shariel",3}
};
Collection<ModeleClassement> top10Acteurs = _ladder.top10Acteurs();
Collection<ModeleClassement> top10Real = _ladder.top10Realisateurs();
Collection<ModeleRepartition> repartition = _repart.getRepartitions();
Vector<ModeleClassement> lstacteurs = (Vector<ModeleClassement>) top10Acteurs;
Vector<ModeleClassement> lstreal = (Vector<ModeleClassement>)top10Real;
Vector<ModeleRepartition> repart = (Vector<ModeleRepartition>) repartition;
DefaultPieDataset pieDataset = new DefaultPieDataset();
for(int i=0; i<top10Acteurs.size(); i++){
// On remplit ligne par ligne chaque colone du tableau.
data1[i][0] = lstacteurs.elementAt(i).getIndividu().getPrenom();
data1[i][1] = lstacteurs.elementAt(i).getIndividu().getNom();
data1[i][2] = lstacteurs.elementAt(i).getNbAppritions();
}
for(int i=0; i<top10Real.size(); i++){
data1[i][0] = lstreal.elementAt(i).getIndividu().getPrenom();
data1[i][1] = lstreal.elementAt(i).getIndividu().getNom();
data1[i][2] = lstreal.elementAt(i).getNbAppritions();
}
for(int i=0; i<repart.size(); i++){
// remplissage du diagramme 3D pour les repartitions par genre.
pieDataset.setValue(repart.elementAt(i).getGenre().getLibelle(), repart.elementAt(i).getTaux());
}
// On finalise les tableaux avant de les ajouter aux JScrollPane.
JTable tableActeurs = new JTable(data1, columnNames);
JTable tableRealisateur = new JTable(data2, columnNames);
tableActeurs.setFillsViewportHeight(true);
tableRealisateur.setFillsViewportHeight(true);
_jsAfficheTop10Act = new JScrollPane (tableActeurs);
_jsAfficheTop10Real = new JScrollPane (tableRealisateur);
// Construction du diagramme.
JFreeChart chart = ChartFactory.createPieChart3D("Répartition par genre", pieDataset,true, true, true );
chart.setBorderVisible(false);
BufferedImage image = chart.createBufferedImage(580,275);
_lblAfficheRepartition.setIcon(new ImageIcon(image));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DataFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}