/* (c) 2014 - 2016 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.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import org.geoserver.security.GeoServerRoleService;
import org.geoserver.security.GeoServerSecurityManager;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.web.PaletteFormComponent;
import org.geoserver.web.GeoServerApplication;
/**
* A form component that can be used to edit user/rule role lists
*/
@SuppressWarnings("serial")
public class RolePaletteFormComponent extends PaletteFormComponent<GeoServerRole> {
public RolePaletteFormComponent(String id, IModel<List<GeoServerRole>> model) {
this(id, model, new RolesModel());
}
public RolePaletteFormComponent(String id, IModel<List<GeoServerRole>> model,
IModel<Collection<GeoServerRole>> choicesModel) {
super(id, model, choicesModel, new ChoiceRenderer<GeoServerRole>("authority","authority"));
// rolePalette = new Palette<GeoServerRole>(
// "roles", , choicesModel,
// , 10, false) {
// // trick to force the palette to have at least one selected elements
// // tried with a nicer validator but it's not used at all, the required thing
// // instead is working (don't know why...)
// protected Recorder<GeoServerRole> newRecorderComponent() {
// Recorder<GeoServerRole> rec = super.newRecorderComponent();
// //add any behaviours that need to be added
// rec.add(toAdd.toArray(new Behavior[toAdd.size()]));
// toAdd.clear();
// /*if (isRequired)
// rec.setRequired(true);
// if (behavior!=null)
// rec.add(behavior);*/
// return rec;
// }
// };
GeoServerRoleService roleService = getSecurityManager().getActiveRoleService();
final String roleServiceName = roleService.getName();
if (choicesModel instanceof RuleRolesModel)
add(new Label("roles", new StringResourceModel("roles",this)));
else
add(new Label("roles", new StringResourceModel("rolesFromActiveService",
this).setParameters(roleServiceName)));
add(new SubmitLink("addRole") {
@Override
public void onSubmit() {
setResponsePage(new NewRolePage(roleServiceName).setReturnPage(this.getPage()));
}
}.setVisible(roleService.canCreateStore()));
}
public GeoServerSecurityManager getSecurityManager() {
return GeoServerApplication.get().getSecurityManager();
}
public void diff(Collection<GeoServerRole> orig, Collection<GeoServerRole> add,
Collection<GeoServerRole> remove) {
remove.addAll(orig);
for(GeoServerRole role : getSelectedRoles()) {
if (!orig.contains(role)) {
add.add(role);
}
else {
remove.remove(role);
}
}
}
public List<GeoServerRole> getSelectedRoles() {
return new ArrayList(palette.getModelCollection());
}
@Override
protected String getSelectedHeaderPropertyKey() {
return "RolePaletteFormComponent.selectedHeader";
}
@Override
protected String getAvaliableHeaderPropertyKey() {
// TODO Auto-generated method stub
return "RolePaletteFormComponent.availableHeader";
}
}