// Path: src/main/java/vdm/Tick/Tick.java
// abstract public class Tick {
// 
//     public String getSegment() {
//         return segment;
//     }
// 
//     private final String segment;
// 
//     private final String tickTemplate;
//     private final String demoName;
//     private final File demoFile;
//     private int start;
//     private int end;
//     boolean valid;
//     String reason;
// 
//     public boolean isValid() {
//         return valid;
//     }
// 
//     public String getReason() {
//         return reason;
//     }
// 
//     public Tick(File demoFile, String demoName, int start, int end, String segment, String tickTemplate) {
//         this.demoFile = demoFile;
//         this.demoName = demoName;
//         this.start = start;
//         this.end = end;
//         this.segment = segment;
//         this.tickTemplate = tickTemplate;
//         this.valid = true;
//     }
// 
//     public File getDemoFile() {
//         return demoFile;
//     }
// 
//     public String getDemoName() {
//         return demoName;
//     }
// 
//     public int getStart() {
//         return start;
//     }
// 
//     public int getEnd() {
//         return end;
//     }
// 
//     public String getTemplate() {
//         return tickTemplate;
//     }
// 
//     @Override
//     public String toString() {
//         return demoName + ": " + start + "-" + end;
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((demoName == null) ? 0 : demoName.hashCode());
//         result = prime * result + end;
//         result = prime * result + start;
//         result = prime * result + ((segment == null) ? 0 : segment.hashCode());
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         Tick other = (Tick) obj;
//         if (demoName == null) {
//             if (other.demoName != null) {
//                 return false;
//             }
//         } else if (!demoName.equals(other.demoName)) {
//             return false;
//         }
//         if (end != other.end) {
//             return false;
//         }
//         if (start != other.start) {
//             return false;
//         }
//         if (segment == null) {
//             if (other.segment != null) {
//                 return false;
//             }
//         } else if (!segment.equals(other.segment)) {
//             return false;
//         }
//         return true;
//     }
// }
// 
// Path: src/main/java/vdm/Tick/TickFactory.java
// public class TickFactory {
// 
//     public static Tick makeTick(File demoFile, String demoname, int start, int end, String segment) {
//         return makeTick(demoFile, demoname, start, end, segment, null);
//     }
// 
//     public static Tick makeTick(File demoFile, String demoname, int start, int end, String segment, String template) {
//         Tick t;
//         try {
//             switch (segment) {
//                 case Record.Segment:
//                     t = new Record(demoFile, demoname, start, end);
//                     break;
//                 case ExecRecord.Segment:
//                     t = new ExecRecord(demoFile, demoname, start, end, (template == null || template.equals(Record.Template)) ? ExecRecord.Template : template);
//                     break;
//                 case Exec.Segment:
//                     t = new Exec(demoFile, demoname, start, (template == null || template.equals(Record.Template)) ? Exec.Template : template);
//                     break;
//                 default:
//                     t = new InvalidTick(demoFile, demoname, start, end, segment, template, "Unknown Segment Type");
//             }
//         } catch (NumberFormatException e) {
//             t = new InvalidTick(demoFile, demoname, start, end, segment, template, e.getMessage());
//         }
//         return t;
//     }
// }


import vdm.Tick.Tick;
import vdm.Tick.TickFactory;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Tick tick = list.get(rowIndex);
        Column c = Column.values()[columnIndex];
        switch (c) {
            case DEMO:
                return tick.getDemoName();
            case START:
                return tick.getStart();
            case END:
                return tick.getEnd();
            case TYPE:
                return tick.getSegment();
            case TEMPLATE:
                return tick.getTemplate();
            default:
                return null;
        }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Tick tick = list.get(rowIndex);
        Column c = Column.values()[columnIndex];
        switch (c) {
            case START:
                try {
                    list.set(rowIndex,
// Path: src/main/java/vdm/Tick/Tick.java
// abstract public class Tick {
// 
//     public String getSegment() {
//         return segment;
//     }
// 
//     private final String segment;
// 
//     private final String tickTemplate;
//     private final String demoName;
//     private final File demoFile;
//     private int start;
//     private int end;
//     boolean valid;
//     String reason;
// 
//     public boolean isValid() {
//         return valid;
//     }
// 
//     public String getReason() {
//         return reason;
//     }
// 
//     public Tick(File demoFile, String demoName, int start, int end, String segment, String tickTemplate) {
//         this.demoFile = demoFile;
//         this.demoName = demoName;
//         this.start = start;
//         this.end = end;
//         this.segment = segment;
//         this.tickTemplate = tickTemplate;
//         this.valid = true;
//     }
// 
//     public File getDemoFile() {
//         return demoFile;
//     }
// 
//     public String getDemoName() {
//         return demoName;
//     }
// 
//     public int getStart() {
//         return start;
//     }
// 
//     public int getEnd() {
//         return end;
//     }
// 
//     public String getTemplate() {
//         return tickTemplate;
//     }
// 
//     @Override
//     public String toString() {
//         return demoName + ": " + start + "-" + end;
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((demoName == null) ? 0 : demoName.hashCode());
//         result = prime * result + end;
//         result = prime * result + start;
//         result = prime * result + ((segment == null) ? 0 : segment.hashCode());
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         Tick other = (Tick) obj;
//         if (demoName == null) {
//             if (other.demoName != null) {
//                 return false;
//             }
//         } else if (!demoName.equals(other.demoName)) {
//             return false;
//         }
//         if (end != other.end) {
//             return false;
//         }
//         if (start != other.start) {
//             return false;
//         }
//         if (segment == null) {
//             if (other.segment != null) {
//                 return false;
//             }
//         } else if (!segment.equals(other.segment)) {
//             return false;
//         }
//         return true;
//     }
// }
// 
// Path: src/main/java/vdm/Tick/TickFactory.java
// public class TickFactory {
// 
//     public static Tick makeTick(File demoFile, String demoname, int start, int end, String segment) {
//         return makeTick(demoFile, demoname, start, end, segment, null);
//     }
// 
//     public static Tick makeTick(File demoFile, String demoname, int start, int end, String segment, String template) {
//         Tick t;
//         try {
//             switch (segment) {
//                 case Record.Segment:
//                     t = new Record(demoFile, demoname, start, end);
//                     break;
//                 case ExecRecord.Segment:
//                     t = new ExecRecord(demoFile, demoname, start, end, (template == null || template.equals(Record.Template)) ? ExecRecord.Template : template);
//                     break;
//                 case Exec.Segment:
//                     t = new Exec(demoFile, demoname, start, (template == null || template.equals(Record.Template)) ? Exec.Template : template);
//                     break;
//                 default:
//                     t = new InvalidTick(demoFile, demoname, start, end, segment, template, "Unknown Segment Type");
//             }
//         } catch (NumberFormatException e) {
//             t = new InvalidTick(demoFile, demoname, start, end, segment, template, e.getMessage());
//         }
//         return t;
//     }
// }


// Path: src/main/java/vdm/TickTableModel.java
import vdm.Tick.Tick;
import vdm.Tick.TickFactory;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Tick tick = list.get(rowIndex);
        Column c = Column.values()[columnIndex];
        switch (c) {
            case DEMO:
                return tick.getDemoName();
            case START:
                return tick.getStart();
            case END:
                return tick.getEnd();
            case TYPE:
                return tick.getSegment();
            case TEMPLATE:
                return tick.getTemplate();
            default:
                return null;
        }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Tick tick = list.get(rowIndex);
        Column c = Column.values()[columnIndex];
        switch (c) {
            case START:
                try {
                    list.set(rowIndex,
                        TickFactory.makeTick(