// Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.uima.utils;

import org.apache.uima.fit.factory.TypeSystemDescriptionFactory;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.metadata.TypeSystemDescription;

/**
 * Class to hold a singleton instance of the TypeSystem, to save having to generate it repeatedly.
 *
 * <p>As this is a singleton, it may be shared by different pipelines. However, it is assumed that
 * all pipelines within an instance of Baleen share the same type system, as this is derived from
 * the classpath and not pipeline properties.
 */
public class TypeSystemSingleton {
  private static TypeSystemDescription tsd = null;

  private TypeSystemSingleton() {}

  /** Return the singleton TypeSystemDescription instance */
  public static TypeSystemDescription getTypeSystemDescriptionInstance()
      throws ResourceInitializationException {
    if (tsd == null) {
      tsd = TypeSystemDescriptionFactory.createTypeSystemDescription();
    }

    return tsd;
  }
}
