All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.edu.icm.unity.engine.notifications.ChannelInstanceFactory Maven / Gradle / Ivy

/*
 * Copyright (c) 2019 Bixbit - Krzysztof Benedyczak. All rights reserved.
 * See LICENCE.txt file for licensing information.
 */
package pl.edu.icm.unity.engine.notifications;

import java.time.Duration;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

import pl.edu.icm.unity.store.api.generic.NotificationChannelDB;
import pl.edu.icm.unity.types.basic.NotificationChannel;

/**
 * Produces and caches instances of {@link NotificationChannelInstance}.
 */
@Component
class ChannelInstanceFactory
{
	private final Cache channelsCache;
	private final NotificationFacilitiesRegistry facilitiesRegistry;
	private final NotificationChannelDB channelDB;

	@Autowired
	ChannelInstanceFactory(
			NotificationFacilitiesRegistry facilitiesRegistry,
			NotificationChannelDB channelDB)
	{
		this.facilitiesRegistry = facilitiesRegistry;
		this.channelDB = channelDB;
		this.channelsCache = CacheBuilder.newBuilder()
				.expireAfterWrite(Duration.ofSeconds(120))
				.build();
	}

	NotificationChannelInstance loadChannel(String channelName)
	{
		NotificationChannelInstance cachedChannel = channelsCache.getIfPresent(channelName);
		NotificationChannelInstance channel = cachedChannel == null ? 
				loadFromDb(channelName) : cachedChannel;
		if (channel == null)
			throw new IllegalArgumentException("Channel " + channelName + " is not known");
		return channel;
	}
	
	private NotificationChannelInstance loadFromDb(String channelName)
	{
		NotificationChannel channelDesc = channelDB.get(channelName);
		NotificationFacility facility = facilitiesRegistry.getByName(channelDesc.getFacilityId());
		return facility.getChannel(channelDesc.getConfiguration());
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy