/*
* 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.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 org.apache.commons.lang.StringUtils;
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.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.User;
import org.apache.jetspeed.security.UserCredential;
import org.apache.jetspeed.security.UserManager;
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();
getServiceLocator().getProfiler()
.setRuleForPrincipal(
getPrincipal(),
getServiceLocator().getProfiler()
.getRule(ruleName),
locatorName);
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);
}
if (!StringUtils.isEmpty(getProfilingRule()))
{
getServiceLocator()
.getProfiler()
.setRuleForPrincipal(
principal,
getServiceLocator()
.getProfiler()
.getRule(getProfilingRule()),
"default");
}else if(!StringUtils.isEmpty(defaultProfile)){
getServiceLocator()
.getProfiler()
.setRuleForPrincipal(
principal,
getServiceLocator()
.getProfiler()
.getRule(defaultProfile),
"default");
}
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 PrincipalProfilePanel extends Panel
{
protected boolean userEnabled = false;
protected String name;
protected String locatorName;
protected String ruleName;
protected List fullRules;
protected List userRules;
/**
* @param userEnabled
* the userEnabled to set
*/
public void setUserEnabled(boolean userEnabled)
{
this.userEnabled = userEnabled;
}
/**
* @return the userEnabled
*/
public boolean isUserEnabled()
{
return userEnabled;
}
/**
* @return the name
*/
protected String getName()
{
return name;
}
protected PrincipalProfilePanel(String id)
{
super(id);
Form profileForm = new Form("profileForm");
add(profileForm);
profileForm.add(new CheckBox("userStatus", 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()
{
JetspeedPrincipal principal = getManager().getPrincipal(
getName());
try
{
principal.setEnabled(isUserEnabled());
getManager().updatePrincipal(principal);
setPrincipal(principal);
principalDataProvider.refresh(getManager(),getSearchString());
} catch (SecurityException jSx)
{
error(jSx.getMessage());
}
}
});
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(),getSearchString());
}
catch (SecurityException e)
{
error(e.getMessage());
}
}
}.add(new JavascriptEventConfirmation("onclick", new ResourceModel("action.delete.confirm"))));
}
@Override
protected void onBeforeRender()
{
if (getPrincipal() != null)
{
this.userEnabled = 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 assoicationType;
protected boolean associationsFrom;
/**
* @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 assoicationType)
{
super(id);
this.assoicationType = assoicationType;
associationName = assoicationType.getAssociationName();
final String assoctionName = assoicationType.getAssociationName();
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()));
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")));
listItem.add(deleteLink);
}
};
if(assoicationType.getFromPrincipalType().equals(principalType))
{
add(new Label("principalReleation",new ResourceModel(assoicationType.getToPrincipalType().getName())));
}else{
add(new Label("principalReleation",new ResourceModel(assoicationType.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);
}
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(
assoicationType.getFromPrincipalType()))
{
associations = getBaseManager(
assoicationType.getFromPrincipalType())
.getAssociatedTo(principal.getName(),
principal.getType(),
assoicationType.getAssociationName());
List tempNames = getBaseManager(
assoicationType.getFromPrincipalType()).getPrincipals(
"");
for (int index = 0; index < tempNames.size(); index++)
{
names.add(tempNames.get(index));
}
associationsFrom = false;
} else
{
associations = getBaseManager(
assoicationType.getToPrincipalType())
.getAssociatedFrom(principal.getName(),
principal.getType(),
assoicationType.getAssociationName());
List tempNames = getBaseManager(
assoicationType.getToPrincipalType()).getPrincipals("");
for (int index = 0; index < tempNames.size(); index++)
{
names.add(tempNames.get(index));
}
associationsFrom = true;
}
for (int count = 0; count < associations.size(); count++)
{
JetspeedPrincipal tmpPrincipal = (JetspeedPrincipal) associations
.get(count);
JetspeedPrincipal listPrincipal;
for (int index = 0; index < names.size(); index++)
{
listPrincipal = (JetspeedPrincipal) names.get(index);
if (listPrincipal.getName().equals(tmpPrincipal.getName()))
{
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> assoicationTypes;
private String selectedAssociationType;
/**
* @return the assoicationTypes
*/
public List<JetspeedPrincipalAssociationType> getAssoicationTypes()
{
return assoicationTypes;
}
public PrincipalAssociationsPanel(String id)
{
super(id);
tabs = new ArrayList();
this.assoicationTypes = ((JetspeedPrincipalManager) getManager())
.getAssociationTypes();
ITab tab;
for (JetspeedPrincipalAssociationType assoicationType : this.assoicationTypes)
{
// if
// (!assoicationType.getToPrincipalType().equals(principalType))
// {
final JetspeedPrincipalAssociationType tempAssosciation = assoicationType;
final JetspeedPrincipalType fromAssoicationType = assoicationType
.getFromPrincipalType();
final JetspeedPrincipalType toAssoicationType = assoicationType
.getToPrincipalType();
final String associationName = assoicationType
.getAssociationName();
if (fromAssoicationType.getName().equals(
getPrincipal().getType().getName()))
{
tab = new AbstractTab(new Model(toAssoicationType.getName()
+ " - " + assoicationType.getAssociationName()))
{
public Panel getPanel(String panelId)
{
return new AssociationTypePanel(panelId,
tempAssosciation);
}
};
} else
{
tab = new AbstractTab(new Model(fromAssoicationType
.getName()
+ " - " + assoicationType.getAssociationName()))
{
public Panel getPanel(String panelId)
{
return new AssociationTypePanel(panelId,
tempAssosciation);
}
};
}
tabs.add(tab);
// }
}
add(new TabbedPanel("assocTabs", tabs));
}
/**
* @param assoicationTypes
* the assoicationTypes to set
*/
public void setAssoicationTypes(List assoicationTypes)
{
this.assoicationTypes = assoicationTypes;
}
}
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();
if (userSelecteed)
{
if (principalType.getName().equals(JetspeedPrincipalType.USER))
{
tab = new AbstractTab(new Model("User Profile"))
{
public Panel getPanel(String panelId)
{
return new UserPrincipalProfilePanel(panelId);
}
};
} else
{
tab = new AbstractTab(new Model("User Profile"))
{
public Panel getPanel(String panelId)
{
return new PrincipalProfilePanel(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 (principalType.getName().equals(JetspeedPrincipalType.USER))
{
tab = new AbstractTab(new Model("Credentials"))
{
public Panel getPanel(String panelId)
{
return new PrincipalCredentialsPanel(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();
}
}