/** * */ package uk.ac.cam.caret.sakai.rwiki.tool.bean; import java.text.MessageFormat; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import uk.ac.cam.caret.sakai.rwiki.tool.RequestScopeSuperBean; /** * @author ieb */ public class MultiRealmEditBean { String pageName = null; String localSpace = null; HttpServletRequest request = null; private RequestScopeSuperBean rsac = null; private static final String[] permissionNames = { "Create", "Read", "Edit", "Delete", "Admin", "Super Admin" }; private static final int PERM_CREATE = 0; private static final int PERM_ADMIN = 4; private static final int PERM_DELETE = 3; private static final int PERM_READ = 1; private static final int PERM_SUPERADMIN = 5; private static final int PERM_UPDATE = 2; public String getLocalSpace() { return localSpace; } public String getSakaiHTMLHead() { return (String) request.getAttribute("sakai.html.head"); } public String getBodyOnLoad() { return "onload=\""+request.getAttribute("sakai.html.body.onload") + "; parent.updCourier(doubleDeep,ignoreCourier); callAllLoaders(); \""; } public String getPageName() { return pageName; } public String getErrors(String wrapperFormat, String itemFormat) { ErrorBean eb = rsac.getErrorBean(); List errors = eb.getErrors(); StringBuffer sb = new StringBuffer(); if (errors.size() > 0) { for (Iterator i = errors.iterator(); i.hasNext();) { sb.append(MessageFormat.format(itemFormat, new Object[] { i.next() })); } return MessageFormat.format(wrapperFormat, new Object[] { sb.toString() }); } else { return ""; } } public String getPermissionNames(String nameFormat) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < permissionNames.length; i++) { sb.append(MessageFormat.format(nameFormat, new Object[] { permissionNames[i] })); } return sb.toString(); } public String getPermissionsControl(AuthZGroupBean azbg, RoleBean rb, int perm, String permissionEditOnFormat, String permissionEditOffFormat) { String fieldName = null; String format = null; switch (perm) { case PERM_CREATE: fieldName = "create_" + azbg.getEscapedId() + "_" + rb.getId(); format = rb.isSecureCreate() ? permissionEditOffFormat : permissionEditOnFormat; break; case PERM_ADMIN: fieldName = "create_" + azbg.getEscapedId() + "_" + rb.getId(); format = rb.isSecureAdmin() ? permissionEditOffFormat : permissionEditOnFormat; break; case PERM_DELETE: fieldName = "create_" + azbg.getEscapedId() + "_" + rb.getId(); format = rb.isSecureDelete() ? permissionEditOffFormat : permissionEditOnFormat; break; case PERM_READ: fieldName = "create_" + azbg.getEscapedId() + "_" + rb.getId(); format = rb.isSecureRead() ? permissionEditOffFormat : permissionEditOnFormat; break; case PERM_SUPERADMIN: fieldName = "create_" + azbg.getEscapedId() + "_" + rb.getId(); format = rb.isSecureSuperAdmin() ? permissionEditOffFormat : permissionEditOnFormat; break; case PERM_UPDATE: fieldName = "create_" + azbg.getEscapedId() + "_" + rb.getId(); format = rb.isSecureUpdate() ? permissionEditOffFormat : permissionEditOnFormat; break; default: fieldName = String.valueOf(perm); format = "Undefiend field with index {0} "; break; } return MessageFormat.format(format, new Object[] { fieldName }); } /** * @param permissionsRealmWrapperFormat " * {0} {1} {2} " (O:realmname, 1:permissionNames, 2: group)* " * @param permissionNamesFormat " * {0} " (O:permissionName)* * @param groupWrapperFormat " * {0} {1} " (0:role name 1:permissionEditOnFormat|permissionEditOffFormat)* * @param permissionEditOnFormat " * {0} " 0:formitemName * @param permissionEditOffFormat " * {0} " 0:formitemName * @return */ public String getPermissionsGroupRoles(String permissionsRealmWrapperFormat, String permissionNamesFormat, String groupWrapperFormat, String permissionEditOnFormat, String permissionEditOffFormat) { String permissionNamesHtml = getPermissionNames(permissionNamesFormat); AuthZGroupCollectionBean realmCollectionBean = rsac.getAuthZGroupCollectionBean(); List realms = realmCollectionBean.getRealms(); StringBuffer output = new StringBuffer(); for (Iterator i = realms.iterator(); i.hasNext();) { AuthZGroupBean azgb = (AuthZGroupBean) i.next(); List roles = azgb.getRoles(); if (roles.size() > 0) { StringBuffer rolesOutput = new StringBuffer(); for (Iterator rolesi = roles.iterator(); rolesi.hasNext();) { RoleBean rb = (RoleBean) rolesi.next(); StringBuffer permissionsOutput = new StringBuffer(); for (int j = 0; j < permissionNames.length; j++) { permissionsOutput .append(getPermissionsControl(azgb, rb, j, permissionEditOnFormat, permissionEditOffFormat)); } rolesOutput.append(MessageFormat.format(groupWrapperFormat, new Object[] { rb.getId(), permissionsOutput.toString() })); } output.append(MessageFormat.format(permissionsRealmWrapperFormat, new Object[] { azgb.getRealmId(), permissionNamesHtml, rolesOutput.toString() })); break; } } return output.toString(); } public String getAvailableRealms(String rolesFormat) { AuthZGroupCollectionBean realmCollectionBean = rsac.getAuthZGroupCollectionBean(); List realms = realmCollectionBean.getRealms(); StringBuffer output = new StringBuffer(); for (Iterator i = realms.iterator(); i.hasNext();) { AuthZGroupBean azgb = (AuthZGroupBean) i.next(); List roles = azgb.getRoles(); if (roles.size() == 0) { output.append(MessageFormat.format(rolesFormat, new Object[] { azgb.getRealmId() })); } else { break; } } return output.toString(); } public String getFooterScript() { return "<script type=\"text/javascript\" >" + request.getAttribute("footerScript") + "</script>"; } /** * @return Returns the request. */ public HttpServletRequest getRequest() { return request; } /** * @param request * The request to set. */ public void setRequest(HttpServletRequest request) { this.request = request; } /** * @return Returns the rsac. */ public RequestScopeSuperBean getRsac() { return rsac; } /** * @param rsac * The rsac to set. */ public void setRequestScopeSuperBean(RequestScopeSuperBean rsac) { this.rsac = rsac; } /** * @param localSpace * The localSpace to set. */ public void setLocalSpace(String localSpace) { this.localSpace = localSpace; } /** * @param pageName * The pageName to set. */ public void setPageName(String pageName) { this.pageName = pageName; } }