// Path: framework/src/main/java/com/kifile/android/cornerstone/core/DataObserver.java
// public interface DataObserver<DATA> {
// 
//     /**
//      * Watch if the data of {@link DataProvider} is changed.
//      *
//      * @param data
//      */
//     void onDataChanged(DATA data);
// }
// 
// Path: framework/src/main/java/com/kifile/android/cornerstone/core/DataProvider.java
// public interface DataProvider<DATA> {
// 
//     void setFetcher(DataFetcher<DATA> fetcher);
// 
//     /**
//      * Add the observer into watch list, when data changed, notify it.
//      *
//      * @param observer
//      */
//     void registerDataObserver(DataObserver<DATA> observer);
// 
//     /**
//      * Remove observer from watch list.
//      *
//      * @param observer
//      */
//     void unregisterDataObserver(DataObserver<DATA> observer);
// 
//     /**
//      * Refresh data.
//      */
//     void refresh();
// 
//     /**
//      * Notify observers data changed.
//      */
//     void notifyDataChanged();
// 
//     DATA getData();
// 
//     /**
//      * @return If the data need update, return true.
//      */
//     boolean isDataNeedUpdate();
// 
//     /**
//      * Release the resources when destroy. If the worker thread is working, stop it.
//      */
//     void release();
// }


import com.kifile.android.cornerstone.core.DataObserver;
import com.kifile.android.cornerstone.core.DataProvider;
import java.util.HashMap;
import java.util.Map;
        provider.notifyDataChanged();
    }

    @Override
    public void registerDataObserver(DataObserver observer) {
        throw new UnsupportedOperationException("Cannot register observer in " + getClass().getName());
    }

    @Override
    public void unregisterDataObserver(DataObserver observer) {
        throw new UnsupportedOperationException("Cannot register observer in " + getClass().getName());
    }

    public void registerDataObserver(String key, DataObserver observer) {
        DataProvider provider = getProvider(key);
        if (provider == null) {
            throw new IllegalArgumentException();
        }
        provider.registerDataObserver(observer);
    }

    public void unregisterDataObserver(String key, DataObserver observer) {
        DataProvider provider = getProvider(key);
        if (provider == null) {
            throw new IllegalArgumentException();
        }
        provider.unregisterDataObserver(observer);
    }

    @Override
// Path: framework/src/main/java/com/kifile/android/cornerstone/core/DataObserver.java
// public interface DataObserver<DATA> {
// 
//     /**
//      * Watch if the data of {@link DataProvider} is changed.
//      *
//      * @param data
//      */
//     void onDataChanged(DATA data);
// }
// 
// Path: framework/src/main/java/com/kifile/android/cornerstone/core/DataProvider.java
// public interface DataProvider<DATA> {
// 
//     void setFetcher(DataFetcher<DATA> fetcher);
// 
//     /**
//      * Add the observer into watch list, when data changed, notify it.
//      *
//      * @param observer
//      */
//     void registerDataObserver(DataObserver<DATA> observer);
// 
//     /**
//      * Remove observer from watch list.
//      *
//      * @param observer
//      */
//     void unregisterDataObserver(DataObserver<DATA> observer);
// 
//     /**
//      * Refresh data.
//      */
//     void refresh();
// 
//     /**
//      * Notify observers data changed.
//      */
//     void notifyDataChanged();
// 
//     DATA getData();
// 
//     /**
//      * @return If the data need update, return true.
//      */
//     boolean isDataNeedUpdate();
// 
//     /**
//      * Release the resources when destroy. If the worker thread is working, stop it.
//      */
//     void release();
// }


// Path: framework/src/main/java/com/kifile/android/cornerstone/impl/providers/CombinedDataProvider.java
import com.kifile.android.cornerstone.core.DataObserver;
import com.kifile.android.cornerstone.core.DataProvider;
import java.util.HashMap;
import java.util.Map;

        provider.notifyDataChanged();
    }

    @Override
    public void registerDataObserver(DataObserver observer) {
        throw new UnsupportedOperationException("Cannot register observer in " + getClass().getName());
    }

    @Override
    public void unregisterDataObserver(DataObserver observer) {
        throw new UnsupportedOperationException("Cannot register observer in " + getClass().getName());
    }

    public void registerDataObserver(String key, DataObserver observer) {
        DataProvider provider = getProvider(key);
        if (provider == null) {
            throw new IllegalArgumentException();
        }
        provider.registerDataObserver(observer);
    }

    public void unregisterDataObserver(String key, DataObserver observer) {
        DataProvider provider = getProvider(key);
        if (provider == null) {
            throw new IllegalArgumentException();
        }
        provider.unregisterDataObserver(observer);
    }

    @Override
    public void release() {