/* (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.data; import java.util.logging.Level; import org.geoserver.security.impl.DataAccessRule; import org.geoserver.security.impl.DataAccessRuleDAO; import org.geoserver.web.wicket.ParamResourceModel; /** * Edits an existing rule */ public class EditDataAccessRulePage extends AbstractDataAccessRulePage { DataAccessRule orig; public EditDataAccessRulePage(DataAccessRule rule) { //pass a clone into parent to avoid changing original super(new DataAccessRule(rule)); //save original this.orig = rule; } @Override protected void onFormSubmit(DataAccessRule rule) { try { DataAccessRuleDAO dao = DataAccessRuleDAO.get(); // we cannot update the original because it might have been serialized // and thus detached, we'll update the rule that is the same as the original one instead dao.getRules().forEach(r -> { if(r.equals(orig)) { r.setRoot(rule.getRoot()); r.setGlobalGroupRule(rule.isGlobalGroupRule()); r.setLayer(rule.getLayer()); r.setAccessMode(rule.getAccessMode()); r.getRoles().clear(); r.getRoles().addAll(rule.getRoles()); } }); dao.storeRules(); doReturn(DataSecurityPage.class); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Error occurred while saving rule ", e); error(new ParamResourceModel("saveError", getPage(), e.getMessage())); } } }