Azkaban的Web Server源碼探究系列16:跳轉Project

上節說完了建立,這下來講跳轉到Project.
web

======================================================================ajax

因此,仍是得用/manager對應的servlet來執行,下面稍微跟蹤一下:session

======================================================================app

@Overridewebapp

protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session)ide

throws ServletException, IOException {this

if (hasParam(req, "project")) {//若是有參數Project,這裏有spa

if (hasParam(req, "ajax")) {//無內存

handleAJAXAction(req, resp, session);ci

} else if (hasParam(req, "logs")) {

handleProjectLogsPage(req, resp, session);

} else if (hasParam(req, "permissions")) {

handlePermissionPage(req, resp, session);

} else if (hasParam(req, "prop")) {

handlePropertyPage(req, resp, session);

} else if (hasParam(req, "history")) {

handleJobHistoryPage(req, resp, session);

} else if (hasParam(req, "job")) {

handleJobPage(req, resp, session);

} else if (hasParam(req, "flow")) {

handleFlowPage(req, resp, session);

} else if (hasParam(req, "delete")) {

handleRemoveProject(req, resp, session);

} else if (hasParam(req, "purge")) {

handlePurgeProject(req, resp, session);

} else if (hasParam(req, "download")) {

handleDownloadProject(req, resp, session);

} else {

handleProjectPage(req, resp, session);

}

return;

} else if (hasParam(req, "reloadProjectWhitelist")) {

handleReloadProjectWhitelist(req, resp, session);

}

 

Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/projectpage.vm");

page.add("errorMsg", "No project set.");

page.render();

}


到底執行哪一個分支,先看看req


根據這個結果,能夠得知:

handleProjectPage(req, resp, session);被執行

===

private void handleProjectPage(HttpServletRequest req, HttpServletResponse resp, Session session)

throws ServletException {

//渲染頁面

Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/projectpage.vm");

String projectName = getParam(req, "project");

 

User user = session.getUser();

Project project = null;

try {、、查詢此工程,實際上是從本地內存裏查

project = projectManager.getProject(projectName);

if (project == null) {

page.add("errorMsg", "Project " + projectName + " not found.");

} else {

if (!hasPermission(project, user, Type.READ)) {

throw new AccessControlException("No permission to view project " + projectName + ".");

}

 

page.add("project", project);

page.add("admins", Utils.flattenToString(project.getUsersWithPermission(Type.ADMIN), ","));

Permission perm = this.getPermissionObject(project, user, Type.ADMIN);

page.add("userpermission", perm);

page.add("validatorFixPrompt",

projectManager.getProps().getBoolean(ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_FLAG_PARAM,

ValidatorConfigs.DEFAULT_VALIDATOR_AUTO_FIX_PROMPT_FLAG));

page.add("validatorFixLabel",

projectManager.getProps().get(ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_LABEL_PARAM));

page.add("validatorFixLink",

projectManager.getProps().get(ValidatorConfigs.VALIDATOR_AUTO_FIX_PROMPT_LINK_PARAM));

 

boolean adminPerm = perm.isPermissionSet(Type.ADMIN);

if (adminPerm) {

page.add("admin", true);

}

// Set this so we can display execute buttons only to those who

// have

// access.

if (perm.isPermissionSet(Type.EXECUTE) || adminPerm) {

page.add("exec", true);

} else {

page.add("exec", false);

}

 

List<Flow> flows = project.getFlows();

if (!flows.isEmpty()) {

Collections.sort(flows, FLOW_ID_COMPARATOR);

page.add("flows", flows);

}

}

} catch (AccessControlException e) {

page.add("errorMsg", e.getMessage());

}

page.render();//渲染

}

相關文章
相關標籤/搜索