|
| 1 | +/* |
| 2 | + * Copyright (c) 2008-2019 Emmanuel Dupuy. |
| 3 | + * This project is distributed under the GPLv3 license. |
| 4 | + * This is a Copyleft license that gives the user the right to use, |
| 5 | + * copy and modify the code freely for non-commercial purposes. |
| 6 | + */ |
| 7 | + |
| 8 | +package org.jd.gui.service.preferencespanel; |
| 9 | + |
| 10 | +import org.jd.gui.spi.PreferencesPanel; |
| 11 | + |
| 12 | +import javax.swing.*; |
| 13 | +import javax.swing.event.DocumentEvent; |
| 14 | +import javax.swing.event.DocumentListener; |
| 15 | +import java.awt.*; |
| 16 | +import java.awt.event.ActionEvent; |
| 17 | +import java.awt.event.ActionListener; |
| 18 | +import java.util.Map; |
| 19 | +import java.util.regex.Pattern; |
| 20 | + |
| 21 | +public class MavenOrgSourceLoaderPreferencesProvider extends JPanel implements PreferencesPanel, DocumentListener, ActionListener { |
| 22 | + public static final String ACTIVATED = "MavenOrgSourceLoaderPreferencesProvider.activated"; |
| 23 | + public static final String FILTERS = "MavenOrgSourceLoaderPreferencesProvider.filters"; |
| 24 | + |
| 25 | + public static final String DEFAULT_FILTERS_VALUE = |
| 26 | + "+org +com.google +com.ibm +com.jcraft +com.springsource +com.sun -com +java +javax +sun +sunw " + |
| 27 | + "+spring +springframework +springmodules +tomcat +maven"; |
| 28 | + |
| 29 | + protected static final Pattern CONTROL_PATTERN = Pattern.compile("([+-][a-zA-Z_0-9$_.]+(\\s+[+-][a-zA-Z_0-9$_.]+)*)?\\s*"); |
| 30 | + |
| 31 | + protected JCheckBox enableCheckBox; |
| 32 | + protected JTextArea filtersTextArea; |
| 33 | + protected JButton resetButton; |
| 34 | + protected Color errorBackgroundColor = Color.RED; |
| 35 | + protected Color defaultBackgroundColor; |
| 36 | + |
| 37 | + protected PreferencesPanel.PreferencesPanelChangeListener listener; |
| 38 | + |
| 39 | + public MavenOrgSourceLoaderPreferencesProvider() { |
| 40 | + super(new BorderLayout()); |
| 41 | + |
| 42 | + enableCheckBox = new JCheckBox("Search source code on maven.org for:"); |
| 43 | + enableCheckBox.addActionListener(this); |
| 44 | + |
| 45 | + filtersTextArea = new JTextArea(); |
| 46 | + filtersTextArea.setFont(getFont()); |
| 47 | + filtersTextArea.setLineWrap(true); |
| 48 | + filtersTextArea.getDocument().addDocumentListener(this); |
| 49 | + defaultBackgroundColor = filtersTextArea.getBackground(); |
| 50 | + |
| 51 | + JComponent spacer = new JComponent() {}; |
| 52 | + JScrollPane scrollPane = new JScrollPane(filtersTextArea); |
| 53 | + |
| 54 | + String osName = System.getProperty("os.name").toLowerCase(); |
| 55 | + |
| 56 | + if (osName.contains("windows")) { |
| 57 | + spacer.setPreferredSize(new Dimension(22, -1)); |
| 58 | + scrollPane.setPreferredSize(new Dimension(-1, 50)); |
| 59 | + } else if (osName.contains("mac os")) { |
| 60 | + spacer.setPreferredSize(new Dimension(28, -1)); |
| 61 | + scrollPane.setPreferredSize(new Dimension(-1, 56)); |
| 62 | + } else { |
| 63 | + spacer.setPreferredSize(new Dimension(22, -1)); |
| 64 | + scrollPane.setPreferredSize(new Dimension(-1, 56)); |
| 65 | + } |
| 66 | + |
| 67 | + resetButton = new JButton("Reset"); |
| 68 | + resetButton.addActionListener(this); |
| 69 | + |
| 70 | + JPanel southPanel = new JPanel(new BorderLayout()); |
| 71 | + southPanel.add(resetButton, BorderLayout.EAST); |
| 72 | + |
| 73 | + add(enableCheckBox, BorderLayout.NORTH); |
| 74 | + add(spacer, BorderLayout.WEST); |
| 75 | + add(scrollPane, BorderLayout.CENTER); |
| 76 | + add(southPanel, BorderLayout.SOUTH); |
| 77 | + } |
| 78 | + |
| 79 | + // --- PreferencesPanel --- // |
| 80 | + @Override public String getPreferencesGroupTitle() { return "Source loader"; } |
| 81 | + @Override public String getPreferencesPanelTitle() { return "maven.org"; } |
| 82 | + @Override public JComponent getPanel() { return this; } |
| 83 | + |
| 84 | + @Override |
| 85 | + public void init(Color errorBackgroundColor) { |
| 86 | + this.errorBackgroundColor = errorBackgroundColor; |
| 87 | + } |
| 88 | + |
| 89 | + @Override public boolean isActivated() { return true; } |
| 90 | + |
| 91 | + @Override |
| 92 | + public void loadPreferences(Map<String, String> preferences) { |
| 93 | + boolean enabled = !"false".equals(preferences.get(ACTIVATED)); |
| 94 | + |
| 95 | + enableCheckBox.setSelected(enabled); |
| 96 | + filtersTextArea.setEnabled(enabled); |
| 97 | + resetButton.setEnabled(enabled); |
| 98 | + |
| 99 | + String filters = preferences.get(FILTERS); |
| 100 | + |
| 101 | + if ((filters == null) || filters.isEmpty()) { |
| 102 | + filtersTextArea.setText(DEFAULT_FILTERS_VALUE); |
| 103 | + } |
| 104 | + } |
| 105 | + |
| 106 | + @Override |
| 107 | + public void savePreferences(Map<String, String> preferences) { |
| 108 | + preferences.put(ACTIVATED, Boolean.toString(enableCheckBox.isSelected())); |
| 109 | + preferences.put(FILTERS, filtersTextArea.getText().trim()); |
| 110 | + } |
| 111 | + |
| 112 | + @Override public boolean arePreferencesValid() { |
| 113 | + return CONTROL_PATTERN.matcher(filtersTextArea.getText()).matches(); |
| 114 | + } |
| 115 | + |
| 116 | + @Override public void addPreferencesChangeListener(PreferencesPanelChangeListener listener) { |
| 117 | + this.listener = listener; |
| 118 | + } |
| 119 | + |
| 120 | + |
| 121 | + // --- DocumentListener --- // |
| 122 | + @Override public void insertUpdate(DocumentEvent e) { onTextChange(); } |
| 123 | + @Override public void removeUpdate(DocumentEvent e) { onTextChange(); } |
| 124 | + @Override public void changedUpdate(DocumentEvent e) { onTextChange(); } |
| 125 | + |
| 126 | + protected void onTextChange() { |
| 127 | + filtersTextArea.setBackground(arePreferencesValid() ? defaultBackgroundColor : errorBackgroundColor); |
| 128 | + |
| 129 | + if (listener != null) { |
| 130 | + listener.preferencesPanelChanged(this); |
| 131 | + } |
| 132 | + } |
| 133 | + |
| 134 | + // --- ActionListener --- // |
| 135 | + @Override |
| 136 | + public void actionPerformed(ActionEvent e) { |
| 137 | + if (e.getSource() == enableCheckBox) { |
| 138 | + boolean enabled = enableCheckBox.isSelected(); |
| 139 | + filtersTextArea.setEnabled(enabled); |
| 140 | + resetButton.setEnabled(enabled); |
| 141 | + } else { |
| 142 | + // Reset button |
| 143 | + filtersTextArea.setText(DEFAULT_FILTERS_VALUE); |
| 144 | + filtersTextArea.requestFocus(); |
| 145 | + } |
| 146 | + } |
| 147 | +} |
0 commit comments