/*
* VentanaHorario.java
*
* Created on 21 de noviembre de 2007, 12:09 AM
*/
package ManejoVentanas;
import GeneracionHorarios.Clase;
import GeneracionHorarios.Salon;
import ManejoBD.AccesoBD;
import ManejoBD.ClaseBD;
import ManejoBD.SalonBD;
import java.awt.Color;
import java.awt.Component;
import java.util.Iterator;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/**
*
* @author Fernando
*/
public class VentanaHorario extends javax.swing.JDialog {
/** Creates new form VentanaHorario */
private float ptjGRASP=0;
private float ptjTABU=0;
//anhadido por Gisse... pero al final no se utiliza x mientras
int arrHorario[][];
public VentanaHorario(VentanaPrincipal parent, boolean modal,float ptjGRASP,float ptjTABU) {
super(parent, modal);
initComponents();
llenarComboSalones();
llenarHorasHorario();
this.tblHorario.setDefaultRenderer(Object.class,new ClaseRender());
this.ptjGRASP=ptjGRASP;
this.ptjTABU=ptjTABU;
lblGRASP.setText(String.valueOf(ptjGRASP));
lblTABU.setText(String.valueOf(ptjTABU));
this.setVisible(true);
arrHorario = new int[tblHorario.getRowCount()][6];
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
tblHorario = new javax.swing.JTable();
lblIndicaciones = new javax.swing.JLabel();
cmbSalones = new javax.swing.JComboBox();
cmbAlgoritmo = new javax.swing.JComboBox();
lblAlgoritmo = new javax.swing.JLabel();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel7 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
lblGRASP = new javax.swing.JLabel();
lblTABU = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jLabel14 = new javax.swing.JLabel();
jLabel15 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
tblHorario.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null}
},
new String [] {
"Hora", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
tblHorario.setEnabled(false);
tblHorario.setRowSelectionAllowed(false);
jScrollPane1.setViewportView(tblHorario);
lblIndicaciones.setText("Seleccione el aula para la cual desea ver su horario:");
cmbSalones.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
cmbSalonesItemStateChanged(evt);
}
});
cmbAlgoritmo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Grasp", "Tabu Search" }));
cmbAlgoritmo.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
cmbAlgoritmoItemStateChanged(evt);
}
});
lblAlgoritmo.setText("Seleccione el tipo de algoritmo:");
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Leyenda"));
jLabel1.setText("Clase:");
jLabel2.setText("Hora Disponible:");
jLabel3.setText("Hora no Disponible:");
jLabel4.setBackground(java.awt.Color.yellow);
jLabel4.setForeground(java.awt.Color.green);
jLabel4.setText("HORA");
jLabel4.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
jLabel4.setFocusable(false);
jLabel4.setMaximumSize(new java.awt.Dimension(20, 20));
jLabel4.setMinimumSize(new java.awt.Dimension(20, 20));
jLabel4.setOpaque(true);
jLabel4.setPreferredSize(new java.awt.Dimension(20, 20));
jLabel5.setBackground(java.awt.Color.white);
jLabel5.setForeground(java.awt.Color.cyan);
jLabel5.setText("HORA");
jLabel5.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
jLabel5.setMaximumSize(new java.awt.Dimension(4, 4));
jLabel5.setMinimumSize(new java.awt.Dimension(4, 4));
jLabel5.setOpaque(true);
jLabel5.setPreferredSize(new java.awt.Dimension(4, 4));
jLabel6.setBackground(java.awt.Color.lightGray);
jLabel6.setForeground(java.awt.Color.lightGray);
jLabel6.setText("HORA");
jLabel6.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
jLabel6.setMaximumSize(new java.awt.Dimension(4, 4));
jLabel6.setMinimumSize(new java.awt.Dimension(4, 4));
jLabel6.setOpaque(true);
jLabel6.setPreferredSize(new java.awt.Dimension(4, 4));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(23, 23, 23)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(17, 17, 17)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(34, Short.MAX_VALUE))
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Puntaje"));
jLabel7.setText("GRASP");
jLabel9.setText("TABU SEARCH");
lblGRASP.setText("hola");
lblTABU.setText("hola");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblGRASP, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(17, 17, 17)
.addComponent(jLabel9)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblTABU, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(jLabel8)
.addComponent(jLabel9)
.addComponent(lblTABU, javax.swing.GroupLayout.PREFERRED_SIZE, 12, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblGRASP))
.addContainerGap(39, Short.MAX_VALUE))
);
lblGRASP.getAccessibleContext().setAccessibleName("lblGRASP");
lblTABU.getAccessibleContext().setAccessibleName("lblTABU");
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Leyenda"));
jLabel10.setText("Turno Correcto");
jLabel11.setText("+10 pts");
jLabel12.setText("Huecos entre horas");
jLabel13.setText("-5 pts");
jLabel14.setText("Respetar Hora Almuerzo");
jLabel15.setText("+5 pts");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel10)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel11)
.addGap(16, 16, 16)
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel13)
.addGap(14, 14, 14)
.addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel15)
.addContainerGap(19, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel10)
.addComponent(jLabel11)
.addComponent(jLabel12)
.addComponent(jLabel13)
.addComponent(jLabel14)
.addComponent(jLabel15))
.addContainerGap(39, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(51, 51, 51)
.addComponent(lblIndicaciones)
.addGap(40, 40, 40)
.addComponent(cmbSalones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(159, 159, 159)
.addComponent(lblAlgoritmo)
.addGap(14, 14, 14)
.addComponent(cmbAlgoritmo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(48, 48, 48)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1103, Short.MAX_VALUE))))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(31, 31, 31)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblIndicaciones)
.addComponent(cmbSalones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cmbAlgoritmo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblAlgoritmo))
.addGap(27, 27, 27)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 263, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(15, 15, 15)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(12, Short.MAX_VALUE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void cmbAlgoritmoItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbAlgoritmoItemStateChanged
cargarHorario();
}//GEN-LAST:event_cmbAlgoritmoItemStateChanged
private void cmbSalonesItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmbSalonesItemStateChanged
cargarHorario();
}//GEN-LAST:event_cmbSalonesItemStateChanged
private void cargarHorario(){
//Borramos las celdas del horario previo que se mostro
for (int i=1;i<this.tblHorario.getColumnCount();i++){
for(int j=0;j<this.tblHorario.getRowCount();j++)
this.tblHorario.setValueAt("",j,i);
}
//Obtenemos el salon seleccionado.
String salon = (String)this.cmbSalones.getSelectedItem();
Clase clase;String celdaClase; int fila,columna;
try {
//Cargamos la disponibilidad del salon
cargarDisponibilidadSalon(salon);
//Obtenemos las clases que se han registrado para ese salon.
AccesoBD.conexionODBC("horariosBD");
Iterator<Clase> itClases = ClaseBD.obtClases(salon,this.cmbAlgoritmo.getSelectedIndex()+1).iterator();
while (itClases.hasNext()){
clase = itClases.next();
celdaClase = clase.getCurso().getNombre() + " " + clase.getCurso().getHorario() + " " +
clase.getCurso().getProfesor().getNombre();
fila = clase.getHoraIni();
columna = obtenerIndiceDia(clase.getSalon().getDia())+1;
for (;fila<=clase.getHoraFin();fila++){
this.tblHorario.setValueAt(celdaClase,fila,columna);
}
}
repaint();
} catch (Exception ex) {
ex.printStackTrace();
}finally{
try {
AccesoBD.desconexion();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private int obtenerIndiceDia(String diaSalon) {
if (diaSalon.equals("LUNES"))
return 0;
else
if (diaSalon.equals("MARTES"))
return 1;
else
if (diaSalon.equals("MIERCOLES"))
return 2;
else
if (diaSalon.equals("JUEVES"))
return 3;
else
if (diaSalon.equals("VIERNES"))
return 4;
else
return 5;
}
private void llenarComboSalones() {
Iterator<String> itSalones;
try {
AccesoBD.conexionODBC("horariosBD");
itSalones = SalonBD.listarSalones().iterator();
while (itSalones.hasNext()){
this.cmbSalones.addItem(itSalones.next());
}
} catch (Exception ex) {
ex.printStackTrace();
}finally{
try {
AccesoBD.desconexion();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private void llenarHorasHorario() {
String hora;
for (int i=8;i<22;i++){
hora="";
if (i<10){
hora += "0";
}
hora += i + ":00-";
if (i+1<10){
hora += "0";
}
hora += (i+1) + ":00";
this.tblHorario.setValueAt(hora,i-8,0);
}
}
private void cargarDisponibilidadSalon(String salon) {
Iterator<Salon> itSalon;Salon auxSalon;
try {
AccesoBD.conexionODBC("horariosBD");
itSalon = SalonBD.obtenerDisponibilidad(salon).iterator();
while (itSalon.hasNext()){
auxSalon = itSalon.next();
for (int i=0;i<this.tblHorario.getRowCount();i++){
int dia = obtenerIndiceDia(auxSalon.getDia());
if (i<auxSalon.getHoraIni()|| i>(auxSalon.getHoraFin()-1))
{
// if (arrHorario[i][dia]==0)
// {
// this.tblHorario.setValueAt("NO DISPONIBLE",i,dia+1);
// }
}
else
this.tblHorario.setValueAt("DISPONIBLE",i,dia+1);
// if (auxSalon.getHoraIni()<=i && i<auxSalon.getHoraFin())
// this.tblHorario.setValueAt("DISPONIBLE",i,obtenerIndiceDia(auxSalon.getDia())+1);
// else
// this.tblHorario.setValueAt("NO DISPONIBLE",i,obtenerIndiceDia(auxSalon.getDia())+1);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}finally{
try {
AccesoBD.desconexion();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public class ClaseRender extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column){
super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
if (column!=0){
if (((String)tblHorario.getValueAt(row,column)).equalsIgnoreCase("DISPONIBLE")){
this.setOpaque(true);
this.setBackground(Color.WHITE);
this.setForeground(Color.WHITE);
}else{
if (((String)tblHorario.getValueAt(row,column)).equalsIgnoreCase("NO DISPONIBLE")){
this.setOpaque(true);
this.setBackground(Color.LIGHT_GRAY);
this.setForeground(Color.LIGHT_GRAY);
}else{
if (((String)tblHorario.getValueAt(row,column)).equalsIgnoreCase("")){
this.setOpaque(true);
this.setBackground(Color.lightGray);
this.setForeground(Color.lightGray);
}else{
this.setOpaque(true);
this.setBackground(Color.yellow);
this.setForeground(Color.BLACK);
}
}
}
}else{
this.setOpaque(true);
this.setBackground(Color.WHITE);
this.setForeground(Color.BLACK);
}
return this;
}
}
/**
* @param args the command line arguments
*/
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox cmbAlgoritmo;
private javax.swing.JComboBox cmbSalones;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblAlgoritmo;
private javax.swing.JLabel lblGRASP;
private javax.swing.JLabel lblIndicaciones;
private javax.swing.JLabel lblTABU;
private javax.swing.JTable tblHorario;
// End of variables declaration//GEN-END:variables
}