Package org.openrdf.sail.federation.config

Source Code of org.openrdf.sail.federation.config.FederationFactory

/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.federation.config;

import org.openrdf.repository.config.RepositoryFactory;
import org.openrdf.repository.config.RepositoryImplConfig;
import org.openrdf.repository.config.RepositoryRegistry;
import org.openrdf.sail.Sail;
import org.openrdf.sail.config.SailFactory;
import org.openrdf.sail.config.SailImplConfig;
import org.openrdf.sail.federation.Federation;
import org.openrdf.store.StoreConfigException;

/**
* Creates a federation based on its configuration.
*
* @see FederationConfig
* @author James Leigh
*/
public class FederationFactory implements SailFactory {

  /**
   * The type of repositories that are created by this factory.
   *
   * @see SailFactory#getSailType()
   */
  public static final String SAIL_TYPE = "openrdf:Federation";

  /**
   * Returns the Sail's type: <tt>openrdf:Federation</tt>.
   */
  public String getSailType() {
    return SAIL_TYPE;
  }

  public SailImplConfig getConfig() {
    return new FederationConfig();
  }

  public Sail getSail(SailImplConfig config)
    throws StoreConfigException
  {
    if (!SAIL_TYPE.equals(config.getType())) {
      throw new StoreConfigException("Invalid Sail type: " + config.getType());
    }
    assert config instanceof FederationConfig;
    FederationConfig cfg = (FederationConfig)config;
    Federation sail = new Federation();
    for (RepositoryImplConfig member : cfg.getMembers()) {
      RepositoryFactory factory = RepositoryRegistry.getInstance().get(member.getType());
      if (factory == null) {
        throw new StoreConfigException("Unsupported repository type: " + config.getType());
      }
      sail.addMember(factory.getRepository(member));
    }
    sail.setLocalPropertySpace(cfg.getLocalPropertySpace());
    sail.setDistinct(cfg.isDistinct());
    sail.setReadOnly(cfg.isReadOnly());
    return sail;
  }
}
TOP

Related Classes of org.openrdf.sail.federation.config.FederationFactory

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.