blob: e55cdf0e01130304e78dcdb7338f748f8d963fd0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.common.facet.libraryprovider.jsf;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jst.common.project.facet.core.libprov.user.UserLibraryProviderInstallOperationConfig;
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
/**
* Utility methods for JSF libraries.
*
* @author Debajit Adhikary
*
*/
public class JsfLibraryUtil
{
/**
* JSF library vendor type
*/
public static enum JsfLibraryVendorType
{
/** Unknown JSF library type */
UNKNOWN,
/** Apache MyFaces JSF library */
MYFACES,
/** Sun-RI JSF library */
SUN_RI
}
/**
* @param libConfig UserLibraryProviderInstallOperationConfig
* @return JsfLibraryVendorType
*/
public static JsfLibraryVendorType getJsfLibraryVendorType (final UserLibraryProviderInstallOperationConfig libConfig)
{
final String MYFACES_IDENTIFYING_CLASS = "org/apache/myfaces/el/VariableResolverImpl.class"; //$NON-NLS-1$
final String SUNRI_IDENTIFYING_CLASS = "com/sun/faces/el/VariableResolverImpl.class"; //$NON-NLS-1$
for (final IClasspathEntry cpe : libConfig.resolve())
{
if (isLibrary(cpe))
{
final File libraryFile = cpe.getPath().toFile();
if (!libraryFile.exists())
continue;
ZipFile zipFile = null;
try
{
zipFile = new ZipFile(libraryFile);
for (final Enumeration<? extends ZipEntry> entries = zipFile.entries(); entries.hasMoreElements();)
{
final ZipEntry entry = entries.nextElement();
final String entryName = entry.getName();
if (entryName.equals(MYFACES_IDENTIFYING_CLASS))
return JsfLibraryVendorType.MYFACES;
if (entryName.equals(SUNRI_IDENTIFYING_CLASS))
return JsfLibraryVendorType.SUN_RI;
}
}
catch (final ZipException e)
{
JSFCommonPlugin.log(e, e.getLocalizedMessage());
}
catch (final IOException e)
{
JSFCommonPlugin.log(e, e.getLocalizedMessage());
}
finally
{
try
{
if (zipFile != null)
zipFile.close();
}
catch (final IOException e)
{
JSFCommonPlugin.log(e, e.getLocalizedMessage());
}
}
}
}
return JsfLibraryVendorType.UNKNOWN;
}
/**
* @param cpe
* @return True if the classpath entry is a library.
*/
public static boolean isLibrary (final IClasspathEntry cpe)
{
return cpe.getEntryKind() == IClasspathEntry.CPE_LIBRARY;
}
}