22
33import com .google .common .base .Optional ;
44import fi .helsinki .cs .tmc .core .TmcCore ;
5+ import fi .helsinki .cs .tmc .core .configuration .TmcSettings ;
56import fi .helsinki .cs .tmc .core .domain .Course ;
67import fi .helsinki .cs .tmc .core .domain .Organization ;
78import fi .helsinki .cs .tmc .core .domain .ProgressObserver ;
1213import fi .helsinki .cs .tmc .utilities .BgTask ;
1314import fi .helsinki .cs .tmc .utilities .DelayedRunner ;
1415import fi .helsinki .cs .tmc .utilities .LoginManager ;
16+ import fi .helsinki .cs .tmc .utilities .ThrowingFunction ;
1517
1618import java .awt .event .ItemEvent ;
1719import java .awt .event .ItemListener ;
1820import java .io .File ;
19- import java .util . ArrayList ;
21+ import java .io . IOException ;
2022import java .util .List ;
2123import java .util .Locale ;
2224import javax .swing .JButton ;
3739 private ConvenientDialogDisplayer dialogs = ConvenientDialogDisplayer .getDefault ();
3840
3941 private DelayedRunner refreshRunner = new DelayedRunner ();
42+
43+ private final TmcSettings settings = TmcSettingsHolder .get ();
4044
4145 /*package*/ PreferencesPanel () {
4246 initComponents ();
4549 }
4650
4751 private void updateFields () {
48- final Optional <String > usernamePresent = TmcSettingsHolder .get ().getUsername ();
49- String username = "" ;
50- if (usernamePresent .isPresent ()) {
51- username = usernamePresent .get ();
52- }
52+ final Optional <String > username = this .settings .getUsername ();
5353 final JLabel login = this .loginLabel ;
5454 final JButton logout = this .logoutButton ;
55- if (! username .isEmpty ()) {
56- login .setText ("Logged in as " + username );
55+ if (username .isPresent ()) {
56+ login .setText ("Logged in as " + username . get () );
5757 logout .setEnabled (true );
5858 } else {
5959 login .setText ("Not logged in!" );
6060 logout .setEnabled (false );
6161 }
6262
63- Optional <Organization > org = TmcSettingsHolder . get () .getOrganization ();
63+ Optional <Organization > org = this . settings .getOrganization ();
6464 final JLabel selectedOrg = this .selectedOrganizationLabel ;
6565 if (org .isPresent ()) {
6666 selectedOrg .setText (org .get ().getName ());
6767 } else {
6868 selectedOrg .setText ("No organization selected" );
6969 }
7070
71- Optional <Course > course = TmcSettingsHolder . get () .getCurrentCourse ();
71+ Optional <Course > course = this . settings .getCurrentCourse ();
7272 final JLabel selectedCourse = this .selectedCourseLabel ;
7373 if (course .isPresent ()) {
74- selectedCourse .setText (course .get ().getName ());
74+ selectedCourse .setText (course .get ().getTitle ());
7575 } else {
7676 selectedCourse .setText ("No course selected" );
7777 }
7878 }
7979
8080 @ Override
81- public List <Course > getAvailableCourses () {
82- try {
83- List <Course > courses = TmcCore .get ().listCourses (ProgressObserver .NULL_OBSERVER ).call ();
84- return courses ;
85- } catch (Exception ex ) {
86- }
87- return new ArrayList <>();
81+ public List <Course > getAvailableCourses () throws Exception {
82+ List <Course > courses = TmcCore .get ().listCourses (ProgressObserver .NULL_OBSERVER ).call ();
83+ return courses ;
8884 }
8985
9086 @ Override
@@ -98,13 +94,17 @@ public void setProjectDir(String projectDir) {
9894 }
9995
10096 public void setSelectedCourse (Course course ) {
101- TmcSettingsHolder . get () .setCourse (Optional .of (course ));
102- this .selectedCourseLabel .setText (course .getName ());
97+ this . settings .setCourse (Optional .of (course ));
98+ this .selectedCourseLabel .setText (course .getTitle ());
10399 }
104100
105101 @ Override
106102 public String getSelectedCourseName () {
107- return this .selectedCourseLabel .getText ();
103+ final Optional <Course > currentCourse = this .settings .getCurrentCourse ();
104+ if (currentCourse .isPresent ()) {
105+ return currentCourse .get ().getName ();
106+ }
107+ return null ;
108108 }
109109
110110 @ Override
@@ -173,8 +173,15 @@ public void setSendDiagnosticsEnabled(boolean value) {
173173 }
174174
175175 public void setOrganization (OrganizationCard organization ) {
176- TmcSettingsHolder .get ().setOrganization (Optional .of (organization .getOrganization ()));
177- this .selectedOrganizationLabel .setText (organization .getOrganization ().getName ());
176+ Optional <Organization > oldOrganization = this .settings .getOrganization ();
177+ Organization newOrganization = organization .getOrganization ();
178+
179+ if (!oldOrganization .isPresent () || (oldOrganization .isPresent () && !oldOrganization .get ().getSlug ().equals (newOrganization .getSlug ()))) {
180+ this .settings .setOrganization (Optional .of (newOrganization ));
181+ this .settings .setCourse (Optional .<Course >absent ());
182+ this .selectedOrganizationLabel .setText (newOrganization .getName ());
183+ this .selectedCourseLabel .setText ("No course selected" );
184+ }
178185 }
179186
180187 private static class LocaleWrapper {
@@ -207,9 +214,9 @@ public int hashCode() {
207214 }
208215
209216 private void updateSettingsForRefresh () {
210- TmcCoreSettingsImpl settings = (TmcCoreSettingsImpl )TmcSettingsHolder . get () ;
211- settings .setProjectRootDir (getProjectDir ());
212- settings .save (); // TODO: is this wanted
217+ TmcCoreSettingsImpl tmcSettings = (TmcCoreSettingsImpl )this . settings ;
218+ tmcSettings .setProjectRootDir (getProjectDir ());
219+ tmcSettings .save (); // TODO: is this wanted
213220 }
214221
215222 private void setUpErrorMsgLocaleSelection () {
@@ -238,6 +245,16 @@ public void itemStateChanged(ItemEvent event) {
238245 }
239246 });
240247 }
248+
249+ private void wrapWithExceptionHandling (ThrowingFunction function ) {
250+ try {
251+ function .apply ();
252+ } catch (IOException ex ) {
253+ dialogs .displayError ("Couldn't connect to the server! Please check your internet connection." );
254+ } catch (Exception ex ) {
255+ dialogs .displayError (ex .getMessage ());
256+ }
257+ }
241258
242259 /** This method is called from within the constructor to
243260 * initialize the form.
@@ -480,10 +497,8 @@ private void folderChooserBtnActionPerformed(java.awt.event.ActionEvent evt) {//
480497 }//GEN-LAST:event_folderChooserBtnActionPerformed
481498
482499 private void changeCourseButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_changeCourseButtonActionPerformed
483- try {
484- CourseListWindow .display ();
485- } catch (Exception ex ) {
486- }
500+ wrapWithExceptionHandling (CourseListWindow ::display );
501+
487502 updateSettingsForRefresh ();
488503 }//GEN-LAST:event_changeCourseButtonActionPerformed
489504
@@ -492,15 +507,20 @@ private void resolveDependenciesActionPerformed(java.awt.event.ActionEvent evt)
492507 }//GEN-LAST:event_resolveDependenciesActionPerformed
493508
494509 private void sendDiagnosticsActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_sendDiagnosticsActionPerformed
495- TmcCoreSettingsImpl settings = (TmcCoreSettingsImpl ) TmcSettingsHolder . get () ;
496- settings .setSendDiagnostics (getSendDiagnosticsEnabled ());
510+ TmcCoreSettingsImpl tmcSettings = (TmcCoreSettingsImpl ) this . settings ;
511+ tmcSettings .setSendDiagnostics (getSendDiagnosticsEnabled ());
497512 }//GEN-LAST:event_sendDiagnosticsActionPerformed
498513
499514 private void changeOrganizationButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_changeOrganizationButtonActionPerformed
500- try {
501- OrganizationListWindow .display ();
502- } catch (Exception ex ) {
515+ this .selectedCourseLabel .setText ("No course selected" );
516+
517+ wrapWithExceptionHandling (OrganizationListWindow ::display );
518+
519+ final Optional <Course > currentCourse = this .settings .getCurrentCourse ();
520+ if (currentCourse .isPresent ()) {
521+ this .selectedCourseLabel .setText (currentCourse .get ().getTitle ());
503522 }
523+
504524 updateSettingsForRefresh ();
505525 }//GEN-LAST:event_changeOrganizationButtonActionPerformed
506526
0 commit comments