Package org.eclipse.m2e.wtp.jsf.internal.utils.xpl

Source Code of org.eclipse.m2e.wtp.jsf.internal.utils.xpl.JSFAppConfigUtils

/*******************************************************************************
* Copyright (c) 2005 Oracle Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Ian Trimble - initial API and implementation
*******************************************************************************/
package org.eclipse.m2e.wtp.jsf.internal.utils.xpl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.EList;
import org.eclipse.jst.j2ee.common.ParamValue;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
import org.eclipse.jst.j2ee.webapplication.ContextParam;
import org.eclipse.jst.j2ee.webapplication.WebApp;
import org.eclipse.m2e.wtp.jsf.internal.Messages;
import org.eclipse.wst.common.componentcore.ModuleCoreNature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Class copied from {@link org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils}.
*
* Modifications from the original file :
* <ul>
* <li>getConfigFilesFromContextParam() method modified to allow reading of javax.faces.CONFIG_FILES
* value in web.xml on projects not having the JSF facet already</li>
* <li>Unused methods have been removed</li>
* <li>Code changed to use Java 1.5+ features</li>
* <li>Use slf4j logger</li>
* </ul>
*
* JSFAppConfigUtils provides utility methods useful in processing of a JSF
* application configuration.
*
*
* @author Ian Trimble - Oracle
*/
public class JSFAppConfigUtils {

  private static final Logger LOG = LoggerFactory.getLogger(JSFAppConfigUtils.class);
 
  /**
   * Name of JSF CONFIG_FILES context parameter ("javax.faces.CONFIG_FILES").
   */
  public static final String CONFIG_FILES_CONTEXT_PARAM_NAME = "javax.faces.CONFIG_FILES"; //$NON-NLS-1$

  /**
   * Location in JAR file of application configuration resource file
   * ("META-INF/faces-config.xml").
   */
  public static final String FACES_CONFIG_IN_JAR_PATH = "META-INF/faces-config.xml"; //$NON-NLS-1$

   
  /**
   * Gets list of application configuration file names as listed in the JSF
   * CONFIG_FILES context parameter ("javax.faces.CONFIG_FILES"). Will return
   * an empty list if WebArtifactEdit is null, if WebApp is null, if context
   * parameter does not exist, or if trimmed context parameter's value is
   * an empty String.
   *
   * @param project IProject instance for which to get the context
   * parameter's value.
   * @return List of application configuration file names as listed in the
   * JSF CONFIG_FILES context parameter ("javax.faces.CONFIG_FILES"); list
   * may be empty.
   */
  public static List<String> getConfigFilesFromContextParam(IProject project) {
    List<String> filesList = Collections.emptyList();
    if (ModuleCoreNature.isFlexibleProject(project)) {
      try {
        IModelProvider provider = ModelProviderManager.getModelProvider(project);
        if (provider != null) {
          Object webAppObj = provider.getModelObject();
          if (webAppObj != null){
            if (webAppObj instanceof WebApp)
              filesList = getConfigFilesForJ2EEApp(project);
            else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
              filesList = getConfigFilesForJEEApp((org.eclipse.jst.javaee.web.WebApp)webAppObj);
          }
        }
      } catch (Exception e) {
        //Fix for JBIDE-11078 : in extremely rare cases,
        //a NPE can be thrown if no IModelProvider is found for project
        //At this point that error shouldn't block the user so we just log it
        LOG.error("Could not read web.xml", e); //$NON-NLS-1$
      }
    }
    return filesList;
  }

  private static List<String> getConfigFilesForJEEApp(org.eclipse.jst.javaee.web.WebApp webApp) {
    String filesString = null;
    for (org.eclipse.jst.javaee.core.ParamValue paramValue : webApp.getContextParams()) {
      if (paramValue.getParamName().equals(CONFIG_FILES_CONTEXT_PARAM_NAME)) {
        filesString = paramValue.getParamValue();
        break;
      }
    }
    return parseFilesString(filesString)
  }

  private static List<String> getConfigFilesForJ2EEApp(IProject project){
    List<String> filesList = new ArrayList<String>();
    WebArtifactEdit webArtifactEdit = WebArtifactEdit.getWebArtifactEditForRead(project);
    if (webArtifactEdit != null) {
      try {
        WebApp webApp = null;
        try {
          webApp = webArtifactEdit.getWebApp();
        } catch(ClassCastException cce) {
          //occasionally thrown from WTP code in RC3 and possibly later
          LOG.error(Messages.JSFAppConfigUtils_Error_Reading_WebXml, cce);
          return filesList;
        }
        if (webApp != null) {
          String filesString = null;
          //need to branch here due to model version differences (BugZilla #119442)
          if (webApp.getVersionID() == J2EEVersionConstants.WEB_2_3_ID) {
            EList contexts = webApp.getContexts();
            Iterator itContexts = contexts.iterator();
            while (itContexts.hasNext()) {
              ContextParam contextParam = (ContextParam)itContexts.next();
              if (contextParam.getParamName().equals(CONFIG_FILES_CONTEXT_PARAM_NAME)) {
                filesString = contextParam.getParamValue();
                break;
              }
            }
          } else {
            EList contextParams = webApp.getContextParams();
            Iterator itContextParams = contextParams.iterator();
            while (itContextParams.hasNext()) {
              ParamValue paramValue = (ParamValue)itContextParams.next();
              if (paramValue.getName().equals(CONFIG_FILES_CONTEXT_PARAM_NAME)) {
                filesString = paramValue.getValue();
                break;
              }
            }
          }         
          filesList = parseFilesString(filesString);       
        }
      } finally {
        webArtifactEdit.dispose();
      }
    }

    return filesList;
  }
 
  private static List<String> parseFilesString(String filesString) {
    List<String> filesList = new ArrayList<String>();
    if (filesString != null && filesString.trim().length() > 0) {     
      StringTokenizer stFilesString = new StringTokenizer(filesString, ","); //$NON-NLS-1$
      while (stFilesString.hasMoreTokens()) {
        String configFile = stFilesString.nextToken().trim();
        filesList.add(configFile);
      }
    }
    return filesList;
  }

}
TOP

Related Classes of org.eclipse.m2e.wtp.jsf.internal.utils.xpl.JSFAppConfigUtils

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.