ScalaContext.java
- package org.jbehave.core.configuration.scala;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- public class ScalaContext {
- private final ClassLoader classLoader;
- private final List<String> classNames;
- private List<Object> instances;
- public ScalaContext(String... classNames) {
- this(ScalaContext.class.getClassLoader(), classNames);
- }
-
- public ScalaContext(ClassLoader classLoader, String... classNames) {
- this.classLoader = classLoader;
- this.classNames = Arrays.asList(classNames);
- this.instances = createInstances();
- }
- public List<Object> getInstances() {
- return instances;
- }
- @SuppressWarnings("unchecked")
- public <T> T getInstanceOfType(Class<T> type) {
- for (Object instance : instances) {
- if (type.isAssignableFrom(instance.getClass())) {
- return (T) instance;
- }
- }
- throw new ScalaInstanceNotFound(type);
- }
- /**
- * Creates an object instance from the Scala class name
- *
- * @param className the Scala class name
- * @return An Object instance
- */
- public Object newInstance(String className) {
- try {
- return classLoader.loadClass(className).newInstance();
- } catch (Exception e) {
- throw new ScalaInstanceNotFound(className);
- }
- }
- private List<Object> createInstances() {
- List<Object> instances = new ArrayList<>();
- for (String className : classNames) {
- instances.add(newInstance(className));
- }
- return instances;
- }
- @SuppressWarnings("serial")
- public static final class ScalaInstanceNotFound extends RuntimeException {
- public ScalaInstanceNotFound(Class<?> type) {
- super(type.toString());
- }
- public ScalaInstanceNotFound(String className) {
- super(className);
- }
- }
- }