/** * 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; import java.util.Collection; import java.util.Map; /** * A {@link ScriptExtensionProvider} can provide variable and types on ScriptEngine instance basis. * * @author Simon Merschjohann- Initial contribution * */ public interface ScriptExtensionProvider { /** * These presets will always get injected into the ScriptEngine on instance creation. * * @return collection of presets */ public Collection<String> getDefaultPresets(); /** * Returns the provided Presets which are supported by this ScriptExtensionProvider. * Presets define imports which will be injected into the ScriptEngine if called by "importPreset". * * @return provided presets */ public Collection<String> getPresets(); /** * Returns the supported types which can be received by the given ScriptExtensionProvider * * @return provided types */ public Collection<String> getTypes(); /** * This method should return an Object of the given type. Note: get can be called multiple times in the scripts use * caching where appropriate. * * @param scriptEngine the script engine instance requesting the given type * @param type * @return */ public Object get(String scriptIdentifier, String type); /** * This method should return variables and types of the concrete type which will be injected into the ScriptEngines * scope. * * @param scriptEngineId - the script engine which will receive the preset */ public Map<String, Object> importPreset(String scriptIdentifier, String preset); /** * This will be called when the ScriptEngine will be unloaded (e.g. if the Script is deleted or updated). * Every Context information stored in the ScriptExtensionProvider should be removed. * * @param scriptEngineId */ public void unLoad(String scriptIdentifier); }