package org.jtheque.views.impl.models; import org.jtheque.events.Event; import org.jtheque.events.EventService; import org.jtheque.i18n.LanguageService; import org.jtheque.utils.collections.CollectionUtils; import javax.swing.table.AbstractTableModel; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import java.util.Locale; /* * Copyright JTheque (Baptiste Wicht) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * A table model for the events. * * @author Baptiste Wicht */ public final class EventsTableModel extends AbstractTableModel { private static final long serialVersionUID = 737149118018076647L; private static final int LEVEL = 0; private static final int DATE = 1; private static final int TIME = 2; private static final int SOURCE = 3; private static final int TITLE = 4; private final DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()); private final DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss,SSS", Locale.getDefault()); private transient String log; private final transient EventService eventService; private final transient LanguageService languageService; /** * Headers of the table. */ private transient String[] headers; /** * The films to buy to display. */ private transient List<Event> events; /** * Construct a new <code>FilmsToBuyTableModel</code>. * * @param eventService The event service. * @param languageService The language service. */ public EventsTableModel(EventService eventService, LanguageService languageService) { super(); this.eventService = eventService; this.languageService = languageService; setLog(eventService.getEventLogs().iterator().next()); } /** * Return the event log at the index. * * @param row The index of the event to get. * * @return The event level at the position or null if there is no event at this position. */ public Event getValueAt(int row) { return events.get(row); } /** * Set the header of the table. * * @param headers The header of the table model */ public void setHeaders(String[] headers) { this.headers = headers.clone(); fireTableStructureChanged(); } @Override public int getColumnCount() { return headers.length; } @Override public int getRowCount() { return events.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { Event event = events.get(rowIndex); if (event != null) { switch (columnIndex) { case LEVEL: return languageService.getMessage(event.getLevel().getKey()); case DATE: return dateFormat.format(event.getDate()); case TIME: return timeFormat.format(event.getDate()); case SOURCE: return event.getSource(); case TITLE: return languageService.getMessage(event.getTitleKey()); default: return ""; } } return ""; } @Override public String getColumnName(int column) { return headers[column]; } @Override public boolean isCellEditable(int row, int column) { return false; } /** * Set the event log to display. * * @param log The event log to display. */ public void setLog(String log) { if (this.log == null || !this.log.equals(log)) { events = CollectionUtils.copyOf(eventService.getEvents(log)); fireTableDataChanged(); this.log = log; } } }