001    package calhoun.analysis.crf.executables.viewer;
002    
003    import java.awt.event.WindowAdapter;
004    import java.awt.event.WindowEvent;
005    import java.io.IOException;
006    import java.util.List;
007    
008    import javax.swing.JFrame;
009    import javax.swing.JScrollPane;
010    import javax.swing.JTable;
011    
012    import calhoun.analysis.crf.Conrad;
013    import calhoun.analysis.crf.io.TrainingSequence;
014    
015    public class ViterbiViewerApp extends JFrame {
016            private static final long serialVersionUID = -5564046976928448201L;
017            private static final int WINDOW_WIDTH = 800;
018            private static final int WINDOW_HEIGHT = 600;
019            ViterbiViewer recordViewer;
020    
021            public ViterbiViewerApp(String model, String data) throws IOException {
022                    super("Viterbi Path Viewer");
023                    addWindowListener(new WindowAdapter() {
024                            @Override
025                            public void windowClosing(WindowEvent e) {
026                                    System.exit(0);
027                            }
028                    });
029                    
030                    Conrad r = Conrad.read(model);
031                    List<? extends TrainingSequence<?>> trainingData = r.getInputHandler().readTrainingData(data);
032                    
033                    recordViewer = new ViterbiViewer(r, trainingData.get(0));
034                    JScrollPane scrollPane = new JScrollPane(recordViewer);
035                    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
036                    setContentPane(scrollPane);
037                    //initializeMenuBar();
038                    setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
039            }
040    
041            public static void main(String[] args) throws Exception {
042                    String model = "";
043                    String data = "";
044                    if(args.length == 2){
045                            model = args[0];
046                            data = args[1];
047                    }
048                    final ViterbiViewerApp app = new ViterbiViewerApp(model, data);
049                    app.pack();
050                    app.setVisible(true);
051            }
052    
053            static class ViterbiViewer extends JTable {
054                    private static final long serialVersionUID = 7592581578644968579L;
055                    ViterbiTableModel model; 
056    
057                    public ViterbiViewer(Conrad crfModel, TrainingSequence seq) throws IOException {
058                            model = new ViterbiTableModel(crfModel, seq);
059                    setModel(model);
060                    setDefaultRenderer(String.class, model.new ViterbiCellRenderer());
061                    //setShowGrid(true);
062                    //setAutoCreateColumnsFromModel(true);
063                    setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
064                    }
065            }
066    }