/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jabylon.rest.ui.wicket.config.sections.security;
import org.apache.wicket.Component;
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.link.BookmarkablePageLink;
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.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.eclipse.emf.cdo.CDOState;
import org.eclipse.emf.cdo.util.CommitException;
import org.jabylon.cdo.connector.TransactionUtil;
import org.jabylon.rest.ui.model.ComplexEObjectListDataProvider;
import org.jabylon.rest.ui.wicket.BasicPanel;
import org.jabylon.rest.ui.wicket.components.UserImagePanel;
import org.jabylon.rest.ui.wicket.config.AbstractConfigSection;
import org.jabylon.rest.ui.wicket.config.SettingsPage;
import org.jabylon.rest.ui.wicket.config.SettingsPanel;
import org.jabylon.security.CommonPermissions;
import org.jabylon.users.Role;
import org.jabylon.users.User;
import org.jabylon.users.UserManagement;
import org.jabylon.users.UsersPackage;
import org.osgi.service.prefs.Preferences;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UsersConfigSection extends BasicPanel<UserManagement> {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(UsersConfigSection.class);
public UsersConfigSection(String id, IModel<UserManagement> model) {
super(id, model);
ComplexEObjectListDataProvider<User> provider = new ComplexEObjectListDataProvider<User>(model, UsersPackage.Literals.USER_MANAGEMENT__USERS);
ListView<User> userList = new ListView<User>("user.row",provider) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<User> item) {
item.add(new UserImagePanel("username", item.getModel()));
item.add(new Label("roles",buildRoles(item.getModelObject())));
PageParameters params = new PageParameters(getPage().getPageParameters());
params.set(params.getIndexedCount(),"users");
String name = item.getModelObject().getName();
//so it doesn't crash on a broken model
if(name==null)
name = "";
params.set(params.getIndexedCount(),name);
item.add(new BookmarkablePageLink<Void>("edit",SettingsPage.class, params));
item.add(new Link<User>("delete",item.getModel()){
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
try {
TransactionUtil.deleteWithCrossRefs(getModelObject());
} catch (CommitException e) {
getSession().error(e.getMessage());
logger.error("Failed to commit",e);
}
}
});
}
};
userList.setReuseItems(true);
add(userList);
add(buildAddNewLink(getModel()));
}
protected String buildRoles(User modelObject) {
StringBuilder builder = new StringBuilder();
//TODO: shouldn't there be an "allRoles"?
for (Role role : modelObject.getRoles()) {
builder.append(role.getName());
builder.append(", ");
}
if(builder.length()>2)
builder.setLength(builder.length()-2);
return builder.toString();
}
private Component buildAddNewLink(IModel<UserManagement> model) {
PageParameters params = new PageParameters();
UserManagement project = model.getObject();
if (project.cdoState() == CDOState.NEW || project.cdoState() == CDOState.TRANSIENT) {
// it's a new project, we can't add anything yet
Button link = new Button("addNew");
link.setEnabled(false);
return link;
}
params.set(0, "security");
params.add(SettingsPanel.QUERY_PARAM_CREATE, UsersPackage.Literals.USER.getName());
params.add(SettingsPanel.QUERY_PARAM_NAMESPACE, UsersPackage.eNS_URI);
return new BookmarkablePageLink<Void>("addNew", SettingsPage.class, params);
}
public static class UsersConfigSectionContributor extends AbstractConfigSection<UserManagement> {
private static final long serialVersionUID = 1L;
@Override
public WebMarkupContainer doCreateContents(String id, IModel<UserManagement> input, Preferences config) {
return new UsersConfigSection(id, input);
}
@Override
public void commit(IModel<UserManagement> input, Preferences config) {
// TODO Auto-generated method stub
}
@Override
public String getRequiredPermission() {
return CommonPermissions.USER_GLOBAL_CONFIG;
}
}
}