Index: /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tool/UploadResponse.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tool/UploadResponse.java	(revision 1418)
+++ /FCKeditor.Java/branches/2.4/src/main/java/net/fckeditor/tool/UploadResponse.java	(revision 1419)
@@ -6,5 +6,5 @@
 public class UploadResponse {
 
-	private Map<String, String> parameters;
+	private Map<String, Object> parameters;
 
 	// TODO Rename 'En_'-constants to something more intuitive like 'CODE_'
@@ -18,39 +18,29 @@
 
 	public static final String CM_HTTP_400 = "400 Bad request";
+	private static final String[] paramNames = {"errorNumber","fileUrl","filename","customMessage"};
 
-	// public static final UploadResponse UR_OK = new UploadResponse(EN_OK);
-	public static final UploadResponse UR_INVALID_EXTENSION = new UploadResponse(EN_INVALID_EXTENSION);
-	public static final UploadResponse UR_SECURITY_ERROR = new UploadResponse(EN_SECURITY_ERROR);
-	public static final UploadResponse UR_GENERIC_NUMBER = new UploadResponse(EN_GENERIC_NUMBER);
+	public static final UploadResponse UR_INVALID_EXTENSION = new UploadResponse(
+			EN_INVALID_EXTENSION);
+	public static final UploadResponse UR_SECURITY_ERROR = new UploadResponse(
+			EN_SECURITY_ERROR);
+	public static final UploadResponse UR_GENERIC_NUMBER = new UploadResponse(
+			EN_GENERIC_NUMBER);
 
-	public UploadResponse(int errorNumber, final String fileUrl, final String filename, final String customMessage) {
-		parameters = new LinkedHashMap<String, String>(); // we must respect the order of the params!
-		setErrorNumber(errorNumber);
-		if (fileUrl != null)
-			parameters.put("fileUrl", fileUrl);
-		if (filename != null)
-			setFilename(filename);
-		if (customMessage != null)
-			setCustomMessage(customMessage);
-	}
+	public UploadResponse(Object... arguments) throws IllegalArgumentException {
+		if (arguments.length < 1 || arguments.length > 4)
+			throw new IllegalArgumentException(
+					"The amount of arguments has to be between 1 and 4");
 
-	public UploadResponse(int errorNumber, final String fileUrl, final String filename) {
-		this(errorNumber, fileUrl, filename, null);
-	}
+		parameters = new LinkedHashMap<String, Object>(arguments.length);
 
-	public UploadResponse(int errorNumber, final String fileUrl) {
-		this(errorNumber, fileUrl, null, null);
-	}
+		if (arguments[0] instanceof Integer)
+			parameters.put(UploadResponse.paramNames[0], arguments[0]);
+		else
+			throw new IllegalArgumentException(
+					"The first argument has to be an error number (int)");
+		
+		for (int i = 1; i < arguments.length; i++)
+			parameters.put(UploadResponse.paramNames[i], arguments[i]);
 
-	public UploadResponse(int errorNumber) {
-		this(errorNumber, null, null, null);
-	}
-
-	public void setFilename(final String filename) {
-		if (Utils.isNotEmpty(filename)) {
-			if (parameters.size() == 1)
-				parameters.put("fileUrl", null);
-			parameters.put("filename", filename);
-		}
 	}
 
@@ -58,13 +48,9 @@
 		if (Utils.isNotEmpty(customMassage)) {
 			if (parameters.size() == 1) {
-				parameters.put("fileUrl", null);
-				parameters.put("filename", null);
+				parameters.put(UploadResponse.paramNames[1], null);
+				parameters.put(UploadResponse.paramNames[2], null);
 			}
-			parameters.put("customMessage", customMassage);
+			parameters.put(UploadResponse.paramNames[3], customMassage);
 		}
-	}
-
-	public void setErrorNumber(int errorNumber) {
-		parameters.put("errorNumber", String.valueOf(errorNumber));
 	}
 
@@ -75,27 +61,17 @@
 		sb.append("window.parent.OnUploadCompleted(");
 
-		if (parameters.size() == 1) {
-			sb.append(parameters.get("errorNumber"));
-		} else {
-			for (String parameter : parameters.values()) {
-
-				if (Utils.isNotEmpty(parameter)) {
-					if (parameter.matches("-?\\d{1,3}")) {
-						sb.append(parameter);
-					} else {
-						sb.append("'");
-						sb.append(parameter);
-						sb.append("'");
-					}
-				} else {
-					sb.append("'");
-					sb.append("'");
-				}
-				sb.append(",");
-
+		for (Object parameter : parameters.values()) {
+			if (parameter instanceof Integer) {
+				sb.append(parameter);
+			} else {
+				sb.append("'");
+				if (parameter != null)
+					sb.append(parameter);
+				sb.append("'");
 			}
-			sb.deleteCharAt(sb.length() - 1);
+			sb.append(",");
 		}
-
+		
+		sb.deleteCharAt(sb.length() - 1);
 		sb.append(");\n");
 		sb.append("</script>");
@@ -103,12 +79,3 @@
 		return sb.toString();
 	}
-
-	public static void main(String[] args) {
-
-		UploadResponse ur = new UploadResponse(101);
-		ur.setCustomMessage("shit happens");
-		// ur.setFilename("test");
-		// ur.setCustomMessage("nothing happens");
-		System.out.println(ur);
-	}
 }
Index: /FCKeditor.Java/branches/2.4/src/test/java/net/fckeditor/tool/UploadResponseTest.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/test/java/net/fckeditor/tool/UploadResponseTest.java	(revision 1419)
+++ /FCKeditor.Java/branches/2.4/src/test/java/net/fckeditor/tool/UploadResponseTest.java	(revision 1419)
@@ -0,0 +1,67 @@
+package net.fckeditor.tool;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import net.fckeditor.tool.UploadResponse;
+
+public class UploadResponseTest {
+
+	@Test(expected = IllegalArgumentException.class)
+	public void noArguments() throws Exception {
+		new UploadResponse();
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void tooManyArguments() throws Exception {
+		new UploadResponse(101, "/some/url/file.txt", "file.txt",
+				"something's wrong", "arg no. 5");
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void notANumber() throws Exception {
+		new UploadResponse("1");
+	}
+
+	@Test
+	public void onlyErrorNumber() throws Exception {
+		UploadResponse actual = UploadResponse.UR_INVALID_EXTENSION;
+		String expected = new String("<script type=\"text/javascript\">\n"
+				+ "window.parent.OnUploadCompleted(202);\n</script>");
+		assertEquals(expected, actual.toString());
+	}
+	
+	@Test
+	public void fourArguments() throws Exception {
+		UploadResponse actual = new UploadResponse(UploadResponse.EN_OK,"/fckeditor-java/userfiles/image/fredck.jpg");
+		String expected = new String("<script type=\"text/javascript\">\n"
+				+ "window.parent.OnUploadCompleted(0,'/fckeditor-java/userfiles/image/fredck.jpg');\n</script>");
+		assertEquals(expected, actual.toString());
+	}
+	
+	@Test
+	public void renamedFile() throws Exception {
+		UploadResponse actual = new UploadResponse(UploadResponse.EN_RENAMED,"/fckeditor-java/userfiles/image/hacked_php.txt","hacked_php.txt");
+		String expected = new String("<script type=\"text/javascript\">\n"
+				+ "window.parent.OnUploadCompleted(201,'/fckeditor-java/userfiles/image/hacked_php.txt','hacked_php.txt');\n</script>");
+		assertEquals(expected, actual.toString());
+	}
+	
+	@Test
+	public void customMessage() throws Exception {
+		UploadResponse actual = new UploadResponse(UploadResponse.EN_ERROR);
+		actual.setCustomMessage(UploadResponse.CM_HTTP_400);
+		String expected = new String("<script type=\"text/javascript\">\n"
+				+ "window.parent.OnUploadCompleted(1,'','','400 Bad request');\n</script>");
+		assertEquals(expected, actual.toString());
+	}
+	
+	@Test
+	public void nullArguments() throws Exception {
+		UploadResponse actual = new UploadResponse(UploadResponse.EN_GENERIC_NUMBER,null,null,null);
+		String expected = new String("<script type=\"text/javascript\">\n"
+				+ "window.parent.OnUploadCompleted(-1,'','','');\n</script>");
+		assertEquals(expected, actual.toString());
+	}
+
+}
Index: /FCKeditor.Java/branches/2.4/src/test/java/net/fckeditor/tool/UtilsTest.java
===================================================================
--- /FCKeditor.Java/branches/2.4/src/test/java/net/fckeditor/tool/UtilsTest.java	(revision 1418)
+++ /FCKeditor.Java/branches/2.4/src/test/java/net/fckeditor/tool/UtilsTest.java	(revision 1419)
@@ -27,5 +27,4 @@
 import java.util.Set;
 
-import org.junit.Ignore;
 import org.junit.Test;
 
