https://hal.archives-ouvertes.fr/hal-02404862
Tip revision: 759bd8995e51c4e40aa72fd5657d5e6e04c6da89 authored by Software Heritage on 04 February 2020, 13:44:27 UTC
hal: Deposit 405 in collection hal
hal: Deposit 405 in collection hal
Tip revision: 759bd89
FilsListePanel.java
package vue.projetPanelInf;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import modeles.ConversationModel;
import modeles.LocuteurModel;
import modeles.MessageModel;
import modeles.evenements.ListeChangedEvent;
import modeles.trees.FilsTreeModel;
import org.jdesktop.swingx.JXTreeTable;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.PeriodType;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import charts.ChartNbreMessagesDate;
import renderers.CustomMultiXYPlotBoxPanel;
import renderers.CustomStatBoxPanel;
import renderers.DateRenderer;
import renderers.RoundedPanel;
import vue.ToolBar;
import vue.dialog.DialogPanelInfoConversation;
import vue.dialog.DialogPanelInfoLocuteur;
import controleurs.ListeController;
import controleurs.vuesabstraites.ListeView;
public class FilsListePanel extends ListeView implements TreeSelectionListener, ItemListener {
private JLabel labFrom, txtFrom, labSujet, txtSujet, labDate, txtDate;
private CustomStatBoxPanel box1, box2, box3, box4, box5, box6, box7, box8, box9;
private CustomMultiXYPlotBoxPanel chart1;
private JPanel cards, panel, panelGaucheHaut, panelGaucheBas, panelChk, panelGraphs;
private LamePanel panelVide;
private JXTreeTable xTreeTable;
private DateFormat format = new SimpleDateFormat("dd/MM/yyyy H:mm");
private JTextPane detailMF;
private JScrollPane scrollFils, scrollDetailMF;
private JCheckBox chkOriginalMessage;
private MessageModel messageSelected;
private StyledDocument doc;
private JSplitPane scrollSplitPane;
private FilsTreeModel filsTreeModel;
private TreePath treePathToSelect;
private ResourceBundle bundleFilsListe;
private int colIndexSorted = 999;
private boolean colIndexSortedAsc, colIndexSortedDesc;
private Map<String, MessageModel> mapIdMessages;
private Object nodeSelected;
private Font gras, normal;
private CardLayout cl;
private JButton bMois;
private DecimalFormat df = new DecimalFormat("0.00");
public FilsListePanel(ListeController listeController, ResourceBundle bundleFilsListe) {
super(listeController);
format.setLenient(true);
this.bundleFilsListe = bundleFilsListe;
}
public JPanel getPanel() {
int largeurLabel = 70;
int hauteurLabel = 15;
int largeurTxtLabel = 530;
int hauteurTxtLabel = 15;
Dimension dimLabel = new Dimension(largeurLabel, hauteurLabel);
Dimension dimLabelTxt = new Dimension(largeurTxtLabel, hauteurTxtLabel);
gras = new Font("sansserif", Font.BOLD, 12);
normal = new Font("sansserif", Font.PLAIN, 12);
panel = new JPanel();
panel.setOpaque(true);
panel.setAlignmentY(Component.TOP_ALIGNMENT);
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.setPreferredSize(new Dimension(1300, 750));
panel.setMinimumSize(new Dimension(1300, 750));
panel.setMaximumSize(new Dimension(1300, 750));
panel.setBackground(Color.WHITE);
// panel.setBorder(new TitledBorder(""));
panel.setName("PANEL_PLEIN");
RoundedPanel panelGauche = new RoundedPanel();
panelGauche.setPreferredSize(new Dimension(645, 750));
panelGauche.setMinimumSize(new Dimension(645, 750));
panelGauche.setMaximumSize(new Dimension(645, 750));
panelGauche.setBackground(new Color(248, 248, 248));
GridBagConstraints gbcGauche = new GridBagConstraints();
RoundedPanel panelDroite = new RoundedPanel();
panelDroite.setPreferredSize(new Dimension(665, 750));
panelDroite.setMinimumSize(new Dimension(665, 750));
panelDroite.setMaximumSize(new Dimension(665, 750));
panelDroite.setAlignmentY(Component.TOP_ALIGNMENT);
panelDroite.setAlignmentX(Component.CENTER_ALIGNMENT);
panelGaucheHaut = new JPanel(new GridBagLayout());
panelGaucheHaut.setPreferredSize(new Dimension(620, 50));
panelGaucheHaut.setMinimumSize(new Dimension(620, 50));
panelGaucheHaut.setMaximumSize(new Dimension(620, 50));
panelGaucheHaut.setAlignmentX(Component.LEFT_ALIGNMENT);
panelGaucheHaut.setAlignmentY(Component.TOP_ALIGNMENT);
panelGaucheHaut.setBackground(new Color(248, 248, 248));
panelGaucheBas = new JPanel();
panelGaucheBas.setLayout(new BoxLayout(panelGaucheBas, BoxLayout.Y_AXIS));
panelGaucheBas.setPreferredSize(new Dimension(620, 670));
panelGaucheBas.setMinimumSize(new Dimension(620, 670));
panelGaucheBas.setMaximumSize(new Dimension(620, 670));
panelGaucheBas.setAlignmentX(Component.LEFT_ALIGNMENT);
panelGaucheBas.setBackground(new Color(248, 248, 248));
GridBagConstraints cHaut = new GridBagConstraints();
JPanel panel1 = new JPanel(new GridBagLayout());
panel1.setBackground(new Color(248, 248, 248));
GridBagConstraints c1 = new GridBagConstraints();
labFrom = new JLabel("", SwingConstants.LEFT);
labFrom.setPreferredSize(dimLabel);
labFrom.setMinimumSize(dimLabel);
labFrom.setPreferredSize(dimLabel);
labFrom.setFont(normal);
txtFrom = new JLabel("", SwingConstants.LEFT);
txtFrom.setPreferredSize(dimLabelTxt);
txtFrom.setMinimumSize(dimLabelTxt);
txtFrom.setMaximumSize(dimLabelTxt);
txtFrom.setFont(gras);
c1.gridx = 0;
c1.gridy = 0;
panel1.add(labFrom, c1);
c1.gridx = 1;
c1.gridy = 0;
panel1.add(txtFrom, c1);
GridBagLayout l2 = new GridBagLayout();
JPanel panel2 = new JPanel();
panel2.setLayout(l2);
panel2.setBackground(new Color(248, 248, 248));
GridBagConstraints c2 = new GridBagConstraints();
labSujet = new JLabel("", SwingConstants.LEFT);
labSujet.setPreferredSize(dimLabel);
labSujet.setMinimumSize(dimLabel);
labSujet.setMaximumSize(dimLabel);
labSujet.setFont(normal);
txtSujet = new JLabel("", SwingConstants.LEFT);
txtSujet.setPreferredSize(dimLabelTxt);
txtSujet.setMinimumSize(dimLabelTxt);
txtSujet.setMaximumSize(dimLabelTxt);
txtSujet.setFont(gras);
c2.gridx = 0;
c2.gridy = 0;
panel2.add(labSujet, c2);
c2.gridx = 1;
c2.gridy = 0;
panel2.add(txtSujet, c2);
GridBagLayout l3 = new GridBagLayout();
JPanel panel3 = new JPanel();
panel3.setLayout(l3);
panel3.setBackground(new Color(248, 248, 248));
GridBagConstraints c3 = new GridBagConstraints();
labDate = new JLabel("", SwingConstants.LEFT);
labDate.setPreferredSize(dimLabel);
labDate.setMinimumSize(dimLabel);
labDate.setMaximumSize(dimLabel);
labDate.setFont(normal);
txtDate = new JLabel("", SwingConstants.LEFT);
txtDate.setPreferredSize(dimLabelTxt);
txtDate.setMinimumSize(dimLabelTxt);
txtDate.setMaximumSize(dimLabelTxt);
txtDate.setFont(gras);
c3.gridx = 0;
c3.gridy = 0;
panel3.add(labDate, c3);
c3.gridx = 1;
c3.gridy = 0;
panel3.add(txtDate, c3);
cHaut.gridx = 0;
cHaut.gridy = 0;
panelGaucheHaut.add(panel1, cHaut);
cHaut.gridx = 0;
cHaut.gridy = 1;
panelGaucheHaut.add(panel2, cHaut);
cHaut.gridx = 0;
cHaut.gridy = 2;
panelGaucheHaut.add(panel3, cHaut);
// JXTREETABLE
xTreeTable = new JXTreeTable(new FilsTreeModel(bundleFilsListe));
xTreeTable.addTreeSelectionListener(this);
xTreeTable.setRootVisible(false);
xTreeTable.setDefaultRenderer(Date.class, new DateRenderer());
// HEADERS : renderer et mouse listener (pour sorting)
final TableCellRenderer r = xTreeTable.getTableHeader().getDefaultRenderer();
TableCellRenderer wrapper = new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = r.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (comp instanceof JLabel) {
JLabel label = (JLabel) comp;
label.setIcon(getSortIcon(table, column));
}
return comp;
}
private Icon getSortIcon(JTable table, int column) {
if (column == colIndexSorted)
if (colIndexSortedAsc)
return UIManager.getIcon("Table.ascendingSortIcon");
else
return UIManager.getIcon("Table.descendingSortIcon");
else
return null;
}
};
xTreeTable.getTableHeader().setDefaultRenderer(wrapper);
xTreeTable.getTableHeader().addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
int colIndexClicked = xTreeTable.getColumnModel().getColumnIndexAtX(e.getX());
if (colIndexClicked != colIndexSorted) {
colIndexSorted = colIndexClicked;
colIndexSortedAsc = true;
colIndexSortedDesc = false;
} else {
if (colIndexSortedAsc) {
colIndexSortedAsc = false;
colIndexSortedDesc = true;
} else {
colIndexSortedAsc = true;
colIndexSortedDesc = false;
}
}
filsTreeModel = new FilsTreeModel(mapIdMessages, bundleFilsListe, colIndexClicked, colIndexSortedAsc);
xTreeTable.setTreeTableModel(filsTreeModel);
applyRenderer();
if (xTreeTable.getSelectedRow() != 0 && messageSelected != null)
setIdentifiantMessageToShow(messageSelected.getIdentifiant());
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});
// CELL SELECTION
xTreeTable.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int colViewClicked = xTreeTable.getSelectedColumn();
if (nodeSelected instanceof DefaultMutableTreeTableNode) {
Object userObject = ((DefaultMutableTreeTableNode) nodeSelected).getUserObject();
if (userObject instanceof MessageModel) {
messageSelected = (MessageModel) userObject;
System.out.println("FilsListePanel - clicked cell listener : message id = " + messageSelected.getIdentifiant() + " | conversation id = "
+ messageSelected.getIdConversation() + " | locuteur id = " + messageSelected.getIdLocuteur());
Object[] options = { "OK" };
if (colViewClicked == 0) {
Set<ConversationModel> setConversations = getListeController().getListeSelected().getSetConversations();
for (ConversationModel conversation : setConversations)
if (conversation.getId() == messageSelected.getIdConversation()) {
DialogPanelInfoConversation optPanel = new DialogPanelInfoConversation(conversation, bundleFilsListe);
JOptionPane.showOptionDialog(null, optPanel, bundleFilsListe.getString("txt_ConversationNumero") + conversation.getId(), JOptionPane.CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null,
options, options[0]);
break;
}
} else if (colViewClicked == 1) {
Set<LocuteurModel> setLocuteurs = getListeController().getSetLocuteurs();
for (LocuteurModel locuteur : setLocuteurs)
if (locuteur.getId() == messageSelected.getIdLocuteur()) {
DialogPanelInfoLocuteur optPanel = new DialogPanelInfoLocuteur(locuteur, bundleFilsListe);
JOptionPane.showOptionDialog(null, optPanel, bundleFilsListe.getString("txt_Locuteur") + " " + locuteur.getNom(), JOptionPane.CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options,
options[0]);
break;
}
}
}
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});
scrollFils = new JScrollPane();
detailMF = new JTextPane();
detailMF.setContentType("text/html");
doc = detailMF.getStyledDocument();
addStylesToDocument(doc);
detailMF.setEditable(false);
scrollDetailMF = new JScrollPane();
// SPLITPANE BAS
scrollSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollFils, scrollDetailMF);
scrollSplitPane.setDividerLocation(300);
scrollSplitPane.setOneTouchExpandable(true);
scrollSplitPane.setBackground(new Color(248, 248, 248));
panelGaucheBas.add(scrollSplitPane);
panelChk = new JPanel();
panelChk.setLayout(new BoxLayout(panelChk, BoxLayout.X_AXIS));
panelChk.setAlignmentX(Component.LEFT_ALIGNMENT);
panelChk.setBackground(new Color(248, 248, 248));
chkOriginalMessage = new JCheckBox(bundleFilsListe.getString("txt_EnleverMessageOrigine"));
chkOriginalMessage.addItemListener(this);
chkOriginalMessage.setSelected(false);
panelChk.add(chkOriginalMessage);
gbcGauche.gridx = 0;
gbcGauche.gridy = 0;
gbcGauche.weightx = 1.0;
gbcGauche.anchor = GridBagConstraints.NORTH;
panelGauche.add(panelGaucheHaut, gbcGauche);
gbcGauche.gridx = 0;
gbcGauche.gridy = 1;
gbcGauche.weightx = 10.0;
gbcGauche.anchor = GridBagConstraints.NORTH;
panelGauche.add(panelGaucheBas, gbcGauche);
gbcGauche.gridx = 0;
gbcGauche.gridy = 2;
gbcGauche.weightx = 1.0;
gbcGauche.anchor = GridBagConstraints.NORTH;
panelGauche.add(panelChk, gbcGauche);
// PANEL DROITE
// BOXES
JPanel panelBoxes = new JPanel();
panelBoxes.setLayout(new GridBagLayout());
panelBoxes.setOpaque(true);
panelBoxes.setAlignmentY(Component.TOP_ALIGNMENT);
panelBoxes.setAlignmentX(Component.LEFT_ALIGNMENT);
panelBoxes.setBackground(Color.WHITE);
panelBoxes.setPreferredSize(new Dimension(630, 735));
panelBoxes.setMinimumSize(new Dimension(630, 735));
panelBoxes.setMaximumSize(new Dimension(630, 735));
GridBagConstraints gbc = new GridBagConstraints();
// gbc.fill = GridBagConstraints.NONE;
JPanel panel4 = new JPanel(new GridBagLayout());
panel4.setBackground(Color.WHITE);
panel4.setAlignmentY(Component.TOP_ALIGNMENT);
panel4.setAlignmentX(Component.LEFT_ALIGNMENT);
panel4.setPreferredSize(new Dimension(480, 120));
panel4.setMinimumSize(new Dimension(480, 120));
panel4.setMaximumSize(new Dimension(480, 120));
GridBagConstraints gbc4 = new GridBagConstraints();
// NOMBRE DE MESSAGES
box1 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_Messages") + "</center></html>", new ImageIcon(ToolBar.class.getResource("/images/icones/email_22.png")));
gbc4.gridx = 0;
gbc4.gridy = 0;
gbc4.weightx = 1.0;
gbc4.anchor = GridBagConstraints.WEST;
panel4.add(box1, gbc4);
box2 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_Suivi") + "</center></html>", new ImageIcon(ToolBar.class.getResource("/images/icones/duree_22.png")));
box2.getTxtLabel().setFont(new Font("sansserif", Font.BOLD, 13));
box2.resize(300, 105, 300, 45, 300, 60);
gbc4.gridx = 1;
gbc4.gridy = 0;
gbc4.weightx = 1.0;
gbc4.anchor = GridBagConstraints.WEST;
panel4.add(box2, gbc4);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.gridheight = 1;
gbc.anchor = GridBagConstraints.NORTH;
panelBoxes.add(panel4, gbc);
// BOUTONS
JPanel panelButtons = new JPanel(new GridBagLayout());
panelButtons.setBackground(Color.WHITE);
panelButtons.setAlignmentY(Component.TOP_ALIGNMENT);
panelButtons.setAlignmentX(Component.CENTER_ALIGNMENT);
panelButtons.setPreferredSize(new Dimension(130, 240));
panelButtons.setMinimumSize(new Dimension(130, 240));
panelButtons.setMaximumSize(new Dimension(130, 240));
GridBagConstraints gbcButtons = new GridBagConstraints();
gbcButtons.insets = new Insets(15, 0, 15, 0);
final JButton bTabMessages = new JButton("<html><center>" + bundleFilsListe.getString("txt_TableauMessages2Lignes") + "</center></html>");
bTabMessages.setPreferredSize(new Dimension(130, 50));
bTabMessages.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame frameTabMessages = new JFrame();
frameTabMessages.setLayout(new BorderLayout());
frameTabMessages.setContentPane(getListeController().getPanelTabMessagesListeView().getTabMessagesPanel());
frameTabMessages.setSize(new Dimension(700, 400));
frameTabMessages.setTitle(bundleFilsListe.getString("txt_TableauMessages"));
frameTabMessages.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
bTabMessages.setEnabled(true);
}
});
bTabMessages.setEnabled(false);
frameTabMessages.setVisible(true);
}
});
final JButton bTabLocuteurs = new JButton("<html><center>" + bundleFilsListe.getString("txt_TableauLocuteurs2Lignes") + "</center></html>");
bTabLocuteurs.setPreferredSize(new Dimension(130, 50));
bTabLocuteurs.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame frameTabLocuteurs = new JFrame();
frameTabLocuteurs.setLayout(new BorderLayout());
frameTabLocuteurs.setContentPane(getListeController().getPanelTabLocuteursListeView().getTabLocuteursPanel());
frameTabLocuteurs.setSize(new Dimension(700, 400));
frameTabLocuteurs.setTitle(bundleFilsListe.getString("txt_TableauLocuteurs"));
frameTabLocuteurs.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
bTabLocuteurs.setEnabled(true);
}
});
bTabLocuteurs.setEnabled(false);
frameTabLocuteurs.setVisible(true);
}
});
final JButton bTabConversations = new JButton("<html><center>" + bundleFilsListe.getString("txt_TableauConversations2Lignes") + "</center></html>");
bTabConversations.setPreferredSize(new Dimension(130, 50));
bTabConversations.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame frameTabConversations = new JFrame();
frameTabConversations.setLayout(new BorderLayout());
frameTabConversations.setContentPane(getListeController().getPanelTabConversationsListeView().getTabConversationsPanel());
frameTabConversations.setSize(new Dimension(700, 400));
frameTabConversations.setTitle(bundleFilsListe.getString("txt_TableauConversations"));
frameTabConversations.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
bTabConversations.setEnabled(true);
}
});
bTabConversations.setEnabled(false);
frameTabConversations.setVisible(true);
}
});
gbcButtons.gridx = 0;
gbcButtons.gridy = 0;
gbcButtons.weightx = 1.0;
gbcButtons.weighty = 1.0;
gbcButtons.anchor = GridBagConstraints.NORTH;
panelButtons.add(bTabMessages, gbcButtons);
gbcButtons.gridx = 0;
gbcButtons.gridy = 1;
gbcButtons.weightx = 1.0;
gbcButtons.weighty = 1.0;
gbcButtons.anchor = GridBagConstraints.CENTER;
panelButtons.add(bTabLocuteurs, gbcButtons);
gbcButtons.gridx = 0;
gbcButtons.gridy = 2;
gbcButtons.weightx = 1.0;
gbcButtons.weighty = 1.0;
gbcButtons.anchor = GridBagConstraints.SOUTH;
panelButtons.add(bTabConversations, gbcButtons);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 10.0;
gbc.gridheight = 2;
gbc.anchor = GridBagConstraints.NORTH;
panelBoxes.add(panelButtons, gbc);
JPanel panel5 = new JPanel(new GridBagLayout());
panel5.setBackground(Color.WHITE);
panel5.setAlignmentY(Component.TOP_ALIGNMENT);
panel5.setAlignmentX(Component.LEFT_ALIGNMENT);
panel5.setPreferredSize(new Dimension(480, 120));
panel5.setMinimumSize(new Dimension(480, 120));
panel5.setMaximumSize(new Dimension(480, 120));
GridBagConstraints gbc5 = new GridBagConstraints();
// NOMBRE DE LOCUTEURS
box3 = new CustomStatBoxPanel(bundleFilsListe.getString("txt_NbreLocuteurs"), new ImageIcon(ToolBar.class.getResource("/images/icones/locuteurs_22.png")));
gbc5.gridx = 0;
gbc5.gridy = 0;
gbc5.weightx = 1.0;
gbc5.anchor = GridBagConstraints.WEST;
panel5.add(box3, gbc5);
box4 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_NbreMoyenMessagesLocuteursMois") + "</center></html>", new ImageIcon(
ToolBar.class.getResource("/images/icones/email_locuteurs_22.png")));
box4.resize(300, 105, 300, 45, 300, 60);
gbc5.gridx = 1;
gbc5.gridy = 0;
gbc5.weightx = 1.0;
gbc5.anchor = GridBagConstraints.WEST;
panel5.add(box4, gbc5);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1.0;
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.NORTH;
panelBoxes.add(panel5, gbc);
// CONVERSATIONS
JPanel panel6 = new JPanel(new GridBagLayout());
panel6.setBackground(Color.WHITE);
panel6.setAlignmentY(Component.TOP_ALIGNMENT);
panel6.setAlignmentX(Component.LEFT_ALIGNMENT);
panel6.setPreferredSize(new Dimension(630, 125));
panel6.setMinimumSize(new Dimension(630, 125));
panel6.setMaximumSize(new Dimension(630, 125));
GridBagConstraints gbc6 = new GridBagConstraints();
// PARAMETRE REGROUPEMENT DES MESSAGES
box5 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_ParamRegroupement") + "</center></html>", new ImageIcon(ToolBar.class.getResource("/images/icones/grouping_22.png")));
box5.getTxtLabel().setFont(new Font("sansserif", Font.BOLD, 10));
box5.resize(210, 105, 210, 45, 210, 60);
gbc6.gridx = 0;
gbc6.gridy = 0;
gbc6.weightx = 1.0;
gbc6.anchor = GridBagConstraints.WEST;
panel6.add(box5, gbc6);
// NBRE DE CONVERSATIONS
box6 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_NbreConversations") + "</center></html>", new ImageIcon(
ToolBar.class.getResource("/images/icones/conversations_22.png")));
gbc6.gridx = 1;
gbc6.gridy = 0;
gbc6.weightx = 1.0;
gbc6.anchor = GridBagConstraints.WEST;
panel6.add(box6, gbc6);
// NBRE MOYEN DE LOCUTEURS PAR CONVERSATIONS
box7 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_NbreMoyenLocuteursSujet") + "</center></html>", new ImageIcon(
ToolBar.class.getResource("/images/icones/conversations_locuteurs_22.png")));
gbc6.gridx = 2;
gbc6.gridy = 0;
gbc6.weightx = 1.0;
gbc6.anchor = GridBagConstraints.WEST;
panel6.add(box7, gbc6);
// NBRE MOYEN DE MESSAGES PAR CONVERSATIONS
box8 = new CustomStatBoxPanel("<html><center>" + bundleFilsListe.getString("txt_NbreMoyenMessagesSujet") + "</center></html>", new ImageIcon(
ToolBar.class.getResource("/images/icones/conversations_messages_22.png")));
gbc6.gridx = 3;
gbc6.gridy = 0;
gbc6.weightx = 1.0;
gbc6.anchor = GridBagConstraints.WEST;
panel6.add(box8, gbc6);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.weightx = 1.0;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.WEST;
panelBoxes.add(panel6, gbc);
// EVOLUTION DES MESSAGES
JPanel panel7 = new JPanel(new GridBagLayout());
panel7.setBackground(Color.WHITE);
panel7.setAlignmentY(Component.BOTTOM_ALIGNMENT);
panel7.setAlignmentX(Component.LEFT_ALIGNMENT);
panel7.setPreferredSize(new Dimension(620, 360));
panel7.setMinimumSize(new Dimension(620, 360));
panel7.setMaximumSize(new Dimension(620, 360));
GridBagConstraints gbc7 = new GridBagConstraints();
// panel7.setBorder(new TitledBorder(""));
// BOUTONS
final JButton bJours = new JButton(bundleFilsListe.getString("txt_ParJours"));
bJours.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CardLayout clGraphs = (CardLayout) (panelGraphs.getLayout());
JPanel p = getChartPanel(1);
((FlowLayout) p.getLayout()).setVgap(0);
panelGraphs.add(p, "PANEL_GRAPH_JOURS");
clGraphs.show(panelGraphs, "PANEL_GRAPH_JOURS");
}
});
bMois = new JButton(bundleFilsListe.getString("txt_ParMois"));
bMois.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CardLayout clGraphs = (CardLayout) (panelGraphs.getLayout());
JPanel p = getChartPanel(2);
((FlowLayout) p.getLayout()).setVgap(0);
panelGraphs.add(p, "PANEL_GRAPH_MOIS");
clGraphs.show(panelGraphs, "PANEL_GRAPH_MOIS");
// bMois.requestFocus();
}
});
final JButton bAnnee = new JButton(bundleFilsListe.getString("txt_ParAnnees"));
bAnnee.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CardLayout clGraphs = (CardLayout) (panelGraphs.getLayout());
JPanel p = getChartPanel(3);
((FlowLayout) p.getLayout()).setVgap(0);
panelGraphs.add(p, "PANEL_GRAPH_ANNEE");
clGraphs.show(panelGraphs, "PANEL_GRAPH_ANNEE");
// bAnnee.requestFocus();
}
});
chart1 = new CustomMultiXYPlotBoxPanel("<html><center>" + bundleFilsListe.getString("txt_EvolutionMessages") + "</center></html>", new ImageIcon(
ToolBar.class.getResource("/images/icones/evolution_messages_22.png")));
GridBagConstraints gbcGraphPanel = chart1.getGbc();
panelGraphs = chart1.getGraphPanel();
panelGraphs.add(new JPanel(), "PANEL_GRAPH_JOURS");
panelGraphs.add(new JPanel(), "PANEL_GRAPH_MOIS");
panelGraphs.add(new JPanel(), "PANEL_GRAPH_ANNEES");
JPanel panelButtonsEvolutionMessages = new JPanel(new GridBagLayout());
panelButtonsEvolutionMessages.setBackground(new Color(248, 248, 248));
panelButtonsEvolutionMessages.setAlignmentY(Component.CENTER_ALIGNMENT);
panelButtonsEvolutionMessages.setAlignmentX(Component.LEFT_ALIGNMENT);
panelButtonsEvolutionMessages.setPreferredSize(new Dimension(300, 40));
panelButtonsEvolutionMessages.setMinimumSize(new Dimension(300, 40));
panelButtonsEvolutionMessages.setMaximumSize(new Dimension(300, 40));
GridBagConstraints gbcButtonsEvolutionMessages = new GridBagConstraints();
gbcButtonsEvolutionMessages.gridx = 0;
gbcButtonsEvolutionMessages.gridy = 0;
gbcButtonsEvolutionMessages.weightx = 1.0;
gbcButtonsEvolutionMessages.anchor = GridBagConstraints.WEST;
panelButtonsEvolutionMessages.add(bJours, gbcButtonsEvolutionMessages);
gbcButtonsEvolutionMessages.gridx = 1;
gbcButtonsEvolutionMessages.gridy = 0;
gbcButtonsEvolutionMessages.weightx = 1.0;
gbcButtonsEvolutionMessages.anchor = GridBagConstraints.WEST;
panelButtonsEvolutionMessages.add(bMois, gbcButtonsEvolutionMessages);
gbcButtonsEvolutionMessages.gridx = 2;
gbcButtonsEvolutionMessages.gridy = 0;
gbcButtonsEvolutionMessages.weightx = 1.0;
gbcButtonsEvolutionMessages.anchor = GridBagConstraints.WEST;
panelButtonsEvolutionMessages.add(bAnnee, gbcButtonsEvolutionMessages);
gbcGraphPanel.gridx = 1;
gbcGraphPanel.gridy = 0;
gbcGraphPanel.anchor = GridBagConstraints.WEST;
chart1.add(panelButtonsEvolutionMessages, gbcGraphPanel);
gbc7.gridx = 0;
gbc7.gridy = 0;
gbc7.weightx = 1.0;
// gbc7.insets = new Insets(20, 0, 0, 0);
gbc7.anchor = GridBagConstraints.SOUTH;
panel7.add(chart1, gbc7);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.insets = new Insets(0, 2, 5, 0);
gbc.weighty = 10.0;
gbc.anchor = GridBagConstraints.SOUTHWEST;
panelBoxes.add(panel7, gbc);
panelDroite.add(panelBoxes);
panel.add(panelGauche);
panel.add(panelDroite);
// SCROLL PANEL
JScrollPane scrollPanel = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPanel.setBorder(null);
// CardLayout
panelVide = new LamePanel();
panelVide.setName("PANEL_VIDE");
// panelVide.setBorder(new
// TitledBorder(filsListe.getString("txt_StructureListe")));
cards = new JPanel(new CardLayout());
cards.add(scrollPanel, panel.getName());
cards.add(panelVide.getPanel(), panelVide.getName());
cl = (CardLayout) (cards.getLayout());
cl.show(cards, "PANEL_VIDE");
// cl.show(cards, "PANEL_PLEIN");
return cards;
}
private JPanel getChartPanel(int typeGraph) {
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout());
panel1.setAlignmentY(Component.CENTER_ALIGNMENT);
ChartNbreMessagesDate chartsNbreMessagesDate = new ChartNbreMessagesDate(mapIdMessages, typeGraph, bundleFilsListe);
panel1.add(chartsNbreMessagesDate.getNbreMessagesAnneeChartPanel());
return panel1;
}
private void applyRenderer() {
xTreeTable.setOpaque(true);
xTreeTable.setBackground(Color.WHITE);
TableColumn colSujet = xTreeTable.getColumnModel().getColumn(0);
TableColumn colExpediteur = xTreeTable.getColumnModel().getColumn(1);
TableColumn colDate = xTreeTable.getColumnModel().getColumn(2);
int widthColSujet = 400;
int widthColExpediteur = 100;
int widthColDate = 75;
colSujet.setPreferredWidth(widthColSujet);
colExpediteur.setPreferredWidth(widthColExpediteur);
colDate.setPreferredWidth(widthColDate);
ImageIcon leafIcon = new ImageIcon(FilsListePanel.class.getResource("/images/icones/messages_tree_15.png"));
xTreeTable.setLeafIcon(leafIcon);
// ColorHighlighter hl = new ColorHighlighter(new
// MyHighlightPredicate(), Color.yellow,Color.blue, Color.red,
// Color.green);
// xTreeTable.addHighlighter(hl);
}
// private class MyHighlightPredicate implements HighlightPredicate {
//
// public boolean isHighlighted(Component renderer, ComponentAdapter
// adapter) {
// int rowIndex = adapter.row;
// TreePath path = xTreeTable.getPathForRow(rowIndex);
// DefaultMutableTreeTableNode node = (DefaultMutableTreeTableNode)
// path.getLastPathComponent();
// return node.getUserObject() instanceof MessageModel;
// }
// }
@Override
public JPanel getFilsListePanel() {
return getPanel();
}
@Override
public JPanel getTabMessagesPanel() {
return null;
}
@Override
public void valueChanged(TreeSelectionEvent e) {
// System.out.println("FilsListePanel - valueChanged : messageSelected = "+messageSelected+" | treePathToSelect = "+treePathToSelect+" | xTreeTable.getSelectedRowCount() = "+xTreeTable.getSelectedRowCount()+" | nodeSelected = "+nodeSelected);
nodeSelected = e.getPath().getLastPathComponent();
if (nodeSelected instanceof DefaultMutableTreeTableNode) {
Object userObject = ((DefaultMutableTreeTableNode) nodeSelected).getUserObject();
if (userObject instanceof MessageModel) {
messageSelected = (MessageModel) userObject;
labFrom.setText(bundleFilsListe.getString("txt_De") + " : ");
labSujet.setText(bundleFilsListe.getString("txt_Sujet") + " : ");
labDate.setText(bundleFilsListe.getString("txt_Date") + " : ");
txtFrom.setText(messageSelected.getExpediteur());
txtSujet.setText(messageSelected.getSujet());
txtDate.setText(format.format(messageSelected.getDateUS()));
boolean isSsOriginalMessage = chkOriginalMessage.isSelected();
showText(messageSelected, isSsOriginalMessage);
}
}
}
@Override
public void itemStateChanged(ItemEvent e) {
if (null != messageSelected) {
Object source = e.getItemSelectable();
if (source == chkOriginalMessage) {
showText(messageSelected, true);
} else
showText(messageSelected, false);
if (e.getStateChange() == ItemEvent.DESELECTED)
showText(messageSelected, false);
}
}
private void showText(MessageModel messageSelected, boolean isSsOriginalMessage) {
String newCorpsMessage = messageSelected.getCorps();
if (isSsOriginalMessage)
newCorpsMessage = messageSelected.getSsOriginalMessage(newCorpsMessage);
setNewStyledDoc(newCorpsMessage);
// System.out.println("FilsListePanel - showText : newCorpsMessage = \n"+newCorpsMessage);
}
public StyledDocument getNewStyledDoc(String corpsMessage) {
StyledDocument newDoc = getNewDocumentWithStyles(messageSelected.getCorpsToTab(corpsMessage));
return newDoc;
}
private void setNewStyledDoc(String corpsMessage) {
detailMF.setText("");
StyledDocument newDoc = getNewStyledDoc(corpsMessage);
detailMF.setStyledDocument(newDoc);
detailMF.setCaretPosition(0);
}
private StyledDocument getNewDocumentWithStyles(Map<String, String> mapStringStyles) {
StyledDocument doc = detailMF.getStyledDocument();
List<String> listString = new ArrayList<String>(mapStringStyles.keySet());
List<String> listStyles = new ArrayList<String>(mapStringStyles.values());
String[] initString = listString.toArray(new String[0]);
String[] initStyles = listStyles.toArray(new String[0]);
try {
for (int i = 0; i < initString.length; i++) {
doc.insertString(doc.getLength(), initString[i], doc.getStyle(initStyles[i]));
}
} catch (BadLocationException ble) {
System.err.println("Couldn't insert initial text into text pane.");
}
return doc;
}
protected void addStylesToDocument(StyledDocument doc) {
Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
Style regular = doc.addStyle("regular", def);
StyleConstants.setFontFamily(def, "SansSerif");
Style s1 = doc.addStyle("blue", regular);
StyleConstants.setForeground(s1, Color.BLUE);
StyleConstants.setFontSize(s1, 14);
StyleConstants.setItalic(s1, true);
Style s2 = doc.addStyle("green", regular);
StyleConstants.setForeground(s2, new Color(0, 116, 0));
StyleConstants.setFontSize(s2, 14);
StyleConstants.setItalic(s2, true);
Style s3 = doc.addStyle("red", regular);
StyleConstants.setForeground(s3, new Color(164, 0, 0));
StyleConstants.setFontSize(s3, 14);
StyleConstants.setItalic(s3, true);
regular = doc.addStyle("regular", def);
StyleConstants.setFontSize(regular, 14);
}
@Override
public void setIdentifiantMessageToShow(String identifiantMessage) {
// System.out.println("FilsListePanel - setIdentifiantMessageToShow : identifiantMessage = "
// + identifiantMessage);
TreeNode root = filsTreeModel.getRoot();
findPathToSelect(root, identifiantMessage);
if (treePathToSelect != null) {
TreeSelectionModel sm = xTreeTable.getTreeSelectionModel();
sm.setSelectionPath(treePathToSelect);
xTreeTable.scrollPathToVisible(treePathToSelect);
}
}
private void findPathToSelect(TreeNode r, String identifiant) {
TreeNode root = r;
for (int i = 0; i < root.getChildCount(); i++) {
Object node = root.getChildAt(i);
Object userObject = ((DefaultMutableTreeTableNode) node).getUserObject();
if (userObject instanceof MessageModel) {
messageSelected = (MessageModel) userObject;
if (messageSelected.getIdentifiant().equals(identifiant)) {
treePathToSelect = convertTreeNodeToTreePath((TreeNode) node);
// System.out
// .println(treePathToSelect.toString()
// + " : rang "
// + i
// + " | "
// + ((MessageModel) ((DefaultMutableTreeTableNode) node)
// .getUserObject()).getExpediteur()
// + " | " + ((TreeNode) node).isLeaf()
// + " | "
// + treeTable.isCollapsed(treePathToSelect)
// + " | " + ((TreeNode) node).getChildCount()
// + " enfants");
break;
}
}
if (((TreeNode) node).getChildCount() > 0) {
// System.out.println("--- ENFANTS : ");
findPathToSelect((TreeNode) node, identifiant);
// System.out.println("--------------");
}
}
}
private TreePath convertTreeNodeToTreePath(TreeNode node) {
List<TreeNode> list = new ArrayList<TreeNode>();
while (node != null) {
list.add(node);
node = node.getParent();
}
Collections.reverse(list);
return new TreePath(list.toArray());
}
@Override
public void listeChanged(ListeChangedEvent event) {
nodeSelected = null;
messageSelected = null;
treePathToSelect = null;
// System.out.println("FilsListePanel - listeChanged : messageSelected = "+messageSelected+" | treePathToSelect = "+treePathToSelect+" | xTreeTable.getSelectedRowCount() = "+xTreeTable.getSelectedRowCount()+" | nodeSelected = "+nodeSelected);
if (event.getNewNumero() != 0 && event.getNewMapIdMessages().size() != 0) {
mapIdMessages = event.getNewMapIdMessages();
colIndexSorted = 999;
cl.show(cards, "PANEL_PLEIN");
filsTreeModel = new FilsTreeModel(event.getNewMapIdMessages(), bundleFilsListe, 2, true);
xTreeTable.setTreeTableModel(filsTreeModel);
labFrom.setText("");
labSujet.setText("");
labDate.setText("");
txtFrom.setText("");
txtSujet.setText("");
txtDate.setText("");
detailMF.setText("");
box1.getTxtLabel().setText(String.valueOf(event.getNewNbreMessages()));
String dureeSuivi = event.getNewDureeSuivi();
// System.out.println("dureeSuivi = " + dureeSuivi);
if (dureeSuivi != null && dureeSuivi.indexOf("(") != -1) {
DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yyyy");
DateTime dtDebut = new DateTime(event.getDebut());
DateTime dtFin = new DateTime(event.getFin());
Period period = new Period(dtDebut, dtFin, PeriodType.yearMonthDayTime());
box2.getTxtLabel().setText(
"<html><center>" + fmt.print(dtDebut) + " » " + fmt.print(dtFin) + "<br><font color=#c1c1c1>" + period.getYears() + " " + bundleFilsListe.getString("txt_Annees") + ", "
+ period.getMonths() + " " + bundleFilsListe.getString("txt_Mois") + ", " + period.getDays() + " " + bundleFilsListe.getString("txt_Jours") + ", " + period.getHours() + " "
+ bundleFilsListe.getString("txt_Heures") + "</font></center></html>");
}
box3.getTxtLabel().setText(String.valueOf(event.getNewNbreLocuteurs()));
box4.getTxtLabel().setText(
"<html><center>" + String.valueOf(df.format(event.getNewNbreMoyenMessagesLocuteurMois())) + "<br><font style=color:#c1c1c1;font-size:9px>"
+ String.valueOf(event.getNewNbreLocuteursUnSeulMessage()) + " " + bundleFilsListe.getString("txt_NbreLocuteursUnSeulMessage") + "</font></center></html>");
box5.getTxtLabel().setText("<html><center>" + event.getNewSParamConversations() + "</center></html>");
box6.getTxtLabel().setText(String.valueOf(event.getNewSetConversations().size()));
box7.getTxtLabel().setText(df.format(event.getNewNbreMoyenLocuteursDifferentsSujet()));
box8.getTxtLabel().setText(df.format(event.getNewNbreMoyenMessagesConversation()));
scrollFils.setViewportView(xTreeTable);
scrollDetailMF.setViewportView(detailMF);
applyRenderer();
bMois.doClick();
// bMois.requestFocus();
} else {
cl.show(cards, "PANEL_VIDE");
}
}
@Override
public JPanel getTabConversationsPanel() {
// TODO Auto-generated method stub
return null;
}
@Override
public JPanel getTabLocuteursPanel() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getConversationsTxtToPdf() {
// TODO Auto-generated method stub
return null;
}
@Override
public JPanel getInfosListePanel() {
// TODO Auto-generated method stub
return null;
}
@Override
public JPanel getAnalysePanel() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getLocuteursTxtToPdf() {
// TODO Auto-generated method stub
return null;
}
@Override
public JToolBar getToolBar() {
// TODO Auto-generated method stub
return null;
}
}