001 package log;
002
003 import java.util.*;
004 import java.io.*;
005
006 /**
007 * Represents the content of a log file.
008 *
009 * <p>This class takes a log file or a {@link LogInputStream} as parameter, reads all {@link LogEntry LogEntries}
010 * from that file and stores them in a List.</p>
011 *
012 * Having all LogEntries in a List, makes it easy to display them in a {@link log.stdforms.LogTableForm LogTableForm}
013 * or writing them to the persistence file when saving the Shop's state.
014 *
015 * @author Andreas Bartho
016 * @since v3.1
017 */
018 public class LogFileContent implements Serializable {
019
020 /**
021 * ID for serialization.
022 */
023 private static final long serialVersionUID = -8390407452184927491L;
024
025 /**
026 * The list which contains all Entries from the log file.
027 */
028 private List<LogEntry> m_lContentList;
029
030 /**
031 * Creates a LogFileContent. All {@link LogEntry LogEntries} are read from the passed log file and stored
032 * in a list.
033 * @param f the file to be read from.
034 */
035 public LogFileContent(File f) {
036 update(f);
037 }
038
039 /**
040 * Creates a LogFileContent. All {@link LogEntry LogEntries} are read from the passed {@link LogInputStream}
041 * and stored in a list.
042 * @param lis the {@link LogInputStream} to be read from.
043 */
044 public LogFileContent(LogInputStream lis) {
045 update(lis);
046 }
047
048 /**
049 * Replaces all currently saved {@link LogEntry LogEntries} with new ones.
050 * @param f the log file to be read from
051 */
052 public void update(File f) {
053 try {
054 update(new LogInputStream(new FileInputStream(f)));
055 }
056 catch (IOException ioe) {
057 ioe.printStackTrace();
058 }
059 }
060
061 /**
062 * Replaces all currently saved {@link LogEntry LogEntries} with new ones.
063 * @param lis the {@link LogInputStream} to be read from.
064 */
065 public void update(LogInputStream lis) {
066 m_lContentList = streamToList(lis);
067 }
068
069 /**
070 * @return the List of currently saved {@link LogEntry LogEntries}
071 */
072 public List<LogEntry> getContentList() {
073 return m_lContentList;
074 }
075
076 /**
077 * Does the actual conversion from a {@link LogInputStream} to a list of {@link LogEntry LogEntries}.<br>
078 * @param lis the LogInputStream to be read from
079 * @return a List with all LogEntries from the LogInputStream
080 */
081 private List<LogEntry> streamToList(LogInputStream lis) {
082 List<LogEntry> l = new LinkedList<LogEntry>();
083 try {
084 while (true) {
085 l.add(lis.readEntry());
086 }
087 }
088 catch (IOException ioe) {}
089 catch (ClassNotFoundException cnfe) {}
090 try {
091 lis.close();
092 }
093 catch (IOException ioe) {}
094
095 return l;
096 }
097 }