package gui; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import com.toedter.calendar.JCalendar; import businessLogic.BLFacade; import configuration.UtilDate; import domain.AdminUser; import domain.Forecast; import domain.Question; public class FindQuestionsGUI extends JFrame { private static final long serialVersionUID = 1L; // private final JLabel jLabelEventDate = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("EventDate")); // private final JLabel jLabelQueries = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("Queries")); // private final JLabel jLabelEvents = new JLabel(ResourceBundle.getBundle("Etiquetas").getString("Events")); // // private JButton jButtonClose = new JButton(ResourceBundle.getBundle("Etiquetas").getString("Close")); private final JLabel jLabelEventDate = new JLabel("EventDate"); private final JLabel jLabelQueries = new JLabel("Queries"); private final JLabel jLabelEvents = new JLabel("Events"); private JButton jButtonClose = new JButton("Close"); // Code for JCalendar private JCalendar jCalendar1 = new JCalendar(); private Calendar calendarAnt = null; private Calendar calendarAct = null; private JScrollPane scrollPaneEvents = new JScrollPane(); private JScrollPane scrollPaneQueries = new JScrollPane(); private JScrollPane scrollPaneForecasts = new JScrollPane(); private Vector datesWithEventsCurrentMonth = new Vector(); private JTable tableEvents = new JTable(); private JTable tableQueries = new JTable(); private JTable tableForecasts = new JTable(); private DefaultTableModel tableModelEvents; private DefaultTableModel tableModelQueries; private DefaultTableModel tableModelForecasts; private BLFacade facade = LoginGUI.getBusinessLogic(); // private String[] columnNamesEvents = new String[] { ResourceBundle.getBundle("Etiquetas").getString("EventN"), // ResourceBundle.getBundle("Etiquetas").getString("Event"), // // }; // private String[] columnNamesQueries = new String[] { ResourceBundle.getBundle("Etiquetas").getString("QueryN"), // ResourceBundle.getBundle("Etiquetas").getString("Query") // // }; // // private String[] columnNamesForecasts = new String[] { ResourceBundle.getBundle("Etiquetas").getString("ForecastN"), // ResourceBundle.getBundle("Etiquetas").getString("Forecast"), "Fee" // // }; private String[] columnNamesEvents = new String[] { "EventN", "Event", }; private String[] columnNamesQueries = new String[] { "QueryN", "Query" }; private String[] columnNamesForecasts = new String[] { "ForecastN", "Forecast", "Fee" }; private Question que; private Forecast forecast; private Vector queries; private Vector forecasts; private AdminUser userlog = null; public FindQuestionsGUI(AdminUser au) { getContentPane().setBackground(Color.WHITE); userlog = au; try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().setLayout(null); this.setSize(new Dimension(820, 520)); // this.setTitle(ResourceBundle.getBundle("Etiquetas").getString("MainAdminGUI.jButtonQueryQuestions.text")); this.setTitle("QueryQuestions"); jLabelEventDate.setBounds(new Rectangle(40, 15, 140, 25)); jLabelQueries.setBounds(40, 248, 406, 14); jLabelEvents.setBounds(295, 19, 259, 16); this.getContentPane().add(jLabelEventDate, null); this.getContentPane().add(jLabelQueries); this.getContentPane().add(jLabelEvents); jButtonClose.setForeground(Color.WHITE); jButtonClose.setFont(new Font("Dialog", Font.BOLD, 14)); jButtonClose.setBackground(SystemColor.controlShadow); jButtonClose.setBounds(new Rectangle(332, 419, 130, 30)); jButtonClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { jButton2_actionPerformed(e); } }); this.getContentPane().add(jButtonClose, null); jCalendar1.getDayChooser().getDayPanel().setBackground(Color.WHITE); jCalendar1.setBounds(new Rectangle(40, 50, 225, 150)); datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate()); CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth); // Code for JCalendar this.jCalendar1.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent propertychangeevent) { if (propertychangeevent.getPropertyName().equals("locale")) { jCalendar1.setLocale((Locale) propertychangeevent.getNewValue()); } else if (propertychangeevent.getPropertyName().equals("calendar")) { calendarAnt = (Calendar) propertychangeevent.getOldValue(); calendarAct = (Calendar) propertychangeevent.getNewValue(); DateFormat dateformat1 = DateFormat.getDateInstance(1, jCalendar1.getLocale()); // jCalendar1.setCalendar(calendarAct); Date firstDay = UtilDate.trim(new Date(jCalendar1.getCalendar().getTime().getTime())); int monthAnt = calendarAnt.get(Calendar.MONTH); int monthAct = calendarAct.get(Calendar.MONTH); if (monthAct != monthAnt) { if (monthAct == monthAnt + 2) { // Si en JCalendar está 30 de enero y se avanza al mes siguiente, devolvería 2 // de marzo (se toma como equivalente a 30 de febrero) // Con este código se dejará como 1 de febrero en el JCalendar calendarAct.set(Calendar.MONTH, monthAnt + 1); calendarAct.set(Calendar.DAY_OF_MONTH, 1); } jCalendar1.setCalendar(calendarAct); datesWithEventsCurrentMonth = facade.getEventsMonth(jCalendar1.getDate()); } CreateQuestionGUI.paintDaysWithEvents(jCalendar1, datesWithEventsCurrentMonth); try { tableModelEvents.setDataVector(null, columnNamesEvents); tableModelEvents.setColumnCount(3); // another column added to allocate ev objects Vector events = facade.getEvents(firstDay); if (events.isEmpty()) // jLabelEvents.setText(ResourceBundle.getBundle("Etiquetas").getString("NoEvents") + ": " // + dateformat1.format(calendarAct.getTime())); jLabelEvents.setText("NoEvents" + ": " + dateformat1.format(calendarAct.getTime())); else // jLabelEvents.setText(ResourceBundle.getBundle("Etiquetas").getString("Events") + ": " // + dateformat1.format(calendarAct.getTime())); jLabelEvents.setText("Events" + ": " + dateformat1.format(calendarAct.getTime())); for (domain.Event ev : events) { if (!ev.getClosed()) { Vector row = new Vector(); System.out.println("Events " + ev); row.add(ev.getEventNumber()); row.add(ev.getDescription()); row.add(ev); // ev object added in order to obtain it with // tableModelEvents.getValueAt(i,2) tableModelEvents.addRow(row); } } tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25); tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268); tableEvents.getColumnModel().removeColumn(tableEvents.getColumnModel().getColumn(2)); // not // shown tableModelQueries.setRowCount(0); tableModelForecasts.setRowCount(0);// in // JTable } catch (Exception e1) { jLabelQueries.setText(e1.getMessage()); } } } }); this.getContentPane().add(jCalendar1, null); scrollPaneEvents.setBounds(new Rectangle(292, 50, 346, 150)); scrollPaneQueries.setBounds(new Rectangle(40, 274, 406, 116)); scrollPaneForecasts.setBounds(new Rectangle(498, 274, 231, 116)); tableEvents.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { tableModelForecasts.setRowCount(0); int i = tableEvents.getSelectedRow(); domain.Event ev = (domain.Event) tableModelEvents.getValueAt(i, 2); // obtain ev object queries = ev.getQuestions(); tableModelQueries.setDataVector(null, columnNamesQueries); if (queries.isEmpty()) // jLabelQueries.setText( // ResourceBundle.getBundle("Etiquetas").getString("NoQueries") + ": " + ev.getDescription()); jLabelQueries.setText("NoQueries" + ": " + ev.getDescription()); else // jLabelQueries.setText(ResourceBundle.getBundle("Etiquetas").getString("SelectedEvent") + " " // + ev.getDescription()); // aquiiii jLabelQueries.setText("SelectedEvent" + " " + ev.getDescription()); // aquiiii for (domain.Question q : queries) { Vector row = new Vector(); row.add(q.getQuestionNumber()); row.add(q.getQuestion()); tableModelQueries.addRow(row); } tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25); tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268); } }); tableQueries.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE); return c; } }); tableEvents.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE); return c; } }); tableForecasts.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(row % 2 != 0 ? new Color(233, 233, 233) : Color.WHITE); return c; } }); tableQueries.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { tableModelForecasts.setRowCount(0); int i = tableQueries.getSelectedRow(); que = queries.get(i); forecasts = que.getForecasts(); System.out.println("TAMAÑO FORECASTS: " + forecasts.size()); for (domain.Forecast f : forecasts) { Vector row = new Vector(); row.add(f.getForecastNumber()); row.add(f.getForecast()); row.add(f.getFee()); tableModelForecasts.addRow(row); } System.out.println(tableForecasts.getRowCount()); } }); tableForecasts.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int i = tableForecasts.getSelectedRow(); forecast = forecasts.get(i); System.out.println(forecast.toString()); } }); scrollPaneEvents.setViewportView(tableEvents); tableModelEvents = new DefaultTableModel(null, columnNamesEvents) { @Override public boolean isCellEditable(int row, int column) { return false; } }; tableEvents.setModel(tableModelEvents); tableEvents.getColumnModel().getColumn(0).setPreferredWidth(25); tableEvents.getColumnModel().getColumn(1).setPreferredWidth(268); scrollPaneQueries.setViewportView(tableQueries); tableModelQueries = new DefaultTableModel(null, columnNamesQueries) { @Override public boolean isCellEditable(int row, int column) { return false; } }; tableQueries.setModel(tableModelQueries); tableQueries.getColumnModel().getColumn(0).setPreferredWidth(25); tableQueries.getColumnModel().getColumn(1).setPreferredWidth(268); scrollPaneForecasts.setViewportView(tableForecasts); tableModelForecasts = new DefaultTableModel(null, columnNamesForecasts) { @Override public boolean isCellEditable(int row, int column) { return false; } }; tableForecasts.setModel(tableModelForecasts); tableForecasts.getColumnModel().getColumn(0).setPreferredWidth(25); tableForecasts.getColumnModel().getColumn(1).setPreferredWidth(100); tableForecasts.getColumnModel().getColumn(2).setPreferredWidth(25); this.getContentPane().add(scrollPaneEvents, null); this.getContentPane().add(scrollPaneQueries, null); this.getContentPane().add(scrollPaneForecasts); } private void jButton2_actionPerformed(ActionEvent e) { JFrame a = new MainAdminGUI(userlog); a.setAlwaysOnTop(true); a.setVisible(true); dispose(); } }