/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.params.extractor.web; import org.geoserver.params.extractor.EchoParameter; import org.geoserver.params.extractor.EchoParametersDao; import org.geoserver.params.extractor.RulesDao; import org.geoserver.params.extractor.Utils; import org.geoserver.web.wicket.GeoServerDataProvider; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class RulesModel extends GeoServerDataProvider<RuleModel> { public static final Property<RuleModel> EDIT_BUTTON = new PropertyPlaceholder<>("Edit"); public static final Property<RuleModel> ACTIVATE_BUTTON = new PropertyPlaceholder<>("Active"); private final static List<Property<RuleModel>> PROPERTIES = Arrays.asList( new BeanProperty<>("Position", "position"), new BeanProperty<>("Match", "match"), new BeanProperty<>("Activation", "activation"), new BeanProperty<>("Parameter", "parameter"), new BeanProperty<>("Transform", "transform"), new BeanProperty<>("Remove", "remove"), new BeanProperty<>("Combine", "combine"), new BeanProperty<>("Echo", "echo"), ACTIVATE_BUTTON, EDIT_BUTTON); @Override protected List<Property<RuleModel>> getProperties() { return PROPERTIES; } @Override protected List<RuleModel> getItems() { return getRulesModels(); } public static List<RuleModel> getRulesModels() { List<RuleModel> ruleModels = RulesDao.getRules().stream().map(RuleModel::new).collect(Collectors.toList()); EchoParametersDao.getEchoParameters().forEach(forwardParameter -> mergedForwardParameter(ruleModels, forwardParameter)); return ruleModels; } public static void saveOrUpdate(RuleModel ruleModel) { if(!ruleModel.isEchoOnly()) { RulesDao.saveOrUpdateRule(ruleModel.toRule()); if(!ruleModel.getEcho()) { EchoParametersDao.deleteEchoParameters(ruleModel.getId()); } } if (ruleModel.getEcho() || ruleModel.isEchoOnly()) { EchoParametersDao.saveOrUpdateEchoParameter(ruleModel.toEchoParameter()); } } public static void delete(String... rulesIds) { RulesDao.deleteRules(rulesIds); EchoParametersDao.deleteEchoParameters(rulesIds); } private static void mergedForwardParameter(List<RuleModel> ruleModels, EchoParameter echoParameter) { for (RuleModel ruleModel : ruleModels) { if (ruleModel.getId().equals(echoParameter.getId())) { Utils.checkCondition(echoParameter.getParameter().equals(ruleModel.getParameter()), "Rule and echo parameter with id '%s' should have the same parameter.", ruleModel.getId()); Utils.checkCondition(echoParameter.getActivated() == ruleModel.getActivated(), "Rule and echo parameter with id '%s' should both be deactivated or activated.", ruleModel.getId()); ruleModel.setEcho(true); return; } } ruleModels.add(new RuleModel(echoParameter)); } }