source: trunk/de.ugoe.cs.swe.exercises/src/de/ugoe/cs/swe/exercises/settings/SettingsDialog.java @ 20

Last change on this file since 20 was 20, checked in by zeiss, 15 years ago

improved setting handling.

  • Property svn:mime-type set to text/plain
File size: 12.3 KB
Line 
1package de.ugoe.cs.swe.exercises.settings;
2
3import java.io.File;
4import java.io.FileInputStream;
5import java.io.FileNotFoundException;
6import java.io.FileOutputStream;
7import java.io.IOException;
8import java.sql.DriverManager;
9import java.sql.SQLException;
10import java.util.Properties;
11
12import org.eclipse.jface.dialogs.IMessageProvider;
13import org.eclipse.jface.dialogs.TitleAreaDialog;
14import org.eclipse.jface.resource.JFaceResources;
15import org.eclipse.swt.SWT;
16import org.eclipse.swt.events.SelectionAdapter;
17import org.eclipse.swt.events.SelectionEvent;
18import org.eclipse.swt.layout.GridData;
19import org.eclipse.swt.layout.GridLayout;
20import org.eclipse.swt.widgets.Button;
21import org.eclipse.swt.widgets.Combo;
22import org.eclipse.swt.widgets.Composite;
23import org.eclipse.swt.widgets.Control;
24import org.eclipse.swt.widgets.Label;
25import org.eclipse.swt.widgets.Shell;
26import org.eclipse.swt.widgets.Text;
27import org.tmatesoft.svn.core.SVNException;
28import org.tmatesoft.svn.core.SVNURL;
29import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
30import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
31import org.tmatesoft.svn.core.io.SVNRepository;
32import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
33import org.tmatesoft.svn.core.wc.SVNWCUtil;
34
35import de.ugoe.cs.swe.exercises.misc.Model;
36
37public class SettingsDialog extends TitleAreaDialog {
38
39        private Text textSVNLocation;
40        private Text textWorkingDirectory;
41        private Text textSVNUsername;
42        private Text textSVNPassword;
43        private Text textMySQLHost;
44        private Text textMySQLDb;
45        private Text textMySQLUsername;
46        private Text textMySQLPassword;
47        private Text textPdflatex;
48        private Text textResearchGroup;
49        private Text textResearchGroupUrl;
50        private Combo cboUseSSL;
51
52        public SettingsDialog(Shell parentShell) {
53                super(parentShell);
54                this.getFileContents();
55        }
56
57        @Override
58        protected Control createContents(Composite parent) {
59                Control contents = super.createContents(parent);
60                setTitle("Settings");
61                setMessage("Change the Settings to match your Settings",
62                                IMessageProvider.INFORMATION);
63                return contents;
64        }
65
66        @Override
67        protected Control createDialogArea(Composite parent) {
68
69                GridLayout layout = new GridLayout();
70                layout.numColumns = 2;
71                parent.setLayout(layout);
72                Label label1 = new Label(parent, SWT.NONE);
73                label1.setText("SVN Location:");
74                Text textbox1 = new Text(parent, SWT.BORDER);
75                textbox1.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
76                                | GridData.HORIZONTAL_ALIGN_FILL));
77                textSVNLocation = textbox1;
78
79                Label label2 = new Label(parent, SWT.NONE);
80                label2.setText("Working Directory:");
81                Text textbox2 = new Text(parent, SWT.BORDER);
82                textbox2.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
83                                | GridData.HORIZONTAL_ALIGN_FILL));
84                textWorkingDirectory = textbox2;
85
86                Label label3 = new Label(parent, SWT.NONE);
87                label3.setText("SVN Username:");
88                Text textbox3 = new Text(parent, SWT.BORDER);
89                textbox3.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
90                                | GridData.HORIZONTAL_ALIGN_FILL));
91                textSVNUsername = textbox3;
92
93                Label label4 = new Label(parent, SWT.NONE);
94                label4.setText("SVN Password:");
95                Text textbox4 = new Text(parent, SWT.BORDER | SWT.PASSWORD);
96                textbox4.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
97                                | GridData.HORIZONTAL_ALIGN_FILL));
98                textSVNPassword = textbox4;
99
100                Label label5 = new Label(parent, SWT.NONE);
101                label5.setText("MySQL Host:");
102                Text textbox5 = new Text(parent, SWT.BORDER);
103                textbox5.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
104                                | GridData.HORIZONTAL_ALIGN_FILL));
105                textMySQLHost = textbox5;
106
107                Label label6 = new Label(parent, SWT.NONE);
108                label6.setText("MySQL Database:");
109                Text textbox6 = new Text(parent, SWT.BORDER);
110                textbox6.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
111                                | GridData.HORIZONTAL_ALIGN_FILL));
112                textMySQLDb = textbox6;
113
114                Label label7 = new Label(parent, SWT.NONE);
115                label7.setText("MySQL Username:");
116                Text textbox7 = new Text(parent, SWT.BORDER);
117                textbox7.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
118                                | GridData.HORIZONTAL_ALIGN_FILL));
119                textMySQLUsername = textbox7;
120
121                Label label8 = new Label(parent, SWT.NONE);
122                label8.setText("MySQL Password:");
123                Text textbox8 = new Text(parent, SWT.BORDER | SWT.PASSWORD);
124                textbox8.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
125                                | GridData.HORIZONTAL_ALIGN_FILL));
126                textMySQLPassword = textbox8;
127
128                Label label9 = new Label(parent, SWT.NONE);
129                label9.setText("Use SSL:");
130                Combo combo1 = new Combo(parent, SWT.LEFT);
131                combo1.add("No SSL");
132                combo1.add("Use SSL");
133                combo1.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
134                                | GridData.HORIZONTAL_ALIGN_FILL));
135                cboUseSSL = combo1;
136
137                Label label10 = new Label(parent, SWT.NONE);
138                label10.setText("PDFLatex Path");
139                Text textbox10 = new Text(parent, SWT.BORDER);
140                textbox10.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
141                                | GridData.HORIZONTAL_ALIGN_FILL));
142                textPdflatex = textbox10;
143
144                Label label11 = new Label(parent, SWT.NONE);
145                label11.setText("Research Group");
146                textResearchGroup = new Text(parent, SWT.BORDER);
147                textResearchGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
148                                | GridData.HORIZONTAL_ALIGN_FILL));
149
150                Label label12 = new Label(parent, SWT.NONE);
151                label12.setText("Research Group Url");
152                textResearchGroupUrl = new Text(parent, SWT.BORDER);
153                textResearchGroupUrl.setLayoutData(new GridData(
154                                GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
155
156                Settings settings = Settings.getInstance();
157                if (settings.isMysqlSSL())
158                        cboUseSSL.select(1);
159                else
160                        cboUseSSL.select(0);
161
162                textSVNLocation.setText(settings.getSvnLocation());
163                textWorkingDirectory.setText(settings.getWorkingDirectory());
164                textSVNUsername.setText(settings.getSvnUsername());
165                textSVNPassword.setText(settings.getSvnPassword());
166                textMySQLHost.setText(settings.getMysqlHost());
167                textMySQLDb.setText(settings.getMysqlDb());
168                textMySQLUsername.setText(settings.getMysqlUsername());
169                textMySQLPassword.setText(settings.getMysqlPassword());
170                textPdflatex.setText(settings.getPdfLatexPath());
171                textResearchGroup.setText(settings.getResearchGroup());
172                textResearchGroupUrl.setText(settings.getResearchGroupUrl());
173
174                GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_END);
175                gd.horizontalSpan = 1;
176
177                return parent;
178
179        }
180
181        @Override
182        protected void createButtonsForButtonBar(Composite parent) {
183                ((GridLayout) parent.getLayout()).numColumns = 2;
184
185                GridData buttonlayout = new GridData(SWT.LEFT, SWT.BEGINNING, false,
186                                false);
187                buttonlayout.minimumWidth = 200;
188                Button button = new Button(parent, SWT.PUSH);
189                button.setText("OK");
190                button.setFont(JFaceResources.getDialogFont());
191                button.setLayoutData(buttonlayout);
192                button.addSelectionListener(new SelectionAdapter() {
193                        public void widgetSelected(SelectionEvent e) {
194                                if (textSVNLocation.getText().length() != 0
195                                                && textWorkingDirectory.getText().length() != 0
196                                                && textSVNUsername.getText().length() != 0
197                                                && textSVNPassword.getText().length() != 0) {
198               
199                                        Settings settings = Settings.getInstance();
200                                       
201                                        settings.setSvnLocation(textSVNLocation.getText());
202                                        settings.setWorkingDirectory(textWorkingDirectory.getText());
203                                        settings.setSvnUsername(textSVNUsername.getText());
204                                        settings.setSvnPassword(textSVNPassword.getText());
205                                        settings.setMysqlHost(textMySQLHost.getText());
206                                        settings.setMysqlDb(textMySQLDb.getText());
207                                        settings.setMysqlUsername(textMySQLUsername.getText());
208                                        settings.setMysqlPassword(textMySQLPassword.getText());
209                                        settings.setPdfLatexPath(textPdflatex.getText());
210                                        settings.setResearchGroup(textResearchGroup.getText());
211                                        settings.setResearchGroupUrl(textResearchGroupUrl.getText());
212                                       
213                                        if (cboUseSSL.getSelectionIndex() == 1)
214                                                settings.setMysqlSSL(true);
215                                        else
216                                                settings.setMysqlSSL(false);
217
218                                        try {
219                                                DAVRepositoryFactory.setup();
220                                                SVNURL url = SVNURL.parseURIDecoded(settings.getSvnLocation());
221                                                SVNRepository repository = SVNRepositoryFactory
222                                                                .create(url);
223                                                ISVNAuthenticationManager authManager = SVNWCUtil
224                                                                .createDefaultAuthenticationManager(
225                                                                                settings.getSvnUsername(), settings.getSvnPassword());
226                                                ((SVNRepository) repository)
227                                                                .setAuthenticationManager(authManager);
228                                                repository.testConnection();
229
230                                        } catch (SVNException ex) {
231                                                setErrorMessage(ex.getMessage());
232                                                return;
233                                        }
234
235                                        System.setProperty("javax.net.ssl.trustStorePassword",
236                                                        settings.getMysqlPassword());
237                                        String path = Model.class.getProtectionDomain()
238                                                        .getCodeSource().getLocation().getPath();
239                                        if (path.endsWith("bin/"))
240                                                path = path.replaceFirst("bin/$", "");
241                                        path += "keystore";
242                                        System.setProperty("javax.net.ssl.trustStore", path);
243
244                                        try {
245                                                // Step 1: Load the JDBC driver.
246                                                Class.forName("com.mysql.jdbc.Driver").newInstance();
247                                                // Step 2: Establish the connection to the database.
248                                                String url = "jdbc:mysql://" + settings.getMysqlHost() + "/"
249                                                                + settings.getMysqlDb() + "?useSSL="
250                                                                + String.valueOf(settings.isMysqlSSL());
251                                                DriverManager.getConnection(url, settings.getMysqlUsername(),
252                                                                settings.getMysqlPassword());
253                                        } catch (SQLException ex) {
254                                                setErrorMessage(ex.getMessage());
255                                                return;
256                                        } catch (Exception ex2) {
257                                                setErrorMessage(ex2.getMessage());
258                                                return;
259                                        }
260                                        setFileContents();
261                                        close();
262
263                                } else {
264                                        setErrorMessage("Please fill out all fields");
265                                }
266                        }
267                });
268                Button cancel = new Button(parent, SWT.PUSH);
269                cancel.setText("Cancel");
270                cancel.setFont(JFaceResources.getDialogFont());
271                cancel.setLayoutData(buttonlayout);
272                cancel.addSelectionListener(new SelectionAdapter() {
273                        public void widgetSelected(SelectionEvent e) {
274                                close();
275                        }
276                });
277        }
278
279        private void getFileContents() {
280                Properties properties = new Properties();
281                File file = new File(System.getProperty("user.home")
282                                + "/.exerciseSettings");
283                if (file.exists()) {
284                        try {
285                                properties.load(new FileInputStream(file));
286                        } catch (FileNotFoundException e) {
287                                e.printStackTrace();
288                        } catch (IOException e) {
289                                e.printStackTrace();
290                        }
291                        try {
292                                Settings settings = Settings.getInstance();
293                                settings.setSvnLocation(properties.getProperty("svnLocation"));
294                                settings.setWorkingDirectory(properties.getProperty("workingDirectory"));
295                                settings.setSvnUsername(properties.getProperty("svnUsername"));
296                                settings.setSvnPassword(properties.getProperty("svnPassword"));
297                                settings.setMysqlHost(properties.getProperty("mySQLHost"));
298                                settings.setMysqlDb(properties.getProperty("mySQLDb"));
299                                settings.setMysqlUsername(properties.getProperty("mySQLUsername"));
300                                settings.setMysqlPassword(properties.getProperty("mySQLPassword"));
301                                settings.setMysqlSSL(Boolean.parseBoolean(properties
302                                                .getProperty("mySQLcheckSSL")));
303                                settings.setPdfLatexPath(properties.getProperty("pdfLatexPath"));
304                                settings.setResearchGroup(properties.getProperty("researchGroup"));
305                                settings.setResearchGroupUrl(properties.getProperty("researchGroupUrl"));
306                        } catch (Exception ex) {
307                        }
308                }
309        }
310
311        private void setFileContents() {
312                Properties properties = new Properties();
313                File file = new File(System.getProperty("user.home")
314                                + "/.exerciseSettings");
315                if (!file.exists()) {
316                        try {
317                                file.createNewFile();
318                        } catch (IOException e) {
319                                e.printStackTrace();
320                                return;
321                        }
322                }
323                Settings settings = Settings.getInstance();
324
325                properties.setProperty("svnLocation", settings.getSvnLocation());
326                properties.setProperty("workingDirectory", settings.getWorkingDirectory());
327                properties.setProperty("svnUsername", settings.getSvnUsername());
328                properties.setProperty("svnPassword", settings.getSvnPassword());
329                properties.setProperty("mySQLHost", settings.getMysqlHost());
330                properties.setProperty("mySQLDb", settings.getMysqlDb());
331                properties.setProperty("mySQLUsername", settings.getMysqlUsername());
332                properties.setProperty("mySQLPassword", settings.getMysqlPassword());
333                properties.setProperty("mySQLcheckSSL", String.valueOf(settings.isMysqlSSL()));
334                properties.setProperty("pdfLatexPath", settings.getPdfLatexPath());
335                properties.setProperty("researchGroup", settings.getResearchGroup());
336                properties.setProperty("researchGroupUrl", settings.getResearchGroupUrl());
337
338                try {
339                        properties.store(new FileOutputStream(file),
340                                        "SVN and other Settings included");
341                } catch (FileNotFoundException e) {
342                        e.printStackTrace();
343                } catch (IOException e) {
344                        e.printStackTrace();
345                }
346        }
347
348}
Note: See TracBrowser for help on using the repository browser.