/**
* (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.markup.html.panel.GenericPanel;
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.model.EObjectPropertyModel;
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.UserManagement;
import org.jabylon.users.UsersPackage;
import org.osgi.service.prefs.Preferences;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RoleUsersConfigSection extends GenericPanel<UserManagement> {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(RoleUsersConfigSection.class);
public RoleUsersConfigSection(String id, IModel<UserManagement> model) {
super(id, model);
ComplexEObjectListDataProvider<Role> provider = new ComplexEObjectListDataProvider<Role>(model, UsersPackage.Literals.USER_MANAGEMENT__ROLES);
ListView<Role> roleList = new ListView<Role>("role.row",provider) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<Role> item) {
IModel<String> nameProperty = new EObjectPropertyModel<String, Role>(item.getModel(), UsersPackage.Literals.ROLE__NAME);
item.add(new Label("rolename", nameProperty));
item.add(new Label("roles",buildRoles(item.getModelObject())));
PageParameters params = new PageParameters(getPage().getPageParameters());
params.set(params.getIndexedCount(),"roles");
params.set(params.getIndexedCount(),item.getModelObject().getName());
item.add(new BookmarkablePageLink<Void>("edit",SettingsPage.class, params));
item.add(new Link<Role>("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);
}
}
});
}
};
roleList.setReuseItems(true);
add(roleList);
add(buildAddNewLink(getModel()));
}
protected String buildRoles(Role modelObject) {
//TODO: replace this once roles have a list of roles
return modelObject.getParent() == null ? "" : modelObject.getParent().getName();
}
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.ROLE.getName());
params.add(SettingsPanel.QUERY_PARAM_NAMESPACE, UsersPackage.eNS_URI);
return new BookmarkablePageLink<Void>("addNew", SettingsPage.class, params);
}
public static class RolesConfigSectionContributor extends AbstractConfigSection<UserManagement> {
private static final long serialVersionUID = 1L;
@Override
public WebMarkupContainer doCreateContents(String id, IModel<UserManagement> input, Preferences config) {
return new RoleUsersConfigSection(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;
}
}
}