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

net.sf.jasperreports.extensions.ExtensionsEnvironment Maven / Gradle / Ivy

There is a newer version: 7.0.1
Show newest version
/*
 * JasperReports - Free Java Reporting Library.
 * Copyright (C) 2001 - 2023 Cloud Software Group, Inc. All rights reserved.
 * http://www.jaspersoft.com
 *
 * Unless you have purchased a commercial license agreement from Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of JasperReports.
 *
 * JasperReports 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 3 of the License, or
 * (at your option) any later version.
 *
 * JasperReports 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 JasperReports. If not, see .
 */
package net.sf.jasperreports.extensions;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.jasperreports.annotations.properties.Property;
import net.sf.jasperreports.annotations.properties.PropertyScope;
import net.sf.jasperreports.engine.DefaultJasperReportsContext;
import net.sf.jasperreports.engine.JRPropertiesUtil;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.util.ClassUtils;
import net.sf.jasperreports.properties.PropertyConstants;

/**
 * A class that provides means of setting and accessing
 * {@link ExtensionsRegistry} instances.
 * 
 * @author Lucian Chirita ([email protected])
 * @see #getExtensionsRegistry()
 */
public final class ExtensionsEnvironment
{
	public static final String EXCEPTION_MESSAGE_KEY_NULL_EXTENSIONS_REGISTRY = "extensions.null.extensions.registry";

	private ExtensionsEnvironment()
	{
	}
	
	private static final Log log = LogFactory.getLog(ExtensionsEnvironment.class); 

	protected final static Object NULL_CACHE_KEY = new Object();
	
	/**
	 * A property that provides the default {@link ExtensionsRegistry} 
	 * implementation class. 
	 * 
	 * 

* This property is only read at initialization time, therefore changing * the property value at a later time will have no effect. */ @Property( category = PropertyConstants.CATEGORY_EXTENSIONS, defaultValue = "net.sf.jasperreports.extensions.DefaultExtensionsRegistry", scopes = {PropertyScope.GLOBAL}, sinceVersion = PropertyConstants.VERSION_3_1_0 ) public static final String PROPERTY_EXTENSIONS_REGISTRY_CLASS = JRPropertiesUtil.PROPERTY_PREFIX + "extensions.registry.class"; private static ExtensionsRegistry systemRegistry; private static final ThreadLocal threadRegistry = new InheritableThreadLocal<>(); static { systemRegistry = createDefaultRegistry(); } private static ExtensionsRegistry createDefaultRegistry() { String registryClass = JRPropertiesUtil.getInstance(DefaultJasperReportsContext.getInstance()).getProperty(PROPERTY_EXTENSIONS_REGISTRY_CLASS); if (log.isDebugEnabled()) { log.debug("Instantiating extensions registry class " + registryClass); } ExtensionsRegistry registry = (ExtensionsRegistry) ClassUtils. instantiateClass(registryClass, ExtensionsRegistry.class); return registry; } /** * Returns the system default extensions registry object. * *

* This is either the one instantiated based on {@link #PROPERTY_EXTENSIONS_REGISTRY_CLASS}, * or the one set by {@link #setSystemExtensionsRegistry(ExtensionsRegistry)}. * * @return the system default extensions registry object */ public static synchronized ExtensionsRegistry getSystemExtensionsRegistry() { return systemRegistry; } /** * Sets the system default extensions registry. * * @param extensionsRegistry the extensions registry */ public static synchronized void setSystemExtensionsRegistry(ExtensionsRegistry extensionsRegistry) { if (extensionsRegistry == null) { throw new JRRuntimeException( EXCEPTION_MESSAGE_KEY_NULL_EXTENSIONS_REGISTRY, (Object[])null); } systemRegistry = extensionsRegistry; } /** * Returns the thread extensions registry, if any. * * @return the thread extensions registry */ public static ExtensionsRegistry getThreadExtensionsRegistry() { return threadRegistry.get(); } /** * Sets the thread extensions registry. * * @param extensionsRegistry * @see #getExtensionsRegistry() */ public static void setThreadExtensionsRegistry(ExtensionsRegistry extensionsRegistry) { threadRegistry.set(extensionsRegistry); } /** * Resets (to null) the thread extensions registry. * * @see #setThreadExtensionsRegistry(ExtensionsRegistry) */ public static void resetThreadExtensionsRegistry() { threadRegistry.remove(); } /** * Returns the extensions registry to be used in the current context. * *

* The method returns the thread extensions registry (as returned by * {@link #getThreadExtensionsRegistry()}) if it exists, and the system * registry (as returned by {@link #getSystemExtensionsRegistry()}) otherwise. * * @return the context extensions registry */ public static ExtensionsRegistry getExtensionsRegistry()//FIXMECONTEXT check all places where such methods are still used { ExtensionsRegistry registry = getThreadExtensionsRegistry(); if (registry == null) { registry = getSystemExtensionsRegistry(); } return registry; } /** * Returns an object that can be used as cache key for extension-related * caches. * * @return an extension-related cache key */ public static Object getExtensionsCacheKey() { Object key = Thread.currentThread().getContextClassLoader(); if (key == null) { key = NULL_CACHE_KEY; } return key; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy