// Path: cachebank/src/main/java/net/jspiner/cachebank/DataEmitter.java
// public interface DataEmitter<T> {
// 
//     void emit(T data);
// 
// }
// 
// Path: cachebank/src/main/java/net/jspiner/cachebank/DataSource.java
// public interface DataSource<K, T> {
// 
//     void fetchData(K key, DataEmitter<T> emitter);
// 
// }
// 
// Path: cachebank/src/test/java/net/jspiner/cachebank/DummyNetwork.java
// public class DummyNetwork {
// 
//     /*
//     Dummy CarModel
//      */
//     private static CarModel sonataModel = new CarModel(
//             1255,
//             "sonata"
//     );
//     private static CarModel avanteModel = new CarModel(
//             1256,
//             "avante"
//     );
//     private static CarModel i30Model = new CarModel(
//             1257,
//             "i30"
//     );
// 
//     /*
//     Dummy FoodModel
//      */
//     private static FoodModel burgerModel = new FoodModel(
//             2311,
//             "burger"
//     );
//     private static FoodModel breadModel = new FoodModel(
//             2312,
//             "bread"
//     );
//     private static FoodModel pizzaModel = new FoodModel(
//             2313,
//             "pizza"
//     );
// 
// 
//     public static CarModel requestCar(String key){
//         if(key == null){
//             return null;
//         }
//         if(key.equals("sonata"))
//             return sonataModel;
//         if(key.equals("avante"))
//             return avanteModel;
//         if(key.equals("i30"))
//             return i30Model;
//         return null;
//     }
// 
//     public static FoodModel requestFood(String key){
//         if(key == null){
//             return null;
//         }
//         if(key.equals("burger"))
//             return burgerModel;
//         if(key.equals("bread"))
//             return breadModel;
//         if(key.equals("pizza"))
//             return pizzaModel;
//         return null;
//     }
// 
//     public static Observable<FoodModel> requestFoodObservable(String key){
//         return Observable.create(emitter -> {
//             emitter.onNext(requestFood(key));
//             emitter.onComplete();
//         });
//     }
// 
// 
// }
// 
// Path: cachebank/src/test/java/net/jspiner/cachebank/model/CarModel.java
// public class CarModel {
// 
//     public int index;
//     public String carName;
// 
//     public CarModel(){
// 
//     }
// 
//     public CarModel(int index, String carName){
//         this.index = index;
//         this.carName = carName;
//     }
// 
// }


import net.jspiner.cachebank.DataEmitter;
import net.jspiner.cachebank.DataSource;
import net.jspiner.cachebank.DummyNetwork;
import net.jspiner.cachebank.model.CarModel;
package net.jspiner.cachebank.datasource;


/**
 * Created by prnd on 2018. 1. 16..
 */

public class CarDataSource implements DataSource<String, CarModel> {

    @Override
    public void fetchData(String key, DataEmitter<CarModel> emitter) {
        emitter.emit(
// Path: cachebank/src/main/java/net/jspiner/cachebank/DataEmitter.java
// public interface DataEmitter<T> {
// 
//     void emit(T data);
// 
// }
// 
// Path: cachebank/src/main/java/net/jspiner/cachebank/DataSource.java
// public interface DataSource<K, T> {
// 
//     void fetchData(K key, DataEmitter<T> emitter);
// 
// }
// 
// Path: cachebank/src/test/java/net/jspiner/cachebank/DummyNetwork.java
// public class DummyNetwork {
// 
//     /*
//     Dummy CarModel
//      */
//     private static CarModel sonataModel = new CarModel(
//             1255,
//             "sonata"
//     );
//     private static CarModel avanteModel = new CarModel(
//             1256,
//             "avante"
//     );
//     private static CarModel i30Model = new CarModel(
//             1257,
//             "i30"
//     );
// 
//     /*
//     Dummy FoodModel
//      */
//     private static FoodModel burgerModel = new FoodModel(
//             2311,
//             "burger"
//     );
//     private static FoodModel breadModel = new FoodModel(
//             2312,
//             "bread"
//     );
//     private static FoodModel pizzaModel = new FoodModel(
//             2313,
//             "pizza"
//     );
// 
// 
//     public static CarModel requestCar(String key){
//         if(key == null){
//             return null;
//         }
//         if(key.equals("sonata"))
//             return sonataModel;
//         if(key.equals("avante"))
//             return avanteModel;
//         if(key.equals("i30"))
//             return i30Model;
//         return null;
//     }
// 
//     public static FoodModel requestFood(String key){
//         if(key == null){
//             return null;
//         }
//         if(key.equals("burger"))
//             return burgerModel;
//         if(key.equals("bread"))
//             return breadModel;
//         if(key.equals("pizza"))
//             return pizzaModel;
//         return null;
//     }
// 
//     public static Observable<FoodModel> requestFoodObservable(String key){
//         return Observable.create(emitter -> {
//             emitter.onNext(requestFood(key));
//             emitter.onComplete();
//         });
//     }
// 
// 
// }
// 
// Path: cachebank/src/test/java/net/jspiner/cachebank/model/CarModel.java
// public class CarModel {
// 
//     public int index;
//     public String carName;
// 
//     public CarModel(){
// 
//     }
// 
//     public CarModel(int index, String carName){
//         this.index = index;
//         this.carName = carName;
//     }
// 
// }


// Path: cachebank/src/test/java/net/jspiner/cachebank/datasource/CarDataSource.java
import net.jspiner.cachebank.DataEmitter;
import net.jspiner.cachebank.DataSource;
import net.jspiner.cachebank.DummyNetwork;
import net.jspiner.cachebank.model.CarModel;

package net.jspiner.cachebank.datasource;


/**
 * Created by prnd on 2018. 1. 16..
 */

public class CarDataSource implements DataSource<String, CarModel> {

    @Override
    public void fetchData(String key, DataEmitter<CarModel> emitter) {
        emitter.emit(
                DummyNetwork.requestCar(key)