Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.portlets.security; import java.io.Serializable; import java.security.Principal; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.portlet.PortletPreferences; import javax.security.auth.Subject; import org.apache.commons.lang.StringUtils; import org.apache.jetspeed.administration.PortalConfigurationConstants; import org.apache.jetspeed.audit.AuditActivity; import org.apache.jetspeed.om.folder.Folder; import org.apache.jetspeed.om.folder.FolderNotFoundException; import org.apache.jetspeed.page.PageManager; import org.apache.jetspeed.page.document.NodeException; import org.apache.jetspeed.portlets.AdminPortletWebPage; import org.apache.jetspeed.portlets.security.PrincipalDataProvider.OrderBy; import org.apache.jetspeed.portlets.wicket.AbstractAdminWebApplication; import org.apache.jetspeed.portlets.wicket.component.CheckBoxPropertyColumn; import org.apache.jetspeed.portlets.wicket.component.JavascriptEventConfirmation; import org.apache.jetspeed.portlets.wicket.component.PortletOddEvenItem; import org.apache.jetspeed.profiler.Profiler; import org.apache.jetspeed.profiler.rules.PrincipalRule; import org.apache.jetspeed.profiler.rules.ProfilingRule; import org.apache.jetspeed.security.InvalidNewPasswordException; import org.apache.jetspeed.security.InvalidPasswordException; import org.apache.jetspeed.security.JetspeedPrincipal; import org.apache.jetspeed.security.JetspeedPrincipalAssociationType; import org.apache.jetspeed.security.JetspeedPrincipalManager; import org.apache.jetspeed.security.JetspeedPrincipalType; import org.apache.jetspeed.security.PasswordAlreadyUsedException; import org.apache.jetspeed.security.PasswordCredential; import org.apache.jetspeed.security.RoleManager; import org.apache.jetspeed.security.SecurityAttribute; import org.apache.jetspeed.security.SecurityException; import org.apache.jetspeed.security.SubjectHelper; import org.apache.jetspeed.security.User; import org.apache.jetspeed.security.UserCredential; import org.apache.jetspeed.security.UserManager; import org.apache.jetspeed.security.UserSubjectPrincipal; import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator; import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink; import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink.VoidCssProvider; import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.NavigationToolbar; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.markup.html.form.RadioChoice; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.list.PageableListView; import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.validator.AbstractValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author vkumar <a href="vkumar@apache.org">Vivek Kumar</a> */ public class JetspeedPrincipalManagementPortlet extends AdminPortletWebPage { static final Logger log = LoggerFactory.getLogger(JetspeedPrincipalManagementPortlet.class); private static final String principalParamName = "principalParam"; public static final String DEFAULT_SUBSITE = "defaultSubsite"; public static final String DEFAULT_ROLE = "defaultRole"; public static final String REQUIRED_ROLE = "requiredRole"; public static final String DEFAULT_PROFILE = "defaultProfile"; public static final String NEW_USER_TEMPLATE_DIR = "newUserTemplateDirectory"; public static final String SUB_SITE_ROOT = "subsiteRootFolder"; private static final java.sql.Date MAX_DATE = java.sql.Date.valueOf("8099-01-01"); private String principalParam; private JetspeedPrincipalType principalType; protected String searchString; protected boolean filtered; protected JetspeedPrincipal principal; final PrincipalDataProvider principalDataProvider; WebMarkupContainer group; protected String selectedUserName; public JetspeedPrincipalManagementPortlet() { super(); List tabs; principalParam = getPreference(principalParamName); if (principalParam == null) { principalParam = getInitParam(principalParamName).toLowerCase(); } principalType = getServiceLocator().getJetspeedPrincipalManagerProvider().getPrincipalType(principalParam); String filteredRole = getPreference("filteredRole", ""); if (principalParam.equals(JetspeedPrincipalType.USER)) { principalDataProvider = new PrincipalDataProvider(getManager(), getRoleManager(), getSearchString(), filteredRole, true); } else { principalDataProvider = new PrincipalDataProvider(getManager(), getSearchString()); } ITab tab = null; tabs = new ArrayList(); group = new WebMarkupContainer("group"); group.setOutputMarkupId(true); final DataView<JetspeedPrincipal> principalView = new DataView<JetspeedPrincipal>("entries", principalDataProvider) { @Override protected void populateItem(Item<JetspeedPrincipal> item) { final JetspeedPrincipal user = (JetspeedPrincipal) item.getModelObject(); Link editLink = new Link("link", item.getModel()) { @Override public void onClick() { JetspeedPrincipal user = (JetspeedPrincipal) getModelObject(); setPrincipal(user); controlPannels(true); } }; editLink.add(new Label("name", user.getName())); item.add(editLink); } }; principalView.setItemsPerPage(10); group.add(principalView); OrderByLink orderLink = new OrderByLink("nameOrderLink", "name", principalDataProvider, VoidCssProvider.getInstance()) { protected void onSortChanged() { if (principalDataProvider.getOrderBy() == OrderBy.NAME_ASC) { principalDataProvider.setOrderBy(OrderBy.NAME_DESC); } else { principalDataProvider.setOrderBy(OrderBy.NAME_ASC); } principalDataProvider.sort(); principalView.setCurrentPage(0); }; }; group.add(new Label("principal", new ResourceModel(principalParam))); orderLink.add(new Label("nameSort", new ResourceModel(principalParam))); group.add(orderLink); group.add(new AjaxPagingNavigator("navigator", principalView)); add(group); Form searchForm = new Form("searchForm") { protected void onSubmit() { setPrincipal(null); } }; TextField searchStringField = new TextField("searchString", new PropertyModel(this, "searchString")); searchForm.add(searchStringField); Button searchbutton = new Button("searchButton", new ResourceModel("common.search")); searchForm.add(searchbutton); Button newPrincipal = new Button("newPrincipal", new ResourceModel(principalParam + ".new.button")) { public void onSubmit() { setPrincipal(null); controlPannels(false); } }; searchForm.add(newPrincipal); add(searchForm); Label label = new Label("userLabel", new ResourceModel(principalParam + ".name")); label.setVisible(false); add(label); TextField fld = new TextField("userName", new PropertyModel(this, "principal.name")); fld.setVisible(false); add(fld); add(new TabbedPanel("tabs", tabs)); controlPannels(false); } public void setSearchString(String searchString) { this.searchString = (searchString == null ? "" : searchString.trim()); principalDataProvider.refresh(getManager(), getRoleManager(), searchString); setPrincipal(null); controlPannels(false); } public String getSearchString() { return (this.searchString == null ? "" : this.searchString); } public void setFiltered(boolean filtered) { this.filtered = filtered; } public boolean getFiltered() { return getSearchString() == null ? false : true; } public String getSelectedUserName() { return this.principal.getName(); } public void setPrincipal(JetspeedPrincipal principal) { this.principal = principal; } protected class UserPrincipalProfilePanel extends Panel { protected String locatorName; protected String ruleName; protected List fullRules; protected List userRules; protected boolean userEnabled; /** * @param userEnabled * the userEnabled to set */ public void setUserEnabled(boolean userEnabled) { this.userEnabled = userEnabled; } /** * @return the userEnabled */ public boolean isUserEnabled() { return userEnabled; } protected UserPrincipalProfilePanel(String id) { super(id); if (fullRules == null || userRules == null) { refreshData(); } Form profileForm = new Form("profileForm"); add(profileForm); profileForm.add(new CheckBox("userEnabled", new PropertyModel(this, "userEnabled"))); profileForm.add(new Label("enabledLabel", new ResourceModel("common.enabled"))); profileForm.add(new Button("submit", new ResourceModel(principalParam + ".update.button")) { @Override public void onSubmit() { try { getPrincipal().setEnabled(isUserEnabled()); getManager().updatePrincipal(principal); setPrincipal(principal); principalDataProvider.refresh(getManager(), getRoleManager(), getSearchString()); } catch (SecurityException jSx) { log.error("Failed to update principal.", jSx); } } }); profileForm.add(new Button("remove", new ResourceModel(principalParam + ".remove.button")) { @Override public void onSubmit() { try { getManager().removePrincipal(principal.getName()); setPrincipal(null); controlPannels(false); principalDataProvider.refresh(getManager(), getRoleManager(), getSearchString()); } catch (SecurityException e) { error(e.getMessage()); } } }.add(new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm")))); Form userRulesForm = new Form("userRulesForm") { protected void onSubmit() { try { Collection rules = getServiceLocator().getProfiler().getRulesForPrincipal(getPrincipal()); for (Iterator it = getUserRules().iterator(); it.hasNext();) { Map ruleMap = (Map) it.next(); if (Boolean.TRUE.equals(ruleMap.get("checked"))) { String locatorName = ((PrincipalRule) ruleMap.get("rule")).getLocatorName(); for (Iterator ruleIter = rules.iterator(); ruleIter.hasNext();) { PrincipalRule rule = (PrincipalRule) ruleIter.next(); if (rule.getLocatorName().equals(locatorName)) { getServiceLocator().getProfiler().deletePrincipalRule(rule); getServiceLocator().getAuditActivity().logAdminAuthorizationActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getSelectedPrincipal(), AuditActivity.USER_DELETE_PROFILE, rule.getProfilingRule().getId() + "-" + rule.getLocatorName(), AdminPortletWebPage.USER_ADMINISTRATION); } } } } } catch (Exception e) { error(e.getMessage()); } refreshData(); } }; SortableDataProvider dataProvider = new SortableDataProvider() { public int size() { return getUserRules().size(); } public IModel model(Object object) { Map ruleMap = (Map) object; return new Model((Serializable) ruleMap); } public Iterator iterator(int first, int count) { return getUserRules().subList(first, first + count).iterator(); } }; IColumn[] columns = { new CheckBoxPropertyColumn(new Model(" "), "checked"), new PropertyColumn(new ResourceModel("user.ruleName"), "rule.locatorName"), new PropertyColumn(new ResourceModel("user.ruleValue"), "rule.profilingRule") }; DataTable userRulesDataTable = new DataTable("entries", columns, dataProvider, 10) { protected Item newRowItem(String id, int index, IModel model) { return new PortletOddEvenItem(id, index, model); } }; userRulesDataTable.addTopToolbar(new HeadersToolbar(userRulesDataTable, dataProvider)); userRulesDataTable.addBottomToolbar(new NavigationToolbar(userRulesDataTable)); userRulesForm.add(userRulesDataTable); userRulesForm.add(new Button("submit", new ResourceModel("common.delete"))); add(userRulesForm); Form addRuleForm = new Form("addRuleForm") { protected void onSubmit() { String locatorName = getLocatorName(); if (locatorName != null && locatorName.trim().length() > 0) { try { String ruleName = getRuleName(); Profiler profiler = getServiceLocator().getProfiler(); ProfilingRule profilingRule = profiler.getRule(ruleName); if (profilingRule != null) { profiler.setRuleForPrincipal(getPrincipal(), profilingRule, locatorName); } else { log.error("Failed to set profiling rule for the principal. Invalid profiling rule: " + ruleName); } getServiceLocator().getAuditActivity().logAdminAuthorizationActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getSelectedPrincipal(), AuditActivity.USER_ADD_PROFILE, ruleName + "-" + locatorName, AdminPortletWebPage.USER_ADMINISTRATION); } catch (Exception e) { error(e.getMessage()); } refreshData(); } } }; addRuleForm.add(new Label("userruleNamelabel", new ResourceModel("user.ruleName"))); addRuleForm.add(new Label("userruledesclabel", new ResourceModel("user.rule.desc"))); RequiredTextField locatorNameField = new RequiredTextField("locatorName", new PropertyModel(this, "locatorName")); addRuleForm.add(locatorNameField); addRuleForm.add(new Label("userrulelabel", new ResourceModel("user.ruleValue"))); DropDownChoice ruleNameField = new DropDownChoice("ruleName", new PropertyModel(this, "ruleName"), getFullRules()); addRuleForm.add(ruleNameField); addRuleForm.add(new Button("addRule", new ResourceModel("user.rule.add"))); add(addRuleForm); add(new FeedbackPanel("feedback")); } protected void refreshData() { try { if (getPrincipal() != null) { userEnabled = getServiceLocator().getUserManager().getUser(getSelectedPrincipal()).isEnabled(); } this.fullRules = new ArrayList(); this.userRules = new ArrayList(); for (Iterator it = getServiceLocator().getProfiler().getRules().iterator(); it.hasNext();) { ProfilingRule rule = (ProfilingRule) it.next(); this.fullRules.add(rule); } if (getPrincipal() != null) { for (Iterator it = getServiceLocator().getProfiler().getRulesForPrincipal(getPrincipal()) .iterator(); it.hasNext();) { PrincipalRule rule = (PrincipalRule) it.next(); Map ruleMap = new HashMap(); ruleMap.put("rule", rule); ruleMap.put("checked", Boolean.FALSE); this.userRules.add(ruleMap); } } } catch (Exception e) { log.error("Failed to add user rules.", e); } } public void setLocatorName(String locatorName) { this.locatorName = locatorName; } public String getLocatorName() { return this.locatorName; } public void setRuleName(String ruleName) { this.ruleName = ruleName; } public String getRuleName() { return this.ruleName; } public List getFullRules() { return this.fullRules; } public List getUserRules() { return this.userRules; } } protected class NewUserPrincipalPanel extends Panel { protected String locatorName; protected String ruleName; protected List fullRules; protected List userRules; String userName; String password; boolean checkpass; String profilingRule; /** * @return the profilingRule */ public String getProfilingRule() { return profilingRule; } /** * @param profilingRule * the profilingRule to set */ public void setProfilingRule(String profilingRule) { this.profilingRule = profilingRule; } /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName * the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the password */ public String getPassword() { return password; } /** * @param password * the password to set */ public void setPassword(String password) { this.password = password; } /** * @return the checkpass */ public boolean isCheckpass() { return checkpass; } /** * @param checkpass * the checkpass to set */ public void setCheckpass(boolean checkpass) { this.checkpass = checkpass; } protected NewUserPrincipalPanel(String id) { super(id); PortletPreferences preferences = ((AbstractAdminWebApplication) getApplication()).getPortletRequest() .getPreferences(); final String defaultRole = preferences.getValue(DEFAULT_ROLE, ""); final String requiredRole = preferences.getValue(REQUIRED_ROLE, ""); final String defaultProfile = preferences.getValue(DEFAULT_PROFILE, ""); final String defaultSubsite = preferences.getValue(DEFAULT_SUBSITE, ""); final String templateFolder = preferences.getValue(NEW_USER_TEMPLATE_DIR, "/_user/template/"); final String subsiteRoot = preferences.getValue(SUB_SITE_ROOT, ""); profilingRule = defaultProfile.toString(); add(new FeedbackPanel("feedback")); Form userForm = new Form("newUserForm"); add(userForm); RequiredTextField userName = new RequiredTextField("userName", new PropertyModel(this, "userName")); userName.add(new PrincipalNameValidator()); userForm.add(userName); TextField password = new PasswordTextField("password", new PropertyModel(this, "password")); userForm.add(password); CheckBox changePassword = new CheckBox("checkpass", new PropertyModel(this, "checkpass")); userForm.add(changePassword); DropDownChoice profilingtRole = new DropDownChoice("profilingRule", new PropertyModel(this, "profilingRule"), getProfileList()); userForm.add(profilingtRole); Button newUser = new Button("addUser", new ResourceModel(principalParam + ".add.button")) { @Override public void onSubmit() { UserManager userManager = (UserManager) getManager(); JetspeedPrincipal principal = getManager().newPrincipal(getUserName(), false); RoleManager roleManager = ((AbstractAdminWebApplication) getApplication()).getServiceLocator() .getRoleManager(); PageManager pageManager = ((AbstractAdminWebApplication) getApplication()).getServiceLocator() .getPageManager(); try { getManager().addPrincipal(principal, null); User user = userManager.getUser(getUserName()); if (!StringUtils.isEmpty(defaultRole)) { roleManager.addRoleToUser(getUserName(), defaultRole); } if (!StringUtils.isEmpty(requiredRole)) { roleManager.addRoleToUser(getUserName(), requiredRole); } Profiler profiler = getServiceLocator().getProfiler(); if (!StringUtils.isEmpty(getProfilingRule())) { ProfilingRule profilingRule = profiler.getRule(getProfilingRule()); if (profilingRule != null) { profiler.setRuleForPrincipal(principal, profilingRule, "default"); } else { log.error("Failed to set profiling rule for principal. Invalid profiling rule: " + getProfilingRule()); } } else if (!StringUtils.isEmpty(defaultProfile)) { ProfilingRule defaultProfilingRule = profiler.getRule(defaultProfile); if (defaultProfilingRule != null) { profiler.setRuleForPrincipal(principal, defaultProfilingRule, "default"); } else { if (log.isDebugEnabled()) { log.debug( "Default profiling rule is not applied to the principal because the default profiling rule is not found: " + defaultProfile); } } } String subSite; if (!StringUtils.isEmpty(defaultSubsite)) { user.getSecurityAttributes().getAttribute(User.JETSPEED_USER_SUBSITE_ATTRIBUTE, true) .setStringValue(defaultSubsite); user.getSecurityAttributes().getAttribute(User.JETSPEED_USER_SUBSITE_ATTRIBUTE, true) .setStringValue(defaultSubsite); subSite = subsiteRoot + defaultSubsite + Folder.USER_FOLDER + user.getName(); } else { subSite = Folder.USER_FOLDER + user.getName(); ; } if (!StringUtils.isEmpty(templateFolder)) { try { Folder source = pageManager.getFolder(templateFolder); pageManager.deepCopyFolder(source, subSite, user.getName()); } catch (FolderNotFoundException e) { error(e.getMessage()); } catch (NodeException e) { error(e.getMessage()); } } userManager.updateUser(user); PasswordCredential credential = userManager.getPasswordCredential(user); if (!StringUtils.isEmpty(getPassword())) { credential.setPassword(getPassword(), false); } credential.setUpdateRequired(isCheckpass()); userManager.storePasswordCredential(credential); setPrincipal(user); controlPannels(true); } catch (SecurityException jSx) { log.error("Failed to update user.", jSx); } principalDataProvider.refresh(getManager(), getRoleManager(), getSearchString()); } }; userForm.add(newUser); } } protected class NewPrincipalPanel extends Panel { protected String userName; /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName * the userName to set */ public void setUserName(String userName) { this.userName = userName; } protected NewPrincipalPanel(String id) { super(id); Form userForm = new Form("newUserForm"); add(userForm); add(new FeedbackPanel("feedback")); userForm.add(new Label("userNameLabel", new ResourceModel(principalParam + ".new.button"))); TextField userName = new RequiredTextField("userName", new PropertyModel(this, "userName")); userName.add(new PrincipalNameValidator()); userForm.add(userName); Button newUser = new Button("addUser", new ResourceModel(principalParam + ".add.button")) { @Override public void onSubmit() { JetspeedPrincipal principal = getManager().newPrincipal(getUserName(), false); try { getManager().addPrincipal(principal, null); setPrincipal(principal); controlPannels(true); principalDataProvider.refresh(getManager(), getSearchString()); } catch (SecurityException jSx) { log.error("Failed to add principal.", jSx); } } }; userForm.add(newUser); } } private class PrincipalNameValidator extends AbstractValidator { public PrincipalNameValidator() { } @Override protected void onValidate(IValidatable validatable) { String userName = (String) validatable.getValue(); if (getManager().getPrincipal(userName) != null) { error(validatable); } } } protected class PrincipalStatusPanel extends Panel { protected boolean principalEnabled = false; protected String name; /** * @param principalEnabled * the principalEnabled to set */ public void setPrincipalEnabled(boolean principalEnabled) { this.principalEnabled = principalEnabled; } /** * @return the principalEnabled */ public boolean isPrincipalEnabled() { return principalEnabled; } /** * @return the name */ protected String getName() { return name; } protected PrincipalStatusPanel(String id) { super(id); Form statusForm = new Form("statusForm"); add(statusForm); statusForm.add(new CheckBox("principalStatus", new PropertyModel(this, "principalEnabled"))); statusForm.add(new Label("enabledLabel", new ResourceModel("common.enabled"))); statusForm.add(new Button("submit", new ResourceModel(principalParam + ".update.button")) { @Override public void onSubmit() { JetspeedPrincipal principal = getManager().getPrincipal(getName()); try { principal.setEnabled(isPrincipalEnabled()); getManager().updatePrincipal(principal); setPrincipal(principal); principalDataProvider.refresh(getManager(), getSearchString()); } catch (SecurityException jSx) { error(jSx.getMessage()); } } }); statusForm.add(new Button("remove", new ResourceModel(principalParam + ".remove.button")) { @Override public void onSubmit() { try { getManager().removePrincipal(principal.getName()); setPrincipal(null); controlPannels(false); principalDataProvider.refresh(getManager(), getSearchString()); } catch (SecurityException e) { error(e.getMessage()); } } }.add(new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm")))); add(new FeedbackPanel("feedback")); } @Override protected void onBeforeRender() { if (getPrincipal() != null) { this.principalEnabled = getPrincipal().isEnabled(); this.name = getPrincipal().getName(); } super.onBeforeRender(); } } protected class PrincipalCredentialsPanel extends Panel { protected String userName; protected String credentialValue; protected boolean credentialUpdateRequired; protected Date lastAuthenticationDate; protected boolean credentialEnabled; protected Date credentialExpirationDate; protected String userExpiredFlag; protected UserCredential credential; public PrincipalCredentialsPanel(String ID) { super(ID); Form form = new Form("userCredentialForm") { protected void onSubmit() { try { boolean passwordSet = false; UserManager manager = (UserManager) getManager(); PasswordCredential credential = manager.getPasswordCredential((User) getPrincipal()); if (getCredentialValue() != null && getCredentialValue().trim().length() > 0) { credential.setPassword(null, getCredentialValue()); getServiceLocator().getAuditActivity().logAdminCredentialActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.PASSWORD_RESET, AdminPortletWebPage.USER_ADMINISTRATION); passwordSet = true; } if (getCredentialUpdateRequired() != credential.isUpdateRequired()) { credential.setUpdateRequired(getCredentialUpdateRequired()); getServiceLocator().getAuditActivity().logAdminCredentialActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.PASSWORD_UPDATE_REQUIRED, AdminPortletWebPage.USER_ADMINISTRATION); } if (getCredentialEnabled() != credential.isEnabled()) { credential.setEnabled(getCredentialEnabled()); String activity = (getCredentialEnabled() ? AuditActivity.PASSWORD_ENABLED : AuditActivity.PASSWORD_DISABLED); getServiceLocator().getAuditActivity().logAdminCredentialActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getPrincipal().getName(), activity, AdminPortletWebPage.USER_ADMINISTRATION); } String expiredFlagStr = getUserExpiredFlag(); if (expiredFlagStr != null) { if (!passwordSet && expiredFlagStr.equals("expired")) { java.sql.Date today = new java.sql.Date(new Date().getTime()); credential.setExpirationDate(today); getServiceLocator().getAuditActivity().logAdminCredentialActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.PASSWORD_EXPIRE, AdminPortletWebPage.USER_ADMINISTRATION); } else if (expiredFlagStr.equals("extend")) { // getUserManager().setPasswordExpiration(getUserName(), // null); // TODO confirm with Ate/David credential.setExpirationDate(MAX_DATE); getServiceLocator().getAuditActivity().logAdminCredentialActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.PASSWORD_EXTEND, AdminPortletWebPage.USER_ADMINISTRATION); } else if (expiredFlagStr.equals("unlimited")) { credential.setExpirationDate(MAX_DATE); getServiceLocator().getAuditActivity().logAdminCredentialActivity( getPortletRequest().getUserPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.PASSWORD_UNLIMITED, AdminPortletWebPage.USER_ADMINISTRATION); } } manager.storePasswordCredential(credential); } catch (InvalidPasswordException ipe) { error(ipe.getMessage()); } catch (InvalidNewPasswordException inpe) { error(inpe.getMessage()); } catch (PasswordAlreadyUsedException paue) { error(paue.getMessage()); } catch (SecurityException e) { error(e.getMessage()); } refreshData(); setPrincipal(getPrincipal()); } }; PasswordTextField credentialValueField = new PasswordTextField("credentialValue", new PropertyModel(this, "credentialValue")); form.add(new Label("passwordLabel", new ResourceModel("user.login.password"))); credentialValueField.setRequired(false); form.add(credentialValueField); CheckBox credentialUpdateRequiredField = new CheckBox("credentialUpdateRequired", new PropertyModel(this, "credentialUpdateRequired")); form.add(new Label("changerequiredLabel", new ResourceModel("user.change.required"))); form.add(credentialUpdateRequiredField); Label lastAuthenticationDateLabel = new Label("lastAuthenticationDate", new PropertyModel(this, "lastAuthenticationDate")); form.add(new Label("lastLogonLabel", new ResourceModel("user.login.last.logon"))); form.add(lastAuthenticationDateLabel); CheckBox credentialEnabledField = new CheckBox("credentialEnabled", new PropertyModel(this, "credentialEnabled")); form.add(new Label("enabledLabel", new ResourceModel("common.enabled"))); form.add(credentialEnabledField); Label credentialExpirationDateLabel = new Label("credentialExpirationDate", new PropertyModel(this, "credentialExpirationDate")); form.add(new Label("expiresLabel", new ResourceModel("user.login.expires"))); form.add(credentialExpirationDateLabel); List expiredFlagChoices = new ArrayList(); RadioChoice userExpiredFlagField = new RadioChoice("userExpiredFlag", new PropertyModel(this, "userExpiredFlag"), expiredFlagChoices); // TODO change to use localize values expiredFlagChoices.add("Active");// new // ResourceModel("user.login.expires.active").); expiredFlagChoices.add("Expired");// new // ResourceModel("user.login.expires.expired")); expiredFlagChoices.add("Extend");// new // ResourceModel("user.login.expires.extend")); expiredFlagChoices.add("Unlimited");// new // ResourceModel("user.login.expires.unlimited")); form.add(new Button("submitForm", new ResourceModel("common.update"))); form.add(userExpiredFlagField); add(form); } public void setCredentialValue(String credentialValue) { this.credentialValue = credentialValue; } public String getCredentialValue() { return this.credentialValue; } public void setCredentialUpdateRequired(boolean credentialUpdateRequired) { this.credentialUpdateRequired = credentialUpdateRequired; } public boolean getCredentialUpdateRequired() { return this.credentialUpdateRequired; } public void setLastAuthenticationDate(Date lastAuthenticationDate) { this.lastAuthenticationDate = lastAuthenticationDate; } public Date getLastAuthenticationDate() { return this.lastAuthenticationDate; } public void setCredentialEnabled(boolean credentialEnabled) { this.credentialEnabled = credentialEnabled; } public boolean getCredentialEnabled() { return this.credentialEnabled; } public void setCredentialExpirationDate(Date credentialExpirationDate) { this.credentialExpirationDate = credentialExpirationDate; } public Date getCredentialExpirationDate() { return this.credentialExpirationDate; } public void setUserExpiredFlag(String userExpiredFlag) { this.userExpiredFlag = userExpiredFlag; } public String getUserExpiredFlag() { return this.userExpiredFlag; } protected void onBeforeRender() { super.onBeforeRender(); if (getPrincipal().getName() != this.userName) { refreshData(); this.userName = getPrincipal().getName(); } } protected void refreshData() { try { UserManager manager = (UserManager) getManager(); credential = manager.getPasswordCredential((User) getPrincipal()); setCredentialUpdateRequired(credential.isUpdateRequired()); setCredentialEnabled(credential.isEnabled()); setLastAuthenticationDate(credential.getLastAuthenticationDate()); setCredentialExpirationDate(credential.getExpirationDate()); setUserExpiredFlag(credential.isExpired() ? "expired" : "active"); } catch (SecurityException secExp) { log.error("Failed to refresh user credentials.", secExp); } } } protected class PrincipalAttributesPanel extends Panel { protected String userName; protected String userAttrName; protected String userAttrValue; protected List userAttributes; public PrincipalAttributesPanel(String id) { super(id); Form userAttrsForm = new Form("userAttrsForm"); add(new FeedbackPanel("feedback")); userAttrsForm.add(new Label("attrNameLabel", new ResourceModel("common.name"))); userAttrsForm.add(new Label("attrValueLabel", new ResourceModel("common.value"))); add(userAttrsForm); PageableListView usersList = new PageableListView("attributeEntries", new PropertyModel(this, "userAttributes"), 10) { protected void populateItem(ListItem item) { final Map<String, SecurityAttribute> attributes = (Map<String, SecurityAttribute>) item .getModelObject(); final SecurityAttribute attrib = attributes.get("value"); item.add(new TextField("name", new Model(attrib.getName())) { @Override public boolean isEnabled() { return !attrib.isReadOnly(); } }); item.add(new TextField("value", new PropertyModel<String>(attrib, "stringValue")) { @Override public boolean isEnabled() { return !attrib.isReadOnly(); } }); if (!attrib.isReadOnly()) { Link deleteLink = new Link("link", item.getModel()) { @Override public void onClick() { try { getPrincipal().getSecurityAttributes().removeAttribute(attrib.getName()); getManager().updatePrincipal(getPrincipal()); } catch (SecurityException e) { log.error("Failed to update principal.", e); } setPrincipal(getPrincipal()); refreshData(); } }; deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); item.add(deleteLink); } } }; userAttrsForm.add(usersList); userAttrsForm.add(new PagingNavigator("navigator", usersList)); Button updateAttrButton = new Button("updateAttr", new ResourceModel("common.update")) { public void onSubmit() { Map<String, SecurityAttribute> attribs = getPrincipal().getSecurityAttributes() .getAttributeMap(); for (Iterator it = userAttributes.iterator(); it.hasNext();) { Map userAttrMap = (Map) it.next(); String userAttrName = (String) userAttrMap.get("name"); String userAttrValue = ((SecurityAttribute) userAttrMap.get("value")).getStringValue(); String oldUserAttrValue = attribs.get(userAttrName).getStringValue(); Map<String, SecurityAttribute> userAttributes = getPrincipal().getSecurityAttributes() .getAttributeMap(); try { getPrincipal().getSecurityAttributes().getAttribute(userAttrName) .setStringValue(userAttrValue); } catch (SecurityException e) { log.error("Failed to update security attribute of principal.", e); } getServiceLocator().getAuditActivity().logAdminAttributeActivity(getPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.USER_UPDATE_ATTRIBUTE, userAttrName, oldUserAttrValue, userAttrValue, AdminPortletWebPage.USER_ADMINISTRATION); } try { getManager().updatePrincipal(getPrincipal()); } catch (SecurityException e) { error(e.getMessage()); } refreshData(); } }; userAttrsForm.add(updateAttrButton); Form addAttrForm = new Form("addAttrForm") { protected void onSubmit() { String userAttrName = getUserAttrName(); String userAttrValue = getUserAttrValue(); if (userAttrName != null && userAttrName.trim().length() > 0) { // Preferences prefs = user.getUserAttributes(); // prefs.put(userAttrName, userAttrValue); try { getPrincipal().getSecurityAttributes().getAttribute(userAttrName, true) .setStringValue(userAttrValue); getManager().updatePrincipal(getPrincipal()); getServiceLocator().getAuditActivity().logAdminAttributeActivity( getPrincipal().getName(), getIPAddress(), getPrincipal().getName(), AuditActivity.USER_ADD_ATTRIBUTE, userAttrName, "", userAttrValue, AdminPortletWebPage.USER_ADMINISTRATION); } catch (SecurityException e) { log.error("Failed to update security attribute of principal.", e); } } setPrincipal(getPrincipal()); refreshData(); } }; add(addAttrForm); addAttrForm.add(new Label("nameLabel", new ResourceModel("common.name"))); TextField userAttrNameField = new RequiredTextField("userAttrName", new PropertyModel(this, "userAttrName")); addAttrForm.add(userAttrNameField); addAttrForm.add(new Label("valueLabel", new ResourceModel("common.value"))); TextField userAttrValueField = new RequiredTextField("userAttrValue", new PropertyModel(this, "userAttrValue")); addAttrForm.add(userAttrValueField); addAttrForm.add(new Button("addAttr", new ResourceModel("common.attribute.add"))); } public List getUserAttributes() { return this.userAttributes; } public void setUserAttrName(String userAttrName) { this.userAttrName = userAttrName; } public String getUserAttrName() { return this.userAttrName; } public void setUserAttrValue(String userAttrValue) { this.userAttrValue = userAttrValue; } public String getUserAttrValue() { return this.userAttrValue; } protected void onBeforeRender() { if (getPrincipal().getName() != this.userName) { refreshData(); this.userName = getPrincipal().getName(); } super.onBeforeRender(); } /* * (non-Javadoc) * * @see org.apache.wicket.Component#onDetach() */ @Override protected void onDetach() { // TODO Auto-generated method stub super.onDetach(); } protected void refreshData() { this.userAttributes = new LinkedList(); if (getPrincipal() != null) { Map<String, SecurityAttribute> userAttribute = getPrincipal().getSecurityAttributes() .getAttributeMap(); Map item; String attributeKey; Iterator<String> attribsKeys = userAttribute.keySet().iterator(); while (attribsKeys.hasNext()) { attributeKey = attribsKeys.next(); item = new HashMap(); item.put("name", attributeKey); item.put("value", userAttribute.get(attributeKey)); userAttributes.add(item); } } } } protected class AssociationTypePanel extends Panel { protected List names = new ArrayList(); protected List associations = new ArrayList(); protected String associationName; protected JetspeedPrincipal associationPrincipal; protected JetspeedPrincipalAssociationType associationType; protected boolean associationsFrom; protected boolean admin; protected boolean modificationAllowed = true; /** * @return the associations */ public List getAssociations() { return associations; } /** * @param associations * the associations to set */ public void setAssociations(List associations) { this.associations = associations; } /** * @return the selectedPrincipal */ public JetspeedPrincipal getAssociationPrincipal() { return associationPrincipal; } /** * @param selectedPrincipal * the selectedPrincipal to set */ public void setAssociationPrincipal(JetspeedPrincipal selectedPrincipal) { this.associationPrincipal = selectedPrincipal; } /* * public void setAssociationPrincipal(JetspeedPrincipal * selectedPrincipal) { this.asstnPrincipal = selectedPrincipal; } */ /** * @return the names */ public List getNames() { return names; } /** * @param names * the names to set */ public void setNames(List names) { this.names = names; } public AssociationTypePanel(String id, JetspeedPrincipalAssociationType AssociationType) { super(id); this.associationType = AssociationType; associationName = AssociationType.getAssociationName(); final String assoctionName = AssociationType.getAssociationName(); String adminRole = getServiceLocator().getPortalConfiguration() .getString(PortalConfigurationConstants.ROLES_DEFAULT_ADMIN); admin = getPortletRequest().isUserInRole(adminRole); if (!admin && !principal.getType().getName().equals(JetspeedPrincipalType.USER)) { // no non-user type principal modification is allowed if the current user itself doesn't have this principal UserSubjectPrincipal currentUser = (UserSubjectPrincipal) getPortletRequest().getUserPrincipal(); if (!hasPrincipal(currentUser.getSubject(), principal)) { modificationAllowed = false; } } refreshList(); ListView commentListView = new ListView("comments", new PropertyModel(this, "associations")) { public void populateItem(final ListItem listItem) { final JetspeedPrincipal principal = (JetspeedPrincipal) listItem.getModelObject(); listItem.add(new Label("Name", principal.getName())); boolean deleteAllowed = modificationAllowed; Link deleteLink = new Link("delete") { @Override public void onClick() { try { if (!associationsFrom) { getManager().removeAssociation(principal, getPrincipal(), assoctionName); } else { getManager().removeAssociation(getPrincipal(), principal, assoctionName); } refreshList(); } catch (Exception e) { // TODO: handle exception } } }; deleteLink.add(new Label("deleteLabel", new ResourceModel("common.delete"))); if (!admin && deleteAllowed && !principal.getType().getName().equals(JetspeedPrincipalType.USER)) { // restrict deleting non-user type principals to only those the current user itself has UserSubjectPrincipal currentUser = (UserSubjectPrincipal) getPortletRequest() .getUserPrincipal(); if (!hasPrincipal(currentUser.getSubject(), principal)) { deleteAllowed = false; } } if (!deleteAllowed || !modificationAllowed) { deleteLink.setEnabled(false); deleteLink.setVisible(false); } listItem.add(deleteLink); } }; if (AssociationType.getFromPrincipalType().equals(principalType)) { add(new Label("principalReleation", new ResourceModel(AssociationType.getToPrincipalType().getName()))); } else { add(new Label("principalReleation", new ResourceModel(AssociationType.getFromPrincipalType().getName()))); } add(commentListView); add(new FeedbackPanel("feedback")); Form assocationsForm = new Form("assocationsForm"); add(assocationsForm); DropDownChoice dropDown = new DropDownChoice("associationPrincipal", new PropertyModel(this, "associationPrincipal"), getNames(), new ChoiceRenderer("name", "name")); dropDown.setRequired(true); assocationsForm.add(dropDown); Button addRelations = new Button("addRelations", new ResourceModel("common.association.add")) { @Override public void onSubmit() { try { JetspeedPrincipal toPrincipal = getPrincipal(); // JetspeedPrincipal fromPrincipal = // getJetspeedPrincipalManagerProvider().getManager(type).getPrincipal(getAssociationPrincipal()); JetspeedPrincipal fromPrincipal = getAssociationPrincipal(); if (!associationsFrom) { getManager().addAssociation(fromPrincipal, toPrincipal, associationName); } else { getManager().addAssociation(toPrincipal, fromPrincipal, associationName); } associationPrincipal = null; refreshList(); } catch (SecurityException sExc) { log.error("Failed to add associations.", sExc); } } }; assocationsForm.add(addRelations); } private JetspeedPrincipalManager getBaseManager(JetspeedPrincipalType type) { return getServiceLocator().getJetspeedPrincipalManagerProvider().getManager(type); } private void refreshList() { names.clear(); if (!principal.getType().equals(associationType.getFromPrincipalType())) { associations = getBaseManager(associationType.getFromPrincipalType()).getAssociatedTo( principal.getName(), principal.getType(), associationType.getAssociationName()); if (modificationAllowed) { List tempNames = getBaseManager(associationType.getFromPrincipalType()).getPrincipals(""); for (int index = 0; index < tempNames.size(); index++) { JetspeedPrincipal tmpPrincipal = (JetspeedPrincipal) tempNames.get(index); if (!(tmpPrincipal.getType().getName().equals(principal.getType().getName()) && tmpPrincipal.getName().equals(principal.getName()))) { names.add(tmpPrincipal); } } } associationsFrom = false; } else { associations = getBaseManager(associationType.getToPrincipalType()).getAssociatedFrom( principal.getName(), principal.getType(), associationType.getAssociationName()); if (modificationAllowed) { List tempNames = getBaseManager(associationType.getToPrincipalType()).getPrincipals(""); for (int index = 0; index < tempNames.size(); index++) { JetspeedPrincipal tmpPrincipal = (JetspeedPrincipal) tempNames.get(index); if (!(tmpPrincipal.getType().getName().equals(principal.getType().getName()) && tmpPrincipal.getName().equals(principal.getName()))) { names.add(tmpPrincipal); } } } associationsFrom = true; } if (modificationAllowed) { for (int count = 0; count < associations.size(); count++) { JetspeedPrincipal tmpPrincipal = (JetspeedPrincipal) associations.get(count); JetspeedPrincipal listPrincipal; for (int index = names.size() - 1; index > -1; index--) { listPrincipal = (JetspeedPrincipal) names.get(index); if (listPrincipal.getName().equals(tmpPrincipal.getName())) { names.remove(index); } } } } if (names.size() > 0 && !admin) { // restrict creating new associations to only those the user itself belongs to String jptName = associationsFrom ? associationType.getToPrincipalType().getName() : associationType.getFromPrincipalType().getName(); if (!jptName.equals(JetspeedPrincipalType.USER)) { // get all current user principals of asssignable type as restricted list UserSubjectPrincipal currentUser = (UserSubjectPrincipal) getPortletRequest() .getUserPrincipal(); List<JetspeedPrincipal> filter = SubjectHelper.getPrincipals(currentUser.getSubject(), jptName); if (filter.isEmpty()) { names.clear(); } else { for (int index = names.size() - 1; index > -1; index--) { boolean found = false; JetspeedPrincipal listPrincipal = (JetspeedPrincipal) names.get(index); for (int count = 0; count < filter.size(); count++) { JetspeedPrincipal tmpPrincipal = filter.get(count); if (listPrincipal.getName().equals(tmpPrincipal.getName())) { found = true; break; } } if (!found) { names.remove(index); } } } } } } } protected class PrincipalAssociationsPanel extends Panel { protected List tabs; /** * @return the selectedAssociationType */ public String getSelectedAssociationType() { return selectedAssociationType; } /** * @param selectedAssociationType * the selectedAssociationType to set */ public void setSelectedAssociationType(String selectedAssociationType) { this.selectedAssociationType = selectedAssociationType; } private List<JetspeedPrincipalAssociationType> associationTypes; private String selectedAssociationType; /** * @return the associationTypes */ public List<JetspeedPrincipalAssociationType> getAssociationTypes() { return associationTypes; } public PrincipalAssociationsPanel(String id) { super(id); tabs = new ArrayList(); this.associationTypes = ((JetspeedPrincipalManager) getManager()).getAssociationTypes(); ITab tab; for (JetspeedPrincipalAssociationType associationType : this.associationTypes) { // if // (!associationType.getToPrincipalType().equals(principalType)) // { final JetspeedPrincipalAssociationType tempAssociation = associationType; final JetspeedPrincipalType fromAssociationType = associationType.getFromPrincipalType(); final JetspeedPrincipalType toAssociationType = associationType.getToPrincipalType(); final String associationName = associationType.getAssociationName(); if (fromAssociationType.getName().equals(getPrincipal().getType().getName())) { tab = new AbstractTab( new Model(toAssociationType.getName() + " - " + associationType.getAssociationName())) { public Panel getPanel(String panelId) { return new AssociationTypePanel(panelId, tempAssociation); } }; } else { tab = new AbstractTab(new Model( fromAssociationType.getName() + " - " + associationType.getAssociationName())) { public Panel getPanel(String panelId) { return new AssociationTypePanel(panelId, tempAssociation); } }; } tabs.add(tab); // } } add(new TabbedPanel("assocTabs", tabs)); } /** * @param AssociationTypes * the AssociationTypes to set */ public void setAssociationTypes(List AssociationTypes) { this.associationTypes = AssociationTypes; } } private String getSelectedPrincipal() { String principal = ""; if (getPrincipal() != null) { principal = getPrincipal().getName(); } return principal; } private JetspeedPrincipal getPrincipal() { return this.principal; } private List getPrincipalLists(String searchString) { return getManager().getPrincipals(searchString); } private JetspeedPrincipalManager getManager() { return getServiceLocator().getJetspeedPrincipalManagerProvider().getManager(principalType); } private List getSubsites() { List nameList = null; try { nameList = getServiceLocator().getRoleManager().getRoleNames(""); } catch (SecurityException e) { if (log.isErrorEnabled()) { log.error("Error in getting role list"); } } return nameList; } private List getProfileList() { return (List) getServiceLocator().getProfiler().getRules(); } private List getRoleNames(String filter) { List nameList = null; try { nameList = getServiceLocator().getRoleManager().getRoleNames(filter); } catch (SecurityException e) { if (log.isErrorEnabled()) { log.error("Error in getting role list"); } } return nameList; } private void controlPannels(boolean userSelecteed) { TabbedPanel panel = (TabbedPanel) get("tabs"); ITab tab; panel.getTabs().clear(); boolean guestUserSelected; if (userSelecteed) { if (principalType.getName().equals(JetspeedPrincipalType.USER)) { String adminRole = getServiceLocator().getPortalConfiguration() .getString(PortalConfigurationConstants.ROLES_DEFAULT_ADMIN); boolean disableAdminEdit = true; try { if (getPortletRequest().isUserInRole(adminRole) || !((RoleManager) getRoleManager()).isUserInRole(principal.getName(), adminRole)) { disableAdminEdit = false; } } catch (SecurityException e) { // ignore } if (disableAdminEdit) { return; } } else if (principalType.getName().equals(JetspeedPrincipalType.ROLE)) { String adminRole = getServiceLocator().getPortalConfiguration() .getString(PortalConfigurationConstants.ROLES_DEFAULT_ADMIN); if (principal.getName().equals(adminRole) && !getPortletRequest().isUserInRole(adminRole)) { // disallow maintenance on admin role return; } } guestUserSelected = (principalType.getName().equals(JetspeedPrincipalType.USER) && principal.getName().equals(((UserManager) getManager()).getAnonymousUser())); if (!guestUserSelected) { // if guest user: don't show status panel tab = new AbstractTab(new Model("Status")) { public Panel getPanel(String panelId) { return new PrincipalStatusPanel(panelId); } }; panel.getTabs().add(tab); } tab = new AbstractTab(new Model("Associations")) { public Panel getPanel(String panelId) { return new PrincipalAssociationsPanel(panelId); } }; panel.getTabs().add(tab); tab = new AbstractTab(new Model("Attributes")) { public Panel getPanel(String panelId) { return new PrincipalAttributesPanel(panelId); } }; panel.getTabs().add(tab); if (!guestUserSelected && principalType.getName().equals(JetspeedPrincipalType.USER)) { tab = new AbstractTab(new Model("Credentials")) { public Panel getPanel(String panelId) { return new PrincipalCredentialsPanel(panelId); } }; panel.getTabs().add(tab); } if (principalType.getName().equals(JetspeedPrincipalType.USER)) { tab = new AbstractTab(new Model("User Profile")) { public Panel getPanel(String panelId) { return new UserPrincipalProfilePanel(panelId); } }; panel.getTabs().add(tab); } panel.setSelectedTab(0); } else { if (principalType.getName().equals(JetspeedPrincipalType.USER)) { tab = new AbstractTab(new Model("New " + principalType.getName().toUpperCase())) { public Panel getPanel(String panelId) { return new NewUserPrincipalPanel(panelId); } }; } else { tab = new AbstractTab(new Model("New " + principalType.getName().toUpperCase())) { public Panel getPanel(String panelId) { return new NewPrincipalPanel(panelId); } }; } panel.getTabs().add(tab); panel.setSelectedTab(0); } } /* * (non-Javadoc) * * @see org.apache.wicket.Page#onBeforeRender() */ @Override protected void onBeforeRender() { if (getPrincipal() != null) { Label label = (Label) get("userLabel"); label.setVisible(true); TextField fl = (TextField) get("userName"); fl.setVisible(true); } else { Label label = (Label) get("userLabel"); label.setVisible(false); TextField fl = (TextField) get("userName"); fl.setVisible(false); } super.onBeforeRender(); } private JetspeedPrincipalManager getRoleManager() { return (JetspeedPrincipalManager) getServiceLocator().getRoleManager(); } private static boolean hasPrincipal(Subject subject, JetspeedPrincipal jp) { Iterator<Principal> principals = subject.getPrincipals().iterator(); while (principals.hasNext()) { Principal p = principals.next(); if (p instanceof JetspeedPrincipal && ((JetspeedPrincipal) p).getType().getName().equals(jp.getType().getName()) && p.getName().equals(jp.getName())) { return true; } } return false; } }