// Path: Simperium/src/main/java/com/simperium/client/ClientFactory.java
// public interface ClientFactory {
// 
//     public AuthProvider buildAuthProvider(String appId, String appSecret);
//     public ChannelProvider buildChannelProvider(String appId);
//     public StorageProvider buildStorageProvider();
//     public GhostStorageProvider buildGhostStorageProvider();
//     public Executor buildExecutor();
// 
// }
// 
// Path: Simperium/src/main/java/com/simperium/storage/MemoryStore.java
// public class MemoryStore implements StorageProvider {
//     
//     public <T extends Syncable> BucketStore<T> createStore(String bucketName, BucketSchema<T> schema){
//         return new Storage<T>();
//     }
//     
//     class Storage<T extends Syncable> implements StorageProvider.BucketStore<T> {
//         private Map<String, T> objects = Collections.synchronizedMap(new HashMap<String, T>(32));
// 
//         @Override
//         public void prepare(Bucket<T> bucket){
//             // noop
//         }
// 
//         /**
//          * Add/Update the given object
//          */
//         @Override
//         public void save(T object, String simperiumKey, String json, List<Index> indexes) {
//             objects.put(simperiumKey, object);
//         }
// 
//         /**
//          * Remove the given object from the storage
//          */
//         @Override
//         public void delete(T object){
//             objects.remove(object.getSimperiumKey());
//         }
// 
//         /**
//          * Delete all objects from storage
//          */
//         @Override
//         public void reset(){
//             objects.clear();
//         }
// 
//         /**
//          * Get an object with the given key
//          */
//         @Override
//         public T get(String key){
//             return objects.get(key);
//         }
// 
//         /**
//          * Get a cursor to all the objects
//          */
//         public Bucket.ObjectCursor<T> all(){
//             return null;
//         }
// 
//         /**
//          * Search
//          */
//         public Bucket.ObjectCursor<T> search(Query query){
//             return null;
//         }
// 
//         /**
//          * Count
//          */
//         public int count(Query query){
//             return 0;
//         }
//     }
// 
// }


import com.simperium.client.ClientFactory;
import com.simperium.storage.MemoryStore;
/**
 * A nice fake client
 */
package com.simperium.test;


public class MockClient implements ClientFactory {

    public MockAuthProvider authProvider = new MockAuthProvider();
    public MockChannelProvider channelProvider = new MockChannelProvider();

    @Override
    public MockAuthProvider buildAuthProvider(String appId, String appSecret){
        return authProvider;
    }

    @Override
    public MockChannelProvider buildChannelProvider(String appId){
        return channelProvider;
    }

    @Override
// Path: Simperium/src/main/java/com/simperium/client/ClientFactory.java
// public interface ClientFactory {
// 
//     public AuthProvider buildAuthProvider(String appId, String appSecret);
//     public ChannelProvider buildChannelProvider(String appId);
//     public StorageProvider buildStorageProvider();
//     public GhostStorageProvider buildGhostStorageProvider();
//     public Executor buildExecutor();
// 
// }
// 
// Path: Simperium/src/main/java/com/simperium/storage/MemoryStore.java
// public class MemoryStore implements StorageProvider {
//     
//     public <T extends Syncable> BucketStore<T> createStore(String bucketName, BucketSchema<T> schema){
//         return new Storage<T>();
//     }
//     
//     class Storage<T extends Syncable> implements StorageProvider.BucketStore<T> {
//         private Map<String, T> objects = Collections.synchronizedMap(new HashMap<String, T>(32));
// 
//         @Override
//         public void prepare(Bucket<T> bucket){
//             // noop
//         }
// 
//         /**
//          * Add/Update the given object
//          */
//         @Override
//         public void save(T object, String simperiumKey, String json, List<Index> indexes) {
//             objects.put(simperiumKey, object);
//         }
// 
//         /**
//          * Remove the given object from the storage
//          */
//         @Override
//         public void delete(T object){
//             objects.remove(object.getSimperiumKey());
//         }
// 
//         /**
//          * Delete all objects from storage
//          */
//         @Override
//         public void reset(){
//             objects.clear();
//         }
// 
//         /**
//          * Get an object with the given key
//          */
//         @Override
//         public T get(String key){
//             return objects.get(key);
//         }
// 
//         /**
//          * Get a cursor to all the objects
//          */
//         public Bucket.ObjectCursor<T> all(){
//             return null;
//         }
// 
//         /**
//          * Search
//          */
//         public Bucket.ObjectCursor<T> search(Query query){
//             return null;
//         }
// 
//         /**
//          * Count
//          */
//         public int count(Query query){
//             return 0;
//         }
//     }
// 
// }


// Path: Simperium/src/support/java/com/simperium/test/MockClient.java
import com.simperium.client.ClientFactory;
import com.simperium.storage.MemoryStore;

/**
 * A nice fake client
 */
package com.simperium.test;


public class MockClient implements ClientFactory {

    public MockAuthProvider authProvider = new MockAuthProvider();
    public MockChannelProvider channelProvider = new MockChannelProvider();

    @Override
    public MockAuthProvider buildAuthProvider(String appId, String appSecret){
        return authProvider;
    }

    @Override
    public MockChannelProvider buildChannelProvider(String appId){
        return channelProvider;
    }

    @Override
    public MemoryStore buildStorageProvider(){