Revision: 3746
Author: [email protected]
Date: Fri Jul 16 08:41:08 2010
Log: Added an exception to the network conflict resolver's update exception method. This allows other listeners to check the type of exception to look for access denied exceptions instead of generic failures connecting to the server.
http://code.google.com/p/power-architect/source/detail?r=3746

Modified:
/trunk/src/main/java/ca/sqlpower/architect/enterprise/NetworkConflictResolver.java /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
 /trunk/src/main/java/ca/sqlpower/architect/swingui/PlayPenComponent.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/enterprise/NetworkConflictResolver.java Wed Jun 23 13:50:03 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/enterprise/NetworkConflictResolver.java Fri Jul 16 08:41:08 2010
@@ -166,7 +166,7 @@
             } catch (AccessDeniedException e) {
List<UpdateListener> listenersToRemove = new ArrayList<UpdateListener>();
                 for (UpdateListener listener : updateListeners) {
- if (listener.updateException(NetworkConflictResolver.this)) { + if (listener.updateException(NetworkConflictResolver.this, e)) {
                         listenersToRemove.add(listener);
                     }
                 }
@@ -324,11 +324,11 @@
                                if (!postingJSON.get()) {
decodeMessage(json.getString("data"), json.getInt("currentRevision"));
                                }
-                           } catch (AccessDeniedException ade) {
+                           } catch (AccessDeniedException e) {
                                interrupt();
List<UpdateListener> listenersToRemove = new ArrayList<UpdateListener>(); for (UpdateListener listener : updateListeners) { - if (listener.updateException(NetworkConflictResolver.this)) { + if (listener.updateException(NetworkConflictResolver.this, e)) {
                                        listenersToRemove.add(listener);
                                    }
                                }
@@ -342,14 +342,14 @@
                                            UserPromptResponse.OK,
                                            "OK", "OK").promptUser("");
                                } else {
-                                   throw ade;
+                                   throw e;
                                }
                            } catch (Exception e) {
// TODO: Discard corrupt workspace and start again from scratch.
                                interrupt();
List<UpdateListener> listenersToRemove = new ArrayList<UpdateListener>(); for (UpdateListener listener : updateListeners) { - if (listener.updateException(NetworkConflictResolver.this)) { + if (listener.updateException(NetworkConflictResolver.this, e)) {
                                        listenersToRemove.add(listener);
                                    }
                                }
@@ -977,7 +977,16 @@
          * listener list and should not receive any more calls
          */
         public boolean updatePerformed(NetworkConflictResolver resolver);
-        public boolean updateException(NetworkConflictResolver resolver);
+
+        /**
+ * Called when an exception is thrown from the server on an update. One
+         * special exception passed in this call is the
+         * {...@link AccessDeniedException}. If the exception is an
+         * {...@link AccessDeniedException} then the user does not have valid
+         * permissions to do the operation they were attempting and the
+         * exception is not a fatal one.
+         */
+ public boolean updateException(NetworkConflictResolver resolver, Throwable t);

         /**
          * Notifies listeners that the workspace was deleted.
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java Fri Jul 16 08:37:22 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java Fri Jul 16 08:41:08 2010
@@ -253,7 +253,7 @@
                 return false;
             }

- public boolean updateException(NetworkConflictResolver resolver) { + public boolean updateException(NetworkConflictResolver resolver, Throwable t) {
                 if (loading) {
                     swingSession.getUndoManager().setLoading(false);
                     loading = false;
@@ -318,12 +318,16 @@
newSecuritySession.getUpdater().addListener(new NetworkConflictResolver.UpdateListener() { public boolean updatePerformed(NetworkConflictResolver resolver) {return false;}

- public boolean updateException(NetworkConflictResolver resolver) { + public boolean updateException(NetworkConflictResolver resolver, Throwable t) { + if (t instanceof AccessDeniedException) return false;
+
                         newSecuritySession.close();
ArchitectClientSideSession.getSecuritySessions().remove(serverInfo.getServerAddress()); + final String errorMessage = "Error accessing security session.";
+                        logger.error(errorMessage, t);
+ SPSUtils.showExceptionDialogNoReport(frames.get(0), errorMessage, t); //If you try to create a new security session here because creating the first //one failed the same error message can continue to repeat. - //TODO May want to warn the user with a nicer dialog.
                         return true;
                     }

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java Mon Jul 12 14:17:47 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java Fri Jul 16 08:41:08 2010
@@ -465,7 +465,7 @@
Class<?> osxAdapter = ArchitectSwingSessionImpl.class.getClassLoader().loadClass("ca.sqlpower.architect.swingui.OSXAdapter"); //$NON-NLS-1$

// The main registration method. Takes quitAction, prefsAction, aboutAction. - Class[] defArgs = { Action.class, Action.class, Action.class }; + Class<?>[] defArgs = { Action.class, Action.class, Action.class }; Method registerMethod = osxAdapter.getDeclaredMethod("registerMacOSXApplication", defArgs); //$NON-NLS-1$
                 Object[] args = { exitAction, prefAction, aboutAction };
                 registerMethod.invoke(osxAdapter, args);
@@ -1201,7 +1201,7 @@
return true; // true indicates that the listener should be removed
                     }

- public boolean updateException(NetworkConflictResolver resolver) {return false;} + public boolean updateException(NetworkConflictResolver resolver, Throwable t) {return false;}

public void preUpdatePerformed(NetworkConflictResolver resolver) {
                         //do nothing
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/PlayPenComponent.java Fri Jul 16 07:18:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/PlayPenComponent.java Fri Jul 16 08:41:08 2010
@@ -105,7 +105,7 @@
             return true;
         }

- public boolean updateException(NetworkConflictResolver resolver) {return false;} + public boolean updateException(NetworkConflictResolver resolver, Throwable t) {return false;}

         public void preUpdatePerformed(NetworkConflictResolver resolver) {
             //do nothing
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java Mon Jul 12 08:21:11 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/ServerProjectsManagerPanel.java Fri Jul 16 08:41:08 2010
@@ -144,7 +144,7 @@
                                         return true;
                                     }

- public boolean updateException(NetworkConflictResolver resolver) { + public boolean updateException(NetworkConflictResolver resolver, Throwable t) {
                                         return false;
                                     }

Reply via email to