/******************************************************************************* * 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; } }