azkaban-memoizeit

Details

.classpath 1(+1 -0)

diff --git a/.classpath b/.classpath
index c81935d..f3617fb 100644
--- a/.classpath
+++ b/.classpath
@@ -17,6 +17,7 @@
 	<classpathentry kind="lib" path="lib/slf4j-api-1.6.1.jar"/>
 	<classpathentry kind="lib" path="lib/slf4j-log4j12-1.6.4.jar"/>
 	<classpathentry kind="lib" path="lib/velocity-1.7.jar"/>
+	<classpathentry kind="lib" path="lib/velocity-tools-2.0.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="lib" path="lib/httpclient-4.2.1.jar"/>
 	<classpathentry kind="lib" path="lib/commons-io-2.4.jar"/>
diff --git a/lib/velocity-tools-2.0.jar b/lib/velocity-tools-2.0.jar
new file mode 100644
index 0000000..beb7434
Binary files /dev/null and b/lib/velocity-tools-2.0.jar differ
diff --git a/src/java/azkaban/user/XmlUserManager.java b/src/java/azkaban/user/XmlUserManager.java
index 5b94cdd..7bcfe26 100644
--- a/src/java/azkaban/user/XmlUserManager.java
+++ b/src/java/azkaban/user/XmlUserManager.java
@@ -56,6 +56,7 @@ public class XmlUserManager implements UserManager {
 	public static final String ROLEPERMISSIONS_ATTR = "permissions";
 	public static final String USERNAME_ATTR = "username";
 	public static final String PASSWORD_ATTR = "password";
+	public static final String EMAIL_ATTR = "email";
 	public static final String ROLES_ATTR = "roles";
 	public static final String PROXY_ATTR = "proxy";
 	public static final String GROUPS_ATTR = "groups";
@@ -150,6 +151,7 @@ public class XmlUserManager implements UserManager {
 		if (userNameAttr == null) {
 			throw new RuntimeException("Error loading user. The '" + USERNAME_ATTR + "' attribute doesn't exist");
 		}
+		
 		Node passwordAttr = userAttrMap.getNamedItem(PASSWORD_ATTR);
 		if (passwordAttr == null) {
 			throw new RuntimeException("Error loading user. The '" + PASSWORD_ATTR + "' attribute doesn't exist");
@@ -196,6 +198,11 @@ public class XmlUserManager implements UserManager {
 				user.addGroup(group);
 			}
 		}
+		
+		Node emailAttr = userAttrMap.getNamedItem(EMAIL_ATTR);
+		if (emailAttr != null) {
+			user.setEmail(emailAttr.getNodeValue());
+		}
 	}
 
 	private void parseRoleTag(Node node, HashMap<String, Role> roles) {
@@ -208,7 +215,7 @@ public class XmlUserManager implements UserManager {
 		Node permissionAttr = roleAttrMap.getNamedItem(ROLEPERMISSIONS_ATTR);
 		if (permissionAttr == null) {
 			throw new RuntimeException(
-					"Error loading user. The password doesn't exist for "+ permissionAttr);
+					"Error loading role. The role 'permissions' attribute doesn't exist");
 		}
 
 		String roleName = roleNameAttr.getNodeValue();
diff --git a/src/java/azkaban/utils/Utils.java b/src/java/azkaban/utils/Utils.java
index 257508a..44edfaa 100644
--- a/src/java/azkaban/utils/Utils.java
+++ b/src/java/azkaban/utils/Utils.java
@@ -322,7 +322,7 @@ public class Utils {
 	public static ReadablePeriod parsePeriodString(String periodStr) {
 		ReadablePeriod period;
 		char periodUnit = periodStr.charAt(periodStr.length() - 1);
-		if (periodUnit == 'n') {
+		if (periodStr.equals("null") || periodUnit == 'n') {
 			return null;
 		}