/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.security.data;
import java.util.logging.Level;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.validation.AbstractFormValidator;
import org.geoserver.security.AccessMode;
import org.geoserver.security.impl.DataAccessRule;
import org.geoserver.security.impl.DataAccessRuleDAO;
import org.geoserver.web.wicket.ParamResourceModel;
/**
* Adds a new rule to the data access set
*/
@SuppressWarnings("serial")
public class NewDataAccessRulePage extends AbstractDataAccessRulePage {
public NewDataAccessRulePage() {
super(new DataAccessRule());
form.add(new DuplicateRuleValidator());
}
@Override
protected void onFormSubmit() {
try {
String roles = parseRole(rolesForComponent.getRolePalette().getDefaultModelObjectAsString());
DataAccessRule rule = new DataAccessRule((String) workspace.getConvertedInput(),
(String) layer.getConvertedInput(),
(AccessMode) accessMode.getConvertedInput(), roles);
DataAccessRuleDAO dao = DataAccessRuleDAO.get();
dao.addRule(rule);
dao.storeRules();
setResponsePage(DataAccessRulePage.class);
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error occurred while saving user", e);
error(new ParamResourceModel("saveError", getPage(), e.getMessage()));
}
}
private String parseRole(String modelObjectAsString) {
return modelObjectAsString.substring(1, modelObjectAsString.length() - 1);
}
/**
* Checks the same rule has not been entered before
*
* @author aaime
*
*/
class DuplicateRuleValidator extends AbstractFormValidator {
public void validate(Form form) {
DataAccessRule rule = new DataAccessRule((String) workspace.getConvertedInput(),
(String) layer.getConvertedInput(),
(AccessMode) accessMode.getConvertedInput(), rolesForComponent.getRolePalette()
.getDefaultModelObjectAsString());
if (DataAccessRuleDAO.get().getRules().contains(rule)) {
form.error(new ParamResourceModel("duplicateRule", getPage(), rule.getKey())
.getString());
}
}
public FormComponent[] getDependentFormComponents() {
return new FormComponent[] { workspace, layer, accessMode, rolesForComponent };
}
}
}