package com.sun.faces.test.weblogic.elbackwardcompatible;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.el.ExpressionFactory;
import javax.enterprise.context.RequestScoped;
import javax.faces.FacesException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.ServletContext;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspFactory;
@Named
@RequestScoped
public class UserBean implements Serializable {
private final Map<String, Object> m_oNumberFilterBetweenOperatorMinValue;
private final Map<String, Object> m_oNumberFilterBetweenOperatorMaxValue;
public Map<String, Object> getNumberFilterBetweenOperatorMinValue() {
return m_oNumberFilterBetweenOperatorMinValue;
}
public Map<String, Object> getNumberFilterBetweenOperatorMaxValue() {
return m_oNumberFilterBetweenOperatorMaxValue;
}
private Integer intProp;
public Integer getIntProp() {
return intProp;
}
public void setIntProp(Integer intProp) {
this.intProp = intProp;
}
private final List<String> listValues;
public List<String> getListValues() {
return listValues;
}
public UserBean() {
this.listValues = new ArrayList<>();
listValues.add("1");
listValues.add("2");
listValues.add("3");
m_oNumberFilterBetweenOperatorMinValue = new HashMap<>();
m_oNumberFilterBetweenOperatorMaxValue = new HashMap<>();
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
final String flagName = "forceSetFlag";
Map<String, String> params = extContext.getRequestParameterMap();
boolean forceSetFlag = false;
if (params.containsKey(flagName)) {
forceSetFlag = Boolean.valueOf(params.get(flagName));
}
if (forceSetFlag) {
try {
forceSetFlag();
} catch (Exception ex) {
throw new FacesException(ex);
}
}
}
private void forceSetFlag() throws Exception{
final String flagName = "isBackwardCompatible22";
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
ServletContext sc = (ServletContext) extContext.getContext();
JspApplicationContext jspAppContext = JspFactory.getDefaultFactory()
.getJspApplicationContext(sc);
ExpressionFactory ef = jspAppContext.getExpressionFactory();
Class weldExpFactory = Class.forName("org.jboss.weld.el.WeldExpressionFactory");
Field delegateField = weldExpFactory.getDeclaredField("delegate");
delegateField.setAccessible(true);
Object delegateInstance = delegateField.get(ef);
Class expFactoryImp = Class.forName("com.sun.el.ExpressionFactoryImpl");
if (!(expFactoryImp.isInstance(delegateInstance))) {
// dereference twice to get the true ExpressionFactoryImpl instance
delegateInstance = delegateField.get(delegateInstance);
}
Field isBackwardCompatible22Field = expFactoryImp.getDeclaredField(flagName);
isBackwardCompatible22Field.setAccessible(true);
boolean flagValue = true;
Map<String, String> params = extContext.getRequestParameterMap();
if (params.containsKey(flagName)) {
flagValue = Boolean.valueOf(params.get(flagName));
}
isBackwardCompatible22Field.setBoolean(delegateInstance, flagValue);
}
}