package nbtool.gui.logviews.misc; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.io.IOException; import java.nio.file.Path; import java.util.LinkedList; import java.util.List; import javax.swing.text.DefaultCaret; import nbtool.data.log.Block; import nbtool.gui.PathChooser; import nbtool.gui.ToolMessage; import nbtool.nio.FileIO; import nbtool.util.Debug; import nbtool.util.ToolSettings; public class DefaultView extends ViewParent implements ActionListener { @Override public String[] displayableTypes() { return new String[]{ToolSettings.DEFAULT_S}; } @Override public void actionPerformed(ActionEvent e) { Path path = PathChooser.chooseLogPath(this, null); if (path == null) return; if (!path.toString().endsWith(".nblog")) { path = FileIO.getPath(path.toString() + ".nblog"); } try { FileIO.writeLogToPath(path, displayedLog); } catch (IOException e1) { e1.printStackTrace(); ToolMessage.displayError("write failed for: %s", displayedLog); } } int jsonAreaLoc = 0; private void reDisplay() { this.classAndHostLabel.setText( String.format("logClass= %s from %s@%s (type=%s)" , displayedLog.logClass, displayedLog.host_name, displayedLog.host_addr, displayedLog.host_type)); int tbytes = 0; List<String> blockList = new LinkedList<>(); for (Block b : displayedLog.blocks) { tbytes += b.data.length; blockList.add(String.format("type=%s from=%s dictionary=%s", b.type, b.whereFrom, b.getFullDictionary().serialize())); } this.whenBlocksAndBytesLabel.setText( String.format("made '%d', %d blocks, %d bytes total", displayedLog.createdWhen, displayedLog.blocks.size(), tbytes)); this.toolStuffLabel.setText(String.format("version=%d, log uid=%d", displayedLog.version(), displayedLog.jvm_unique_id )); this.referenceLabel.setText( String.format("log has reference %s", displayedLog.getReference() )); this.blockList.setListData(blockList.toArray(new String[0])); //TODO save loc position? // int loc = this.jScrollPaneForJsonArea.getVerticalScrollBar().getValue(); this.jsonStringTextArea.setText(displayedLog.getFullDictionary().print()); this.jScrollPaneForJsonArea.getVerticalScrollBar().setValue(jsonAreaLoc); } @Override public void setupDisplay() { reDisplay(); this.saveFile.addActionListener(this); if (this.displayedLog.getReference() != null) { Debug.info("temp: %s", this.displayedLog.getReference().tempPath()); Debug.info("load: %s", this.displayedLog.getReference().loadPath()); } else { Debug.info("null LogReference."); } } private int getJsonLoc() { return this.jScrollPaneForJsonArea.getVerticalScrollBar().getValue(); } public DefaultView() { initComponents(); DefaultCaret caret = (DefaultCaret) this.jsonStringTextArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); this.addComponentListener(new ComponentListener(){ @Override public void componentResized(ComponentEvent e) { } @Override public void componentMoved(ComponentEvent e) { } @Override public void componentShown(ComponentEvent e) { reDisplay(); } @Override public void componentHidden(ComponentEvent e) { jsonAreaLoc = getJsonLoc(); } }); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { classAndHostLabel = new javax.swing.JLabel(); whenBlocksAndBytesLabel = new javax.swing.JLabel(); toolStuffLabel = new javax.swing.JLabel(); referenceLabel = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); blockList = new javax.swing.JList<>(); jScrollPaneForJsonArea = new javax.swing.JScrollPane(); jsonStringTextArea = new javax.swing.JTextArea(); saveFile = new javax.swing.JButton(); classAndHostLabel.setText("class, from name@addr (type)"); whenBlocksAndBytesLabel.setText("made when, total blocks, total bytes"); toolStuffLabel.setText("nbtool version, log uid"); referenceLabel.setText("reference info and paths"); blockList.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true), "blocks")); blockList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(blockList); jsonStringTextArea.setEditable(false); jsonStringTextArea.setColumns(20); jsonStringTextArea.setFont(new java.awt.Font("Monospaced", 0, 13)); // NOI18N jsonStringTextArea.setLineWrap(true); jsonStringTextArea.setRows(5); jsonStringTextArea.setWrapStyleWord(true); jsonStringTextArea.setBorder(javax.swing.BorderFactory.createTitledBorder("full json serialization")); jScrollPaneForJsonArea.setViewportView(jsonStringTextArea); saveFile.setText("save to file"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPaneForJsonArea, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 547, Short.MAX_VALUE) .addComponent(classAndHostLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(whenBlocksAndBytesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(referenceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(toolStuffLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(saveFile) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(classAndHostLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(whenBlocksAndBytesLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(toolStuffLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(referenceLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPaneForJsonArea, javax.swing.GroupLayout.DEFAULT_SIZE, 156, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(saveFile) .addContainerGap()) ); }// </editor-fold> // Variables declaration - do not modify private javax.swing.JList<String> blockList; private javax.swing.JLabel classAndHostLabel; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPaneForJsonArea; private javax.swing.JTextArea jsonStringTextArea; private javax.swing.JLabel referenceLabel; private javax.swing.JButton saveFile; private javax.swing.JLabel toolStuffLabel; private javax.swing.JLabel whenBlocksAndBytesLabel; // End of variables declaration }