/**
* Copyright (c) 2014-2017 by the respective copyright holders.
* 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.model.script.scoping;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.smarthome.model.persistence.extensions.PersistenceExtensions;
import org.eclipse.smarthome.model.script.actions.Audio;
import org.eclipse.smarthome.model.script.actions.BusEvent;
import org.eclipse.smarthome.model.script.actions.Exec;
import org.eclipse.smarthome.model.script.actions.HTTP;
import org.eclipse.smarthome.model.script.actions.LogAction;
import org.eclipse.smarthome.model.script.actions.Ping;
import org.eclipse.smarthome.model.script.actions.ScriptExecution;
import org.eclipse.smarthome.model.script.actions.ThingAction;
import org.eclipse.smarthome.model.script.actions.Voice;
import org.eclipse.smarthome.model.script.engine.IActionServiceProvider;
import org.eclipse.smarthome.model.script.engine.action.ActionService;
import org.eclipse.smarthome.model.script.lib.NumberExtensions;
import org.eclipse.xtext.xbase.scoping.batch.ImplicitlyImportedFeatures;
import org.joda.time.DateTime;
import com.google.inject.Inject;
import com.google.inject.Singleton;
/**
* This class registers all statically available functions as well as the
* extensions for specific jvm types, which should only be available in rules,
* but not in scripts
*
* @author Kai Kreuzer - Initial contribution and API
* @author Oliver Libutzki - Xtext 2.5.0 migration
*
*/
@SuppressWarnings("restriction")
@Singleton
public class ScriptImplicitlyImportedTypes extends ImplicitlyImportedFeatures {
private List<Class<?>> actionClasses = null;
@Inject
IActionServiceProvider actionServiceProvider;
@Override
protected List<Class<?>> getExtensionClasses() {
List<Class<?>> result = super.getExtensionClasses();
result.remove(Comparable.class);
result.remove(Double.class);
result.remove(Integer.class);
result.remove(BigInteger.class);
result.remove(BigDecimal.class);
result.remove(double.class);
result.add(NumberExtensions.class);
result.add(StringUtils.class);
result.add(URLEncoder.class);
result.add(PersistenceExtensions.class);
result.add(BusEvent.class);
result.add(Exec.class);
result.add(HTTP.class);
result.add(Ping.class);
result.add(Audio.class);
result.add(Voice.class);
result.add(ThingAction.class);
return result;
}
@Override
protected List<Class<?>> getStaticImportClasses() {
List<Class<?>> result = super.getStaticImportClasses();
result.add(BusEvent.class);
result.add(Exec.class);
result.add(HTTP.class);
result.add(Ping.class);
result.add(ScriptExecution.class);
result.add(LogAction.class);
result.add(Audio.class);
result.add(Voice.class);
result.add(ThingAction.class);
// jodatime static functions
result.add(DateTime.class);
result.addAll(getActionClasses());
return result;
}
protected List<Class<?>> getActionClasses() {
List<ActionService> services = actionServiceProvider.get();
if (services != null) {
List<Class<?>> localActionClasses = new ArrayList<Class<?>>();
for (ActionService actionService : services) {
localActionClasses.add(actionService.getActionClass());
}
actionClasses = localActionClasses;
}
return actionClasses;
}
}