/*
* JBoss, a division of Red Hat
* Copyright 2010, Red Hat Middleware, LLC, and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.organization.idm;
import java.util.LinkedList;
import java.util.List;
import org.exoplatform.management.annotations.Impact;
import org.exoplatform.management.annotations.ImpactType;
import org.exoplatform.management.annotations.Managed;
import org.exoplatform.management.annotations.ManagedDescription;
import org.exoplatform.management.annotations.ManagedName;
import org.exoplatform.management.jmx.annotations.NameTemplate;
import org.exoplatform.management.jmx.annotations.Property;
import org.exoplatform.management.rest.annotations.RESTEndpoint;
import org.picketlink.idm.cache.APICacheProvider;
import org.picketlink.idm.spi.cache.IdentityStoreCacheProvider;
/*
* @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw Dawidowicz</a>
*/
@Managed
@ManagedDescription("PicketLink IDM Cache Service")
@NameTemplate({ @Property(key = "name", value = "plidmcache"), @Property(key = "service", value = "PicketLinkIDMCacheService") })
@RESTEndpoint(path = "plidmcache")
public class PicketLinkIDMCacheService {
private final List<IntegrationCache> integrationCache = new LinkedList<IntegrationCache>();
private final List<APICacheProvider> apiCacheProviders = new LinkedList<APICacheProvider>();
private final List<IdentityStoreCacheProvider> storeCacheProviders = new LinkedList<IdentityStoreCacheProvider>();
public PicketLinkIDMCacheService() {
}
public void register(IntegrationCache cacheProvider) {
if (cacheProvider != null) {
integrationCache.add(cacheProvider);
}
}
public void register(APICacheProvider cacheProvider) {
if (cacheProvider != null) {
apiCacheProviders.add(cacheProvider);
}
}
public void register(IdentityStoreCacheProvider cacheProvider) {
if (cacheProvider != null) {
storeCacheProviders.add(cacheProvider);
}
}
@Managed
@ManagedDescription("Invalidate cache namespace")
@Impact(ImpactType.WRITE)
public void invalidate(@ManagedDescription("Cache namespace") @ManagedName("namespace") String namespace) {
for (APICacheProvider cacheProvider : apiCacheProviders) {
cacheProvider.invalidate(namespace);
}
for (IntegrationCache cacheProvider : integrationCache) {
cacheProvider.invalidate(namespace);
}
for (IdentityStoreCacheProvider cacheProvider : storeCacheProviders) {
cacheProvider.invalidate(namespace);
}
}
@Managed
@ManagedDescription("Invalidate all caches")
@Impact(ImpactType.WRITE)
public void invalidateAll() {
for (IntegrationCache cacheProvider : integrationCache) {
cacheProvider.invalidateAll();
}
for (APICacheProvider cacheProvider : apiCacheProviders) {
cacheProvider.invalidateAll();
}
for (IdentityStoreCacheProvider cacheProvider : storeCacheProviders) {
cacheProvider.invalidateAll();
}
}
@Managed
@ManagedDescription("Print content of all caches")
@Impact(ImpactType.READ)
public String printCaches() {
StringBuilder builder = new StringBuilder("API CACHE PROVIDERS: \n\n");
for (APICacheProvider cacheProvider : apiCacheProviders) {
builder.append(cacheProvider.printContent());
}
builder.append("\n\n\nSTORE CACHE PROVIDERS: \n\n");
for (IdentityStoreCacheProvider cacheProvider : storeCacheProviders) {
builder.append(cacheProvider.printContent());
}
builder.append("\n\n\nINTEGRATION CACHES: \n\n");
for (IntegrationCache cacheProvider : integrationCache) {
builder.append(cacheProvider.printContent());
}
return builder.toString();
}
}