1 package edu.jiangxin.apktoolbox.file.checksum.panel; 2 3 import edu.jiangxin.apktoolbox.swing.extend.EasyChildTabbedPanel; 4 import edu.jiangxin.apktoolbox.utils.Constants; 5 import org.apache.commons.lang3.StringUtils; 6 import org.apache.commons.lang3.Strings; 7 8 import javax.swing.*; 9 import java.awt.*; 10 import java.io.Serial; 11 12 public class VerifyChecksumPanel extends EasyChildTabbedPanel { 13 @Serial 14 private static final long serialVersionUID = 1L; 15 16 private JPanel fileSumPanel; 17 private JTextArea fileSumTextArea; 18 19 private JPanel compareSumPanel; 20 private JTextArea compareSumTextArea; 21 22 private JPanel operationPanel; 23 24 private JTextField resultTextField; 25 26 27 @Override 28 public void createUI() { 29 BoxLayout boxLayout = new BoxLayout(this, BoxLayout.Y_AXIS); 30 setLayout(boxLayout); 31 32 add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 33 34 createFileSumPanel(); 35 add(fileSumPanel); 36 37 add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 38 39 createCompareSumPanel(); 40 add(compareSumPanel); 41 42 add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 43 44 createOperationPanel(); 45 add(operationPanel); 46 } 47 48 private void createFileSumPanel() { 49 fileSumPanel = new JPanel(); 50 BoxLayout boxLayout = new BoxLayout(fileSumPanel, BoxLayout.Y_AXIS); 51 fileSumPanel.setLayout(boxLayout); 52 53 JLabel fileSumLabel = new JLabel("Paste calculated file summary from \"File Checksum\" tabbed panel here:"); 54 fileSumTextArea = new JTextArea(5, 4); 55 fileSumTextArea.setLineWrap(true); 56 JScrollPane fileSumScrollPanel = new JScrollPane(fileSumTextArea); 57 58 fileSumPanel.add(fileSumLabel); 59 fileSumPanel.add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 60 fileSumPanel.add(fileSumScrollPanel); 61 } 62 63 private void createCompareSumPanel() { 64 compareSumPanel = new JPanel(); 65 BoxLayout boxLayout = new BoxLayout(compareSumPanel, BoxLayout.Y_AXIS); 66 compareSumPanel.setLayout(boxLayout); 67 68 JLabel compareSumLabel = new JLabel("Paste your compared file summary here:"); 69 compareSumTextArea = new JTextArea(5, 4); 70 compareSumTextArea.setLineWrap(true); 71 JScrollPane compareSumScrollPanel = new JScrollPane(compareSumTextArea); 72 73 compareSumPanel.add(compareSumLabel); 74 compareSumPanel.add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 75 compareSumPanel.add(compareSumScrollPanel); 76 } 77 78 private void createOperationPanel() { 79 operationPanel = new JPanel(); 80 81 JButton compareButton = new JButton("Compare"); 82 compareButton.setFocusPainted(false); 83 compareButton.addActionListener(event -> { 84 String fileSum = fileSumTextArea.getText(); 85 if (!isValidSummary(fileSum)) { 86 resultTextField.setText("File summary is not valid"); 87 resultTextField.setForeground(Color.YELLOW); 88 return; 89 } 90 91 String compareSum = compareSumTextArea.getText(); 92 if (!isValidSummary(compareSum)) { 93 resultTextField.setText("Compared summary is not valid"); 94 resultTextField.setForeground(Color.YELLOW); 95 return; 96 } 97 98 if (Strings.CI.equals(fileSum, compareSum)) { 99 resultTextField.setText("File summary is same with compared summary"); 100 resultTextField.setForeground(Color.GREEN); 101 return; 102 } 103 104 resultTextField.setText("File summary is different from compared summary"); 105 resultTextField.setForeground(Color.RED); 106 }); 107 108 resultTextField = new JTextField("To be comparing"); 109 resultTextField.setPreferredSize(new Dimension(100, 25)); 110 resultTextField.setEditable(false); 111 resultTextField.setBorder(null); 112 Font font = new Font(null, Font.BOLD, 16); 113 resultTextField.setFont(font); 114 resultTextField.setForeground(Color.YELLOW); 115 116 operationPanel.setLayout(new BoxLayout(operationPanel, BoxLayout.X_AXIS)); 117 operationPanel.add(compareButton); 118 operationPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER)); 119 operationPanel.add(resultTextField); 120 operationPanel.add(Box.createHorizontalGlue()); 121 } 122 123 private boolean isValidSummary(String summary) { 124 if (StringUtils.isEmpty(summary)) { 125 return false; 126 } 127 return StringUtils.containsOnly(summary, "0123456789ABCDEFabcdef"); 128 } 129 } 130 131