DeviceRepresentationProviderFactoryImpl.java

package org.keycloak.device;

import org.keycloak.models.KeycloakSession;
import ua_parser.Parser;

public class DeviceRepresentationProviderFactoryImpl implements DeviceRepresentationProviderFactory {

    private volatile Parser parser;

    public static final String PROVIDER_ID = "deviceRepresentation";

    @Override
    public String getId() {
        return PROVIDER_ID;
    }

    @Override
    public DeviceRepresentationProvider create(KeycloakSession session) {
        lazyInit(session);
        return new DeviceRepresentationProviderImpl(session, parser);
    }

    private void lazyInit(KeycloakSession session) {
        if(parser == null) {
            synchronized (this) {
                parser = new Parser();
            }
        }
    }
}