Package org.apache.myfaces.trinidadinternal.renderkit

Source Code of org.apache.myfaces.trinidadinternal.renderkit.FacesConfigInfo$ComponentInfo

/*
*  Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you under the Apache License, Version 2.0 (the
*  "License"); you may not use this file except in compliance
*  with the License.  You may obtain a copy of the License at
*
*  http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing,
*  software distributed under the License is distributed on an
*  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
*  KIND, either express or implied.  See the License for the
*  specific language governing permissions and limitations
*  under the License.
*/
package org.apache.myfaces.trinidadinternal.renderkit;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;

import javax.faces.application.Application;
import javax.faces.render.RenderKit;

import org.apache.myfaces.trinidad.logging.TrinidadLogger;

import org.apache.myfaces.trinidadinternal.XMLValidityTestCase;
import org.apache.myfaces.trinidadinternal.share.xml.TreeBuilder;
import java.util.List;

public class FacesConfigInfo
{
  public FacesConfigInfo()
  {
  }

  public void registerConverters(Application appl)
  {
    Iterator<String> convertersByType = _convertersByType.keySet().iterator();
    while (convertersByType.hasNext())
    {
      try
      {
        String type = convertersByType.next();
        String converterType = _convertersByType.get(type);
        appl.addConverter(Class.forName(type), converterType);
      }
      catch (Exception e)
      {
        _LOG.severe(e);
      }
    }

    Iterator<String> convertersById = _convertersById.keySet().iterator();
    while (convertersById.hasNext())
    {
      try
      {
        String id = convertersById.next();
        String converterType = _convertersById.get(id);
        appl.addConverter(id, converterType);
      }
      catch (Exception e)
      {
        _LOG.severe(e);
      }
    }
  }

  public void registerComponents(Application appl)
  {
    Iterator<String> components = _components.keySet().iterator();
    while (components.hasNext())
    {
      String type =components.next();
      ComponentInfo info = _components.get(type);
      String className = info.componentClass;
      appl.addComponent(type, className);
    }
  }

  public Map<String, RenderKit> getRenderKits()
  {
    return _renderKits;
  }

  public void addConverterByType(String type, String converter)
  {
    _convertersByType.put(type, converter);
  }

  public void addConverterById(String id, String converter)
  {
    _convertersById.put(id, converter);
  }

  public void addComponent(
    ComponentInfo info)
  {
    String componentType = info.componentType;
    if (_LOG.isFine())
      _LOG.fine("Found component: type {0}, class {1}",
                new Object[]{componentType, info.componentClass});
    if (_components.containsKey(componentType))
      _LOG.warning("faces-config.xml contains duplicate definitions for " +
                   "component type {0}", componentType);

    _components.put(componentType, info);
  }

  public ComponentInfo getComponentInfo(String componentType)
  {
    return _components.get(componentType);
  }
 
  public void load(String file) throws IOException, SAXException
  {
    TreeBuilder builder = new TreeBuilder();
    XMLValidityTestCase.ER er = new XMLValidityTestCase.ER();
    String publicID =
      "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN";
    // TODO: fall back on RI location if MyFaces can't be found
    URL dtdSource = getClass().getClassLoader().getResource(
       "org/apache/myfaces/resource/web-facesconfig_1_1.dtd");
    er.registerPublicId(publicID, dtdSource);
    builder.setEntityResolver(er);

    Enumeration<URL> resources = getClass().getClassLoader().getResources(file);
    while (resources.hasMoreElements())
    {
      URL resource = resources.nextElement();
      _LOG.info("PARSING " + resource);
      InputStream inputStream = null;
      // Try to get the inputStream off of a file
      if ("file".equalsIgnoreCase(resource.getProtocol()))
      {
        File resourceFile = new File(resource.getFile().replaceAll("%20", " "));
        if (resourceFile.exists())
        {
          inputStream = new FileInputStream(resourceFile);
        }
      }

      if (inputStream == null)
        inputStream = resource.openStream();

      try
      {
        InputSource source = new InputSource(inputStream);
        source.setSystemId(resource.toExternalForm());
        builder.parse(source, new FacesConfigParser(this));
      }
      finally
      {
        inputStream.close();
      }
    }
  }

  static public class ComponentInfo
  {
    public String componentType;
    public String componentClass;
    // Use a TreeMap so the properties always come back in
    // sorted order.
    public Map<String, PropertyInfo> properties =
      new TreeMap<String, PropertyInfo>();
   
    public PropertyInfo getPropertyInfo(String name)
    {
      return properties.get(name);
    }
  }

  static public class PropertyInfo
  {
    public Class<?> type;
    public Object defaultValue;
    public List<Object> enumValues;
  }

  private Map<String, ComponentInfo> _components = new HashMap<String, ComponentInfo>();
  private Map<String, RenderKit> _renderKits  = new HashMap<String, RenderKit>();
  private Map<String, String> _convertersByType  = new HashMap<String, String>();
  private Map<String, String> _convertersById  = new HashMap<String, String>();

  private static final TrinidadLogger _LOG =
    TrinidadLogger.createTrinidadLogger(FacesConfigInfo.class);
}
TOP

Related Classes of org.apache.myfaces.trinidadinternal.renderkit.FacesConfigInfo$ComponentInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.