Package com.hp.hpl.squirrelrdf.ldap

Source Code of com.hp.hpl.squirrelrdf.ldap.LdapSparqlMap

/*
* (c) Copyright 2006 Hewlett-Packard Development Company, LP
* All rights reserved.
* [See end of file]
*/

package com.hp.hpl.squirrelrdf.ldap;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.query.engine.QueryIterator;
import com.hp.hpl.jena.query.engine1.ExecutionContext;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.squirrelrdf.querymap.QueryMapEngine;
import com.hp.hpl.squirrelrdf.querymap.QueryMapIterator;

/**
*
* Map triple patterns to ldap queries.
*
* @author pldms
*
*/
public class LdapSparqlMap
{
  private static final Log log = LogFactory.getLog(LdapSparqlMap.class);
 
  Model config;
  List<Triple> theQuery;
 
  /**
   * Initialise using a config mapping
   * @param config
   */
  public LdapSparqlMap(Model config)
  {
    this.config = config;
    theQuery = new ArrayList<Triple>();
  }
 
  /**
   * Add a triple to the query pattern
   * @param triple
   */
  public void addTriple(Triple triple)
  {
    theQuery.add(triple);
  }
 
  /**
   * Set the query pattern to these triples
   * @param triples
   */
  public void setTriples(List<Triple> triples)
  {
    theQuery = triples;
  }
 
  /**
   *  Break down the query by subject.
   *  For internal use, mostly.
   */
  public List<LdapSubQuery> analyse(List<Triple> query)
  {
    List<LdapSubQuery> analysed = new ArrayList<LdapSubQuery>();
   
    /* Currently just separated by subject */
   
    Map<Node, LdapSubQuery> mapSubj = new HashMap<Node, LdapSubQuery>();
   
    for (Triple triple: query)
    {
      LdapSubQuery tripList = mapSubj.get(triple.getSubject());
      if (tripList == null)
      {
        tripList = new LdapSubQuery(config);
        analysed.add(tripList);
        mapSubj.put(triple.getSubject(), tripList);
      }
     
      tripList.add(triple);
    }
   
    /* TODO Should sort at this point, I think. Elementary planning. */
   
    return analysed;
  }
 
  /**
   * Execute the query.
   *
   * Essentially just analyses the query then plumbs the iterators together.
   *
   * @param results
   * @return
   */
  public QueryIterator execute(QueryIterator results, ExecutionContext context)
  {
    List<LdapSubQuery> subqueries = analyse(theQuery);
   
    for (QueryMapEngine subquery: subqueries)
    {
      results = new QueryMapIterator(subquery, results, context);
    }
   
    return results;
  }
 
}

/*
* (c) Copyright 2006 Hewlett-Packard Development Company, LP All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. 2. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution. 3. The name of the author may not
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ 
TOP

Related Classes of com.hp.hpl.squirrelrdf.ldap.LdapSparqlMap

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.