applicationimpl.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,774 行 · 第 1/4 页

JAVA
1,774
字号
    ELResolver elResolver = getELResolver();    FacesContext facesContext = FacesContext.getCurrentInstance();    ELContext elContext = new FacesELContext(facesContext, elResolver);    if (param == null)      param = new Class[0];    if (!ref.startsWith("#{") && !ref.endsWith("}"))      throw new ReferenceSyntaxException(L.l(	"'{0}' is an illegal MethodBinding.  MethodBindings require #{...} syntax.",	ref));    try {      MethodExpression expr	= factory.createMethodExpression(elContext, ref, Object.class, param);      return new MethodBindingAdapter(expr, param);    }    catch (ELException e) {      throw new ReferenceSyntaxException(e);    }  }  public Iterator<Locale> getSupportedLocales()  {    if (_locales != null)      return _locales.iterator();    else      return new ArrayList<Locale>().iterator();  }  public void setSupportedLocales(Collection<Locale> locales)  {    _locales = new ArrayList<Locale>(locales);  }  public void addValidator(String validatorId, String validatorClass)  {    if (validatorId == null || validatorClass == null)      throw new NullPointerException();    _validatorClassMap.put(validatorId, validatorClass);  }  public Validator createValidator(String validatorId)    throws FacesException  {    if (validatorId == null)      throw new NullPointerException();    try {      String validatorClass = _validatorClassMap.get(validatorId);      if (validatorClass == null)	throw new FacesException(L.l("'{0}' is not a known validator.",				     validatorId));      Thread thread = Thread.currentThread();      ClassLoader loader = thread.getContextClassLoader();      Class cl = Class.forName(validatorClass, false, loader);      return (Validator) cl.newInstance();    }    catch (FacesException e) {      throw e;    }    catch (Exception e) {      throw new FacesException(e);    }  }  public Iterator<String> getValidatorIds()  {    return _validatorClassMap.keySet().iterator();  }  @Override  public ValueBinding createValueBinding(String ref)    throws ReferenceSyntaxException  {    ExpressionFactory factory = getExpressionFactory();    FacesContext facesContext = FacesContext.getCurrentInstance();    ELContext elContext = new FacesELContext(facesContext, getELResolver());    try {      ValueExpression expr	= factory.createValueExpression(elContext, ref, Object.class);      ValueBinding binding = new ValueBindingAdapter(expr);      return binding;    }    catch (ELException e) {      throw new ReferenceSyntaxException(e);    }  }  @Override  public Object evaluateExpressionGet(FacesContext context,				      String expression,				      Class expectedType)  {    ExpressionFactory factory = getExpressionFactory();    ELContext elContext = context.getELContext();    ValueExpression expr      = factory.createValueExpression(elContext, expression, expectedType);    return expr.getValue(elContext);  }  @Override  public ProjectStage getProjectStage()  {    if (_projectStage == null) {      String stage = null;      try {       stage         = (String) new InitialContext().lookup(ProjectStage.PROJECT_STAGE_JNDI_NAME);      }      catch (NamingException e) {      }      if (stage == null) {        stage = FacesContext.getCurrentInstance()          .getExternalContext()          .getInitParameter(ProjectStage.PROJECT_STAGE_PARAM_NAME);      }      if (stage != null) {        try {          _projectStage = ProjectStage.valueOf(ProjectStage.class, stage);        }        catch (IllegalArgumentException e) {          log.fine(L.l("Can't convert '{0}' to ProjectStage", stage));        }      }      if (_projectStage == null)        _projectStage = ProjectStage.Production;    }    return _projectStage;  }  @Override  public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass,                               SystemEventListener listener)  {    subscribeToEvent(systemEventClass, null, listener);  }  @Override  public void subscribeToEvent(final Class<? extends SystemEvent> systemEventClass,                               final Class sourceClass,                               final SystemEventListener listener)  {    if (systemEventClass == null)      throw new NullPointerException();    if (listener == null)      throw new NullPointerException();    HashMap<Class, SystemEventListener[]> listenerMap;    synchronized (_systemEventListenerMap) {      listenerMap = _systemEventListenerMap.get(systemEventClass);      if (listenerMap == null) {        listenerMap = new HashMap<Class, SystemEventListener[]>();        _systemEventListenerMap.put(systemEventClass, listenerMap);      }    }    synchronized (listenerMap) {      SystemEventListener[] listeners = listenerMap.get(sourceClass);      if (listeners == null) {        listeners = new SystemEventListener[]{listener};      }      else {        SystemEventListener[] temp = listeners;        listeners = new SystemEventListener[temp.length + 1];        System.arraycopy(temp, 0, listeners, 0, temp.length);        listeners[listeners.length - 1] = listener;      }      listenerMap.put(sourceClass, listeners);    }  }  @Override  public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,                                   SystemEventListener listener)  {    unsubscribeFromEvent(systemEventClass, null, listener);  }  @Override  public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass,                                   Class sourceClass,                                   SystemEventListener listener)  {    if (systemEventClass == null)      throw new NullPointerException();    if (listener == null)      throw new NullPointerException();    HashMap<Class, SystemEventListener[]> listenerMap;    synchronized (_systemEventListenerMap) {      listenerMap      = _systemEventListenerMap.get(systemEventClass);    }    if (listenerMap == null) return;    synchronized (listenerMap) {      SystemEventListener[] temp = listenerMap.get(sourceClass);            for (int i = 0; i < temp.length; i++) {        if (listener.equals(temp [i])) {          SystemEventListener[] listeners = new SystemEventListener[temp.length - 1];          System.arraycopy(temp, 0, listeners, 0, i);          System.arraycopy(temp, i + 1, listeners, i, temp.length - (i + 1));          listenerMap.put(sourceClass, listeners);                    break;        }      }    }  }  /**   * XXX: exception handling -> review with final 2.0 spec   */  @Override  public void publishEvent(Class<? extends SystemEvent> systemEventClass,                           SystemEventListenerHolder source)  {    if (systemEventClass == null)      throw new NullPointerException();    if (source == null)      throw new NullPointerException();        List<SystemEventListener> sourceListeners      = source.getListenersForEventClass(systemEventClass);    SystemEventListener []appListenersForSourceClass = null;    HashMap<Class, SystemEventListener []> map      = _systemEventListenerMap.get(systemEventClass);    if (map != null)      appListenersForSourceClass = map.get(source.getClass());    SystemEventListener []appListeners = null;    map = _systemEventListenerMap.get(systemEventClass);    if (map != null)      appListeners = map.get(null);    if ((sourceListeners != null && sourceListeners.size() > 0)        ||        (appListenersForSourceClass != null && appListenersForSourceClass.length > 0)        ||        (appListeners != null && appListeners.length > 0)) {      LruCache<Class<? extends SystemEventListenerHolder>, Constructor> constructorMap        = _systemEventConstructorMap.get(systemEventClass);      if (constructorMap == null) {        constructorMap          = new LruCache<Class<? extends SystemEventListenerHolder>, Constructor>(64);        _systemEventConstructorMap.put(systemEventClass, constructorMap);      }      final Class sourceClass = source.getClass();      Constructor ctor = constructorMap.get(sourceClass);      if (ctor == null) {        Constructor []constructors = systemEventClass.getConstructors();        for (Constructor constructor : constructors) {          Class []params = constructor.getParameterTypes();          if (params.length == 1) {            if (sourceClass.equals(params[0])) {              ctor = constructor;              break;            }          }        }        if (ctor == null) {          constructors = systemEventClass.getConstructors();          for (Constructor constructor : constructors) {            Class []params = constructor.getParameterTypes();            if (params.length == 1) {              if (params[0].isAssignableFrom(sourceClass)) {                ctor = constructor;                break;              }            }          }        }      }      if (ctor == null) {        log.fine(L.l(          "Class '{0}' must have constructor accepting single argument of type assignable from '{1}'",          systemEventClass.getName(),          sourceClass));        return;      }      SystemEvent event;      try {        event = (SystemEvent) ctor.newInstance(source);      }      catch (Exception e) {        log.log(Level.FINER,                L.l(                  "Can not create an instance of class '{0}' using constructor '{1}'",                  systemEventClass,                  ctor),                e);        return;      }      SystemEventListener listener = null;      try {        if (sourceListeners != null)          for (int i = 0; i < sourceListeners.size(); i++) {            listener = sourceListeners.get(i);            if (listener.isListenerForSource(source))              if (event.isAppropriateListener(listener))                event.processListener(listener);          }        if (appListenersForSourceClass != null)          for (int i = 0; i < appListenersForSourceClass.length; i++) {            listener = appListenersForSourceClass[i];            if (listener.isListenerForSource(source))              if (event.isAppropriateListener(listener))                event.processListener(listener);          }        if (appListeners != null)          for (int i = 0; i < appListeners.length; i++) {            listener = appListeners[i];            if (listener.isListenerForSource(source))              if (event.isAppropriateListener(listener))                event.processListener(listener);          }      }      catch (AbortProcessingException e) {        log.log(Level.FINER,                L.l("Listener '{0}' aborted event publishing", listener),                e);      }    }  }  public void initRequest()  {    _isInit = true;    if (_viewHandler == null)      _viewHandler = new JspViewHandler();    if (_stateManager == null) {      _stateManager = new SessionStateManager();      JsfPropertyGroup jsfPropertyGroup = WebApp.getLocal().getJsf();      if (jsfPropertyGroup != null)        ((SessionStateManager) _stateManager).setStateSerializationMethod(          jsfPropertyGroup.getStateSerializationMethod());    }  }  public String toString()  {    return "ApplicationImpl[]";  }  static class PropertyResolverAdapter    extends PropertyResolver  {    private ELResolver _elResolver;    PropertyResolverAdapter(ELResolver elResolver)    {      _elResolver = elResolver;    }    public Class getType(Object base, int index)      throws javax.faces.el.PropertyNotFoundException    {      if (base == null)	throw new javax.faces.el.PropertyNotFoundException(	  "getType() has null base object");      try {	FacesContext context = FacesContext.getCurrentInstance();	return _elResolver.getType(context.getELContext(), base, index);      }      catch (javax.el.PropertyNotFoundException e) {	throw new javax.faces.el.PropertyNotFoundException(e);      }    }    public Class getType(Object base, Object property)      throws javax.faces.el.PropertyNotFoundException    {      if (base == null)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?