View Javadoc
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