/* (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.service;
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.impl.ServiceAccessRule;
import org.geoserver.security.impl.ServiceAccessRuleDAO;
import org.geoserver.web.wicket.ParamResourceModel;
/**
* Adds a new rule to the data access set
*/
@SuppressWarnings("serial")
public class NewServiceAccessRulePage extends AbstractServiceAccessRulePage {
public NewServiceAccessRulePage() {
super(new ServiceAccessRule());
((Form)get("form")).add(new DuplicateRuleValidator());
}
@Override
protected void onFormSubmit(ServiceAccessRule rule) {
try {
ServiceAccessRuleDAO dao = ServiceAccessRuleDAO.get();
dao.addRule(rule);
dao.storeRules();
doReturn(ServiceAccessRulePage.class);
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Error occurred while saving service rule", e);
error(new ParamResourceModel("saveError", getPage(), e.getMessage()));
}
}
/**
* Checks the same rule has not been entered before
*/
class DuplicateRuleValidator extends AbstractFormValidator {
public void validate(Form<?> form) {
// only validate on final submit
if (form.findSubmittingButton() != form.get("save")) {
return;
}
updateModels();
ServiceAccessRule rule = (ServiceAccessRule) form.getModelObject();
if (ServiceAccessRuleDAO.get().getRules().contains(rule)) {
form.error(new ParamResourceModel("duplicateRule", getPage(), rule
.getKey()).getString());
}
}
public FormComponent<?>[] getDependentFormComponents() {
return new FormComponent[] { serviceChoice, methodChoice, rolesFormComponent };
}
}
}