All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.gom.om.IObjectManager Maven / Gradle / Ivy

/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Mar 19, 2012
 */

package com.bigdata.gom.om;

import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.query.BindingSet;

import com.bigdata.gom.gpo.IGPO;
import com.bigdata.rdf.model.BigdataValueFactory;

import cutthecrap.utils.striterators.ICloseableIterator;

/**
 * The object manager is the abstraction for a connection the back end.
 */
public interface IObjectManager extends INativeTransaction {

    /**
     * @return the UUID that identifies this ObjectManager
     * 
     * @deprecated Why do we need this? It should be hidden in how we generate
     *             URIs, not part of the public API.
     */
    UUID getID();

    /**
     * Return a canonical {@link IGPO} for the {@link Resource} (canonical
     * within the scope of this object manager) and never null.
     * 
     * @param id
     *            The {@link Resource}.
     * 
     * @return The {@link IGPO}.
     * 
     * @see IGPO#getId()
     */
    /*
     * TODO We need to work through lazy materialization, materialization of
     * facets corresponding to class model information, and reconcilation of
     * property values for an object on commit with respect to the class model
     * information.
     * 
     * TODO How can we deal with blank nodes in this context?
     */
    // Return canonical IGPO for Resource (including Statement) w/in OM scope and never null.
    IGPO getGPO(Resource id);

    IGPO getGPO(Statement stmt);

    /**
     * Partially materialize {@link IGPO}s from a stream of {@link Statement}s.
     * 
     * @param itr
     *            The {@link Statement}s.
     *            
     * @return A hard reference collection that will keep the any materialized
     *         {@link IGPO}s from being finalized before the caller has a chance
     *         to do something with them.
     */
    Map initGPOs(final ICloseableIterator itr);

    /**
     * An iterator that visits the weak reference values in the running object
     * table. You must test each weak reference in order to determine whether
     * its value has been cleared as of the moment that you request that value.
     * The entries visited by the iterator are not "touched" so the use of the
     * iterator will not cause them to be retained any longer than they
     * otherwise would have been retained.
     * 
     * TODO We could do one-step look ahead and buffer a hard reference to the
     * next {@link IGPO} to be visited. That would allow us to eliminate the
     * {@link WeakReference} from this method signature.
     */
    Iterator> getGPOs();
    
    /**
     * Ensure Statements are materialized for gpo's Resource:
     * DESCRIBE ?s.
     */
    void materialize(IGPO gpo);

    /**
     * Close the object manager, which terminates its connection with the
     * backing store. Any open concurrent or nested/native transactions are
     * flushed to the store. The object manager can not be used after it has
     * been closed.
     * 
     * @exception IllegalStateException
     *                if the store is already closed.
     */
    void close();

    /**
     * Return true iff the object manager is backed by some
     * persistence layer.
     */
    boolean isPersistent();

    /**
     * The value factory for the KB instance associated with this object manager
     * view.
     */
    BigdataValueFactory getValueFactory();
    
    /**
     * 
     */
    ICloseableIterator evaluate(String queryStr);

    /**
     * 
     */
    void execute(String updateStr);

    ICloseableIterator evaluateGraph(String query);

	/**
	 * The ObjectManager is able to assign automatic ids for a new object.  These
	 * will be of the form "gpo:#[genid]"
	 * 
	 * @return a new GPO
	 */
	IGPO createGPO();

	/**
	 * Simple save/recall interface that the ObjectManager provides to simplify
	 * other pattern implementations.  Internally it uses a NameManager GPO
	 */
    @Deprecated // Just use the URI directly...
	void save(URI key, Value value);

	/**
	 * Simple save/recall interface that the ObjectManager provides to simplify
	 * other pattern implementations.  Internally it uses a NameManager GPO
	 */
    @Deprecated // Just use the URI directly...
	Value recall(URI key);
	
	IGPO recallAsGPO(URI key);
	
	/**
	 * Return the list of names that have been used to save references. These
	 * are the properties of the internal NameManager.
	 */
    @Deprecated // Just use URIs directly...
	Iterator getNames();

	/**
	 * Remove all assertions involving the specified object.
	 */
	void remove(IGPO gpo);

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy