You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/03/25 03:25:37 UTC

svn commit: r758129 - in /labs/magma/trunk/foundation-basics/src: main/java/org/apache/magma/basics/MagmaException.java main/java/org/apache/magma/basics/MagmaExceptionChaining.aj test/java/org/apache/magma/basics/ExceptionChainingTest.java

Author: simoneg
Date: Wed Mar 25 02:25:37 2009
New Revision: 758129

URL: http://svn.apache.org/viewvc?rev=758129&view=rev
Log:
LABS-315 : magma exception chaining

Added:
    labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaExceptionChaining.aj
    labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/ExceptionChainingTest.java
Modified:
    labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaException.java

Modified: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaException.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaException.java?rev=758129&r1=758128&r2=758129&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaException.java (original)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaException.java Wed Mar 25 02:25:37 2009
@@ -19,6 +19,7 @@
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -38,14 +39,12 @@
 	}
 
 	public MagmaException(LocalizableString error) {
-		this.messages = new ArrayList<LocalizableString>(1);
-		this.messages.add(error);
+		addMessage(error);
 	}
 
 	public MagmaException(LocalizableString error, Throwable t) {
 		super(t);
-		this.messages = new ArrayList<LocalizableString>(1);
-		this.messages.add(error);
+		addMessage(error);
 	}
 	
 	public MagmaException(String message, Object... args) {
@@ -82,7 +81,17 @@
 				throw e;
 			}
 		}
-		this.messages.addAll(e.messages);
+		addMessages(e.messages);
+	}
+	
+	public void addMessage(LocalizableString message) {
+		if (this.messages == null) this.messages = new ArrayList<LocalizableString>();
+		this.messages.add(message);
+	}
+	
+	public void addMessages(Collection<LocalizableString> messages) {
+		if (this.messages == null) this.messages = new ArrayList<LocalizableString>();
+		this.messages.addAll(messages);
 	}
 
 	public void setSubject(Object subject) {

Added: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaExceptionChaining.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaExceptionChaining.aj?rev=758129&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaExceptionChaining.aj (added)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/MagmaExceptionChaining.aj Wed Mar 25 02:25:37 2009
@@ -0,0 +1,25 @@
+package org.apache.magma.basics;
+
+/**
+ * Chains multiple throws of {@link MagmaException} into a single {@link MagmaException} to provide more readable traces.
+ *
+ * @author Simone Gianni <si...@apache.org>
+ * @see LABS-315
+ */
+public aspect MagmaExceptionChaining {
+	
+	pointcut creatingLast(MagmaException other) :
+		call(MagmaException.new(.., Throwable)) && args(.. , other);
+
+	pointcut creatingFirst(MagmaException other) :
+		call(MagmaException.new(Throwable,..)) && args(other,..);
+	
+	
+	pointcut creatingException(MagmaException other) : creatingLast(other) || creatingFirst(other);
+
+	MagmaException around(MagmaException other) : creatingException(other) {
+		MagmaException mine = proceed(other);
+		other.addMessages(mine.getMessages());
+		return other;
+	}
+}

Added: labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/ExceptionChainingTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/ExceptionChainingTest.java?rev=758129&view=auto
==============================================================================
--- labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/ExceptionChainingTest.java (added)
+++ labs/magma/trunk/foundation-basics/src/test/java/org/apache/magma/basics/ExceptionChainingTest.java Wed Mar 25 02:25:37 2009
@@ -0,0 +1,31 @@
+package org.apache.magma.basics;
+
+import static org.junit.Assert.*;
+
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.*;
+import org.junit.Test;
+
+
+public class ExceptionChainingTest {
+
+	@Test
+	public void chainTest() throws Exception {
+		try {
+			try {
+				try {
+					throw new MagmaException("a");
+				} catch (Exception e) {
+					throw new MagmaException(e, "b");
+				}
+			} catch (Exception e) {
+				throw new MagmaException(new LocalizableString("c"), e);
+			}
+		} catch (MagmaException e) {
+			List<LocalizableString> messages = e.getMessages();
+			assertThat(messages.size(), equalTo(3));
+		}
+	}
+	
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org