RegistrationServiceImpl.java 3.08 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.google.common.cache.Cache
 *  com.google.common.cache.CacheBuilder
 *  javax.annotation.CheckForNull
 *  javax.annotation.Nonnull
 *  javax.annotation.Nullable
 *  org.apache.felix.scr.annotations.Activate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Service
 *  org.osgi.service.component.ComponentContext
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.screens.device.registration.impl;

import com.adobe.cq.screens.device.registration.PendingDevice;
import com.adobe.cq.screens.device.registration.RegistrationService;
import com.adobe.cq.screens.device.registration.impl.PendingDeviceImpl;
import com.adobe.cq.screens.device.registration.impl.RegistrationException;
import com.adobe.cq.screens.device.registration.impl.RegistrationManager;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service(value={RegistrationManager.class, RegistrationService.class})
@Component
public class RegistrationServiceImpl
implements RegistrationManager {
    private static final Logger log = LoggerFactory.getLogger(PendingDeviceImpl.class);
    private static final int CACHE_MAX_SIZE = 10000;
    private static final int CACHE_ITEM_EXPIRATION_TIME = 24;
    private Cache<String, PendingDevice> deviceCache;

    @Activate
    protected void activate(ComponentContext context) {
        this.deviceCache = CacheBuilder.newBuilder().maximumSize(10000).expireAfterAccess(24, TimeUnit.HOURS).build();
    }

    @CheckForNull
    @Override
    public PendingDevice removeDevice(@Nonnull String token) {
        PendingDevice device = this.getDevice(token);
        this.deviceCache.invalidate((Object)token);
        return device;
    }

    @Override
    public void addDevice(@Nonnull PendingDevice device) throws RegistrationException {
        this.deviceCache.put((Object)device.getToken(), (Object)device);
    }

    @CheckForNull
    @Override
    public PendingDevice getDevice(@Nonnull String token) {
        return (PendingDevice)this.deviceCache.getIfPresent((Object)token);
    }

    @Nonnull
    @Override
    public Iterator<PendingDevice> getDevices(@Nullable PendingDevice.State state) {
        ArrayList<PendingDevice> res = new ArrayList<PendingDevice>((int)this.deviceCache.size());
        for (PendingDevice device : this.deviceCache.asMap().values()) {
            if (state != null && !state.equals((Object)device.getState())) continue;
            res.add(device);
        }
        return res.iterator();
    }
}