Package org.drools.compiler

Source Code of org.drools.compiler.BusinessRuleProviderFactory

package org.drools.compiler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Enumeration;

import org.drools.CheckedDroolsException;
import org.drools.util.ServiceRegistryImpl;

public class BusinessRuleProviderFactory {
  private static BusinessRuleProviderFactory instance = new BusinessRuleProviderFactory();
  private BusinessRuleProvider provider;

  private BusinessRuleProviderFactory() {
  }

  public static BusinessRuleProviderFactory getInstance() {
    return instance;
  }

  public BusinessRuleProvider getProvider() throws CheckedDroolsException {
    if (null == provider)
      provider = loadProvider();
    return provider;
  }

  private BusinessRuleProvider loadProvider() throws CheckedDroolsException {
    String interfaceName = BusinessRuleProvider.class.getName();
    try {
      URL systemResource = null;
      for (Enumeration<URL> systemResources = ClassLoader
          .getSystemResources("META-INF/services/" + interfaceName); systemResources
          .hasMoreElements();) {
        if (null != systemResource)
          throwMultipleImplementationsDetected();
        systemResource = systemResources.nextElement();
      }

      if (systemResource == null) {
        throwNoImplementationFound();
      }

          BufferedReader reader = new BufferedReader(new InputStreamReader(systemResource.openStream()));
      String className = null;
      for (String currentName; (currentName = reader.readLine()) != null;) {
        if (className != null) {
          throwMultipleImplementationsDetected();
        }
        className = currentName;
      }

      if (null == className) {
        throwNoImplementationFound();
      }

          ServiceRegistryImpl.getInstance().addDefault(BusinessRuleProvider.class, className);
      return ServiceRegistryImpl.getInstance().get(BusinessRuleProvider.class);
        } catch (IOException e) {
      throw new CheckedDroolsException("Error obtaining " + interfaceName, e);
        }
  }

  private void throwNoImplementationFound() throws CheckedDroolsException {
    throw new CheckedDroolsException("Unable to find implementation for BusinessRuleProvider");
  }

  private void throwMultipleImplementationsDetected() {
    throw new IllegalStateException("multiple BusinessRuleProvider implementations detected");
  }
}
TOP

Related Classes of org.drools.compiler.BusinessRuleProviderFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.