// Path: app/src/main/java/io/dwak/holohackernews/app/cache/CacheManager.java
// public class CacheManager {
//     private static final int DEFAULT_CACHE_SIZE = 1024 * 1024 * 10;
//     private static final int DEFAULT_MEM_CACHE_SIZE = 20;
//     private static final int VALUE_COUNT = 1;
//     private static final String HASH_ALGORITHM = "MD5";
//     private static final String STRING_ENCODING = "UTF-8";
//     private DiskLruCache mDiskLruCache;
//     private final LruCache mMemCache;
//     private final File mDirectory;
//     private Gson mGson;
//     private static CacheManager sCacheManager;
// 
//     public static CacheManager getInstance(Context context, Gson gson){
//         if(sCacheManager == null){
//             sCacheManager = new CacheManager(context, gson);
//         }
// 
//         return sCacheManager;
//     }
//     public CacheManager() {
//         mDiskLruCache = null;
//         mMemCache = null;
//         mDirectory = null;
//         mGson = null;
//     }
// 
//     public CacheManager(Context context, Gson gson){
//         mDirectory= new File(context.getCacheDir() + "/cache");
//         if (!mDirectory.exists()) {
//             mDirectory.mkdirs();
//         }
//         mMemCache = new LruCache(DEFAULT_MEM_CACHE_SIZE);
//         mGson = gson;
//         open();
//     }
// 
//     private void open() {
//         try {
//             mDiskLruCache = DiskLruCache.open(mDirectory, BuildConfig.VERSION_CODE, VALUE_COUNT, DEFAULT_CACHE_SIZE);
//         } catch (IOException e) {
//             Thread.dumpStack();
//         }
//     }
// 
// 
//     public void clear() throws IOException {
//         mDiskLruCache.delete();
//         mMemCache.evictAll();
//         open();
//     }
// 
//     public boolean delete(String key) throws IOException {
//         mMemCache.remove(key);
//         return mDiskLruCache.remove(getHashOf(key));
//     }
// 
//     public <T> T get(String key, Type type) throws IOException {
//         T ob = (T) mMemCache.get(key);
//         if (ob != null) {
//             return ob;
//         }
//         DiskLruCache.Snapshot snapshot = mDiskLruCache.get(getHashOf(key));
//         if (snapshot != null) {
//             String value = snapshot.getString(0);
//             ob = mGson.fromJson(value, type);
//         }
//         return ob;
//     }
// 
//     public void put(String key, Object object) throws IOException {
//         mMemCache.put(key, object);
//         DiskLruCache.Editor editor = null;
//         try {
//             editor = mDiskLruCache.edit(getHashOf(key));
//             if (editor == null) {
//                 return;
//             }
//             if (writeValueToCache(mGson.toJson(object), editor)) {
//                 mDiskLruCache.flush();
//                 editor.commit();
//             }
//             else {
//                 editor.abort();
//             }
//         } catch (IOException e) {
//             if (editor != null) {
//                 editor.abort();
//             }
// 
//             throw e;
//         }
// 
//     }
// 
//     protected boolean writeValueToCache(String value, DiskLruCache.Editor editor) throws IOException {
//         OutputStream outputStream = null;
//         try {
//             outputStream = new BufferedOutputStream(editor.newOutputStream(0));
//             outputStream.write(value.getBytes(STRING_ENCODING));
//         } finally {
//             if (outputStream != null) {
//                 outputStream.close();
//             }
//         }
// 
//         return true;
//     }
// 
// 
//     protected String getHashOf(String string) throws UnsupportedEncodingException {
//         try {
//             MessageDigest messageDigest = null;
//             messageDigest = MessageDigest.getInstance(HASH_ALGORITHM);
//             messageDigest.update(string.getBytes(STRING_ENCODING));
//             byte[] digest = messageDigest.digest();
//             BigInteger bigInt = new BigInteger(1, digest);
// 
//             return bigInt.toString(16);
//         } catch (NoSuchAlgorithmException e) {
// 
//             return string;
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/io/dwak/holohackernews/app/dagger/module/AppModule.java
// @Module
// public class AppModule {
//     public static final String CACHE_MANAGER = "cacheManager";
//     public static final String RESOURCES = "resources";
//     Application mApplication;
// 
//     public AppModule(Application application) {
//         mApplication = application;
//     }
// 
//     @Provides
//     @Named("context")
//     Context providesApplication() {
//         return mApplication;
//     }
// 
// 
//     @Provides
//     @Named(RESOURCES)
//     Resources providesResources() {
//         return mApplication.getResources();
//     }
// 
//     @Provides
//     @Named("gson")
//     Gson providesGson() {
//         return new GsonBuilder().registerTypeAdapter(Long.class, new LongTypeAdapter())
//                                 .create();
//     }
// 
//     @Provides
//     @Singleton
//     @Named("loganSquare")
//     LoganSquareConvertor providesLoganSquare(){
//         return new LoganSquareConvertor();
//     }
// 
//     @Provides
//     @Named("retrofit-loglevel")
//     RestAdapter.LogLevel providesLogLevel(){
//         if(BuildConfig.DEBUG) {
//             return RestAdapter.LogLevel.FULL;
//         }
//         else {
//             return RestAdapter.LogLevel.NONE;
//         }
//     }
// 
//     @Provides
//     @Named(CACHE_MANAGER)
//     CacheManager providesCacheManager(@Named("context")Context context,
//                                       @Named("gson") Gson gson){
//         return CacheManager.getInstance(context, gson);
//     }
// }


import android.app.Application;
import android.content.res.Resources;
import javax.inject.Named;
import dagger.Component;
import io.dwak.holohackernews.app.cache.CacheManager;
import io.dwak.holohackernews.app.dagger.module.AppModule;
package io.dwak.holohackernews.app.dagger.component;




@Component(modules = {AppModule.class})
public interface AppComponent {
    void inject(Application application);

    @Named(AppModule.CACHE_MANAGER)
// Path: app/src/main/java/io/dwak/holohackernews/app/cache/CacheManager.java
// public class CacheManager {
//     private static final int DEFAULT_CACHE_SIZE = 1024 * 1024 * 10;
//     private static final int DEFAULT_MEM_CACHE_SIZE = 20;
//     private static final int VALUE_COUNT = 1;
//     private static final String HASH_ALGORITHM = "MD5";
//     private static final String STRING_ENCODING = "UTF-8";
//     private DiskLruCache mDiskLruCache;
//     private final LruCache mMemCache;
//     private final File mDirectory;
//     private Gson mGson;
//     private static CacheManager sCacheManager;
// 
//     public static CacheManager getInstance(Context context, Gson gson){
//         if(sCacheManager == null){
//             sCacheManager = new CacheManager(context, gson);
//         }
// 
//         return sCacheManager;
//     }
//     public CacheManager() {
//         mDiskLruCache = null;
//         mMemCache = null;
//         mDirectory = null;
//         mGson = null;
//     }
// 
//     public CacheManager(Context context, Gson gson){
//         mDirectory= new File(context.getCacheDir() + "/cache");
//         if (!mDirectory.exists()) {
//             mDirectory.mkdirs();
//         }
//         mMemCache = new LruCache(DEFAULT_MEM_CACHE_SIZE);
//         mGson = gson;
//         open();
//     }
// 
//     private void open() {
//         try {
//             mDiskLruCache = DiskLruCache.open(mDirectory, BuildConfig.VERSION_CODE, VALUE_COUNT, DEFAULT_CACHE_SIZE);
//         } catch (IOException e) {
//             Thread.dumpStack();
//         }
//     }
// 
// 
//     public void clear() throws IOException {
//         mDiskLruCache.delete();
//         mMemCache.evictAll();
//         open();
//     }
// 
//     public boolean delete(String key) throws IOException {
//         mMemCache.remove(key);
//         return mDiskLruCache.remove(getHashOf(key));
//     }
// 
//     public <T> T get(String key, Type type) throws IOException {
//         T ob = (T) mMemCache.get(key);
//         if (ob != null) {
//             return ob;
//         }
//         DiskLruCache.Snapshot snapshot = mDiskLruCache.get(getHashOf(key));
//         if (snapshot != null) {
//             String value = snapshot.getString(0);
//             ob = mGson.fromJson(value, type);
//         }
//         return ob;
//     }
// 
//     public void put(String key, Object object) throws IOException {
//         mMemCache.put(key, object);
//         DiskLruCache.Editor editor = null;
//         try {
//             editor = mDiskLruCache.edit(getHashOf(key));
//             if (editor == null) {
//                 return;
//             }
//             if (writeValueToCache(mGson.toJson(object), editor)) {
//                 mDiskLruCache.flush();
//                 editor.commit();
//             }
//             else {
//                 editor.abort();
//             }
//         } catch (IOException e) {
//             if (editor != null) {
//                 editor.abort();
//             }
// 
//             throw e;
//         }
// 
//     }
// 
//     protected boolean writeValueToCache(String value, DiskLruCache.Editor editor) throws IOException {
//         OutputStream outputStream = null;
//         try {
//             outputStream = new BufferedOutputStream(editor.newOutputStream(0));
//             outputStream.write(value.getBytes(STRING_ENCODING));
//         } finally {
//             if (outputStream != null) {
//                 outputStream.close();
//             }
//         }
// 
//         return true;
//     }
// 
// 
//     protected String getHashOf(String string) throws UnsupportedEncodingException {
//         try {
//             MessageDigest messageDigest = null;
//             messageDigest = MessageDigest.getInstance(HASH_ALGORITHM);
//             messageDigest.update(string.getBytes(STRING_ENCODING));
//             byte[] digest = messageDigest.digest();
//             BigInteger bigInt = new BigInteger(1, digest);
// 
//             return bigInt.toString(16);
//         } catch (NoSuchAlgorithmException e) {
// 
//             return string;
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/io/dwak/holohackernews/app/dagger/module/AppModule.java
// @Module
// public class AppModule {
//     public static final String CACHE_MANAGER = "cacheManager";
//     public static final String RESOURCES = "resources";
//     Application mApplication;
// 
//     public AppModule(Application application) {
//         mApplication = application;
//     }
// 
//     @Provides
//     @Named("context")
//     Context providesApplication() {
//         return mApplication;
//     }
// 
// 
//     @Provides
//     @Named(RESOURCES)
//     Resources providesResources() {
//         return mApplication.getResources();
//     }
// 
//     @Provides
//     @Named("gson")
//     Gson providesGson() {
//         return new GsonBuilder().registerTypeAdapter(Long.class, new LongTypeAdapter())
//                                 .create();
//     }
// 
//     @Provides
//     @Singleton
//     @Named("loganSquare")
//     LoganSquareConvertor providesLoganSquare(){
//         return new LoganSquareConvertor();
//     }
// 
//     @Provides
//     @Named("retrofit-loglevel")
//     RestAdapter.LogLevel providesLogLevel(){
//         if(BuildConfig.DEBUG) {
//             return RestAdapter.LogLevel.FULL;
//         }
//         else {
//             return RestAdapter.LogLevel.NONE;
//         }
//     }
// 
//     @Provides
//     @Named(CACHE_MANAGER)
//     CacheManager providesCacheManager(@Named("context")Context context,
//                                       @Named("gson") Gson gson){
//         return CacheManager.getInstance(context, gson);
//     }
// }


// Path: app/src/main/java/io/dwak/holohackernews/app/dagger/component/AppComponent.java
import android.app.Application;
import android.content.res.Resources;
import javax.inject.Named;
import dagger.Component;
import io.dwak.holohackernews.app.cache.CacheManager;
import io.dwak.holohackernews.app.dagger.module.AppModule;

package io.dwak.holohackernews.app.dagger.component;




@Component(modules = {AppModule.class})
public interface AppComponent {
    void inject(Application application);

    @Named(AppModule.CACHE_MANAGER)
    CacheManager getCacheManager();