/* (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.role;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.model.IModel;
import org.geoserver.security.config.SecurityRoleServiceConfig;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.web.GeoServerApplication;
import org.geotools.util.logging.Logging;
/**
* Choice widget for roles from a specific role service configuration.
*
* @author Justin Deoliveira, OpenGeo
*
*/
public class RoleChoice extends DropDownChoice<String> {
static Logger LOGGER = Logging.getLogger("org.geoserver.security");
public RoleChoice(String id, IModel<? extends SecurityRoleServiceConfig> configModel) {
super(id, new RoleChoiceNameModel(configModel), new RoleChoiceRenderer());
}
static class RoleChoiceNameModel implements IModel<List<String>> {
IModel<? extends SecurityRoleServiceConfig> configModel;
RoleChoiceNameModel(IModel<? extends SecurityRoleServiceConfig> configModel) {
this.configModel = configModel;
}
@Override
public List<String> getObject() {
SecurityRoleServiceConfig config = configModel.getObject();
List<String> roleNames = new ArrayList<String>();
if (config.getId() != null) {
try {
for (GeoServerRole role : GeoServerApplication.get().getSecurityManager()
.loadRoleService(config.getName()).getRoles()) {
roleNames.add(role.getAuthority());
}
} catch (IOException e) {
// catch exception, otherwise role service
// configuration page cannot be opened
LOGGER.log(Level.WARNING,e.getMessage(),e);
//throw new WicketRuntimeException(e);
}
}
return roleNames;
}
@Override
public void detach() {
}
@Override
public void setObject(List<String> object) {
throw new UnsupportedOperationException();
}
}
static class RoleChoiceRenderer extends ChoiceRenderer<String> {
@Override
public Object getDisplayValue(String object) {
return object;
}
@Override
public String getIdValue(String object, int index) {
return object;
}
}
}