blob: cb15c677680135b7957934c5ed7187b0b66decc4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 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.core.jsflibraryconfiguration.internal;
import org.eclipse.jdt.core.IClasspathAttribute;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryRegistryUtil;
import org.eclipse.jst.jsf.core.internal.jsflibraryregistry.PluginProvidedJSFLibrary;
import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryConfigurationHelper;
import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryReference;
import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryReferenceServerSupplied;
/**
* Factory for producing facade objects for references to the internal EMF JSF Library classes
*/
public class JSFLibraryReferenceFacadeFactory {
/**
* Returns a JSFLibraryReferenceUserSpecified (or JSFLibraryReferenceUserDefined}) or JSFLibraryReferencePluginProvided instance.
* Will not create a JSFLibraryReferenceServerSupplied as there is no cp entry. Use createServerSuppliedJSFLibRef instead.
* @param classpathEntry
* @return an instance of JSFLibraryInternalReference. Null will be returned if the cpEntry is not a JSF Library reference.
*/
public static JSFLibraryReference create(final IClasspathEntry classpathEntry) {
if (JSFLibraryConfigurationHelper.isJSFLibraryContainer(classpathEntry)){
return createReference(classpathEntry);
}
return null;
}
/**
* @return instance of {@link JSFLibraryReferenceServerSupplied}
*/
public static JSFLibraryReferenceServerSupplied createServerSuppliedJSFLibRef(){
return new JSFLibraryReferenceServerSuppliedImpl();
}
/**
* @param classpathEntry
* @return {@link JSFLibraryReference}
*/
private static JSFLibraryReference createReference(
final IClasspathEntry classpathEntry) {
String libID = classpathEntry.getPath().segment(1);
org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryInternalReference libRef = JSFLibraryRegistryUtil.getInstance().getJSFLibraryReferencebyID(libID);
if (libRef!= null){
boolean isDeployed = getJ2EEModuleDependency(classpathEntry);
if (libRef.getLibrary() instanceof PluginProvidedJSFLibrary)
return new JSFLibraryReferencePluginProvidedImpl(libRef, isDeployed);
return new JSFLibraryReferenceUserSpecifiedImpl(libRef, isDeployed);
}
return null;
}
private static boolean getJ2EEModuleDependency(IClasspathEntry classpathEntry) {
IClasspathAttribute[] attrs = classpathEntry.getExtraAttributes();
for (int i=0;i<attrs.length;i++){
IClasspathAttribute attr = attrs[i];
if (attr.getName().equals(IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY)){
return true;
}
}
return false;
}
}