// Path: Simperium/src/main/java/com/simperium/storage/StorageProvider.java
// public interface StorageProvider {
//     /**
//      * Store and query bucket object data
//      */
//     public interface BucketStore<T extends Syncable> {
// 
//         /**
//          * For initializing and performaing any necessary setup for storing
//          * bucket data.
//          */
//         public void prepare(Bucket<T> bucket);
// 
//         /**
//          * Add/Update the given object
//          */
//         public void save(T object, String simperiumKey, String json, List<Index> indexes);
// 
//         /**
//          * Remove the given object from the storage
//          */
//         public void delete(T object);
// 
//         /**
//          * Delete all objects from storage
//          */
//         public void reset();
// 
//         /**
//          * Get an object with the given key
//          */
//         public T get(String key) throws BucketObjectMissingException;
// 
//         /**
//          * All objects, returns a cursor for the given bucket
//          */
//         public Bucket.ObjectCursor<T> all();
// 
//         /**
//          * 
//          */
//         public Bucket.ObjectCursor<T> search(Query<T> query);
// 
//         /**
//          * Return the count for the given query
//          */
//         public int count(Query<T> query);
// 
//     }
// 
//     /**
//      * 
//      */
//     public <T extends Syncable> BucketStore<T> createStore(String bucketName, BucketSchema<T> bucketSchema);
// }


import java.util.concurrent.Executor;
import com.simperium.storage.StorageProvider;
/**
 * Work in progress. Decoupling the pieces of a Simperium client to
 * allow alternate implementations for different platforms and dependency
 * injection for testing.
 */
package com.simperium.client;



public interface ClientFactory {

    public AuthProvider buildAuthProvider(String appId, String appSecret);
    public ChannelProvider buildChannelProvider(String appId);
// Path: Simperium/src/main/java/com/simperium/storage/StorageProvider.java
// public interface StorageProvider {
//     /**
//      * Store and query bucket object data
//      */
//     public interface BucketStore<T extends Syncable> {
// 
//         /**
//          * For initializing and performaing any necessary setup for storing
//          * bucket data.
//          */
//         public void prepare(Bucket<T> bucket);
// 
//         /**
//          * Add/Update the given object
//          */
//         public void save(T object, String simperiumKey, String json, List<Index> indexes);
// 
//         /**
//          * Remove the given object from the storage
//          */
//         public void delete(T object);
// 
//         /**
//          * Delete all objects from storage
//          */
//         public void reset();
// 
//         /**
//          * Get an object with the given key
//          */
//         public T get(String key) throws BucketObjectMissingException;
// 
//         /**
//          * All objects, returns a cursor for the given bucket
//          */
//         public Bucket.ObjectCursor<T> all();
// 
//         /**
//          * 
//          */
//         public Bucket.ObjectCursor<T> search(Query<T> query);
// 
//         /**
//          * Return the count for the given query
//          */
//         public int count(Query<T> query);
// 
//     }
// 
//     /**
//      * 
//      */
//     public <T extends Syncable> BucketStore<T> createStore(String bucketName, BucketSchema<T> bucketSchema);
// }


// Path: Simperium/src/main/java/com/simperium/client/ClientFactory.java
import java.util.concurrent.Executor;
import com.simperium.storage.StorageProvider;

/**
 * Work in progress. Decoupling the pieces of a Simperium client to
 * allow alternate implementations for different platforms and dependency
 * injection for testing.
 */
package com.simperium.client;



public interface ClientFactory {

    public AuthProvider buildAuthProvider(String appId, String appSecret);
    public ChannelProvider buildChannelProvider(String appId);
    public StorageProvider buildStorageProvider();