package org.neodatis.odb.core;

import java.io.IOException;
import java.net.Socket;

import org.neodatis.odb.OID;
import org.neodatis.odb.core.layers.layer1.introspector.IClassIntrospector;
import org.neodatis.odb.core.layers.layer1.introspector.IObjectIntrospector;
import org.neodatis.odb.core.layers.layer2.instance.IClassPool;
import org.neodatis.odb.core.layers.layer2.instance.IInstanceBuilder;
import org.neodatis.odb.core.layers.layer3.IBaseIdentification;
import org.neodatis.odb.core.layers.layer3.IBufferedIO;
import org.neodatis.odb.core.layers.layer3.IIdManager;
import org.neodatis.odb.core.layers.layer3.IObjectReader;
import org.neodatis.odb.core.layers.layer3.IObjectWriter;
import org.neodatis.odb.core.layers.layer3.IRefactorManager;
import org.neodatis.odb.core.layers.layer3.IStorageEngine;
import org.neodatis.odb.core.layers.layer3.engine.IByteArrayConverter;
import org.neodatis.odb.core.layers.layer3.engine.IFileSystemInterface;
import org.neodatis.odb.core.query.IQuery;
import org.neodatis.odb.core.query.execution.IMatchingObjectAction;
import org.neodatis.odb.core.server.layers.layer1.IClientObjectIntrospector;
import org.neodatis.odb.core.server.layers.layer3.engine.IMessageStreamer;
import org.neodatis.odb.core.server.layers.layer3.engine.IServerStorageEngine;
import org.neodatis.odb.core.server.transaction.ISessionManager;
import org.neodatis.odb.core.transaction.ISession;
import org.neodatis.odb.core.transaction.ITransaction;
import org.neodatis.odb.core.transaction.IWriteAction;
import org.neodatis.odb.core.trigger.ITriggerManager;

/**
 * This is the default Core Object Provider.
 * 
 * 
 * @author olivier
 *
 */
public interface ICoreProvider extends ITwoPhaseInit {
	
	IStorageEngine getClientStorageEngine(IBaseIdentification baseIdentification);
	IServerStorageEngine getServerStorageEngine(IBaseIdentification baseIdentification);
	IByteArrayConverter getByteArrayConverter();
	
	/**TODO Return a list of IO to enable replication or other IO mechanism
	 * Used by the FileSystemInterface to actual write/read byte to underlying storage
	 * @param name The name of the buffered io
	 * @param parameters The parameters that define the buffer
	 * @param bufferSize The size of the buffers
	 * @return The buffer implementation
	 * @
	 */
	public IBufferedIO getIO(String name,IBaseIdentification parameters,int bufferSize);
	
	/**
	 * Returns the Local Instance Builder
	 */
	public IInstanceBuilder getLocalInstanceBuilder(IStorageEngine engine);
	public IInstanceBuilder getServerInstanceBuilder(IStorageEngine engine);
	
	public IObjectIntrospector getLocalObjectIntrospector(IStorageEngine engine);
	public IClientObjectIntrospector getClientObjectIntrospector(IStorageEngine engine, String connectionId);
	public IObjectIntrospector getServerObjectIntrospector(IStorageEngine engine);
	public IObjectWriter getClientObjectWriter(IStorageEngine engine);
	public IObjectReader getClientObjectReader(IStorageEngine engine) ;
	public ITriggerManager getLocalTriggerManager(IStorageEngine engine);
	public ITriggerManager getServerTriggerManager(IStorageEngine engine);
	public IClassIntrospector getClassIntrospector();
	public IIdManager getClientIdManager(IStorageEngine engine);
	public IIdManager getServerIdManager(IStorageEngine engine);
	public IObjectWriter getServerObjectWriter(IStorageEngine engine) ;
	public IObjectReader getServerObjectReader(IStorageEngine engine) ;
	
	// Transaction
	public ISessionManager getClientServerSessionManager();
	public ITransaction getTransaction(ISession session, IFileSystemInterface fsi) ;
	public IWriteAction getWriteAction(long position, byte[] bytes);
	public ISession getLocalSession(IStorageEngine engine) ;
	public ISession getClientSession(IStorageEngine engine) ;
	public ISession getServerSession(IStorageEngine engine, String sessionId) ;
	
	public IRefactorManager getRefactorManager(IStorageEngine engine);
	
	// For query result handler
	
	/** Returns the query result handler for normal query result (that return a collection of objects)
	 * 
	 */
	public IMatchingObjectAction getCollectionQueryResultAction(IStorageEngine engine, IQuery query,boolean inMemory, boolean returnObjects);
	
	// OIDs
	public OID getObjectOID(long objectOid, long classOid );
	public OID getClassOID(long oid);
	public OID getExternalObjectOID(long objectOid, long classOid );
	public OID getExternalClassOID(long oid);
	public IClassPool getClassPool();
	
	public void resetClassDefinitions();
	/**To retrieve the message streamer. used for client server communication
	 * @param socket
	 * @return
	 * @throws IOException 
	 */
	IMessageStreamer getMessageStreamer(Socket socket);
	IMessageStreamer getMessageStreamer(String host, int port, String name);
	public void removeLocalTriggerManager(IStorageEngine engine);
}

 

Ads help maintain this website.