/**
* Copyright (c) 2015-2017 Simon Merschjohann and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.smarthome.automation.module.script.rulesupport.shared;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import org.eclipse.smarthome.automation.Rule;
import org.eclipse.smarthome.automation.RuleProvider;
import org.eclipse.smarthome.core.common.registry.ProviderChangeListener;
/**
* This RuleProvider keeps Rules at added by scripts during the runtime. This ensures that Rules are not kept on reboot,
* but have to be added by the scripts again.
*
* @author Simon Merschjohann
*
*/
public class ScriptedRuleProvider implements RuleProvider {
private Collection<ProviderChangeListener<Rule>> listeners = new ArrayList<ProviderChangeListener<Rule>>();
HashMap<String, Rule> rules = new HashMap<>();
@Override
public void addProviderChangeListener(ProviderChangeListener<Rule> listener) {
listeners.add(listener);
}
@Override
public Collection<Rule> getAll() {
return rules.values();
}
@Override
public void removeProviderChangeListener(ProviderChangeListener<Rule> listener) {
listeners.remove(listener);
}
public void addRule(Rule rule) {
rules.put(rule.getUID(), rule);
for (ProviderChangeListener<Rule> providerChangeListener : listeners) {
providerChangeListener.added(this, rule);
}
}
public void removeRule(String ruleUID) {
removeRule(rules.get(ruleUID));
}
public void removeRule(Rule rule) {
for (ProviderChangeListener<Rule> providerChangeListener : listeners) {
providerChangeListener.removed(this, rule);
}
}
}