@@ -0,0 +1,1493 @@
+package org.osgl.util;%0A%0Aimport java.util.HashMap;%0Aimport java.util.Map;%0Aimport java.util.Set;%0A%0A/**%0A * A map of (String, %7B@link ValueObject%7D)%0A */%0A@SuppressWarnings(%22unused%22)%0Apublic class KVStore extends HashMap%3CString, ValueObject%3E implements Map%3CString, ValueObject%3E %7B%0A%0A    public KVStore() %7B%0A    %7D%0A%0A    /**%0A     * Put a simple data into the store with a key. The type of simple data%0A     * should be allowed by %7B@link ValueObject%7D%0A     * @param key the key%0A     * @param val the value%0A     * @return this store instance after the put operation finished%0A     * @see ValueObject%0A     */%0A    public KVStore putValue(String key, Object val) %7B%0A        put(key, ValueObject.of(val));%0A        return this;%0A    %7D%0A%0A    /**%0A     * Get %7B@link ValueObject#value() value object value%7D by key from the%0A     * store.%0A     * @param key the key%0A     * @param %3CT%3E the generic type of the return value%0A     * @return the value stored in the value object associated with the key%0A     * @see ValueObject#value()%0A     */%0A    public %3CT%3E T getValue(String key) %7B%0A        return get(key).value();%0A    %7D%0A%0A    /**%0A     * Put a map of (key, value) pair into the store. The value could be any type%0A     * that supported by %7B@link ValueObject%7D%0A     * @param kvMap a map of %7Bkey, value%7D pair%0A     * @return the store after put operation finished%0A     */%0A    public void putValueMap(Map%3CString, ?%3E kvMap) %7B%0A        for (String key : kvMap.keySet()) %7B%0A            put(key, ValueObject.of(kvMap.get(key)));%0A        %7D%0A    %7D%0A%0A%7D%0A

add KVStore container that stores the (String, ValueObject) pairs