diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/AboutWindow.java | 72 | ||||
| -rw-r--r-- | client/CalendarTableCellRenderer.java | 236 | ||||
| -rw-r--r-- | client/CalendarTableModel.java | 867 | ||||
| -rw-r--r-- | client/InfoWindow.java | 76 | ||||
| -rw-r--r-- | client/LicenseWindow.java | 38 | ||||
| -rw-r--r-- | client/NetCalendarClient.java | 1422 | ||||
| -rw-r--r-- | client/ServerRequester.java | 120 | ||||
| -rw-r--r-- | client/SplashScreen.java | 66 | ||||
| -rw-r--r-- | client/SubWindow.java | 160 | ||||
| -rw-r--r-- | client/helper/DateSpinner.java | 86 | ||||
| -rw-r--r-- | client/helper/GUIHelper.java | 338 | ||||
| -rw-r--r-- | client/inputforms/AdvancedSearching.java | 227 | ||||
| -rw-r--r-- | client/inputforms/CreateNewEvent.java | 194 | ||||
| -rw-r--r-- | client/inputforms/EditExistingEvent.java | 256 | ||||
| -rw-r--r-- | client/inputforms/InputForm.java | 144 | ||||
| -rw-r--r-- | client/inputforms/Preferences.java | 154 | ||||
| -rw-r--r-- | client/inputforms/RenameCategory.java | 190 |
17 files changed, 2347 insertions, 2299 deletions
diff --git a/client/AboutWindow.java b/client/AboutWindow.java index 0faa2cf..38d947e 100644 --- a/client/AboutWindow.java +++ b/client/AboutWindow.java @@ -1,4 +1,4 @@ -package client; +package client; import shared.*; /** @@ -8,43 +8,43 @@ import shared.*; * */ public class AboutWindow extends InfoWindow { - final static long serialVersionUID = 1L; - /** + final static long serialVersionUID = 1L; + /** * Creates the window and shows it. * @param sTitleText Specifies the title text of this JFrame. * @param netCalendarClient Specifies the calendar client session object to use. */ - public AboutWindow(NetCalendarClient netCalendarClient) { - super(netCalendarClient, "About", - Config.VERSION + "\n" + - "(c) 2006, 2009 by Dipl.-Inform. (FH) Paul C. Buetow; " + - "Web: netcalendar.buetow.org; E-Mail: " + getEmailAddr() + "\n\n" + - "NetCalendar is a network capable and mostly UNIX /usr/bin/calendar database compatible Calendar application " + - "programmed in Java. Its initial motivation was a programming project at the Aachen " + - "University of Applied Sciences (www.fh-aachen.de) for the object oriented " + - "programming class. But it became much more than just that!\n\n" + - "Credits:\n\n" + - "Bernhard Schertl " + - "for testing and suggestions for improvements; Web: www.b78.org\n\n" + - "Prof. Dr. rer. nat. H. Fassbender " + - "for supervision of expert opinion; Web: www.fassbender.fh-aachen.de\n\n" + - "Florian P. Buetow " + - "for ideas concerning the splash image; Web: www.florianbuetow.com\n\n" + - "Kay Czarnotta " + - "for ideas concerning the icon and an optimization tip for NetCalendar for Mac OS X; Web: eagleeye.byte-welt.net" - ); - } - - /** - * This method simply returns a string containing the contact email address. - * This method is needed to protect this sourcecode + the email address for - * internet spam because some spambots try to fetch this address from the - * cvsweb interface. - * @return Returns a string containing the contact email address. - */ - private static String getEmailAddr() { - String sEmail = "netcalendar at dev dot buetow dot org"; - sEmail = sEmail.replaceAll(" at ", "@"); - return sEmail.replaceAll(" dot ", "."); - } + public AboutWindow(NetCalendarClient netCalendarClient) { + super(netCalendarClient, "About", + Config.VERSION + "\n" + + "(c) 2006, 2009 by Dipl.-Inform. (FH) Paul C. Buetow; " + + "Web: netcalendar.buetow.org; E-Mail: " + getEmailAddr() + "\n\n" + + "NetCalendar is a network capable and mostly UNIX /usr/bin/calendar database compatible Calendar application " + + "programmed in Java. Its initial motivation was a programming project at the Aachen " + + "University of Applied Sciences (www.fh-aachen.de) for the object oriented " + + "programming class. But it became much more than just that!\n\n" + + "Credits:\n\n" + + "Bernhard Schertl " + + "for testing and suggestions for improvements; Web: www.b78.org\n\n" + + "Prof. Dr. rer. nat. H. Fassbender " + + "for supervision of expert opinion; Web: www.fassbender.fh-aachen.de\n\n" + + "Florian P. Buetow " + + "for ideas concerning the splash image; Web: www.florianbuetow.com\n\n" + + "Kay Czarnotta " + + "for ideas concerning the icon and an optimization tip for NetCalendar for Mac OS X; Web: eagleeye.byte-welt.net" + ); + } + + /** + * This method simply returns a string containing the contact email address. + * This method is needed to protect this sourcecode + the email address for + * internet spam because some spambots try to fetch this address from the + * cvsweb interface. + * @return Returns a string containing the contact email address. + */ + private static String getEmailAddr() { + String sEmail = "netcalendar at dev dot buetow dot org"; + sEmail = sEmail.replaceAll(" at ", "@"); + return sEmail.replaceAll(" dot ", "."); + } } diff --git a/client/CalendarTableCellRenderer.java b/client/CalendarTableCellRenderer.java index 11d2a1c..67a9b67 100644 --- a/client/CalendarTableCellRenderer.java +++ b/client/CalendarTableCellRenderer.java @@ -14,122 +14,122 @@ import shared.*; * @author buetow */ public class CalendarTableCellRenderer extends DefaultTableCellRenderer { - private static final long serialVersionUID = 1L; - private CalendarTableModel tableModel; - // private NetCalendarClient netCalendarClient; - - private static final Color SELECTED_BACKGROUND_COLOR; - private static final Color SELECTED_FOREGROUND_COLOR; - private static final Color ALREADY_OVER_BACKGROUND_COLOR; - private static final Color ALREADY_OVER_FOREGROUND_COLOR; - private static final Color STANDARD_FOREGROUND_COLOR; - private static final Color BACKGROUND_COLOR_1_DAY; - private static final Color BACKGROUND_COLOR_7_DAYS; - private static final Color BACKGROUND_COLOR_28_DAYS; - private static final Color BACKGROUND_COLOR_168_DAYS; - private static final Color BACKGROUND_COLOR_365_DAYS; - private static final Color BACKGROUND_COLOR_MT_365_DAYS; - private static final Color YEARLY_BACKGROUND_COLOR; - private static final Color NOT_YEARLY_BACKGROUND_COLOR; - - - private static final long NANOSECONDS_1_DAY; - private static final long NANOSECONDS_7_DAYS; - private static final long NANOSECONDS_28_DAYS; - private static final long NANOSECONDS_168_DAYS; - private static final long NANOSECONDS_365_DAYS; - - // Initialize once, use often! - static { - SELECTED_BACKGROUND_COLOR = new Color(0, 0, 0); - SELECTED_FOREGROUND_COLOR = new Color(255, 255, 255); - STANDARD_FOREGROUND_COLOR = new Color(0, 0, 0); - ALREADY_OVER_FOREGROUND_COLOR = SELECTED_BACKGROUND_COLOR; - ALREADY_OVER_BACKGROUND_COLOR = SELECTED_FOREGROUND_COLOR; - BACKGROUND_COLOR_1_DAY = new Color(0xff, 0x00, 0x00); - BACKGROUND_COLOR_7_DAYS = new Color(0xff, 0x6c, 0x00); - BACKGROUND_COLOR_28_DAYS = new Color(0xff, 0xa5, 0x00); - BACKGROUND_COLOR_168_DAYS = new Color(0xe7, 0xa5, 0x5e); - BACKGROUND_COLOR_365_DAYS = new Color(230, 218, 161); - BACKGROUND_COLOR_MT_365_DAYS = new Color(0xa2, 0x9c, 0x90); // For more than 365 days - - YEARLY_BACKGROUND_COLOR = new Color(0x65, 0xa9, 0xe3); - NOT_YEARLY_BACKGROUND_COLOR = new Color(0x88, 0xe0, 0x90); - - - NANOSECONDS_1_DAY = 3600 * 24 * 1000; - NANOSECONDS_7_DAYS = NANOSECONDS_1_DAY * 7; - NANOSECONDS_28_DAYS = NANOSECONDS_7_DAYS * 4; - NANOSECONDS_168_DAYS = NANOSECONDS_28_DAYS * 6; - NANOSECONDS_365_DAYS = NANOSECONDS_1_DAY * 365; - } - - /** - * This method creates a custom table cell renderer for the calendar client. - * Its coloring the different cells and sets other special display attributes. - * @param tableModel Specifies the DefaultTableModel object used by the JTable. This is needed to make decisions about displaying a specific cell. - */ - public CalendarTableCellRenderer(CalendarTableModel tableModel) { - // this.netCalendarClient = netCalendarClient; - this.tableModel = tableModel; - } - - /** - * This method returns the Component object of a specific table cell. - * @param jTable Specifies the table object of the calendar client frame. - * @param object Specifies the object which is inside of the specific table cell. - * @param isSelected Specifies if the current cell is selected or not. - * @param hasFocus Specifies if the current cell is focused or not. - * @param iRow Specifies thr row number of the current cell. - * @param iCol specifies the column number of the current cell. - * @return Returns the Component object of a specific table cell. - */ - public Component getTableCellRendererComponent(JTable jTable, Object object, - boolean isSelected, boolean hasFocus, int iRow, int iCol){ - JLabel jLable =(JLabel) super.getTableCellRendererComponent(jTable, object, isSelected, hasFocus, iRow, iCol); - - //MyVector vecSelected = netCalendarClient.getSelectedIndexes(); - - //if (vecSelected.hasLike(new Integer(iRow))) { - if (isSelected) { - jLable.setBackground(SELECTED_BACKGROUND_COLOR); - jLable.setForeground(SELECTED_FOREGROUND_COLOR); - return jLable; - } - - CalendarEvent calendarEvent = tableModel.getEvent(iRow); - jLable.setForeground(STANDARD_FOREGROUND_COLOR); - - if (iCol <= 1) { - if (!calendarEvent.isYearly()) - jLable.setBackground(NOT_YEARLY_BACKGROUND_COLOR); - else - jLable.setBackground(YEARLY_BACKGROUND_COLOR); - - return jLable; - } - - long lCurrentTime = new Date().getTime(); - long lEventTime = calendarEvent.getDate().getTime(); - - if (lCurrentTime + NANOSECONDS_1_DAY > lEventTime) - jLable.setBackground(BACKGROUND_COLOR_1_DAY); - - else if (lCurrentTime + NANOSECONDS_7_DAYS > lEventTime) - jLable.setBackground(BACKGROUND_COLOR_7_DAYS); - - else if (lCurrentTime + NANOSECONDS_28_DAYS > lEventTime) - jLable.setBackground(BACKGROUND_COLOR_28_DAYS); - - else if (lCurrentTime + NANOSECONDS_168_DAYS > lEventTime) - jLable.setBackground(BACKGROUND_COLOR_168_DAYS); - - else if (lCurrentTime + NANOSECONDS_365_DAYS > lEventTime) - jLable.setBackground(BACKGROUND_COLOR_365_DAYS); - - else - jLable.setBackground(BACKGROUND_COLOR_MT_365_DAYS); - - return jLable; - } + private static final long serialVersionUID = 1L; + private CalendarTableModel tableModel; + // private NetCalendarClient netCalendarClient; + + private static final Color SELECTED_BACKGROUND_COLOR; + private static final Color SELECTED_FOREGROUND_COLOR; + private static final Color ALREADY_OVER_BACKGROUND_COLOR; + private static final Color ALREADY_OVER_FOREGROUND_COLOR; + private static final Color STANDARD_FOREGROUND_COLOR; + private static final Color BACKGROUND_COLOR_1_DAY; + private static final Color BACKGROUND_COLOR_7_DAYS; + private static final Color BACKGROUND_COLOR_28_DAYS; + private static final Color BACKGROUND_COLOR_168_DAYS; + private static final Color BACKGROUND_COLOR_365_DAYS; + private static final Color BACKGROUND_COLOR_MT_365_DAYS; + private static final Color YEARLY_BACKGROUND_COLOR; + private static final Color NOT_YEARLY_BACKGROUND_COLOR; + + + private static final long NANOSECONDS_1_DAY; + private static final long NANOSECONDS_7_DAYS; + private static final long NANOSECONDS_28_DAYS; + private static final long NANOSECONDS_168_DAYS; + private static final long NANOSECONDS_365_DAYS; + + // Initialize once, use often! + static { + SELECTED_BACKGROUND_COLOR = new Color(0, 0, 0); + SELECTED_FOREGROUND_COLOR = new Color(255, 255, 255); + STANDARD_FOREGROUND_COLOR = new Color(0, 0, 0); + ALREADY_OVER_FOREGROUND_COLOR = SELECTED_BACKGROUND_COLOR; + ALREADY_OVER_BACKGROUND_COLOR = SELECTED_FOREGROUND_COLOR; + BACKGROUND_COLOR_1_DAY = new Color(0xff, 0x00, 0x00); + BACKGROUND_COLOR_7_DAYS = new Color(0xff, 0x6c, 0x00); + BACKGROUND_COLOR_28_DAYS = new Color(0xff, 0xa5, 0x00); + BACKGROUND_COLOR_168_DAYS = new Color(0xe7, 0xa5, 0x5e); + BACKGROUND_COLOR_365_DAYS = new Color(230, 218, 161); + BACKGROUND_COLOR_MT_365_DAYS = new Color(0xa2, 0x9c, 0x90); // For more than 365 days + + YEARLY_BACKGROUND_COLOR = new Color(0x65, 0xa9, 0xe3); + NOT_YEARLY_BACKGROUND_COLOR = new Color(0x88, 0xe0, 0x90); + + + NANOSECONDS_1_DAY = 3600 * 24 * 1000; + NANOSECONDS_7_DAYS = NANOSECONDS_1_DAY * 7; + NANOSECONDS_28_DAYS = NANOSECONDS_7_DAYS * 4; + NANOSECONDS_168_DAYS = NANOSECONDS_28_DAYS * 6; + NANOSECONDS_365_DAYS = NANOSECONDS_1_DAY * 365; + } + + /** + * This method creates a custom table cell renderer for the calendar client. + * Its coloring the different cells and sets other special display attributes. + * @param tableModel Specifies the DefaultTableModel object used by the JTable. This is needed to make decisions about displaying a specific cell. + */ + public CalendarTableCellRenderer(CalendarTableModel tableModel) { + // this.netCalendarClient = netCalendarClient; + this.tableModel = tableModel; + } + + /** + * This method returns the Component object of a specific table cell. + * @param jTable Specifies the table object of the calendar client frame. + * @param object Specifies the object which is inside of the specific table cell. + * @param isSelected Specifies if the current cell is selected or not. + * @param hasFocus Specifies if the current cell is focused or not. + * @param iRow Specifies thr row number of the current cell. + * @param iCol specifies the column number of the current cell. + * @return Returns the Component object of a specific table cell. + */ + public Component getTableCellRendererComponent(JTable jTable, Object object, + boolean isSelected, boolean hasFocus, int iRow, int iCol) { + JLabel jLable =(JLabel) super.getTableCellRendererComponent(jTable, object, isSelected, hasFocus, iRow, iCol); + + //MyVector vecSelected = netCalendarClient.getSelectedIndexes(); + + //if (vecSelected.hasLike(new Integer(iRow))) { + if (isSelected) { + jLable.setBackground(SELECTED_BACKGROUND_COLOR); + jLable.setForeground(SELECTED_FOREGROUND_COLOR); + return jLable; + } + + CalendarEvent calendarEvent = tableModel.getEvent(iRow); + jLable.setForeground(STANDARD_FOREGROUND_COLOR); + + if (iCol <= 1) { + if (!calendarEvent.isYearly()) + jLable.setBackground(NOT_YEARLY_BACKGROUND_COLOR); + else + jLable.setBackground(YEARLY_BACKGROUND_COLOR); + + return jLable; + } + + long lCurrentTime = new Date().getTime(); + long lEventTime = calendarEvent.getDate().getTime(); + + if (lCurrentTime + NANOSECONDS_1_DAY > lEventTime) + jLable.setBackground(BACKGROUND_COLOR_1_DAY); + + else if (lCurrentTime + NANOSECONDS_7_DAYS > lEventTime) + jLable.setBackground(BACKGROUND_COLOR_7_DAYS); + + else if (lCurrentTime + NANOSECONDS_28_DAYS > lEventTime) + jLable.setBackground(BACKGROUND_COLOR_28_DAYS); + + else if (lCurrentTime + NANOSECONDS_168_DAYS > lEventTime) + jLable.setBackground(BACKGROUND_COLOR_168_DAYS); + + else if (lCurrentTime + NANOSECONDS_365_DAYS > lEventTime) + jLable.setBackground(BACKGROUND_COLOR_365_DAYS); + + else + jLable.setBackground(BACKGROUND_COLOR_MT_365_DAYS); + + return jLable; + } } diff --git a/client/CalendarTableModel.java b/client/CalendarTableModel.java index 146c20b..4520c66 100644 --- a/client/CalendarTableModel.java +++ b/client/CalendarTableModel.java @@ -8,427 +8,474 @@ import shared.remotecall.*; /** * This class defined the table model of the JTable of the main calendar client window. All table - * data and most of the table actions, like sorting or updating the content, go trough this class. + * data and most of the table actions, like sorting or updating the content, go trough this class. * @author buetow * */ public final class CalendarTableModel extends AbstractTableModel { - public static final String NUM_HEADER = "#"; - public static final String DATE_HEADER = "Date"; - public static final String CATEGORY_HEADER = "Category"; - public static final String DESCRIPTION_HEADER = "Description"; - public static final String PLACE_HEADER = "Place"; - - private static final int iEnumLength = Config.getStringValue("client_max_events").length(); - private static final long serialVersionUID = 1L; - private static final int iCols = 5; // Num of columns never changes! - private int iRows = 0; - private Vector vecEvents; - private Comparator lastSortComparator = null; - private JTable jTable; - - /** - * Simple constructor, creates a calendar table model to be used with the JTable of the netcalendar client main window. - * @param jTable Specifies the JTable object of this table model. - */ - public CalendarTableModel(JTable jTable) { - this.jTable = jTable; - } - - /** - * This method returns the number of columns of the JTable. - * @return Returns the number of columns of the JTable. - */ - public int getColumnCount() { - return iCols; - } - - /** - * This method retuns the number of rows of the JTable. - * @return Returns the number of rows of the JTable. - */ - public int getRowCount() { - return iRows; - } - - /** - * This method sets the number of rows of the JTable. - * @param iRows Specifies the number of rows of the JTable. - */ - public void setRowCount(int iRows) { - this.iRows = iRows; - } - - /** - * This method checks if a cell is editable or not. - * @param iRow Specifies the tables row. - * @param iCol Specifies the tables column. - * @return Returns true if the cell is editable. Else, false will be returned. - */ - public boolean isCellEditable(int iRow, int iCol) { - if (iCol > 1) - return true; - - return false; - } - - /** - * Gets a specific table value - * @param iRow Specifies the tables row - * @param iCol Specifies the tables column - * @return Returns the object at (row,column) - */ - public Object getValueAt(int iRow, int iCol) { - CalendarEvent calendarEvent = (CalendarEvent) vecEvents.get(iRow); - - switch (iCol) { - case 0: String sEnum = "" + (iRow + 1); - while (sEnum.length() < iEnumLength) - sEnum = "0" + sEnum; - return sEnum; - case 1: return calendarEvent.getDate(); - case 2: return calendarEvent.getDescription(); - case 3: return calendarEvent.getCategoryName(); - case 4: return calendarEvent.getPlace(); - } - - return "N/A"; - } - - /** - * This function updates the data of the JTable. - * @param object Specifies the new value. - * @param iRow Specifies the row of the cell to be updated. - * @param iCol Specifies the column of the cell to be updated. - */ - public void setValueAt(Object object, int iRow, int iCol) { - CalendarEvent calendarEvent = (CalendarEvent) vecEvents.get(iRow); - - switch (iCol) { - case 2: calendarEvent.setDescription((String) object); - break; - case 3: calendarEvent.setCategoryName((String) object); - break; - case 4: calendarEvent.setPlace((String) object); - break; - default: return; - } - - runLastSorter(); - jTable.updateUI(); - - ClientRequest clientRequest = new ClientRequest(ClientRequest.MODIFY_EVENT); - clientRequest.setEvent(calendarEvent); - ServerRequester.sendClientRequest(clientRequest); - } - - /** - * This method returns the class types of a specific table column. - * @param iCol Specifies the column index to get the class type for. - * @return Returns the class type of the specified column. - */ - public Class getColumnClass(int iCol) { - switch (iCol) { - case 0: return String.class; - case 1: return MyDate.class; - case 2: return String.class; - case 3: return String.class; - case 4: return String.class; - } - - return String.class; - } - - /** - * This method returns the column header of a specific table column. - * @param iCol Specifies the column index to get the column header for. - * @return Returns the header string of the specified column. - */ - public String getColumnName(int iCol) { - switch (iCol) { - case 0: return NUM_HEADER; - case 1: return DATE_HEADER; - case 2: return DESCRIPTION_HEADER; - case 3: return CATEGORY_HEADER; - case 4: return PLACE_HEADER; - } - - return "N/A"; - } - - /** - * This method returns the calendar event which belongs to a specific table row - * @param iRow Specifies the table row index - * @return Returns the calendar event - */ - public CalendarEvent getEvent(int iRow) { - return (CalendarEvent) vecEvents.get(iRow); - } - - /** - * This method updates all the value objects (calendar events) of the table. - * @param vecEvents Specifies the vector of the events to be used. - */ - public void setEvents(Vector vecEvents) { - if (vecEvents == null) - return; - - this.vecEvents = vecEvents; - setRowCount(vecEvents.size()); - - runLastSorter(); - } - - /** - * This method sorts the data again using the last sorting method being used. - */ - private void runLastSorter() { - if (lastSortComparator == null) { - sortByDate(); - - } else { - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - } - } - - /** - * Sorts the table content by a specified table column. - * @param iCol Specifies the table column to sort against. - */ - public void sortByCol(int iCol) { - switch (iCol) { - case 0: - case 1: sortByDate(); - break; - case 2: sortByDescription(); - break; - case 3: sortByCategory(); - break; - case 4: sortByPlace(); - break; - } - } - - /** - * Reverse sorts the table content by a specified table column. - * @param iCol Specifies the table column to reverse sort against. - */ - public void reverseSortByCol(int iCol) { - switch (iCol) { - case 0: - case 1: reverseSortByDate(); - break; - case 2: reverseSortByDescription(); - break; - case 3: reverseSortByCategory(); - break; - case 4: reverseSortByPlace(); - break; - } - } - - /** - * Sorts the table content by their IDs. - */ - public void sortByID() { - Main.statusMessage("Sorting by ID..."); - - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - int i = ((CalendarEvent) objectA).getID(); - int j = ((CalendarEvent) objectB).getID(); - if (i == j) - return 0; - else if (i < j) - return -1; - else - return 1; - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - - Main.statusMessage("Sorting by date done"); - } - - /** - * Sorts the table content by their dates. - */ - public void sortByDate() { - Main.statusMessage("Sorting by date..."); - - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - long l = ((CalendarEvent) objectA).getDate().getTime(); - long m = ((CalendarEvent) objectB).getDate().getTime(); - if (l == m) - return 0; - else if (l < m) - return -1; - else - return 1; - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - - Main.statusMessage("Sorting by date done"); - } - - /** - * Sorts the table content by their category names. - */ - public void sortByCategory() { - Main.statusMessage("Sorting by category..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - CalendarEvent eventA = (CalendarEvent) objectA; - CalendarEvent eventB = (CalendarEvent) objectB; - return eventA.getCategoryName().compareTo(eventB.getCategoryName()); - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - Main.statusMessage("Sorting by category done"); - } - - /** - * Sorts the table content by their description texts. - */ - public void sortByDescription() { - Main.statusMessage("Sorting by description..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - CalendarEvent eventA = (CalendarEvent) objectA; - CalendarEvent eventB = (CalendarEvent) objectB; - return eventA.getDescription().compareTo(eventB.getDescription()); - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - Main.statusMessage("Sorting by description done"); + public static final String NUM_HEADER = "#"; + public static final String DATE_HEADER = "Date"; + public static final String CATEGORY_HEADER = "Category"; + public static final String DESCRIPTION_HEADER = "Description"; + public static final String PLACE_HEADER = "Place"; + + private static final int iEnumLength = Config.getStringValue("client_max_events").length(); + private static final long serialVersionUID = 1L; + private static final int iCols = 5; // Num of columns never changes! + private int iRows = 0; + private Vector vecEvents; + private Comparator lastSortComparator = null; + private JTable jTable; + + /** + * Simple constructor, creates a calendar table model to be used with the JTable of the netcalendar client main window. + * @param jTable Specifies the JTable object of this table model. + */ + public CalendarTableModel(JTable jTable) { + this.jTable = jTable; + } + + /** + * This method returns the number of columns of the JTable. + * @return Returns the number of columns of the JTable. + */ + public int getColumnCount() { + return iCols; + } + + /** + * This method retuns the number of rows of the JTable. + * @return Returns the number of rows of the JTable. + */ + public int getRowCount() { + return iRows; + } + + /** + * This method sets the number of rows of the JTable. + * @param iRows Specifies the number of rows of the JTable. + */ + public void setRowCount(int iRows) { + this.iRows = iRows; + } + + /** + * This method checks if a cell is editable or not. + * @param iRow Specifies the tables row. + * @param iCol Specifies the tables column. + * @return Returns true if the cell is editable. Else, false will be returned. + */ + public boolean isCellEditable(int iRow, int iCol) { + if (iCol > 1) + return true; + + return false; + } + + /** + * Gets a specific table value + * @param iRow Specifies the tables row + * @param iCol Specifies the tables column + * @return Returns the object at (row,column) + */ + public Object getValueAt(int iRow, int iCol) { + CalendarEvent calendarEvent = (CalendarEvent) vecEvents.get(iRow); + + switch (iCol) { + case 0: + String sEnum = "" + (iRow + 1); + while (sEnum.length() < iEnumLength) + sEnum = "0" + sEnum; + return sEnum; + case 1: + return calendarEvent.getDate(); + case 2: + return calendarEvent.getDescription(); + case 3: + return calendarEvent.getCategoryName(); + case 4: + return calendarEvent.getPlace(); } - /** - * Sorts the table content by their places. - */ - public void sortByPlace() { - Main.statusMessage("Sorting by place..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - CalendarEvent eventA = (CalendarEvent) objectA; - CalendarEvent eventB = (CalendarEvent) objectB; - return eventA.getPlace().compareTo(eventB.getPlace()); - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - Main.statusMessage("Sorting by place done"); + return "N/A"; + } + + /** + * This function updates the data of the JTable. + * @param object Specifies the new value. + * @param iRow Specifies the row of the cell to be updated. + * @param iCol Specifies the column of the cell to be updated. + */ + public void setValueAt(Object object, int iRow, int iCol) { + CalendarEvent calendarEvent = (CalendarEvent) vecEvents.get(iRow); + + switch (iCol) { + case 2: + calendarEvent.setDescription((String) object); + break; + case 3: + calendarEvent.setCategoryName((String) object); + break; + case 4: + calendarEvent.setPlace((String) object); + break; + default: + return; } - - /** - * Reverse sorts the table content by their IDs. - */ - public void reverseSortByID() { - Main.statusMessage("Reverse sorting by date..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - long i = ((CalendarEvent) objectA).getID(); - long j = ((CalendarEvent) objectB).getID(); - if (i == j) - return 0; - else if (i > j) - return -1; - else - return 1; - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - Main.statusMessage("Reverse sorting by date done"); + + runLastSorter(); + jTable.updateUI(); + + ClientRequest clientRequest = new ClientRequest(ClientRequest.MODIFY_EVENT); + clientRequest.setEvent(calendarEvent); + ServerRequester.sendClientRequest(clientRequest); + } + + /** + * This method returns the class types of a specific table column. + * @param iCol Specifies the column index to get the class type for. + * @return Returns the class type of the specified column. + */ + public Class getColumnClass(int iCol) { + switch (iCol) { + case 0: + return String.class; + case 1: + return MyDate.class; + case 2: + return String.class; + case 3: + return String.class; + case 4: + return String.class; } - - /** - * Reverse sorts the table content by their dates. - */ - public void reverseSortByDate() { - Main.statusMessage("Reverse sorting by date..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - long l = ((CalendarEvent) objectA).getDate().getTime(); - long m = ((CalendarEvent) objectB).getDate().getTime(); - if (l == m) - return 0; - else if (l > m) - return -1; - else - return 1; - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - Main.statusMessage("Reverse sorting by date done"); + + return String.class; + } + + /** + * This method returns the column header of a specific table column. + * @param iCol Specifies the column index to get the column header for. + * @return Returns the header string of the specified column. + */ + public String getColumnName(int iCol) { + switch (iCol) { + case 0: + return NUM_HEADER; + case 1: + return DATE_HEADER; + case 2: + return DESCRIPTION_HEADER; + case 3: + return CATEGORY_HEADER; + case 4: + return PLACE_HEADER; } - - /** - * Reverse sorts the table content by their category names. - */ - public void reverseSortByCategory() { - Main.statusMessage("Reverse sorting by category..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - CalendarEvent eventA = (CalendarEvent) objectA; - CalendarEvent eventB = (CalendarEvent) objectB; - return eventB.getCategoryName().compareTo(eventA.getCategoryName()); - } - public boolean equals(Object object) { return false; } - }; - Collections.sort(vecEvents, lastSortComparator); - jTable.updateUI(); - Main.statusMessage("Reverse sorting by category done"); + + return "N/A"; + } + + /** + * This method returns the calendar event which belongs to a specific table row + * @param iRow Specifies the table row index + * @return Returns the calendar event + */ + public CalendarEvent getEvent(int iRow) { + return (CalendarEvent) vecEvents.get(iRow); + } + + /** + * This method updates all the value objects (calendar events) of the table. + * @param vecEvents Specifies the vector of the events to be used. + */ + public void setEvents(Vector vecEvents) { + if (vecEvents == null) + return; + + this.vecEvents = vecEvents; + setRowCount(vecEvents.size()); + + runLastSorter(); + } + + /** + * This method sorts the data again using the last sorting method being used. + */ + private void runLastSorter() { + if (lastSortComparator == null) { + sortByDate(); + + } else { + Collections.sort(vecEvents, lastSortComparator); + jTable.updateUI(); } - - /** - * Reverse sorts the table content by their description texts. - */ - public void reverseSortByDescription() { - Main.statusMessage("Reverse sorting by description..."); - lastSortComparator = new Comparator() { - public int compare(Object objectA, Object objectB) { - CalendarEvent eventA = (CalendarEvent) objectA; - CalendarEvent eventB = (CalendarEvent) objectB; - |
