/*
* Copyright 2015-Present Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This library 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 library 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.
*/
package org.entando.entando.aps.system;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.ArrayUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author M.Casari
*/
public class XmlWebApplicationContext extends org.springframework.web.context.support.XmlWebApplicationContext {
/*
@Override
public <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException {
Map<String, T> map = super.getBeansOfType(type, includeNonSingletons, allowEagerInit);
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
try {
Map<String, T> tempmap = classPathXmlApplicationContext.getBeansOfType(type, includeNonSingletons, allowEagerInit);
map.putAll(tempmap);
} catch (Exception ex) {
}
}
}
return map;
}
@Override
public <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException {
Map<String, T> map = super.getBeansOfType(type);
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
try {
Map<String, T> tempmap = classPathXmlApplicationContext.getBeansOfType(type);
map.putAll(tempmap);
} catch (Exception ex) {
}
}
}
return map;
}
@Override
public String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit) {
String[] beanNames = super.getBeanNamesForType(type, includeNonSingletons, allowEagerInit);
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
Set removedPluginsSubMenuSet = (Set<String>) this.getServletContext().getAttribute("removedPluginsSubMenuSet");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
String[] beanNamesTemp = classPathXmlApplicationContext.getBeanNamesForType(type, includeNonSingletons, allowEagerInit);
beanNames = (String[]) ArrayUtils.addAll(beanNames, beanNamesTemp);
}
}
Set hs = new HashSet();
for (int i = 0; i < beanNames.length; i++) {
String beanName = beanNames[i];
if (removedPluginsSubMenuSet != null && removedPluginsSubMenuSet.contains(beanName)) {
continue;
}
hs.add(beanName);
}
beanNames = (String[]) hs.toArray(new String[0]);
Arrays.sort(beanNames);
return beanNames;
}
@Override
public String[] getBeanNamesForType(Class<?> type) {
String[] beanNames = super.getBeanNamesForType(type);
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
Set removedPluginsSubMenuSet = (Set<String>) this.getServletContext().getAttribute("removedPluginsSubMenuSet");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
String[] beanNamesTemp = classPathXmlApplicationContext.getBeanNamesForType(type);
beanNames = (String[]) ArrayUtils.addAll(beanNames, beanNamesTemp);
HashSet hs = new HashSet();
for (int i = 0; i < beanNames.length; i++) {
String beanName = beanNames[i];
hs.add(beanName);
}
beanNames = (String[]) hs.toArray(new String[0]);
Arrays.sort(beanNames);
}
}
Set hs = new HashSet();
for (int i = 0; i < beanNames.length; i++) {
String beanName = beanNames[i];
if (removedPluginsSubMenuSet != null && removedPluginsSubMenuSet.contains(beanName)) {
continue;
}
hs.add(beanName);
}
beanNames = (String[]) hs.toArray(new String[0]);
Arrays.sort(beanNames);
return beanNames;
}
@Override
public Object getBean(String name, Object... args) throws BeansException {
Object bean = super.getBean(name, args);
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
if (bean == null) {
try {
bean = classPathXmlApplicationContext.getBean(name, args);
} catch (Exception ex) {
}
}
}
}
return bean;
}
@Override
public <T> T getBean(Class<T> requiredType) throws BeansException {
T bean = null;
try {
bean = super.getBean(requiredType);
} catch (Exception e) {
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
if (bean == null) {
try {
bean = classPathXmlApplicationContext.getBean(requiredType);
return bean;
} catch (Exception ex) {
}
}
}
}
}
return bean;
}
@Override
public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
T bean = null;
try {
bean = super.getBean(name, requiredType);
} catch (Exception e) {
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
if (bean == null) {
try {
bean = classPathXmlApplicationContext.getBean(name, requiredType);
return bean;
} catch (Exception ex) {
}
}
}
}
}
return bean;
}
@Override
public Object getBean(String name) throws BeansException {
Object bean = null;
try {
bean = super.getBean(name);
} catch (Exception e) {
List<ClassPathXmlApplicationContext> contexts = (List<ClassPathXmlApplicationContext>) this.getServletContext().getAttribute("pluginsContextsList");
if (contexts != null) {
for (ClassPathXmlApplicationContext classPathXmlApplicationContext : contexts) {
if (bean == null) {
try {
bean = classPathXmlApplicationContext.getBean(name);
return bean;
} catch (Exception ex) {
}
}
}
}
}
return bean;
}
*/
}