001 /*
002 * Licensed under the Apache License, Version 2.0 (the "License");
003 * you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at
005 *
006 * http://www.apache.org/licenses/LICENSE-2.0
007 *
008 * Unless required by applicable law or agreed to in writing, software
009 * distributed under the License is distributed on an "AS IS" BASIS,
010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011 * See the License for the specific language governing permissions and
012 * limitations under the License.
013 */
014 /*
015 * This file has been modified by Chris Pheby in accordance with Section 4.2
016 * of the Apache Software License
017 */
018 package org.jadira.dependencynavigator.config;
019
020 import java.awt.Dimension;
021 import java.awt.FlowLayout;
022 import java.awt.event.MouseAdapter;
023 import java.awt.event.MouseEvent;
024 import java.io.File;
025 import java.io.FileInputStream;
026 import java.io.FileOutputStream;
027 import java.io.IOException;
028 import java.util.Properties;
029
030 import javax.swing.BoxLayout;
031 import javax.swing.JButton;
032 import javax.swing.JDialog;
033 import javax.swing.JFileChooser;
034 import javax.swing.JFrame;
035 import javax.swing.JLabel;
036 import javax.swing.JPanel;
037 import javax.swing.JTextField;
038
039 import org.jadira.dependencynavigator.implementations.local.LocalDiskRepository;
040 import org.jadira.dependencynavigator.implementations.local.LocalDiskWorkspace;
041
042 public class Config {
043
044 public static final String ROLE = "org.jadira.dependencynavigator.config.Config";
045
046 private static final String KEY_WORKSPACE = LocalDiskWorkspace.KEY_WORKSPACE_PATH;
047 private static final String KEY_REPOSITORY = LocalDiskRepository.KEY_LOCAL_REPO_PATH;
048 private static final String CONFIG_FILE = ".dependency-browser";
049
050 private JDialog dialog;
051
052 private JTextField workspace;
053 private JTextField repository;
054
055 private JButton okButton;
056 private JButton cancelButton;
057
058 public Properties configure() {
059 dialog = new JDialog(new JFrame(), true);
060 dialog.setTitle("Configure Maven Dependency Navigator");
061 dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
062 dialog.getContentPane().setLayout(new BoxLayout(dialog.getContentPane(), BoxLayout.PAGE_AXIS));
063
064 final Properties properties = getProperties();
065 workspace = new JTextField(properties.getProperty(KEY_WORKSPACE));
066 repository = new JTextField(properties.getProperty(KEY_REPOSITORY));
067
068 JPanel buttons = new JPanel();
069 buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));
070 okButton = new JButton("OK");
071 okButton.setPreferredSize(new Dimension(75, 20));
072 okButton.addMouseListener(new MouseAdapter() {
073
074 @Override
075 public void mouseClicked(MouseEvent e) {
076 properties.setProperty(KEY_WORKSPACE, workspace.getText());
077 properties.setProperty(KEY_REPOSITORY, repository.getText());
078 saveProperties(properties);
079 dialog.dispose();
080 }
081
082 });
083 buttons.add(okButton);
084 cancelButton = new JButton("Cancel");
085 cancelButton.setPreferredSize(new Dimension(75, 20));
086 cancelButton.addMouseListener(new MouseAdapter() {
087
088 @Override
089 public void mouseClicked(MouseEvent e) {
090 dialog.dispose();
091 }
092
093 });
094 buttons.add(cancelButton);
095 validate();
096
097 dialog.getContentPane().add(createPanel("Workspace: ", workspace));
098 dialog.getContentPane().add(createPanel("Repository: ", repository));
099 dialog.getContentPane().add(buttons);
100 dialog.pack();
101 dialog.setVisible(true);
102 return properties;
103 }
104
105 private void validate() {
106 if (workspace.getText() == null || workspace.getText().length() == 0) {
107 okButton.setEnabled(false);
108 return;
109 }
110 if (workspace.getText() == null || repository.getText().length() == 0) {
111 okButton.setEnabled(false);
112 return;
113 }
114 okButton.setEnabled(true);
115 }
116
117 private JPanel createPanel(String label, final JTextField text) {
118 JPanel panel = new JPanel();
119 panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
120 panel.add(new JLabel(label));
121 text.setEditable(false);
122 text.setPreferredSize(new Dimension(300, 20));
123 panel.add(text);
124 JButton button = new JButton("...");
125 button.setPreferredSize(new Dimension(25, 20));
126 panel.add(button);
127 button.addMouseListener(new MouseAdapter() {
128
129 @Override
130 public void mouseClicked(MouseEvent e) {
131 File dir = selectDirectory();
132 if (dir != null) {
133 text.setText(dir.getPath());
134 validate();
135 }
136 }
137
138 });
139 return panel;
140 }
141
142 private File selectDirectory() {
143
144 JFileChooser fc = new JFileChooser() {
145
146 private static final long serialVersionUID = 7609125749403145970L;
147
148 @Override
149 public void updateUI() {
150 // workaround for bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6317789
151 putClientProperty("FileChooser.useShellFolder", Boolean.FALSE);
152 super.updateUI();
153 }
154 };
155 fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
156 int returnVal = fc.showOpenDialog(dialog);
157 if (returnVal == JFileChooser.APPROVE_OPTION) {
158 File file = fc.getSelectedFile();
159 if (file.isDirectory()) {
160 return file;
161 }
162 }
163 return null;
164 }
165
166 private Properties getProperties() {
167 Properties properties = new Properties();
168 File propertiesFile = getPropertiesFile();
169 if (propertiesFile != null && propertiesFile.exists()) {
170 try {
171 properties.load(new FileInputStream(propertiesFile));
172 } catch (IOException e) {
173 System.err.println("Could not open properties file: " + propertiesFile.getPath());
174 e.printStackTrace(System.err);
175 }
176 }
177 return properties;
178 }
179
180 private File getPropertiesFile() {
181 return new File(System.getProperty("user.home"), CONFIG_FILE);
182 }
183
184 private void saveProperties(Properties properties) {
185 File propertiesFile = getPropertiesFile();
186 try {
187 properties.store(new FileOutputStream(propertiesFile), "");
188 } catch (IOException e) {
189 System.err.println("Could not save properties file: " + propertiesFile.getPath());
190 e.printStackTrace(System.err);
191 }
192 }
193 }