org.geoserver.security.web.group.AbstractGroupPage.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.security.web.group.AbstractGroupPage.java

Source

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
 * (c) 2001 - 2013 OpenPlans
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.security.web.group;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;

import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.impl.GeoServerUserGroup;
import org.geoserver.security.validation.AbstractSecurityException;
import org.geoserver.security.web.AbstractSecurityPage;
import org.geoserver.security.web.role.RolePaletteFormComponent;
import org.geoserver.web.wicket.ParamResourceModel;

/**
 * Allows creation of a new user in users.properties
 */
@SuppressWarnings("serial")
public abstract class AbstractGroupPage extends AbstractSecurityPage {

    protected String userGroupServiceName;
    protected RolePaletteFormComponent rolePalette;

    protected AbstractGroupPage(String userGroupServiceName, final GeoServerUserGroup group) {
        this.userGroupServiceName = userGroupServiceName;

        boolean hasUserGroupStore = hasUserGroupStore(userGroupServiceName);
        boolean hasRoleStore = hasRoleStore(getSecurityManager().getActiveRoleService().getName());

        Form form = new Form("form", new CompoundPropertyModel(group));
        add(form);

        form.add(new TextField<String>("groupname").setEnabled(hasUserGroupStore));
        form.add(new CheckBox("enabled").setEnabled(hasUserGroupStore));

        List<GeoServerRole> roles;
        try {
            roles = new ArrayList(
                    getSecurityManager().getActiveRoleService().getRolesForGroup(group.getGroupname()));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        form.add(rolePalette = new RolePaletteFormComponent("roles", new Model((Serializable) roles)));
        rolePalette.setEnabled(hasRoleStore);

        form.add(new SubmitLink("save") {
            @Override
            public void onSubmit() {
                try {
                    onFormSubmit(group);
                    setReturnPageDirtyAndReturn(true);
                } catch (IOException e) {
                    if (e.getCause() instanceof AbstractSecurityException) {
                        error(e.getCause());
                    } else {
                        error(new ParamResourceModel("saveError", getPage(), e.getMessage()).getObject());
                    }
                    LOGGER.log(Level.SEVERE, "Error occurred while saving group", e);
                }

            }
        }.setEnabled(hasUserGroupStore || hasRoleStore(getSecurityManager().getActiveRoleService().getName())));

        // build the submit/cancel
        form.add(getCancelLink());
    }

    /**
     * Implements the actual save action
     */
    protected abstract void onFormSubmit(GeoServerUserGroup group) throws IOException;

}