/**
 * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others.
 * 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
 *
 * Contributors:
 *    Eike Stepper - initial API and implementation
 */
package org.eclipse.emf.cdo.spi.server;

import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
import org.eclipse.emf.cdo.server.IQueryHandler;
import org.eclipse.emf.cdo.server.IQueryHandlerProvider;

import org.eclipse.net4j.util.factory.IFactory;
import org.eclipse.net4j.util.registry.HashMapRegistry;
import org.eclipse.net4j.util.registry.IRegistry;

/**
 * @author Eike Stepper
 * @since 2.0
 */
public class FactoriesQueryHandlerProvider implements IQueryHandlerProvider
{
  private IRegistry<String, IFactory> registry;

  public FactoriesQueryHandlerProvider()
  {
  }

  public FactoriesQueryHandlerProvider(IRegistry<String, IFactory> registry)
  {
    setRegistry(registry);
  }

  public FactoriesQueryHandlerProvider(IFactory factory)
  {
    addFactory(factory);
  }

  public IRegistry<String, IFactory> getRegistry()
  {
    if (registry == null)
    {
      registry = new HashMapRegistry<String, IFactory>();
    }

    return registry;
  }

  public void setRegistry(IRegistry<String, IFactory> registry)
  {
    this.registry = registry;
  }

  public void addFactory(IFactory factory)
  {
    getRegistry().put(factory.getKey().getType(), factory);
  }

  /**
   * @since 3.0
   */
  public IQueryHandler getQueryHandler(CDOQueryInfo info)
  {
    IFactory factory = registry.get(info.getQueryLanguage());
    if (factory != null)
    {
      return (IQueryHandler)factory.create(null);
    }

    return null;
  }
}
