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
src/java/azkaban/project/Project.java 36(+34 -2)
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 -->
src/web/css/azkaban.css 2(+1 -1)
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;
}