/** * 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.internal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import javax.script.ScriptEngine; import org.eclipse.smarthome.automation.module.script.ScriptEngineFactory; import org.eclipse.smarthome.automation.module.script.ScriptExtensionProvider; /** * This manager allows a script import extension providers * * @author Simon Merschjohann * */ public class ScriptExtensionManager { private static Set<ScriptExtensionProvider> scriptExtensionProviders = new CopyOnWriteArraySet<ScriptExtensionProvider>(); public static Set<ScriptExtensionProvider> getScriptExtensionProviders() { return scriptExtensionProviders; } public void addScriptExtensionProvider(ScriptExtensionProvider provider) { scriptExtensionProviders.add(provider); } public void removeScriptExtensionProvider(ScriptExtensionProvider provider) { scriptExtensionProviders.remove(provider); } public static void addExtension(ScriptExtensionProvider provider) { scriptExtensionProviders.add(provider); } public static void removeExtension(ScriptExtensionProvider provider) { scriptExtensionProviders.remove(provider); } public static List<String> getTypes() { ArrayList<String> types = new ArrayList<>(); for (ScriptExtensionProvider provider : scriptExtensionProviders) { types.addAll(provider.getTypes()); } return types; } public static List<String> getPresets() { ArrayList<String> presets = new ArrayList<>(); for (ScriptExtensionProvider provider : scriptExtensionProviders) { presets.addAll(provider.getPresets()); } return presets; } public static Object get(String type, String scriptIdentifier) { for (ScriptExtensionProvider provider : scriptExtensionProviders) { if (provider.getTypes().contains(type)) { return provider.get(scriptIdentifier, type); } } return null; } public static List<String> getDefaultPresets() { ArrayList<String> defaultPresets = new ArrayList<>(); for (ScriptExtensionProvider provider : scriptExtensionProviders) { defaultPresets.addAll(provider.getDefaultPresets()); } return defaultPresets; } public static void importDefaultPresets(ScriptEngineFactory engineProvider, ScriptEngine scriptEngine, String scriptIdentifier) { for (String preset : getDefaultPresets()) { importPreset(preset, engineProvider, scriptEngine, scriptIdentifier); } } public static void importPreset(String preset, ScriptEngineFactory engineProvider, ScriptEngine scriptEngine, String scriptIdentifier) { for (ScriptExtensionProvider provider : scriptExtensionProviders) { if (provider.getPresets().contains(preset)) { Map<String, Object> scopeValues = provider.importPreset(scriptIdentifier, preset); engineProvider.scopeValues(scriptEngine, scopeValues); } } } public static void dispose(String scriptIdentifier) { for (ScriptExtensionProvider provider : scriptExtensionProviders) { provider.unLoad(scriptIdentifier); } } }