Guest User

Untitled

a guest
Jun 12th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 24.95 KB | None | 0 0
  1. package at.esrk.tischlerei.gui.windows;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.FlowLayout;
  8. import java.awt.GridBagConstraints;
  9. import java.awt.GridBagLayout;
  10. import java.awt.GridLayout;
  11. import java.awt.Insets;
  12. import java.awt.MouseInfo;
  13. import java.awt.Point;
  14. import java.awt.PointerInfo;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. import java.awt.event.MouseEvent;
  18. import java.util.ArrayList;
  19. import java.util.EventObject;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23.  
  24. import javax.swing.AbstractCellEditor;
  25. import javax.swing.JButton;
  26. import javax.swing.JComboBox;
  27. import javax.swing.JLabel;
  28. import javax.swing.JPanel;
  29. import javax.swing.JScrollPane;
  30. import javax.swing.JTable;
  31. import javax.swing.SwingConstants;
  32. import javax.swing.border.TitledBorder;
  33. import javax.swing.table.AbstractTableModel;
  34. import javax.swing.table.TableCellEditor;
  35. import javax.swing.table.TableColumn;
  36.  
  37. import sun.misc.Compare;
  38. import sun.misc.Sort;
  39. import at.esrk.lib.data.DataHelper2;
  40. import at.esrk.lib.gui.components.IDataTableCellRenderer;
  41. import at.esrk.lib.gui.formatters.cellrenderers.FormatRenderer;
  42. import at.esrk.lib.gui.formatters.cellrenderers.ShadedTableCellRenderer;
  43. import at.esrk.lib.gui.manager.ChooseManager;
  44. import at.esrk.lib.gui.tables.TablePrepared;
  45. import at.esrk.lib.gui.windows.CPopup;
  46. import at.esrk.lib.gui.windows.CWindow;
  47. import at.esrk.lib.time.Date;
  48. import at.esrk.lib.time.DateInterval;
  49. import at.esrk.lib.time.Time;
  50. import at.esrk.lib.utils.Action;
  51. import at.esrk.lib.utils.EditorAlternative;
  52. import at.esrk.lib.utils.ILang;
  53. import at.esrk.lib.utils.Lang;
  54. import at.esrk.tischlerei.data.Db;
  55. import at.esrk.tischlerei.data.structures.Employee;
  56. import at.esrk.tischlerei.data.structures.EmployeeTimePlan;
  57. import at.esrk.tischlerei.data.structures.EmployeeTimePlanDay;
  58. import at.esrk.tischlerei.data.structures.EmployeeWorkEntry;
  59. import at.esrk.tischlerei.data.structures2.OverviewEntry;
  60. import at.esrk.tischlerei.gui.WMenu;
  61. import at.esrk.tischlerei.gui.panels.PDateTime;
  62. import at.esrk.tischlerei.utils.Utils;
  63.  
  64. public class WDailyControl extends CWindow implements ILang {
  65.     private static final long serialVersionUID = 1L;
  66.     Db db = WMenu.getInstance().getDb();
  67.     Employee[] employees = db.getEmployees();
  68.     DataHelper2<Employee> employeesHelper=new DataHelper2<Employee>(employees);
  69.     ChooseManager<Employee> chooseManager = new ChooseManager<Employee>(employees);
  70.  
  71.     public WDailyControl() {
  72.         initComponents();
  73.         initTexts();
  74.         initButtons();
  75.         initCombobox();
  76.         initTable();
  77.     }
  78.    
  79.     @Override
  80.     public String getString(String key) {
  81.         return Lang.getString("WDailyControl."+key);
  82.     }
  83.    
  84.     private Date lockDate;
  85.     {
  86.         getLockDate();
  87.     }
  88.  
  89.     private void getLockDate() {
  90.         lockDate = Utils.setObject(lockDate, db.getValue("timemanagementlock"));//1.m.y exclusive (date<lockDate -> locked)
  91.         if(lockDate==null)
  92.             lockDate=new Date(1900,1,1);//date in past - so it is never null
  93.     }
  94.    
  95.     private void initTexts() {
  96.         setTitle(getString("title"));
  97.         label_employee.setText(getString("employee"));
  98.         label_date.setText(getString("datum"));
  99.         button_close.setText(Lang.getString("cancel"));
  100.         button_ok.setText(getString("confirm"));
  101.         ((TitledBorder)panel_choose.getBorder()).setTitle("");
  102.         ((TitledBorder)panel_table.getBorder()).setTitle("");
  103.     }
  104.  
  105.     private void initCombobox() {
  106.         Date date=Db.getCurrentDate();
  107.         for (int i = 0; i < 5; i++) {
  108.             comboBox_date.addItem(date);
  109.             date = Date.add(date, -1);
  110.         }
  111.         comboBox_date.setSelectedIndex(0);
  112.     }
  113.    
  114.     private void initButtons() {
  115.         button_ok.addActionListener(new ActionListener() {
  116.             @Override
  117.             public void actionPerformed(ActionEvent e) {
  118.                 Employee employee = chooseManager.getSelectedIData();
  119.                 Date date = (Date) comboBox_date.getSelectedItem();
  120.                 Date from=new Date(date);
  121.                 Date to=Date.addDay(date);
  122.                 setData(employee, from, to);
  123.             }
  124.         });
  125.         button_close.addActionListener(new ActionListener() {
  126.             @Override
  127.             public void actionPerformed(ActionEvent e) {
  128.                 dispose();
  129.             }
  130.         });
  131.     }
  132.    
  133.     private void setColor(Component cell, JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  134.         TMDailyControl model = (TMDailyControl) table.getModel();
  135.         OverviewEntry overviewEntry = model.entries.get(row);
  136.         boolean darker=false;
  137.         if (isSelected) {
  138.             cell.setForeground(ShadedTableCellRenderer.selectedForeground);
  139.             cell.setBackground(ShadedTableCellRenderer.selected);
  140.         }
  141.         else {
  142.             cell.setForeground(ShadedTableCellRenderer.normalForeground);
  143.             if ((row) % 2 == 1) {
  144.                 cell.setBackground(ShadedTableCellRenderer.shaded);
  145.                 darker=true;
  146.             }
  147.             else
  148.                 cell.setBackground(ShadedTableCellRenderer.normal);
  149.         }
  150.         if(!isSelected && ((overviewEntry!=null && overviewEntry instanceof OverviewEntryMissing)) || (column==4 && value==null)) {
  151.             cell.setBackground(Color.RED);
  152.             if(darker)
  153.                 cell.setBackground(ShadedTableCellRenderer.getDarker(Color.RED));
  154.             cell.setForeground(Color.WHITE);
  155.         }
  156.     }
  157.    
  158.     private void initTable() {
  159.         table.setModel(new TMDailyControl());
  160.        
  161.         FormatRenderer formatRenderer = new FormatRenderer()  {
  162.             private static final long serialVersionUID = 1L;
  163.             @Override
  164.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  165.                 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  166.                 setColor(cell, table, value, isSelected, hasFocus, row, column);
  167.                 return cell;
  168.             }
  169.         };
  170.        
  171.         table.setDefaultRenderer(Object.class, formatRenderer);
  172.        
  173.         TableColumn col = table.getColumnModel().getColumn(0);
  174.         col.setCellRenderer(new IDataTableCellRenderer<Employee>(employees) {
  175.             private static final long serialVersionUID = 1L;
  176.             @Override
  177.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  178.                 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  179.                 setColor(cell, table, value, isSelected, hasFocus, row, column);
  180.                 return cell;
  181.             }
  182.         });
  183.        
  184.         col = table.getColumnModel().getColumn(1);
  185.         col.setCellRenderer(new DateTimeRenderer() {
  186.             private static final long serialVersionUID = 1L;
  187.             @Override
  188.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  189.                 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  190.                 setColor(cell, table, value, isSelected, hasFocus, row, column);
  191.                 return cell;
  192.             }
  193.         });
  194.         col.setCellEditor(new DateTimeEditor());
  195.        
  196.         col = table.getColumnModel().getColumn(2);
  197.         col.setCellRenderer(new DateIntervalRenderer() {
  198.             private static final long serialVersionUID = 1L;
  199.             @Override
  200.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  201.                 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  202.                 setColor(cell, table, value, isSelected, hasFocus, row, column);
  203.                 return cell;
  204.             }
  205.         });
  206.        
  207.         col = table.getColumnModel().getColumn(3);
  208.         col.setCellRenderer(new DateIntervalRenderer() {
  209.             private static final long serialVersionUID = 1L;
  210.             @Override
  211.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  212.                 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  213.                 setColor(cell, table, value, isSelected, hasFocus, row, column);
  214.                 return cell;
  215.             }
  216.         });
  217.        
  218.         col = table.getColumnModel().getColumn(4);
  219.         col.setCellRenderer(new DateTimeRenderer() {
  220.             private static final long serialVersionUID = 1L;
  221.             @Override
  222.             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  223.                 Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  224.                 setColor(cell, table, value, isSelected, hasFocus, row, column);
  225.                 return cell;
  226.             }
  227.         });
  228.         col.setCellEditor(new DateTimeEditor());
  229.        
  230.         Utils.setTableColumnAutoWidth(table);
  231.         Utils.setTableRowAutoHeight(table);
  232.     }
  233.     Map<Integer, EmployeeTimePlan> map=new HashMap<Integer, EmployeeTimePlan>();
  234.     private void setData(Employee employee, Date from, Date to) {
  235.         if(employee==null) {
  236.             List<OverviewEntry> allOverviewEntries=new ArrayList<OverviewEntry>();
  237.             if(employees!=null) {
  238.                 for (Employee employee1 : employees) {
  239.                     EmployeeTimePlan employeeTimePlan = db.getEmployeeTimePlan(employee1.ID);
  240.                     map.put(employee1.ID, employeeTimePlan);
  241.                     EmployeeWorkEntry[] workEntries=db.getEmployeeWorkEntries(employee1.ID, from, to);
  242.                     List<OverviewEntry> overviewEntries = Employee.getOverviewEntries(workEntries);
  243.                     if(overviewEntries.isEmpty())
  244.                         overviewEntries.add(OverviewEntryMissing.get(employee1.ID, from));
  245.                     allOverviewEntries.addAll(overviewEntries);
  246.                 }
  247.             }
  248.             OverviewEntry[] array = allOverviewEntries.toArray(new OverviewEntry[0]);
  249.             Sort.quicksort(array, new Compare() {
  250.                 @Override
  251.                 public int doCompare(Object a, Object b) {
  252.                     OverviewEntry entryA=(OverviewEntry) a;
  253.                     OverviewEntry entryB=(OverviewEntry) b;
  254.                     if(entryA.timeStart!=null && entryB.timeStart==null)
  255.                         return -1;
  256.                     else if(entryA.timeStart==null && entryB.timeStart!=null)
  257.                         return 1;
  258.                     else if(entryA.timeStart!=null && entryB.timeStart!=null && entryA.timeStart.getTimestamp()<entryB.timeStart.getTimestamp())
  259.                         return -1;
  260.                     else if(entryA.timeStart!=null && entryB.timeStart!=null && entryA.timeStart.getTimestamp()>entryB.timeStart.getTimestamp())
  261.                         return 1;
  262.                     else if(entryA.timeStart!=null && entryB.timeStart!=null && entryA.timeStart.getTimestamp()==entryB.timeStart.getTimestamp())
  263.                         if(entryA.timeEnd!=null && entryB.timeEnd==null)
  264.                             return -1;
  265.                         else if(entryA.timeEnd==null && entryB.timeEnd!=null)
  266.                             return 1;
  267.                         else if(entryA.timeEnd!=null && entryB.timeEnd!=null && entryA.timeEnd.getTimestamp()<entryB.timeEnd.getTimestamp())
  268.                             return -1;
  269.                         else if(entryA.timeEnd!=null && entryB.timeEnd!=null && entryA.timeEnd.getTimestamp()>entryB.timeEnd.getTimestamp())
  270.                             return 1;
  271.                     return 0;
  272.                 }
  273.             });
  274.             allOverviewEntries.clear();
  275.             for (OverviewEntry overviewEntry : array) {
  276.                 allOverviewEntries.add(overviewEntry);
  277.             }
  278.             ((TMDailyControl)table.getModel()).setEntries(allOverviewEntries);
  279.         }
  280.         else {
  281.             EmployeeWorkEntry[] workEntries = db.getEmployeeWorkEntries(employee.ID, from, to);
  282.             List<OverviewEntry> overviewEntries = Employee.getOverviewEntries(workEntries);
  283.             if(overviewEntries.isEmpty())
  284.                 overviewEntries.add(OverviewEntryMissing.get(employee.ID, from));
  285.             ((TMDailyControl)table.getModel()).setEntries(overviewEntries);
  286.         }
  287.     }
  288.    
  289.     class TMDailyControl extends AbstractTableModel {
  290.         private static final long serialVersionUID = 1L;
  291.  
  292.         List<OverviewEntry> entries = new ArrayList<OverviewEntry>();
  293.        
  294.         void setEntries(List<OverviewEntry> list) {
  295.             entries = list;
  296.             fireTableDataChanged();
  297.             Utils.setTableColumnAutoWidth(table);
  298.             Utils.setTableRowAutoHeight(table);
  299.         }
  300.        
  301.         String[] headers = {
  302.                 Lang.getString("tmOverview.employee"),//0
  303.                 Lang.getString("tmOverview.workStart"),//1
  304.                 Lang.getString("tmOverview.break1"),//2
  305.                 Lang.getString("tmOverview.break2"),//3
  306.                 Lang.getString("tmOverview.workEnd"),//4
  307.                 Lang.getString("tmOverview.nettoHours"),//5
  308.                 Lang.getString("tmOverview.overtime50"),//6
  309.                 Lang.getString("tmOverview.overtime100"),//7
  310.         };
  311.        
  312.         @Override
  313.         public int getRowCount() {
  314.             return entries.size();
  315.         }
  316.  
  317.         @Override
  318.         public int getColumnCount() {
  319.             return headers.length;
  320.         }
  321.        
  322.         @Override
  323.         public String getColumnName(int column) {
  324.             return headers[column];
  325.         }
  326.        
  327.         @Override
  328.         public boolean isCellEditable(int rowIndex, int columnIndex) {
  329.             OverviewEntry entry = entries.get(rowIndex);
  330.             if(entry instanceof OverviewEntryMissing)
  331.                 return false;
  332.             if(entry.timeEnd!=null && entry.timeEnd.getTimestamp()<lockDate.getTimestamp())//locked entries by date, unfinished entries can be still changed (until timeEnd is set)
  333.                 return false;
  334.             if(columnIndex==1 || columnIndex==4)
  335.                 return true;
  336.             return false;
  337.         }
  338.        
  339.         @Override
  340.         public Object getValueAt(int rowIndex, int columnIndex) {
  341.             OverviewEntry entry = entries.get(rowIndex);
  342.             EmployeeTimePlan employeeTimePlan = map.get(entry.employeeID);
  343.             if(columnIndex==0) {
  344.                 return employeesHelper.getEntry(entry.employeeID);
  345.             }
  346.             else if(columnIndex==1) {
  347.                 return entry.timeStart;
  348.             }
  349.             else if(columnIndex==2) {
  350.                 return entry.break1;
  351.             }
  352.             else if(columnIndex==3) {
  353.                 return entry.break2;
  354.             }
  355.             else if(columnIndex==4) {
  356.                 return entry.timeEnd;
  357.             }
  358.             else if(columnIndex==5) {
  359.                 EmployeeWorkEntry workEntry = entry.workEntry;
  360.                 if(workEntry!=null) {
  361.                     EmployeeWorkEntry[] breaks = entry.breaks.toArray(new EmployeeWorkEntry[0]);
  362.                     Time time = workEntry.getTime(breaks);
  363.                     return time;
  364.                 }
  365.             }
  366.             else if(columnIndex==6) {
  367.                 if(employeeTimePlan!=null && entry.timeStart!=null && entry.timeStart.time!=null && entry.timeEnd!=null && entry.timeEnd.time!=null) {
  368.                     EmployeeTimePlanDay employeeTimePlanDay = employeeTimePlan.getTimePlan(entry.timeStart.getWeekDay());
  369.                     if(employeeTimePlanDay!=null) {//is it necessary?
  370.                         Time overTime50 = Utils.getOverTime50(employeeTimePlanDay, entry.timeStart.time, entry.timeEnd.time);
  371.                         return overTime50;
  372.                     }
  373.                 }
  374.             }
  375.             else if(columnIndex==7) {
  376.                 if(employeeTimePlan!=null && entry.timeStart!=null && entry.timeStart.time!=null && entry.timeEnd!=null && entry.timeEnd.time!=null) {
  377.                     EmployeeTimePlanDay employeeTimePlanDay = employeeTimePlan.getTimePlan(entry.timeStart.getWeekDay());
  378.                     if(employeeTimePlanDay!=null) {//is it necessary?
  379.                         Time overTime100 = Utils.getOverTime100(employeeTimePlanDay, entry.timeStart.time, entry.timeEnd.time);
  380.                         return overTime100;
  381.                     }
  382.                 }
  383.             }
  384.             return null;
  385.         }
  386.        
  387.         @Override
  388.         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
  389.             OverviewEntry entry = entries.get(rowIndex);
  390.             entry.edited=true;
  391.             if(columnIndex==1) {
  392.                 entry.timeStart=Utils.setObject(entry.timeStart, aValue);
  393.             }
  394.             else if(columnIndex==4) {
  395.                 entry.timeEnd=Utils.setObject(entry.timeEnd, aValue);
  396.             }
  397.             saveEntry(entry);
  398.             fireTableCellUpdated(rowIndex, columnIndex);
  399.             Utils.setTableColumnAutoWidth(table);
  400.             Utils.setTableRowAutoHeight(table);
  401.         }
  402.     }
  403.    
  404.     void saveEntry(OverviewEntry entry) {
  405.         Integer id=entry.workEntryID;
  406.        
  407.         EmployeeWorkEntry workEntry=null;
  408.        
  409.         if(id!=null) {
  410.             workEntry=db.getEmployeeWorkEntry(id);
  411.         }
  412.        
  413.         if(workEntry==null)
  414.             workEntry=new EmployeeWorkEntry();
  415.        
  416.         workEntry.timeStart=entry.timeStart;
  417.         workEntry.timeEnd=entry.timeEnd;
  418.        
  419.         if(workEntry.ID!=null && workEntry.ID>0) {
  420.             db.updEmployeeWorkEntry(workEntry);
  421.         }
  422.        
  423.         entry.edited=false;
  424.     }
  425.    
  426.     class DateTimeRenderer extends ShadedTableCellRenderer {
  427.         private static final long serialVersionUID = 1L;
  428.        
  429.         public DateTimeRenderer() {
  430.             initPanel();
  431.         }
  432.        
  433.         JPanel panel = new JPanel();
  434.         JLabel labelDate = new JLabel();
  435.         JLabel labelTime = new JLabel();
  436.        
  437.         private void initPanel() {
  438.             panel.setOpaque(true);
  439.             labelDate.setOpaque(false);
  440.             labelTime.setOpaque(false);
  441.             panel.setLayout(new GridLayout(2, 1));
  442.             labelDate.setHorizontalAlignment(SwingConstants.CENTER);
  443.             labelTime.setHorizontalAlignment(SwingConstants.CENTER);
  444.             panel.add(labelDate);
  445.             panel.add(labelTime);
  446.         }
  447.        
  448.         @Override
  449.         public Component getTableCellRendererComponent(JTable table,
  450.                 Object value, boolean isSelected, boolean hasFocus, int row,
  451.                 int column) {
  452.             labelDate.setText(null);
  453.             labelTime.setText(null);
  454.             if(value!=null && value instanceof Date) {
  455.                 Date date = (Date)value;
  456.                 if (date != null) {
  457.                     labelDate.setText(date.getDDMMYYYY());
  458.                     if(date.time!=null)
  459.                         labelTime.setText(date.time.toStringHHMM());
  460.                 }
  461.             }
  462.            
  463.             if (isSelected) {
  464.                 panel.setBackground(selected);
  465.                 labelDate.setForeground(selectedForeground);
  466.                 labelTime.setForeground(selectedForeground);
  467.             }
  468.             else {
  469.                 labelDate.setForeground(normalForeground);
  470.                 labelTime.setForeground(normalForeground);
  471.                 if ((row) % 2 == 1)
  472.                     panel.setBackground(shaded);
  473.                 else
  474.                     panel.setBackground(normal);
  475.             }
  476.             return panel;
  477.         }
  478.     }
  479.    
  480.     class DateTimeEditor extends AbstractCellEditor implements TableCellEditor, EditorAlternative {
  481.         private static final long serialVersionUID = 1L;
  482.         DateTimeRenderer renderer=new DateTimeRenderer();
  483.         PDateTime panel = new PDateTime();
  484.        
  485.         Action save = new Action() {
  486.             @Override
  487.             public void action() {
  488.                 stopCellEditing();
  489.             }
  490.         };
  491.        
  492.         Action cancel = new Action() {
  493.             @Override
  494.             public void action() {
  495.                 cancelCellEditing();
  496.             }
  497.         };
  498.        
  499.         Editor editor=new Editor();
  500.         class Editor extends CPopup {
  501.             private static final long serialVersionUID = 1L;
  502.             public Editor() {
  503.                 getContentPane().add(panel);
  504.                 pack();
  505.             }
  506.             @Override
  507.             public void hidePopup() {
  508.                 super.hidePopup();
  509.                 editor=null;
  510.                 cancelCellEditing();
  511.             }
  512.             void close() {
  513.                 super.hidePopup();
  514.             }
  515.         }
  516.        
  517.         @Override
  518.         public Object getCellEditorValue() {
  519.             return panel.getData();
  520.         }
  521.  
  522.         @Override
  523.         public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
  524.             editor=new Editor();
  525.             panel.setForm((Date)value);
  526.             if(value==null) {
  527.                 Date date = new Date();
  528.                 date.time=null;
  529.                 panel.setForm(date);
  530.             }
  531.             panel.setActionSave(save);
  532.             panel.setActionCancel(cancel);
  533.            
  534.             PointerInfo a = MouseInfo.getPointerInfo();
  535.             Point p = a.getLocation();
  536.             editor.setLocation(p);
  537.             editor.showPopup();
  538.            
  539.             return renderer.getTableCellRendererComponent(table, value, isSelected, true, row, column);
  540.         }
  541.        
  542.         int clickCountToStart=2;
  543.         @Override
  544.         public boolean isCellEditable(EventObject anEvent) {
  545.             if (anEvent instanceof MouseEvent) {
  546.                 return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart;
  547.             }
  548.             return true;
  549.         }
  550.         @Override
  551.         public void cancelCellEditing() {
  552.             if(editor!=null)
  553.                 editor.close();
  554.             super.cancelCellEditing();
  555.         }
  556.         @Override
  557.         public boolean stopCellEditing() {
  558.             if(editor!=null)
  559.                 editor.close();
  560.             return super.stopCellEditing();
  561.         }
  562.     }
  563.    
  564.     class DateIntervalRenderer extends ShadedTableCellRenderer {
  565.         private static final long serialVersionUID = 1L;
  566.         public DateIntervalRenderer() {
  567.             initPanel();
  568.         }
  569.        
  570.         JPanel panel = new JPanel();
  571.         JLabel labelFrom = new JLabel();
  572.         JLabel labelTo = new JLabel();
  573.        
  574.         private void initPanel() {
  575.             panel.setOpaque(true);
  576.             labelFrom.setOpaque(false);
  577.             labelTo.setOpaque(false);
  578.             panel.setLayout(new GridLayout(1,2));
  579.             labelFrom.setHorizontalAlignment(SwingConstants.CENTER);
  580.             labelTo.setHorizontalAlignment(SwingConstants.CENTER);
  581.             panel.add(labelFrom);
  582.             panel.add(labelTo);
  583.         }
  584.        
  585.         @Override
  586.         public Component getTableCellRendererComponent(JTable table,
  587.                 Object value, boolean isSelected, boolean hasFocus, int row,
  588.                 int column) {
  589.             if(value!=null && value instanceof DateInterval) {
  590.                 DateInterval data = (DateInterval)value;
  591.                 if (data.start != null)
  592.                     labelFrom.setText(data.start.time.toStringHHMM());
  593.                 else
  594.                     labelFrom.setText("");
  595.                 if (data.end != null)
  596.                     labelTo.setText(data.end.time.toStringHHMM());
  597.                 else
  598.                     labelTo.setText("");
  599.             }
  600.             else {
  601.                 labelFrom.setText(null);
  602.                 labelTo.setText(null);
  603.             }
  604.            
  605.             if (isSelected) {
  606.                 panel.setBackground(selected);
  607.                 labelFrom.setForeground(selectedForeground);
  608.                 labelTo.setForeground(selectedForeground);
  609.             }
  610.             else {
  611.                 labelFrom.setForeground(normalForeground);
  612.                 labelTo.setForeground(normalForeground);
  613.                 if ((row) % 2 == 1)
  614.                     panel.setBackground(shaded);
  615.                 else
  616.                     panel.setBackground(normal);
  617.             }
  618.             return panel;
  619.         }
  620.     }
  621.  
  622.    
  623.     private void initComponents() {
  624.         // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
  625.         panel_main = new JPanel();
  626.         panel_choose = new JPanel();
  627.         label_employee = new JLabel();
  628.         panel_employee = chooseManager.getPanel();
  629.         label_date = new JLabel();
  630.         comboBox_date = new JComboBox();
  631.         button_ok = new JButton();
  632.         panel_table = new JPanel();
  633.         scrollPane_table = new JScrollPane();
  634.         table = new TablePrepared();
  635.         panel_buttons = new JPanel();
  636.         button_close = new JButton();
  637.  
  638.         //======== this ========
  639.         Container contentPane = getContentPane();
  640.         contentPane.setLayout(new GridLayout());
  641.  
  642.         //======== panel_main ========
  643.         panel_main.setBorder(new TitledBorder(""));
  644.         panel_main.setLayout(new GridBagLayout());
  645.         ((GridBagLayout)panel_main.getLayout()).columnWidths = new int[] {0, 0};
  646.         ((GridBagLayout)panel_main.getLayout()).rowHeights = new int[] {0, 0, 0, 0};
  647.         ((GridBagLayout)panel_main.getLayout()).columnWeights = new double[] {1.0, 1.0E-4};
  648.         ((GridBagLayout)panel_main.getLayout()).rowWeights = new double[] {0.0, 1.0, 0.0, 1.0E-4};
  649.  
  650.         //======== panel_choose ========
  651.         panel_choose.setBorder(new TitledBorder("Select Employee"));
  652.         panel_choose.setLayout(new GridBagLayout());
  653.         ((GridBagLayout)panel_choose.getLayout()).columnWidths = new int[] {0, 105, 0, 0};
  654.         ((GridBagLayout)panel_choose.getLayout()).rowHeights = new int[] {0, 0, 0};
  655.         ((GridBagLayout)panel_choose.getLayout()).columnWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4};
  656.         ((GridBagLayout)panel_choose.getLayout()).rowWeights = new double[] {0.0, 0.0, 1.0E-4};
  657.  
  658.         //---- label_employee ----
  659.         label_employee.setText("Employee");
  660.         panel_choose.add(label_employee, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
  661.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  662.             new Insets(0, 0, 5, 5), 0, 0));
  663.         panel_choose.add(panel_employee, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
  664.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  665.             new Insets(0, 0, 5, 5), 0, 0));
  666.  
  667.         //---- label_date ----
  668.         label_date.setText("Date:");
  669.         panel_choose.add(label_date, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
  670.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  671.             new Insets(0, 0, 0, 5), 0, 0));
  672.         panel_choose.add(comboBox_date, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
  673.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  674.             new Insets(0, 0, 0, 5), 0, 0));
  675.  
  676.         //---- button_ok ----
  677.         button_ok.setText("Confirm");
  678.         panel_choose.add(button_ok, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
  679.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  680.             new Insets(0, 0, 0, 0), 0, 0));
  681.         panel_main.add(panel_choose, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
  682.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  683.             new Insets(0, 0, 0, 0), 0, 0));
  684.  
  685.         //======== panel_table ========
  686.         panel_table.setBorder(new TitledBorder("Overtime table"));
  687.         panel_table.setLayout(new BorderLayout());
  688.  
  689.         //======== scrollPane_table ========
  690.         scrollPane_table.setViewportView(table);
  691.         panel_table.add(scrollPane_table, BorderLayout.CENTER);
  692.         panel_main.add(panel_table, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
  693.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  694.             new Insets(0, 0, 0, 0), 0, 0));
  695.  
  696.         //======== panel_buttons ========
  697.         panel_buttons.setLayout(new FlowLayout());
  698.  
  699.         //---- button_close ----
  700.         button_close.setText("close");
  701.         panel_buttons.add(button_close);
  702.         panel_main.add(panel_buttons, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
  703.             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
  704.             new Insets(0, 0, 0, 0), 0, 0));
  705.         contentPane.add(panel_main);
  706.         pack();
  707.         setLocationRelativeTo(getOwner());
  708.         // JFormDesigner - End of component initialization  //GEN-END:initComponents
  709.     }
  710.  
  711.     // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
  712.     private JPanel panel_main;
  713.     private JPanel panel_choose;
  714.     private JLabel label_employee;
  715.     private JPanel panel_employee;
  716.     private JLabel label_date;
  717.     private JComboBox comboBox_date;
  718.     private JButton button_ok;
  719.     private JPanel panel_table;
  720.     private JScrollPane scrollPane_table;
  721.     private TablePrepared table;
  722.     private JPanel panel_buttons;
  723.     private JButton button_close;
  724.    
  725. }
  726. class OverviewEntryMissing extends OverviewEntry {
  727.     static OverviewEntryMissing get(Integer employeeID, Date date) {
  728.         OverviewEntryMissing entry = new OverviewEntryMissing();
  729.         entry.employeeID=employeeID;
  730.         return entry;
  731.     }
  732. }
Add Comment
Please, Sign In to add comment