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

org.infinispan.manager.DefaultCacheManagerAdmin Maven / Gradle / Ivy

There is a newer version: 9.4.8.Final
Show newest version
package org.infinispan.manager;

import static org.infinispan.commons.util.concurrent.CompletionStages.join;

import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Set;

import javax.security.auth.Subject;

import org.infinispan.Cache;
import org.infinispan.commons.api.CacheContainerAdmin;
import org.infinispan.commons.configuration.attributes.Attribute;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.globalstate.GlobalConfigurationManager;
import org.infinispan.security.AuthorizationPermission;
import org.infinispan.security.actions.SecurityActions;
import org.infinispan.security.impl.Authorizer;

/**
 * The default implementation of {@link EmbeddedCacheManagerAdmin}
 *
 * @author Tristan Tarrant
 * @since 9.2
 */

public class DefaultCacheManagerAdmin implements EmbeddedCacheManagerAdmin {
   private final EmbeddedCacheManager cacheManager;
   private final GlobalConfigurationManager clusterConfigurationManager;
   private final Authorizer authorizer;
   private final EnumSet flags;
   private final Subject subject;

   DefaultCacheManagerAdmin(EmbeddedCacheManager cm, Authorizer authorizer, EnumSet flags,
                            Subject subject, GlobalConfigurationManager clusterConfigurationManager) {
      this.cacheManager = cm;
      this.authorizer = authorizer;
      this.clusterConfigurationManager = clusterConfigurationManager;
      this.flags = flags;
      this.subject = subject;
   }

   @Override
   public  Cache createCache(String cacheName, Configuration configuration) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.createCache(cacheName, configuration, flags));
      return cacheManager.getCache(cacheName);
   }

   @Override
   public  Cache getOrCreateCache(String cacheName, Configuration configuration) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.getOrCreateCache(cacheName, configuration, flags));
      return cacheManager.getCache(cacheName);
   }

   @Override
   public  Cache createCache(String cacheName, String template) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.createCache(cacheName, template, flags));
      return cacheManager.getCache(cacheName);
   }

   @Override
   public  Cache getOrCreateCache(String cacheName, String template) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.getOrCreateCache(cacheName, template, flags));
      return cacheManager.getCache(cacheName);
   }

   @Override
   public void createTemplate(String name, Configuration configuration) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.createTemplate(name, configuration, flags));
   }

   @Override
   public Configuration getOrCreateTemplate(String name, Configuration configuration) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.getOrCreateTemplate(name, configuration, flags));
      return cacheManager.getCacheConfiguration(name);
   }

   @Override
   public void removeTemplate(String name) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.removeTemplate(name, flags));
   }

   @Override
   public void removeCache(String cacheName) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      join(clusterConfigurationManager.removeCache(cacheName, flags));
   }

   @Override
   public EmbeddedCacheManagerAdmin withFlags(AdminFlag... flags) {
      EnumSet newFlags = EnumSet.copyOf(this.flags);
      Collections.addAll(newFlags, flags);
      return new DefaultCacheManagerAdmin(cacheManager, authorizer, newFlags, subject, clusterConfigurationManager);
   }

   @Override
   public EmbeddedCacheManagerAdmin withFlags(EnumSet flags) {
      EnumSet newFlags = EnumSet.copyOf(this.flags);
      newFlags.addAll(flags);
      return new DefaultCacheManagerAdmin(cacheManager, authorizer, newFlags, subject, clusterConfigurationManager);
   }

   @Override
   public EmbeddedCacheManagerAdmin withSubject(Subject subject) {
      return new DefaultCacheManagerAdmin(cacheManager, authorizer, flags, subject, clusterConfigurationManager);
   }

   @Override
   public void updateConfigurationAttribute(String cacheName, String attributeName, String attributeValue) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      Cache cache = cacheManager.getCache(cacheName);
      Configuration config = SecurityActions.getCacheConfiguration(cache.getAdvancedCache());
      Attribute attribute = config.findAttribute(attributeName);
      attribute.fromString(attributeValue);
      EnumSet newFlags = flags.clone();
      newFlags.add(CacheContainerAdmin.AdminFlag.UPDATE);
      join(clusterConfigurationManager.getOrCreateCache(cacheName, config, newFlags));
   }

   @Override
   public void assignAlias(String aliasName, String cacheName) {
      authorizer.checkPermission(subject, AuthorizationPermission.CREATE);
      Cache cache = cacheManager.getCache(cacheName);
      Configuration config = cache.getCacheConfiguration();
      Attribute> attribute = config.attributes().attribute(Configuration.ALIASES);
      Set aliases = new HashSet<>(attribute.get());
      aliases.add(aliasName);
      attribute.set(aliases);
      EnumSet newFlags = flags.clone();
      newFlags.add(CacheContainerAdmin.AdminFlag.UPDATE);
      join(clusterConfigurationManager.getOrCreateCache(cacheName, config, newFlags));
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy