Search in sources :

Example 1 with StringKeyConvertor

use of org.keycloak.models.map.common.StringKeyConvertor in project keycloak by keycloak.

the class ConcurrentHashMapStorageProviderFactory method loadMap.

@SuppressWarnings("unchecked")
private <K, V extends AbstractEntity & UpdatableEntity, M> ConcurrentHashMapStorage<K, V, M> loadMap(String mapName, Class<M> modelType, EnumSet<Flag> flags) {
    final StringKeyConvertor kc = keyConvertors.getOrDefault(mapName, defaultKeyConvertor);
    Class<?> valueType = ModelEntityUtil.getEntityType(modelType);
    LOG.debugf("Initializing new map storage: %s", mapName);
    ConcurrentHashMapStorage<K, V, M> store;
    if (modelType == UserSessionModel.class) {
        ConcurrentHashMapStorage clientSessionStore = getStorage(AuthenticatedClientSessionModel.class);
        store = new UserSessionConcurrentHashMapStorage(clientSessionStore, kc, CLONER) {

            @Override
            public String toString() {
                return "ConcurrentHashMapStorage(" + mapName + suffix + ")";
            }
        };
    } else {
        store = new ConcurrentHashMapStorage(modelType, kc, CLONER) {

            @Override
            public String toString() {
                return "ConcurrentHashMapStorage(" + mapName + suffix + ")";
            }
        };
    }
    if (!flags.contains(Flag.INITIALIZE_EMPTY)) {
        final File f = getFile(mapName);
        if (f != null && f.exists()) {
            try {
                LOG.debugf("Restoring contents from %s", f.getCanonicalPath());
                Class<?> valueImplType = CLONER.newInstanceType(valueType);
                if (valueImplType == null) {
                    valueImplType = valueType;
                }
                JavaType type = Serialization.MAPPER.getTypeFactory().constructCollectionType(LinkedList.class, valueImplType);
                List<V> values = Serialization.MAPPER.readValue(f, type);
                values.forEach((V mce) -> store.create(mce));
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        }
    }
    return store;
}
Also used : IOException(java.io.IOException) JavaType(com.fasterxml.jackson.databind.JavaType) StringKeyConvertor(org.keycloak.models.map.common.StringKeyConvertor) File(java.io.File)

Aggregations

JavaType (com.fasterxml.jackson.databind.JavaType)1 File (java.io.File)1 IOException (java.io.IOException)1 StringKeyConvertor (org.keycloak.models.map.common.StringKeyConvertor)1