org.jabylon.rest.ui.wicket.config.sections.security.RoleUsersConfigSection.java Source code

Java tutorial

Introduction

Here is the source code for org.jabylon.rest.ui.wicket.config.sections.security.RoleUsersConfigSection.java

Source

/**
 * (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;
        }
    }

}