ScalaContext.java

  1. package org.jbehave.core.configuration.scala;

  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;

  5. public class ScalaContext {

  6.     private final ClassLoader classLoader;
  7.     private final List<String> classNames;
  8.     private List<Object> instances;

  9.     public ScalaContext(String... classNames) {
  10.         this(ScalaContext.class.getClassLoader(), classNames);
  11.     }
  12.    
  13.     public ScalaContext(ClassLoader classLoader, String... classNames) {
  14.         this.classLoader = classLoader;
  15.         this.classNames = Arrays.asList(classNames);
  16.         this.instances = createInstances();
  17.     }

  18.     public List<Object> getInstances() {
  19.         return instances;
  20.     }

  21.     @SuppressWarnings("unchecked")
  22.     public <T> T getInstanceOfType(Class<T> type) {
  23.         for (Object instance : instances) {
  24.             if (type.isAssignableFrom(instance.getClass())) {
  25.                 return (T) instance;
  26.             }
  27.         }
  28.         throw new ScalaInstanceNotFound(type);
  29.     }

  30.     /**
  31.      * Creates an object instance from the Scala class name
  32.      *
  33.      * @param className the Scala class name
  34.      * @return An Object instance
  35.      */
  36.     public Object newInstance(String className) {
  37.         try {
  38.             return classLoader.loadClass(className).newInstance();
  39.         } catch (Exception e) {
  40.             throw new ScalaInstanceNotFound(className);
  41.         }
  42.     }

  43.     private List<Object> createInstances() {
  44.         List<Object> instances = new ArrayList<>();
  45.         for (String className : classNames) {
  46.             instances.add(newInstance(className));
  47.         }
  48.         return instances;
  49.     }

  50.     @SuppressWarnings("serial")
  51.     public static final class ScalaInstanceNotFound extends RuntimeException {

  52.         public ScalaInstanceNotFound(Class<?> type) {
  53.             super(type.toString());
  54.         }

  55.         public ScalaInstanceNotFound(String className) {
  56.             super(className);
  57.         }

  58.     }

  59. }