azkaban-aplcache

Details

diff --git a/src/java/azkaban/project/FileProjectManager.java b/src/java/azkaban/project/FileProjectManager.java
index d876e58..e7583cc 100644
--- a/src/java/azkaban/project/FileProjectManager.java
+++ b/src/java/azkaban/project/FileProjectManager.java
@@ -84,7 +84,17 @@ public class FileProjectManager implements ProjectManager {
         return new ArrayList<String>(projects.keySet());
     }
     
-    public Project getProject(String name) {
+    public List<Project> getProjects(User user) {
+    	ArrayList<Project> array = new ArrayList<Project>();
+    	for(Project project : projects.values()) {
+    		if (project.hasPermission(user, Type.READ)) {
+    			array.add(project);
+    		}
+    	}
+    	return array;
+    }
+    
+    public Project getProject(String name, User user) {
     	return projects.get(name);
     }
     
@@ -156,7 +166,7 @@ public class FileProjectManager implements ProjectManager {
     }
 
 	@Override
-	public synchronized Project removeProjects(String projectName) {
+	public synchronized Project removeProjects(String projectName, User user) {
 		return null;
 	}
 }
\ No newline at end of file
diff --git a/src/java/azkaban/project/Project.java b/src/java/azkaban/project/Project.java
index 18eb498..2662fbd 100644
--- a/src/java/azkaban/project/Project.java
+++ b/src/java/azkaban/project/Project.java
@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Map;
 
 import azkaban.user.Permission;
+import azkaban.user.Permission.Type;
 import azkaban.user.User;
 
 public class Project {
@@ -13,6 +14,7 @@ public class Project {
     private String description;
     private long createTimestamp;
     private long lastModifiedTimestamp;
+    private String lastModifiedUser;
     private HashMap<String, Permission> userToPermission = new HashMap<String, Permission>();
     
     public Project(String name) {
@@ -23,6 +25,19 @@ public class Project {
         return name;
     }
     
+	public boolean hasPermission(User user, Type type) {
+		Permission perm = userToPermission.get(user.getUserId());
+		if (perm == null) {
+			return false;
+		}
+		
+		if (perm.isPermissionSet(Type.ADMIN) || perm.isPermissionSet(type)) {
+			return true;
+		}
+
+		return false;
+	}
+	
     public void setDescription(String description) {
     	this.description = description;
     }
@@ -61,6 +76,7 @@ public class Project {
     	projectObject.put("description", description);
     	projectObject.put("createTimestamp", createTimestamp);
     	projectObject.put("lastModifiedTimestamp",lastModifiedTimestamp);
+    	projectObject.put("lastModifiedUser", lastModifiedUser);
     	
     	ArrayList<Map<String,Object>> users = new ArrayList<Map<String,Object>>();
     	for (Map.Entry<String, Permission> entry: userToPermission.entrySet()) {
@@ -79,7 +95,7 @@ public class Project {
     	Map<String,Object> projectObject = (Map<String,Object>)object;
     	String name = (String)projectObject.get("name");
     	String description = (String)projectObject.get("description");
-    	
+    	String lastModifiedUser = (String)projectObject.get("lastModifiedUser");
     	long createTimestamp = coerceToLong(projectObject.get("createTimestamp"));
     	long lastModifiedTimestamp = coerceToLong(projectObject.get("lastModifiedTimestamp"));
     	
@@ -87,7 +103,7 @@ public class Project {
     	project.setDescription(description);
     	project.setCreateTimestamp(createTimestamp);
     	project.setLastModifiedTimestamp(lastModifiedTimestamp);
-    	
+    	project.setLastModifiedUser(lastModifiedUser);
     	
 		List<Map<String,Object>> users = (List<Map<String,Object>>)projectObject.get("users");
     	
@@ -114,6 +130,14 @@ public class Project {
     	return (Long)obj;
     }
     
+	public String getLastModifiedUser() {
+		return lastModifiedUser;
+	}
+
+	public void setLastModifiedUser(String lastModifiedUser) {
+		this.lastModifiedUser = lastModifiedUser;
+	}
+    
     @Override
 	public int hashCode() {
 		final int prime = 31;
@@ -125,6 +149,9 @@ public class Project {
 		result = prime
 				* result
 				+ (int) (lastModifiedTimestamp ^ (lastModifiedTimestamp >>> 32));
+		result = prime
+				* result
+				+ ((lastModifiedUser == null) ? 0 : lastModifiedUser.hashCode());
 		result = prime * result + ((name == null) ? 0 : name.hashCode());
 		result = prime
 				* result
@@ -150,6 +177,11 @@ public class Project {
 			return false;
 		if (lastModifiedTimestamp != other.lastModifiedTimestamp)
 			return false;
+		if (lastModifiedUser == null) {
+			if (other.lastModifiedUser != null)
+				return false;
+		} else if (!lastModifiedUser.equals(other.lastModifiedUser))
+			return false;
 		if (name == null) {
 			if (other.name != null)
 				return false;
diff --git a/src/java/azkaban/project/ProjectManager.java b/src/java/azkaban/project/ProjectManager.java
index de17ea4..73fda78 100644
--- a/src/java/azkaban/project/ProjectManager.java
+++ b/src/java/azkaban/project/ProjectManager.java
@@ -8,9 +8,11 @@ public interface ProjectManager {
     
     public List<String> getProjectNames();
     
-    public Project getProject(String name);
+    public List<Project> getProjects(User user);
+    
+    public Project getProject(String name, User user);
     
     public Project createProjects(String projectName, String description, User creator) throws ProjectManagerException;
     
-    public Project removeProjects(String projectName) throws ProjectManagerException;
+    public Project removeProjects(String projectName, User user) throws ProjectManagerException;
 }
\ No newline at end of file
diff --git a/src/java/azkaban/user/Permission.java b/src/java/azkaban/user/Permission.java
index dfa99dc..b816b65 100644
--- a/src/java/azkaban/user/Permission.java
+++ b/src/java/azkaban/user/Permission.java
@@ -11,7 +11,6 @@ public class Permission {
 		WRITE,
 		EXECUTE,
 		SCHEDULE,
-		DELETE,
 		ADMIN
 	}
 
diff --git a/src/java/azkaban/utils/JSONUtils.java b/src/java/azkaban/utils/JSONUtils.java
index 028ff2e..b99a5a4 100644
--- a/src/java/azkaban/utils/JSONUtils.java
+++ b/src/java/azkaban/utils/JSONUtils.java
@@ -6,14 +6,12 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.Map;
 
 import org.codehaus.jackson.JsonFactory;
 import org.codehaus.jackson.JsonNode;
 import org.codehaus.jackson.JsonParser;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.ObjectWriter;
-import org.codehaus.jackson.node.ObjectNode;
 
 public class JSONUtils {
 	/**
diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 1f3605f..b37785c 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -80,7 +80,7 @@ public class AzkabanWebServer {
     public static final String AZKABAN_PROPERTIES_FILE = "azkaban.properties";
 
     private static final String DEFAULT_TIMEZONE_ID = "default.timezone.id";
-    private static final int DEFAULT_PORT_NUMBER = 8081;
+    //private static final int DEFAULT_PORT_NUMBER = 8081;
     private static final int DEFAULT_SSL_PORT_NUMBER = 8443;
     private static final int DEFAULT_THREAD_NUMBER = 10;
     private static final String VELOCITY_DEV_MODE_PARAM = "velocity.dev.mode";
diff --git a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 3344603..5ade9ac 100644
--- a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -29,8 +29,6 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
diff --git a/src/java/azkaban/webapp/servlet/Page.java b/src/java/azkaban/webapp/servlet/Page.java
index 0389a62..27142df 100644
--- a/src/java/azkaban/webapp/servlet/Page.java
+++ b/src/java/azkaban/webapp/servlet/Page.java
@@ -29,7 +29,8 @@ import azkaban.utils.Utils;
  */
 public class Page {
     private static final String DEFAULT_MIME_TYPE = "text/html";
-    private final HttpServletRequest request;
+    @SuppressWarnings("unused")
+	private final HttpServletRequest request;
     private final HttpServletResponse response;
     private final VelocityEngine engine;
     private final VelocityContext context;
diff --git a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 569462f..028e519 100644
--- a/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/src/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -1,6 +1,5 @@
 package azkaban.webapp.servlet;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.Writer;
 import java.util.HashMap;
@@ -16,7 +15,6 @@ import org.apache.log4j.Logger;
 import azkaban.project.ProjectManager;
 import azkaban.project.ProjectManagerException;
 import azkaban.user.User;
-import azkaban.utils.JSONUtils;
 import azkaban.webapp.session.Session;
 
 public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
diff --git a/src/java/azkaban/webapp/servlet/velocity/index.vm b/src/java/azkaban/webapp/servlet/velocity/index.vm
index 5dbf298..c6b50c0 100644
--- a/src/java/azkaban/webapp/servlet/velocity/index.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/index.vm
@@ -25,7 +25,7 @@
     <div class="content">
       <div id="all-jobs-content">
         <div class="section-hd">
-          <h2>Projects</h2>
+          <h2>My Projects</h2>
 
           <form method="get">
             <input type="hidden" name="action" value="search">
@@ -36,7 +36,19 @@
           <a id="create-project-btn" class="btn1 createproject" href="#">Create Project</a>
         </div><!-- end .section-hd -->
       </div>
-    <div class="content">
+      <table id="all-jobs" class="all-jobs job-table">
+      	<thead>
+      		<tr>
+      			<th class="tb-name">Name</th>
+      			<th class="tb-up-date">Modified Date</th>
+      			<th class="tb-owner">Modified By</th>
+      			<th class="tb-action last">Actions</th>
+      		</tr>
+      	 </thead>
+      	 <tbody>
+         </tbody>
+       </table>
+    </div>
   </body>
 
 <!-- modal content -->
diff --git a/src/web/css/azkaban.css b/src/web/css/azkaban.css
index 345775b..9e44903 100644
--- a/src/web/css/azkaban.css
+++ b/src/web/css/azkaban.css
@@ -154,6 +154,7 @@ th {
   color: #fff;
   font-weight: bold;
   line-height: 1em;
+  font-size: 10.5pt;
 }
      
 th,
@@ -565,7 +566,6 @@ tr:hover td {
 	margin-top: 10px;
 }
 
-
 .login-textbox {
 	width: 300px;
 	border-style: solid;
diff --git a/unit/java/azkaban/test/project/ProjectTest.java b/unit/java/azkaban/test/project/ProjectTest.java
index 7f48a8b..b2c15d6 100644
--- a/unit/java/azkaban/test/project/ProjectTest.java
+++ b/unit/java/azkaban/test/project/ProjectTest.java
@@ -16,7 +16,7 @@ public class ProjectTest {
     	project.setCreateTimestamp(1l);
     	project.setLastModifiedTimestamp(2l);
     	project.setDescription("I am a test");
-    	project.setUserPermission("user1", new Permission(new Type[]{Type.ADMIN, Type.DELETE}));
+    	project.setUserPermission("user1", new Permission(new Type[]{Type.ADMIN, Type.EXECUTE}));
     	
     	Object obj = project.toObject();
     	String json = JSONUtils.toJSON(obj);
diff --git a/unit/java/azkaban/test/user/XmlUserManagerTest.java b/unit/java/azkaban/test/user/XmlUserManagerTest.java
index a607162..26a9ce9 100644
--- a/unit/java/azkaban/test/user/XmlUserManagerTest.java
+++ b/unit/java/azkaban/test/user/XmlUserManagerTest.java
@@ -36,7 +36,8 @@ public class XmlUserManagerTest {
     	
     	// Should throw 
     	try {
-    		XmlUserManager manager = new XmlUserManager(props);
+    		@SuppressWarnings("unused")
+			XmlUserManager manager = new XmlUserManager(props);
     	} catch (UndefinedPropertyException e) {
     		return;
     	}
@@ -54,7 +55,8 @@ public class XmlUserManagerTest {
     	props.put(XmlUserManager.XML_FILE_PARAM, "unit/test-conf/doNotExist.xml");
     	
     	try {
-    		UserManager manager = new XmlUserManager(props);
+    		@SuppressWarnings("unused")
+			UserManager manager = new XmlUserManager(props);
     	} catch (RuntimeException e) {
     		return;
     	}