[jbosstools-commits] JBoss Tools SVN: r17509 - in trunk/portlet/plugins: org.jboss.tools.portlet.core/META-INF and 10 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Wed Sep 9 20:27:18 EDT 2009


Author: snjeza
Date: 2009-09-09 20:27:18 -0400 (Wed, 09 Sep 2009)
New Revision: 17509

Added:
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletLibraryValidator.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletLibraryValidator.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperation.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperationConfig.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderUninstallOperation.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperation.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderUninstallOperation.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperation.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperationConfig.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderUninstallOperation.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/RuntimeLibraryProviderPropertyTester.java
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletServerRuntimeProviderInstallPanel.java
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletbridgeRuntimeProviderInstallPanel.java
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/PortletServerRuntimeProviderInstallPanel.java
Modified:
   trunk/portlet/plugins/org.jboss.tools.portlet.core/META-INF/MANIFEST.MF
   trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.properties
   trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.xml
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/IPortletConstants.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/Messages.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/PortletRuntimeComponentProvider.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDataModelProvider.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDelegate.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDataModelProvider.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDelegate.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletPostInstallListener.java
   trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/messages.properties
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/META-INF/MANIFEST.MF
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/plugin.xml
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/Messages.java
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/JSFPortletFacetInstallPage.java
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/PortletFacetInstallPage.java
   trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/messages.properties
Log:
https://jira.jboss.org/jira/browse/JBIDE-4689 Integrate Portlet facet with WTP 3.1 Library Framework

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/META-INF/MANIFEST.MF
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/META-INF/MANIFEST.MF	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/META-INF/MANIFEST.MF	2009-09-10 00:27:18 UTC (rev 17509)
@@ -7,7 +7,7 @@
 Bundle-Vendor: %BundleVendor
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.wst.common.project.facet.core,
- org.eclipse.jst.common.project.facet.core,
+ org.eclipse.jst.common.project.facet.core;visibility:=reexport,
  org.eclipse.core.resources,
  org.eclipse.wst.common.frameworks,
  org.eclipse.jst.j2ee,
@@ -24,10 +24,13 @@
  org.eclipse.wst.server.core;visibility:=reexport,
  org.eclipse.jem.util,
  org.jboss.ide.eclipse.as.core;visibility:=reexport,
- org.eclipse.core.commands
+ org.eclipse.core.commands,
+ org.eclipse.core.expressions
 Bundle-ActivationPolicy: lazy
 Export-Package: org.jboss.tools.portlet.core,
  org.jboss.tools.portlet.core.internal,
- org.jboss.tools.portlet.core.internal.project.facet
+ org.jboss.tools.portlet.core.internal.project.facet,
+ org.jboss.tools.portlet.core.libprov,
+ org.jboss.tools.portlet.core.preferences
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.properties
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.properties	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.properties	2009-09-10 00:27:18 UTC (rev 17509)
@@ -1,3 +1,12 @@
 #Properties file for org.jboss.tools.portlet.core
 BundleVendor = JBoss by Red Hat
-BundleName = Portlet Core Plug-in
\ No newline at end of file
+BundleName = Portlet Core Plug-in
+
+noOpLibraryProviderWarning = Library configuration is disabled. Further classpath changes may be required later.
+noOpLibraryProviderMessage = This facet requires Portlet implementation library to be present on project classpath. By disabling library configuration, user takes on responsibility of configuring classpath appropriately via alternate means.
+portletLibraryProviderLabel=Portlet Target Runtime Provider
+
+noOpLibraryJSFPortletProviderWarning = Library configuration is disabled. Further classpath changes may be required later.
+noOpLibraryJSFPortletProviderMessage = This facet requires JSF Portlet implementation library to be present on project classpath. By disabling library configuration, user takes on responsibility of configuring classpath appropriately via alternate means.
+jsfportletLibraryProviderLabel=JSF Portlet Target Runtime Provider
+jsfportletbridgeLibraryProviderLabel=JSF Portletbridge Runtime Provider

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.xml
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.xml	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/plugin.xml	2009-09-10 00:27:18 UTC (rev 17509)
@@ -309,5 +309,133 @@
          point="org.eclipse.core.runtime.preferences">
       <initializer class="org.jboss.tools.portlet.core.preferences.JBossPortletPreferencesInitializer"/>
    </extension>
-	
+ 
+   <extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    <provider id="portlet-user-library-provider" extends="wtp-user-library-provider">
+      <param name="validator" value="org.jboss.tools.portlet.core.internal.project.facet.PortletLibraryValidator"/>
+      <param name="validator.param.0" value="javax.portlet.GenericPortlet"/>
+      <enablement>
+        <with variable="requestingProjectFacet">
+          <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.portlet" forcePluginActivation="true"/>
+        </with>
+      </enablement>
+    </provider>
+  </extension>
+  
+  <extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    <provider id="portlet-no-op-library-provider" extends="no-op-library-provider">
+      <param name="message" value="%noOpLibraryProviderMessage"/>
+      <param name="warning" value="%noOpLibraryProviderWarning"/>
+      <enablement>
+        <with variable="requestingProjectFacet">
+          <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.portlet" forcePluginActivation="true"/>
+        </with>
+      </enablement>
+    </provider>
+  </extension>
+  
+  <extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    	<provider id="portlet-library-provider">
+      		<label>%portletLibraryProviderLabel</label>
+      		<priority>500</priority>
+      		<action type="INSTALL">
+        		<config class="org.jboss.tools.portlet.core.libprov.PortletServerRuntimeLibraryProviderInstallOperationConfig"/>
+        		<operation class="org.jboss.tools.portlet.core.libprov.PortletServerRuntimeLibraryProviderInstallOperation"/>
+      		</action>
+      		
+      		<action type="UNINSTALL">
+        		<operation class="org.jboss.tools.portlet.core.libprov.PortletServerRuntimeLibraryProviderUninstallOperation"/>
+      		</action>
+      		<enablement>
+        	  <and>	
+        		<with variable="requestingProjectFacet">
+          			<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.portlet" forcePluginActivation="true"/>
+        		</with>
+        		<with variable="context">
+          			<test property="org.jboss.tools.portlet.core.libprov.isPortletRuntime" forcePluginActivation="true"/>
+        		</with>
+        	  </and>
+      		</enablement>
+    	</provider>
+  	</extension>
+  	
+  	<extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+      	id="org.jboss.tools.portlet.core.libprov.isPortletRuntime"
+      	type="org.eclipse.jst.common.project.facet.core.libprov.EnablementExpressionContext"
+      	namespace="org.jboss.tools.portlet.core.libprov"
+      	properties="isPortletRuntime,isJSFPortletRuntime"
+      	class="org.jboss.tools.portlet.core.libprov.RuntimeLibraryProviderPropertyTester">
+      </propertyTester>
+    </extension>
+  
+  <extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    <provider id="jsfportlet-no-op-library-provider" extends="no-op-library-provider">
+      <param name="message" value="%noOpLibraryJSFPortletProviderMessage"/>
+      <param name="warning" value="%noOpLibraryJSFPortletProviderWarning"/>
+      <enablement>
+        <with variable="requestingProjectFacet">
+          <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.jsfportlet" forcePluginActivation="true"/>
+        </with>
+      </enablement>
+    </provider>
+  </extension>
+  
+  <extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    <provider id="jsfportlet-user-library-provider" extends="wtp-user-library-provider">
+      <param name="validator" value="org.jboss.tools.portlet.core.internal.project.facet.JSFPortletLibraryValidator"/>
+      <param name="validator.param.0" value="javax.portlet.faces.GenericFacesPortlet"/>
+      <enablement>
+        <with variable="requestingProjectFacet">
+          <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.jsfportlet" forcePluginActivation="true"/>
+        </with>
+      </enablement>
+    </provider>
+  </extension>
+  
+  <extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    	<provider id="jsfportlet-library-provider">
+      		<label>%jsfportletLibraryProviderLabel</label>
+      		<priority>500</priority>
+      		<action type="INSTALL">
+        		<config class="org.jboss.tools.portlet.core.libprov.JSFPortletServerRuntimeLibraryProviderInstallOperationConfig"/>
+        		<operation class="org.jboss.tools.portlet.core.libprov.JSFPortletServerRuntimeLibraryProviderInstallOperation"/>
+      		</action>
+      		
+      		<action type="UNINSTALL">
+        		<operation class="org.jboss.tools.portlet.core.libprov.JSFPortletServerRuntimeLibraryProviderUninstallOperation"/>
+      		</action>
+      		<enablement>
+        	  <and>	
+        		<with variable="requestingProjectFacet">
+          			<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.jsfportlet" forcePluginActivation="true"/>
+        		</with>
+        		<with variable="context">
+          			<test property="org.jboss.tools.portlet.core.libprov.isJSFPortletRuntime" forcePluginActivation="true"/>
+        		</with>
+        	  </and>
+      		</enablement>
+    	</provider>
+  	</extension>
+  	
+  	<extension point="org.eclipse.jst.common.project.facet.core.libraryProviders">
+    	<provider id="jsfportletbridge-library-provider">
+      		<label>%jsfportletbridgeLibraryProviderLabel</label>
+      		<priority>500</priority>
+      		<action type="INSTALL">
+        		<config class="org.jboss.tools.portlet.core.libprov.JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig"/>
+        		<operation class="org.jboss.tools.portlet.core.libprov.JSFPortletbridgeRuntimeLibraryProviderInstallOperation"/>
+      		</action>
+      		
+      		<action type="UNINSTALL">
+        		<operation class="org.jboss.tools.portlet.core.libprov.JSFPortletbridgeRuntimeLibraryProviderUninstallOperation"/>
+      		</action>
+      		<enablement>
+        		<with variable="requestingProjectFacet">
+          			<test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jboss.jsfportlet" forcePluginActivation="true"/>
+        		</with>
+      		</enablement>
+    	</provider>
+  	</extension>
+  	
 </plugin>

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/IPortletConstants.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/IPortletConstants.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/IPortletConstants.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -96,4 +96,14 @@
 	static final String PORTLET_SAR_LIB = "deploy/jboss-portal.sar/portal-identity.sar/portal-identity.war/WEB-INF/lib"; //$NON-NLS-1$
 	
 	static final String PORTLET_SAR_HA_LIB = "deploy/jboss-portal-ha.sar/portal-identity.sar/portal-identity.war/WEB-INF/lib"; //$NON-NLS-1$
+	
+	static final String PORTLET_LIBRARY_PROVIDER_DELEGATE = "PORTLET_LIBRARY_PROVIDER_DELEGATE"; //$NON-NLS-1$
+	
+	static final String JSFPORTLET_LIBRARY_PROVIDER_DELEGATE = "JSFPORTLET_LIBRARY_PROVIDER_DELEGATE"; //$NON-NLS-1$
+
+	static final String PORTLETBRIDGE_HOME = "portletbridgeHome"; //$NON-NLS-1$
+	
+	static final String PREFS_PORTLETBRIDGE_HOME = "jsfportlet.library.provider/portletbridge_home"; //$NON-NLS-1$
+
+	static final String PORTLET_BRIDGE_HOME = "portletBridgeHome"; //$NON-NLS-1$
 }

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/Messages.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/Messages.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/Messages.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -4,7 +4,10 @@
 
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.jboss.tools.portlet.core.messages"; //$NON-NLS-1$
+	public static String JSFPortletLibraryValidator_MISSING_JSFPORTLET_IMPLEMENTATION_CLASSES;
+	public static String PortletLibraryValidator_MISSING_PORTLET_IMPLEMENTATION_CLASSES;
 	public static String PortletPostInstallListener_Invalid_Richfaces_Runtime;
+	public static String PortletPostInstallListener_Cannot_find_Richfaces_ibraries;
 	public static String PortletPostInstallListener_Cannot_find_Richfaces_Runtime;
 	public static String Libraries_provided_by_richfaces;
 	public static String Libraries_provided_by_portletbridge ;
@@ -38,6 +41,8 @@
 	public static String SeamPortletFacetInstallDelegate_Cannot_configure_web_module_for_JBoss_Seam_Portlet_Facet;
 	public static String SeamPortletFacetInstallDelegate_Missing_configuration;
 	public static String SeamPortletFacetInstallDelegate_The_web_xml_file_is_not_updateable;
+	public static String JSFPortletFacetInstallPage_Portletbridge_Runtime_directory_is_required;
+	public static String JSFPortletFacetInstallPage_Invalid_Portletbridge_Runtime_directory;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/PortletRuntimeComponentProvider.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/PortletRuntimeComponentProvider.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/PortletRuntimeComponentProvider.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -23,6 +23,8 @@
 public class PortletRuntimeComponentProvider extends
 		RuntimeFacetComponentProviderDelegate {
 
+	private static final String IS_PORTLET_RUNTIME = "isPortletRuntime"; //$NON-NLS-1$
+
 	private static final IRuntimeComponentType PORTAL_TYPE = RuntimeManager
 			.getRuntimeComponentType("org.jboss.tools.portlet.core.runtime.component"); //$NON-NLS-1$
 
@@ -34,7 +36,7 @@
 		if (runtime != null && runtime.getLocation() != null) {
 			File location = runtime.getLocation().toFile();
 
-			if (isPortalPresent(location, runtime)) {
+			if (isPortalPresentInternal(location, runtime)) {
 				final IRuntimeComponent portalComponent = RuntimeManager
 						.createRuntimeComponent(PORTAL_VERSION_1, null);
 				components.add(portalComponent);
@@ -44,12 +46,18 @@
 	}
 
 	
-	private static boolean isPortalPresent(final File location, IRuntime runtime) {
+	private static boolean isPortalPresentInternal(final File location, IRuntime runtime) {
 		boolean check = PortletCoreActivator.getDefault().getPluginPreferences().getBoolean(PortletCoreActivator.CHECK_RUNTIMES);
 		if (!check) {
 			return true;
 		}
 		
+		return isPortalPresent(location, runtime, IS_PORTLET_RUNTIME); 
+	}
+
+
+	public static boolean isPortalPresent(final File location,
+			IRuntime runtime, String property) {
 		IJBossServerRuntime jbossRuntime = (IJBossServerRuntime)runtime.loadAdapter(IJBossServerRuntime.class, new NullProgressMonitor());
 		if (jbossRuntime != null) {
 			// JBoss Portal server
@@ -71,8 +79,12 @@
 					IPortletConstants.SERVER_DEFAULT_DEPLOY_SIMPLE_PORTAL)) {
 				return true;
 			}
+			return false;
 		}
 		// Tomcat portletcontainer
+		if (!IS_PORTLET_RUNTIME.equals(property)) {
+			return false;
+		}
 		File tomcatLib = new File(location,IPortletConstants.TOMCAT_LIB);
 		if (tomcatLib.exists() && tomcatLib.isDirectory()) {
 			String[] files = tomcatLib.list(new FilenameFilter() {
@@ -88,7 +100,7 @@
 			return files.length > 0;
 		}
 		
-		return false; 
+		return false;
 	}
 
 

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDataModelProvider.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDataModelProvider.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDataModelProvider.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -12,9 +12,14 @@
 
 import java.util.Set;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.common.project.facet.core.libprov.IPropertyChangeListener;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
 import org.eclipse.wst.common.componentcore.datamodel.FacetInstallDataModelProvider;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.jboss.tools.portlet.core.IPortletConstants;
-import org.jboss.tools.portlet.core.Messages;
 
 /**
  * @author snjeza
@@ -23,6 +28,27 @@
 public class JSFPortletFacetInstallDataModelProvider extends
 		FacetInstallDataModelProvider implements IPortletConstants {
 
+	private LibraryInstallDelegate libraryInstallDelegate = null;
+    
+	private void initLibraryInstallDelegate() {
+		final IFacetedProjectWorkingCopy fpjwc = (IFacetedProjectWorkingCopy) getProperty(FACETED_PROJECT_WORKING_COPY);
+		final IProjectFacetVersion fv = (IProjectFacetVersion) getProperty(FACET_VERSION);
+		if (libraryInstallDelegate == null && fpjwc != null && fv != null) {
+			libraryInstallDelegate = new LibraryInstallDelegate(fpjwc, fv);
+			libraryInstallDelegate.addListener(new IPropertyChangeListener() {
+
+				public void propertyChanged(final String property,
+								final Object oldValue, final Object newValue) {
+					final IDataModel dm = getDataModel();
+					if (dm != null) {
+						dm.notifyPropertyChange(JSFPORTLET_LIBRARY_PROVIDER_DELEGATE,IDataModel.VALUE_CHG);
+					}
+				}
+				
+			});
+		}
+	}
+	
 	@Override
 	public Object getDefaultProperty(String propertyName) {
 		if(propertyName.equals(FACET_ID)){
@@ -52,6 +78,9 @@
 		if (propertyName.equals(IPortletConstants.USER_LIBRARY_NAME)) {
 			return ""; //$NON-NLS-1$
 		}
+		if (propertyName.equals(JSFPORTLET_LIBRARY_PROVIDER_DELEGATE)) {
+            return libraryInstallDelegate;
+		}
 		return super.getDefaultProperty(propertyName);
 	}
 
@@ -66,6 +95,30 @@
 		propertyNames.add(IPortletConstants.RICHFACES_LIBRARIES_SELECTED);
 		propertyNames.add(IPortletConstants.RICHFACES_LIBRARIES_TYPE);
 		propertyNames.add(IPortletConstants.RICHFACES_CAPABILITIES);
+		propertyNames.add(JSFPORTLET_LIBRARY_PROVIDER_DELEGATE);
+		
 		return propertyNames;
 	}
+	
+	@Override
+	public boolean propertySet(final String propertyName,
+			final Object propertyValue) {
+		if (propertyName.equals(FACETED_PROJECT_WORKING_COPY)
+				|| propertyName.equals(FACET_VERSION)) {
+			initLibraryInstallDelegate();
+			if (this.libraryInstallDelegate != null && propertyName.equals(FACET_VERSION)) {
+				final IProjectFacetVersion fv = (IProjectFacetVersion) getProperty(FACET_VERSION);
+				this.libraryInstallDelegate.setProjectFacetVersion(fv);
+			}
+		}
+
+		return super.propertySet(propertyName, propertyValue);
+	}
+
+	public IStatus validate(String name) {
+		if (name.equals(JSFPORTLET_LIBRARY_PROVIDER_DELEGATE)) {
+			return ((LibraryInstallDelegate) getProperty(JSFPORTLET_LIBRARY_PROVIDER_DELEGATE)).validate();
+		}
+		return super.validate(name);
+	}
 }

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDelegate.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDelegate.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletFacetInstallDelegate.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -30,6 +30,7 @@
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
 import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil;
 import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
 import org.eclipse.jst.j2ee.model.IModelProvider;
@@ -113,7 +114,11 @@
 
 			configureFacesConfig(project, monitor, config);
 
-			configureClassPath(project, monitor, config);
+			//configureClassPath(project, monitor, config);
+			
+			//Configure libraries
+			( (LibraryInstallDelegate) config.getProperty( IPortletConstants.JSFPORTLET_LIBRARY_PROVIDER_DELEGATE ) ).execute( new NullProgressMonitor() );
+			
 
 			configureWebApp(project, monitor, config);
 			

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletLibraryValidator.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletLibraryValidator.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/JSFPortletLibraryValidator.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,23 @@
+package org.jboss.tools.portlet.core.internal.project.facet;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.common.project.facet.core.libprov.user.KeyClassesValidator;
+import org.eclipse.jst.common.project.facet.core.libprov.user.UserLibraryProviderInstallOperationConfig;
+import org.jboss.tools.portlet.core.Messages;
+import org.jboss.tools.portlet.core.PortletCoreActivator;
+
+public class JSFPortletLibraryValidator extends KeyClassesValidator {
+
+	@Override
+	public IStatus validate(UserLibraryProviderInstallOperationConfig config) {
+		IStatus status = super.validate(config);
+		if (status.getSeverity() == IStatus.OK)
+			return status;
+		
+		String message = Messages.JSFPortletLibraryValidator_MISSING_JSFPORTLET_IMPLEMENTATION_CLASSES;
+		return new Status( IStatus.ERROR, PortletCoreActivator.PLUGIN_ID, message );
+
+	}
+
+}

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDataModelProvider.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDataModelProvider.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDataModelProvider.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -12,9 +12,14 @@
 
 import java.util.Set;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.common.project.facet.core.libprov.IPropertyChangeListener;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
 import org.eclipse.wst.common.componentcore.datamodel.FacetInstallDataModelProvider;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.jboss.tools.portlet.core.IPortletConstants;
-import org.jboss.tools.portlet.core.Messages;
 import org.jboss.tools.portlet.core.PortletCoreActivator;
 
 /**
@@ -24,6 +29,27 @@
 public class PortletFacetInstallDataModelProvider extends
 		FacetInstallDataModelProvider implements IPortletConstants {
 
+	private LibraryInstallDelegate libraryInstallDelegate = null;
+    
+	private void initLibraryInstallDelegate() {
+		final IFacetedProjectWorkingCopy fpjwc = (IFacetedProjectWorkingCopy) getProperty(FACETED_PROJECT_WORKING_COPY);
+		final IProjectFacetVersion fv = (IProjectFacetVersion) getProperty(FACET_VERSION);
+		if (libraryInstallDelegate == null && fpjwc != null && fv != null) {
+			libraryInstallDelegate = new LibraryInstallDelegate(fpjwc, fv);
+			libraryInstallDelegate.addListener(new IPropertyChangeListener() {
+
+				public void propertyChanged(final String property,
+								final Object oldValue, final Object newValue) {
+					final IDataModel dm = getDataModel();
+					if (dm != null) {
+						dm.notifyPropertyChange(PORTLET_LIBRARY_PROVIDER_DELEGATE,IDataModel.VALUE_CHG);
+					}
+				}
+				
+			});
+		}
+	}
+	
 	@Override
 	public Object getDefaultProperty(String propertyName) {
 		if(propertyName.equals(FACET_ID)){
@@ -49,6 +75,9 @@
 			}
 			//return IPortletConstants.LIBRARY_PROVIDED_BY_JBOSS_TOOLS;
 		}
+		if (propertyName.equals(PORTLET_LIBRARY_PROVIDER_DELEGATE)) {
+            return libraryInstallDelegate;
+		}
 		return super.getDefaultProperty(propertyName);
 	}
 	
@@ -59,8 +88,30 @@
 		propertyNames.add(IPortletConstants.ENABLE_IMPLEMENTATION_LIBRARY);
 		propertyNames.add(IPortletConstants.USER_LIBRARY_NAME);
 		propertyNames.add(IPortletConstants.IMPLEMENTATION_LIBRARY);
+		propertyNames.add(PORTLET_LIBRARY_PROVIDER_DELEGATE);
 		
 		return propertyNames;
 	}
+	
+	@Override
+	public boolean propertySet(final String propertyName,
+			final Object propertyValue) {
+		if (propertyName.equals(FACETED_PROJECT_WORKING_COPY)
+				|| propertyName.equals(FACET_VERSION)) {
+			initLibraryInstallDelegate();
+			if (this.libraryInstallDelegate != null && propertyName.equals(FACET_VERSION)) {
+				final IProjectFacetVersion fv = (IProjectFacetVersion) getProperty(FACET_VERSION);
+				this.libraryInstallDelegate.setProjectFacetVersion(fv);
+			}
+		}
 
+		return super.propertySet(propertyName, propertyValue);
+	}
+
+	public IStatus validate(String name) {
+		if (name.equals(PORTLET_LIBRARY_PROVIDER_DELEGATE)) {
+			return ((LibraryInstallDelegate) getProperty(PORTLET_LIBRARY_PROVIDER_DELEGATE)).validate();
+		}
+		return super.validate(name);
+	}
 }

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDelegate.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDelegate.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletFacetInstallDelegate.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -16,11 +16,12 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
 import org.eclipse.jst.j2ee.model.IModelProvider;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.project.facet.core.IDelegate;
@@ -76,12 +77,15 @@
 				}
 			}
 
-			IJavaProject javaProject = JavaCore.create(project);	
+			/*IJavaProject javaProject = JavaCore.create(project);	
 			boolean enableImplementationLibrary = config.getBooleanProperty(IPortletConstants.ENABLE_IMPLEMENTATION_LIBRARY);
 			if (enableImplementationLibrary) {
 				setClasspath(monitor, javaProject, config);
-			}
+			}*/
 			
+			//Configure libraries
+			( (LibraryInstallDelegate) config.getProperty( IPortletConstants.PORTLET_LIBRARY_PROVIDER_DELEGATE ) ).execute( new NullProgressMonitor() );
+			
 			createPortletXml(project, fv, config, monitor);
 
 			if (monitor != null) {

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletLibraryValidator.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletLibraryValidator.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletLibraryValidator.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,23 @@
+package org.jboss.tools.portlet.core.internal.project.facet;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.common.project.facet.core.libprov.user.KeyClassesValidator;
+import org.eclipse.jst.common.project.facet.core.libprov.user.UserLibraryProviderInstallOperationConfig;
+import org.jboss.tools.portlet.core.Messages;
+import org.jboss.tools.portlet.core.PortletCoreActivator;
+
+public class PortletLibraryValidator extends KeyClassesValidator {
+
+	@Override
+	public IStatus validate(UserLibraryProviderInstallOperationConfig config) {
+		IStatus status = super.validate(config);
+		if (status.getSeverity() == IStatus.OK)
+			return status;
+		
+		String message = Messages.PortletLibraryValidator_MISSING_PORTLET_IMPLEMENTATION_CLASSES;
+		return new Status( IStatus.ERROR, PortletCoreActivator.PLUGIN_ID, message );
+
+	}
+
+}

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletPostInstallListener.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletPostInstallListener.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/internal/project/facet/PortletPostInstallListener.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -21,6 +21,8 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifest;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifestImpl;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil;
@@ -36,16 +38,22 @@
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
 import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 import org.eclipse.wst.common.project.facet.core.events.IProjectFacetActionEvent;
+import org.eclipse.wst.server.core.IRuntime;
+import org.jboss.ide.eclipse.as.core.server.IJBossServerConstants;
+import org.jboss.ide.eclipse.as.core.server.IJBossServerRuntime;
 import org.jboss.tools.portlet.core.IPortletConstants;
 import org.jboss.tools.portlet.core.Messages;
 import org.jboss.tools.portlet.core.PortletCoreActivator;
+import org.jboss.tools.portlet.core.libprov.JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig;
 
 public class PortletPostInstallListener implements IFacetedProjectListener {
 
-	private static final String SEAM_FACET_ID = "jst.seam"; //$NON-NLS-1$
+	private static final String JSFPORTLETBRIDGE_LIBRARY_PROVIDER = "jsfportletbridge-library-provider"; //$NON-NLS-1$
+	private static final IProjectFacet seamFacet = ProjectFacetsManager.getProjectFacet("jst.seam"); //$NON-NLS-1$
 	private static final IOverwriteQuery OVERWRITE_NONE_QUERY = new IOverwriteQuery()
     {
       public String queryOverwrite(String pathString)
@@ -54,11 +62,12 @@
       }
     };
 	private String portletbridgeRuntime;
-	private boolean richfacesCapabilities;
-	private boolean richfacesSelected;
-	private String richfacesType;
+	//private boolean richfacesCapabilities;
+	//private boolean richfacesSelected;
+	//private String richfacesType;
 	private String richfacesRuntime;
 	
+	
 	public void handleEvent(IFacetedProjectEvent event) {
 		if (event instanceof IProjectFacetActionEvent) {
 			IProjectFacetActionEvent actionEvent = (IProjectFacetActionEvent) event;
@@ -72,17 +81,14 @@
 		Set<IProjectFacetVersion> projectFacets = facetedProject
 				.getProjectFacets();
 		boolean isJSFPortlet = false;
-		boolean isSeamProject = false;
+		boolean richfacesFromServerRuntime = false;
+		
 		for (IProjectFacetVersion projectFacetVersion : projectFacets) {
 			IProjectFacet projectFacet = projectFacetVersion.getProjectFacet();
 			if (IPortletConstants.JSFPORTLET_FACET_ID.equals(projectFacet
 					.getId())) {
 				isJSFPortlet = true;
 			}
-			if (SEAM_FACET_ID.equals(projectFacet.getId())) {
-				isSeamProject = true;
-			}
-
 		}
 		if (!isJSFPortlet)
 			return;
@@ -91,26 +97,151 @@
 			IProjectFacetActionEvent actionEvent = (IProjectFacetActionEvent) event;
 			IDataModel dataModel = (IDataModel) actionEvent.getActionConfig();
 			try {
-				portletbridgeRuntime = dataModel
-						.getStringProperty(IPortletConstants.PORTLET_BRIDGE_RUNTIME);
-				richfacesCapabilities = dataModel.getBooleanProperty(IPortletConstants.RICHFACES_CAPABILITIES);
-				richfacesSelected = dataModel.getBooleanProperty(IPortletConstants.RICHFACES_LIBRARIES_SELECTED);
-				richfacesType = dataModel.getStringProperty(IPortletConstants.RICHFACES_LIBRARIES_TYPE);
-				richfacesRuntime = dataModel.getStringProperty(IPortletConstants.RICHFACES_RUNTIME);
+				LibraryInstallDelegate libraryDelegate = ( (LibraryInstallDelegate) dataModel.getProperty( IPortletConstants.JSFPORTLET_LIBRARY_PROVIDER_DELEGATE ) );
+				ILibraryProvider libraryProvider = libraryDelegate.getLibraryProvider();
+				String providerId = libraryProvider.getId();
+				if (JSFPORTLETBRIDGE_LIBRARY_PROVIDER.equals(providerId)) {
+					JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig libraryConfig = (JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig) libraryDelegate.getLibraryProviderOperationConfig(libraryProvider);
+					portletbridgeRuntime = libraryConfig.getPortletbridgeHome();
+				} else {
+					portletbridgeRuntime = null;
+				}
+				richfacesFromServerRuntime = "jsfportlet-library-provider".equals(providerId); //$NON-NLS-1$
+					
+				//richfacesCapabilities = dataModel.getBooleanProperty(IPortletConstants.RICHFACES_CAPABILITIES);
+				//richfacesSelected = dataModel.getBooleanProperty(IPortletConstants.RICHFACES_LIBRARIES_SELECTED);
+				//richfacesType = dataModel.getStringProperty(IPortletConstants.RICHFACES_LIBRARIES_TYPE);
+				//richfacesRuntime = dataModel.getStringProperty(IPortletConstants.RICHFACES_RUNTIME);
 			} catch (Exception e) {
 				//PortletCoreActivator.log(e);
 			}
 		}
 		
-		if (!richfacesCapabilities || !richfacesSelected) {
+		//if (!richfacesCapabilities || !richfacesSelected) {
+		//	return;
+		//}
+		if (isJSFPortlet) {
+			if (portletbridgeRuntime != null) {
+				addRichfacesFromPortletBridgeRuntime(facetedProject,portletbridgeRuntime);
+			} 
+			else if (richfacesFromServerRuntime) {
+				addRichFacesFromServerRuntime(facetedProject);
+			}
+			//else {
+			//	addRichfacesFromRichfacesRuntime(facetedProject,isSeamProject);
+			//}
+		}
+	}
+
+	private void addRichFacesFromServerRuntime(IFacetedProject facetedProject) {
+		final boolean isSeamProject = facetedProject.hasProjectFacet(seamFacet);
+		if (isSeamProject) {
 			return;
 		}
-		if (isJSFPortlet) {
-			if (IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE.equals(richfacesType)) {
-				addRichfacesFromPortletBridgeRuntime(facetedProject,isSeamProject);
-			} else {
-				addRichfacesFromRichfacesRuntime(facetedProject,isSeamProject);
+		org.eclipse.wst.common.project.facet.core.runtime.IRuntime facetRuntime = facetedProject.getPrimaryRuntime();
+		if (facetRuntime == null) {
+			return;
+		}
+		IRuntime runtime = PortletCoreActivator.getRuntime(facetRuntime);
+		if (runtime == null) {
+			return;
+		}
+		IJBossServerRuntime jbossRuntime = (IJBossServerRuntime)runtime.loadAdapter(IJBossServerRuntime.class, new NullProgressMonitor());
+		if (jbossRuntime != null) {
+			IPath jbossLocation = runtime.getLocation();
+			IPath configPath = jbossLocation.append(IJBossServerConstants.SERVER).append(jbossRuntime.getJBossConfiguration());
+			IPath portletLib = configPath.append(IPortletConstants.PORTLET_SAR_LIB);
+			File libFile = portletLib.toFile();
+			if (!libFile.exists()) {
+				portletLib = configPath.append(IPortletConstants.PORTLET_SAR_HA_LIB);
+				libFile = portletLib.toFile();
 			}
+			File richfacesLib = libFile;
+			if (!richfacesLib.exists()) {
+				PortletCoreActivator.log(null, Messages.PortletPostInstallListener_Cannot_find_Richfaces_ibraries);
+				return;
+			}
+			if (!richfacesLib.isDirectory()) {
+				PortletCoreActivator.log(null, Messages.PortletPostInstallListener_Cannot_find_Richfaces_ibraries);
+				return;
+			}
+			try {
+				IProject project = facetedProject.getProject();
+				final IProject earProject = getEarProject(project, isSeamProject);
+				String[] fileList = richfacesLib.list(new FilenameFilter() {
+
+					public boolean accept(File dir, String name) {
+						if (name.startsWith("richfaces-ui") && name.endsWith(".jar")) { //$NON-NLS-1$ //$NON-NLS-2$
+							return true;
+						}
+						if (name.startsWith("richfaces-impl") && name.endsWith(".jar")) { //$NON-NLS-1$ //$NON-NLS-2$
+							return true;
+						}
+						if (earProject == null) {
+							if (name.startsWith("richfaces-api") && name.endsWith(".jar")) { //$NON-NLS-1$ //$NON-NLS-2$
+								return true;
+							}
+						}
+						if (!isSeamProject) {
+							if (name.startsWith("portal")) { //$NON-NLS-1$
+								return false;
+							}
+							if (name.startsWith("portletbridge")) { //$NON-NLS-1$
+								return false;
+							}
+							return true;
+						}
+						return false;
+					}
+
+				});
+				List<File> filesToImport = new ArrayList<File>();
+				for (int i = 0; i < fileList.length; i++) {
+					filesToImport.add(new File(richfacesLib, fileList[i]));
+				}
+				IVirtualComponent component = ComponentCore.createComponent(project);
+				IVirtualFolder rootFolder = component.getRootFolder();
+				IContainer folder = rootFolder.getUnderlyingFolder();
+				IContainer webinf = folder.getFolder(new Path(IPortletConstants.WEB_INF_LIB));
+			
+				deleteOldRichfacesLibs(earProject, webinf);
+
+				ImportOperation importOperation = new ImportOperation(webinf.getFullPath(), richfacesLib,
+					FileSystemStructureProvider.INSTANCE,
+					PortletCoreActivator.OVERWRITE_ALL_QUERY, filesToImport);
+				importOperation.setCreateContainerStructure(false);
+				importOperation.run(new NullProgressMonitor());
+				if (earProject != null) {
+					fileList = richfacesLib.list(new FilenameFilter() {
+
+						public boolean accept(File dir, String name) {
+							if (name.startsWith("richfaces-api") && name.endsWith(".jar")) { //$NON-NLS-1$ //$NON-NLS-2$
+								return true;
+							}
+							return false;
+						}
+
+					});
+					filesToImport = new ArrayList<File>();
+					for (int i = 0; i < fileList.length; i++) {
+						filesToImport.add(new File(richfacesLib, fileList[i]));
+					}
+					component = ComponentCore.createComponent(earProject);
+					rootFolder = component.getRootFolder();
+					folder = rootFolder.getUnderlyingFolder();
+				
+					deleteOldRichFacesApi(folder);
+
+					importOperation = new ImportOperation(folder.getFullPath(), richfacesLib,
+						FileSystemStructureProvider.INSTANCE,
+						PortletCoreActivator.OVERWRITE_ALL_QUERY, filesToImport);
+					importOperation.setCreateContainerStructure(false);
+					importOperation.run(new NullProgressMonitor());
+					updateEARLibraries(project,isSeamProject);
+				}
+			} catch (Exception e) {
+				PortletCoreActivator.log(e,Messages.JSFPortletFacetInstallDelegate_Error_loading_classpath_container);
+			}
 		}
 	}
 
@@ -229,7 +360,7 @@
 		}
 	}
 
-	private void addRichfacesFromPortletBridgeRuntime(IFacetedProject facetedProject, boolean isSeamProject) {
+	private void addRichfacesFromPortletBridgeRuntime(IFacetedProject facetedProject, String portletbridgeRuntime) {
 		File portletbridgeHome = new File(portletbridgeRuntime);
 		if (!portletbridgeHome.exists()) {
 			PortletCoreActivator.log(null, Messages.PortletPostInstallListener_Cannot_find_Portletbridge_Runtime);
@@ -253,6 +384,7 @@
 			ZipFile zipFile = new ZipFile(richFacesPortletZip);
 			ZipFileStructureProvider structureProvider = new ZipFileStructureProvider(
 					zipFile );
+			boolean isSeamProject = facetedProject.hasProjectFacet(seamFacet);
 			List<ZipEntry> list = prepareList(zipFile, facetedProject, isSeamProject);
 			
 			IProject project = facetedProject.getProject();

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperation.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperation.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperation.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,112 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
+import org.eclipse.ui.wizards.datatransfer.ImportOperation;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.server.core.IRuntime;
+import org.jboss.ide.eclipse.as.core.server.IJBossServerConstants;
+import org.jboss.ide.eclipse.as.core.server.IJBossServerRuntime;
+import org.jboss.tools.portlet.core.IPortletConstants;
+import org.jboss.tools.portlet.core.Messages;
+import org.jboss.tools.portlet.core.PortletCoreActivator;
+
+public class JSFPortletServerRuntimeLibraryProviderInstallOperation extends
+		LibraryProviderOperation {
+
+	@Override
+	public void execute(LibraryProviderOperationConfig config,
+			IProgressMonitor monitor) throws CoreException {
+		IFacetedProjectBase facetedProject = config.getFacetedProject();
+		IProjectFacet seamFacet = ProjectFacetsManager.getProjectFacet("jst.seam"); //$NON-NLS-1$
+		boolean hasSeamFacet = facetedProject.hasProjectFacet(seamFacet);
+		org.eclipse.wst.common.project.facet.core.runtime.IRuntime facetRuntime = facetedProject.getPrimaryRuntime();
+		IProject project = facetedProject.getProject();
+		IRuntime runtime = PortletCoreActivator.getRuntime(facetRuntime);
+		IJBossServerRuntime jbossRuntime = (IJBossServerRuntime)runtime.loadAdapter(IJBossServerRuntime.class, new NullProgressMonitor());
+		if (jbossRuntime != null) {
+			// JBoss Portal server
+			IPath jbossLocation = runtime.getLocation();
+			IPath configPath = jbossLocation.append(IJBossServerConstants.SERVER).append(jbossRuntime.getJBossConfiguration());
+			IPath portletLib = configPath.append(IPortletConstants.PORTLET_SAR_LIB);
+			File portletLibFile = portletLib.toFile();
+			String[] files = getPortletbridgeLibraries(portletLibFile, hasSeamFacet);
+			if (files == null) {
+				portletLib = configPath.append(IPortletConstants.PORTLET_SAR_HA_LIB);
+				portletLibFile = portletLib.toFile();
+				files = getPortletbridgeLibraries(portletLibFile, hasSeamFacet);
+					
+			}
+			if (files != null) {
+				try {
+					List<File> filesToImport = new ArrayList<File>();
+
+					for (int i = 0; i < files.length; i++) {
+						filesToImport.add(new File(portletLibFile, files[i]));
+					}
+					IVirtualComponent component = ComponentCore
+							.createComponent(project);
+					IVirtualFile libVirtualFile = component.getRootFolder()
+							.getFile(IPortletConstants.WEB_INF_LIB);
+
+					IFile folder = libVirtualFile.getUnderlyingFile();
+
+					File sourceFolder = new File(portletLib.toOSString());
+					ImportOperation importOperation = new ImportOperation(
+							folder.getFullPath(), sourceFolder,
+							FileSystemStructureProvider.INSTANCE,
+							PortletCoreActivator.OVERWRITE_ALL_QUERY,
+							filesToImport);
+					importOperation.setCreateContainerStructure(false);
+					importOperation.run(monitor);
+				} catch (Exception e) {
+					PortletCoreActivator
+					.log(e, Messages.JSFPortletFacetInstallDelegate_Error_loading_classpath_container);
+				}
+			}
+		}
+	}
+	
+	private String[] getPortletbridgeLibraries(File file, final boolean hasSeamFacet) {
+		if (file != null && file.isDirectory()) {
+			String[] list = file.list(new FilenameFilter() {
+
+				public boolean accept(File dir, String name) {
+					if ("portletbridge-api.jar".equals(name) || //$NON-NLS-1$
+							"portletbridge-impl.jar".equals(name)) { //$NON-NLS-1$
+						return true;
+					}
+					if (!hasSeamFacet) {
+						if (name.startsWith("portal")) { //$NON-NLS-1$
+							return false;
+						} else {
+							return true;
+						}
+						
+					}
+					return false;
+				}
+				
+			});
+			return list;
+		}
+		return null;
+	}
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperationConfig.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperationConfig.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderInstallOperationConfig.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,8 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderInstallOperationConfig;
+
+public class JSFPortletServerRuntimeLibraryProviderInstallOperationConfig extends
+		LibraryProviderInstallOperationConfig {
+
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderUninstallOperation.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderUninstallOperation.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletServerRuntimeLibraryProviderUninstallOperation.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,16 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+
+public class JSFPortletServerRuntimeLibraryProviderUninstallOperation extends LibraryProviderOperation {
+
+	@Override
+	public void execute(LibraryProviderOperationConfig config,
+			IProgressMonitor monitor) throws CoreException {
+		
+	}
+
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperation.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperation.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperation.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,95 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
+import org.eclipse.ui.wizards.datatransfer.ImportOperation;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
+import org.jboss.tools.portlet.core.IPortletConstants;
+import org.jboss.tools.portlet.core.Messages;
+import org.jboss.tools.portlet.core.PortletCoreActivator;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+public class JSFPortletbridgeRuntimeLibraryProviderInstallOperation extends
+		LibraryProviderOperation {
+
+	@Override
+	public void execute(LibraryProviderOperationConfig config,
+			IProgressMonitor monitor) throws CoreException {
+		IFacetedProjectBase facetedProject = config.getFacetedProject();
+		IProject project = facetedProject.getProject();
+		JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig portletbridgeConfig = (JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig) config;
+		String pbRuntime = portletbridgeConfig.getPortletbridgeHome();
+		getPortletbridgeLibraries(monitor, project, pbRuntime);
+		
+		try {
+			Preferences prefs = FacetedProjectFramework.getPreferences( config.getProjectFacet() );
+			prefs = prefs.node(IPortletConstants.PORTLET_BRIDGE_HOME);
+			prefs.put(IPortletConstants.PREFS_PORTLETBRIDGE_HOME, pbRuntime);
+			prefs.flush();
+		} catch (BackingStoreException e) {
+			PortletCoreActivator.log(e);
+		}
+	}
+
+	private void getPortletbridgeLibraries(IProgressMonitor monitor,
+			IProject project, String pbRuntime) {
+		if (pbRuntime != null && pbRuntime.trim().length() > 0) {
+			pbRuntime = pbRuntime.trim();
+			File pbFolder = new File(pbRuntime);
+			if (pbFolder.exists() && pbFolder.isDirectory()) {
+				String[] fileList = pbFolder.list(new FilenameFilter() {
+
+					public boolean accept(File dir, String name) {
+						if (name.startsWith("portletbridge") || name.endsWith(".jar")) { //$NON-NLS-1$ //$NON-NLS-2$
+							return true;
+						}
+						
+						return false;
+					}
+
+				});
+
+				List<File> filesToImport = new ArrayList<File>();
+
+				for (int i = 0; i < fileList.length; i++) {
+					filesToImport.add(new File(pbRuntime, fileList[i]));
+				}
+				IVirtualComponent component = ComponentCore
+						.createComponent(project);
+				IVirtualFile libVirtualFile = component.getRootFolder()
+						.getFile(IPortletConstants.WEB_INF_LIB);
+
+				IFile folder = libVirtualFile.getUnderlyingFile();
+
+				ImportOperation importOperation = new ImportOperation(
+						folder.getFullPath(), pbFolder,
+						FileSystemStructureProvider.INSTANCE,
+						PortletCoreActivator.OVERWRITE_ALL_QUERY,
+						filesToImport);
+				importOperation.setCreateContainerStructure(false);
+				try {
+					importOperation.run(monitor);
+				} catch (Exception e) {
+					PortletCoreActivator.log(e, Messages.JSFPortletFacetInstallDelegate_Error_loading_classpath_container);
+				} 
+			}
+		}
+	}
+	
+	
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,108 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderInstallOperationConfig;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.jboss.tools.portlet.core.IPortletConstants;
+import org.jboss.tools.portlet.core.Messages;
+import org.jboss.tools.portlet.core.PortletCoreActivator;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+public class JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig extends
+		LibraryProviderInstallOperationConfig {
+
+	private String portletbridgeHome;
+
+	@Override
+	public synchronized IStatus validate() {
+		IStatus status = super.validate();
+		if (!status.isOK()) {
+			return status;
+		}
+		if (portletbridgeHome == null) {
+			return getInvalidPortletbridgeRuntime();
+		}
+		portletbridgeHome = portletbridgeHome.trim();
+		if (portletbridgeHome.length() <= 0) {
+			status = new Status( IStatus.ERROR, PortletCoreActivator.PLUGIN_ID, Messages.JSFPortletFacetInstallPage_Portletbridge_Runtime_directory_is_required );
+			return status;
+		}
+		File folder = new File(portletbridgeHome);
+		if (!folder.exists() || !folder.isDirectory()) {
+			return getInvalidPortletbridgeRuntime();
+		}
+		String[] fileList = folder.list(new FilenameFilter() {
+
+			public boolean accept(File dir, String name) {
+				if (name.startsWith("portletbridge") || name.endsWith(".jar")) { //$NON-NLS-1$ //$NON-NLS-2$
+					return true;
+				}
+				return false;
+			}
+
+		});
+		if (fileList.length < 2) {
+			return getInvalidPortletbridgeRuntime();
+		}
+		return Status.OK_STATUS;
+	}
+
+	private IStatus getInvalidPortletbridgeRuntime() {
+		IStatus status = new Status( IStatus.ERROR, PortletCoreActivator.PLUGIN_ID, Messages.JSFPortletFacetInstallPage_Invalid_Portletbridge_Runtime_directory );
+		return status;
+	}
+
+	public String getPortletbridgeHome() {
+		return portletbridgeHome;
+	}
+
+	public void setPortletbridgeHome(String portletbridgeHome) {
+		String oldValue = this.portletbridgeHome;
+		this.portletbridgeHome = portletbridgeHome;
+		notifyListeners(IPortletConstants.PORTLETBRIDGE_HOME, oldValue, portletbridgeHome);
+		updatePreferences();
+	}
+	
+	@Override
+	public void init(IFacetedProjectBase fpj, IProjectFacetVersion fv,
+			ILibraryProvider provider) {
+		super.init(fpj, fv, provider);
+		reset();
+	}
+
+	@Override
+	public void reset() {
+		IProjectFacet f = getProjectFacet();
+        try {
+			Preferences prefs = FacetedProjectFramework.getPreferences( f );
+			prefs = prefs.node(IPortletConstants.PORTLET_BRIDGE_HOME);
+			if( prefs.nodeExists( IPortletConstants.PREFS_PORTLETBRIDGE_HOME ) ) {
+				portletbridgeHome = prefs.get(IPortletConstants.PREFS_PORTLETBRIDGE_HOME, null);
+			}
+		} catch (BackingStoreException e) {
+			PortletCoreActivator.log(e);
+		}
+	}
+
+	private void updatePreferences() {
+		IProjectFacet f = getProjectFacet();
+        try {
+			Preferences prefs = FacetedProjectFramework.getPreferences( f );
+			prefs = prefs.node(IPortletConstants.PORTLET_BRIDGE_HOME);
+			prefs.put(IPortletConstants.PREFS_PORTLETBRIDGE_HOME, portletbridgeHome);
+		} catch (BackingStoreException e) {
+			PortletCoreActivator.log(e);
+		}
+	}
+	
+	
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderUninstallOperation.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderUninstallOperation.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/JSFPortletbridgeRuntimeLibraryProviderUninstallOperation.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,16 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+
+public class JSFPortletbridgeRuntimeLibraryProviderUninstallOperation extends LibraryProviderOperation {
+
+	@Override
+	public void execute(LibraryProviderOperationConfig config,
+			IProgressMonitor monitor) throws CoreException {
+		
+	}
+
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperation.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperation.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperation.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,41 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
+import org.jboss.tools.portlet.core.IPortletConstants;
+
+public class PortletServerRuntimeLibraryProviderInstallOperation extends
+		LibraryProviderOperation {
+
+	@Override
+	public void execute(LibraryProviderOperationConfig config,
+			IProgressMonitor monitor) throws CoreException {
+		IFacetedProjectBase facetedProject = config.getFacetedProject();
+		IProject project = facetedProject.getProject();
+			
+		IJavaProject javaProject = JavaCore.create(project);	
+		IPath containerPath = new Path(IPortletConstants.PORTLET_RUNTIME_CONTAINER_ID);
+		setContainerPath(monitor, javaProject, containerPath);
+		
+	}
+
+	private void setContainerPath(IProgressMonitor monitor, IJavaProject javaProject,IPath containerPath) throws CoreException {
+		IClasspathEntry entry = JavaCore.newContainerEntry(containerPath, true);
+		IClasspathEntry[] entries = javaProject.getRawClasspath();
+		IClasspathEntry[] newEntries = new IClasspathEntry[entries.length + 1];
+		System.arraycopy( entries, 0, newEntries, 0, entries.length );
+		newEntries[entries.length] = entry;
+		javaProject.setRawClasspath(newEntries, monitor);
+	}
+	
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperationConfig.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperationConfig.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderInstallOperationConfig.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,8 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderInstallOperationConfig;
+
+public class PortletServerRuntimeLibraryProviderInstallOperationConfig extends
+		LibraryProviderInstallOperationConfig {
+
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderUninstallOperation.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderUninstallOperation.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/PortletServerRuntimeLibraryProviderUninstallOperation.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,46 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperation;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
+import org.jboss.tools.portlet.core.IPortletConstants;
+
+public class PortletServerRuntimeLibraryProviderUninstallOperation extends LibraryProviderOperation {
+
+	@Override
+	public void execute(LibraryProviderOperationConfig config,
+			IProgressMonitor monitor) throws CoreException {
+		IFacetedProjectBase facetedProject = config.getFacetedProject();
+		IProject project = facetedProject.getProject();
+			
+		IJavaProject javaProject = JavaCore.create(project);	
+		IPath containerPath = new Path(IPortletConstants.PORTLET_RUNTIME_CONTAINER_ID);
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
+		IClasspathEntry[] entries = javaProject.getRawClasspath();
+		boolean changed = false;
+		for (int i = 0; i < entries.length; i++) {
+			IClasspathEntry entry = entries[i];
+			if (!entry.getPath().equals(containerPath)) {
+				list.add(entry);
+			} else {
+				changed = true;
+			}
+		}
+		if (changed) {
+			IClasspathEntry[] newEntries = list.toArray(new IClasspathEntry[0]);
+			javaProject.setRawClasspath(newEntries, monitor);
+		}
+	}
+
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/RuntimeLibraryProviderPropertyTester.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/RuntimeLibraryProviderPropertyTester.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/libprov/RuntimeLibraryProviderPropertyTester.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,36 @@
+package org.jboss.tools.portlet.core.libprov;
+
+import java.io.File;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jst.common.project.facet.core.libprov.EnablementExpressionContext;
+import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectBase;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.internal.facets.FacetUtil;
+import org.jboss.tools.portlet.core.internal.PortletRuntimeComponentProvider;
+
+
+public final class RuntimeLibraryProviderPropertyTester extends PropertyTester {
+	
+	public boolean test(final Object receiver, final String property,
+			final Object[] args, final Object value) {
+		if (receiver instanceof EnablementExpressionContext) {
+			EnablementExpressionContext context = (EnablementExpressionContext) receiver;
+			IFacetedProjectBase facetedProject = context.getFacetedProject();
+			org.eclipse.wst.common.project.facet.core.runtime.IRuntime primaryRuntime = facetedProject.getPrimaryRuntime();
+			if (primaryRuntime == null) {
+				return false;
+			}
+			IRuntime runtime = FacetUtil.getRuntime(primaryRuntime);
+			if (runtime != null) {
+				File location = runtime.getLocation().toFile();
+				return PortletRuntimeComponentProvider.isPortalPresent(location, runtime, property);
+			}
+		}
+		return false;
+	}
+
+}

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/messages.properties
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/messages.properties	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.core/src/org/jboss/tools/portlet/core/messages.properties	2009-09-10 00:27:18 UTC (rev 17509)
@@ -21,6 +21,7 @@
 PortletFacetInstallDelegate_The_web_xml_file_is_not_updateable=The web.xml file is not updateable
 PortletFacetInstallDelegate_User_library_name_is_invalid=User library name is invalid.
 PortletPostInstallListener_Cannot_find_Portletbridge_Runtime=Cannot find Portletbridge Runtime.
+PortletPostInstallListener_Cannot_find_Richfaces_ibraries=Cannot find Richfaces libraries.
 PortletPostInstallListener_Cannot_find_Richfaces_Runtime=Cannot find Richfaces Runtime.
 PortletPostInstallListener_Cannot_find_the_examples_directory=Cannot find the examples directory.
 PortletPostInstallListener_Cannot_find_the_RichFacesPortlet_war_file=Cannot find the RichFacesPortlet.war file.
@@ -31,4 +32,8 @@
 SeamPortletFacetInstallDelegate_Missing_configuration=Internal Error creating JBoss Seam Portlet Facet.  Missing configuration.
 SeamPortletFacetInstallDelegate_The_web_xml_file_is_not_updateable=The web.xml file is not updateable
 Libraries_provided_by_portletbridge=Libraries provided by portletbridge distribution
-Libraries_provided_by_richfaces=Libraries provided by richfaces distribution
\ No newline at end of file
+Libraries_provided_by_richfaces=Libraries provided by richfaces distribution
+PortletLibraryValidator_MISSING_PORTLET_IMPLEMENTATION_CLASSES=Selected libraries are missing key Portlet implementation classes (javax.portlet.faces.GenericFacesPortlet)
+JSFPortletLibraryValidator_MISSING_JSFPORTLET_IMPLEMENTATION_CLASSES=Selected libraries are missing key JSF Portlet implementation classes (javax.portlet.GenericPortlet)
+JSFPortletFacetInstallPage_Portletbridge_Runtime_directory_is_required=Portletbridge Runtime directory is required.
+JSFPortletFacetInstallPage_Invalid_Portletbridge_Runtime_directory=Invalid Portletbridge Runtime directory.

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/META-INF/MANIFEST.MF	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/META-INF/MANIFEST.MF	2009-09-10 00:27:18 UTC (rev 17509)
@@ -8,6 +8,7 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.wst.common.project.facet.ui,
+ org.eclipse.jst.common.project.facet.ui,
  org.eclipse.wst.common.frameworks.ui,
  org.eclipse.core.resources,
  org.eclipse.jst.servlet.ui,

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.ui/plugin.xml
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/plugin.xml	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/plugin.xml	2009-09-10 00:27:18 UTC (rev 17509)
@@ -61,6 +61,24 @@
            class="org.jboss.tools.portlet.ui.internal.preferences.JBossPortletPreferencePage"
            id="org.jboss.tools.portlet.core.ui.JBossPortletPreferencePage"
            name="%JBoss_Portlet"/>
-      </extension>
-    
+   </extension>
+   
+   <extension point="org.eclipse.jst.common.project.facet.ui.libraryProviderActionPanels">
+     <panel 
+       provider="portlet-library-provider"
+       class="org.jboss.tools.portlet.ui.internal.libprov.PortletServerRuntimeProviderInstallPanel"/>
+   </extension> 
+   
+   <extension point="org.eclipse.jst.common.project.facet.ui.libraryProviderActionPanels">
+     <panel 
+       provider="jsfportlet-library-provider"
+       class="org.jboss.tools.portlet.ui.internal.libprov.JSFPortletServerRuntimeProviderInstallPanel"/>
+   </extension> 
+   
+   <extension point="org.eclipse.jst.common.project.facet.ui.libraryProviderActionPanels">
+     <panel 
+       provider="jsfportletbridge-library-provider"
+       class="org.jboss.tools.portlet.ui.internal.libprov.JSFPortletbridgeRuntimeProviderInstallPanel"/>
+   </extension>
+  
 </plugin>

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/Messages.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/Messages.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/Messages.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -4,6 +4,9 @@
 
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.jboss.tools.portlet.ui.messages"; //$NON-NLS-1$
+	public static String JSFPortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library;
+	public static String JSFPortletFacetInstallPage_JSFPortletImplementationLibrariesFrame;
+	public static String PortletFacetInstallPage_PortletImplementationLibrariesFrame;
 	public static String JBossPortletPreferencePage_Check_Runtimes_for_Portlet_Components;
 	public static String AddPortletWizardPage_Edit;
 	public static String AddPortletWizardPage_Help;
@@ -55,10 +58,11 @@
 	public static String JSFPortletFacetInstallPage_Select_RichFaces_Runtime;
 	public static String PortletFacetInstallPage_Add;
 	public static String PortletFacetInstallPage_Add_JBoss_Portlet_capabilities_to_this_Web_Project;
-	public static String PortletFacetInstallPage_Enable_implementation_library;
+	//public static String PortletFacetInstallPage_Enable_implementation_library;
 	public static String PortletFacetInstallPage_JBoss_Portlet_Capabilities;
 	public static String PortletFacetInstallPage_User_Library;
-	public static String PortletFacetInstallPage_You_have_to_choose_an_user_library;
+	//public static String PortletFacetInstallPage_You_have_to_choose_an_user_library;
+	public static String PortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library;
 	public static String PortletUIActivator_The_portlet_xml_file_doesnt_exist;
 	static {
 		// initialize resource bundle

Added: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletServerRuntimeProviderInstallPanel.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletServerRuntimeProviderInstallPanel.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletServerRuntimeProviderInstallPanel.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,29 @@
+package org.jboss.tools.portlet.ui.internal.libprov;
+
+import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.gl;
+
+import org.eclipse.jst.common.project.facet.ui.libprov.LibraryProviderOperationPanel;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Link;
+import org.jboss.tools.portlet.ui.Messages;
+
+public class JSFPortletServerRuntimeProviderInstallPanel extends LibraryProviderOperationPanel {
+
+	@Override
+    public Control createControl( final Composite parent )
+    {
+        final Composite composite = new Composite( parent, SWT.NONE );
+        composite.setLayout( gl( 1, 0, 0 ) );
+        
+        final Link link = new Link( composite, SWT.WRAP );
+        final GridData data = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        data.widthHint = 300;
+        link.setLayoutData( data );
+        link.setText( Messages.JSFPortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library );
+        
+        return composite;
+    }
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletbridgeRuntimeProviderInstallPanel.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletbridgeRuntimeProviderInstallPanel.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/JSFPortletbridgeRuntimeProviderInstallPanel.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,118 @@
+package org.jboss.tools.portlet.ui.internal.libprov;
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jst.common.project.facet.ui.libprov.LibraryProviderOperationPanel;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.jboss.tools.portlet.core.IPortletConstants;
+import org.jboss.tools.portlet.core.libprov.JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig;
+import org.jboss.tools.portlet.ui.Messages;
+import org.jboss.tools.portlet.ui.PortletUIActivator;
+
+public class JSFPortletbridgeRuntimeProviderInstallPanel extends LibraryProviderOperationPanel {
+
+	@Override
+    public Control createControl( final Composite parent )
+    {
+        final Composite composite = new Composite( parent, SWT.NONE );
+        final GridLayout layout = new GridLayout( 1, false );
+
+        layout.marginWidth = 0;
+        layout.marginHeight = 0;
+        composite.setLayout( layout );
+        addPortletBridgeGroup(composite);
+//        final Link link = new Link( composite, SWT.WRAP );
+//        final GridData data = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+//        data.widthHint = 300;
+//        link.setLayoutData( data );
+//        link.setText( Messages.JSFPortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library );
+//        
+        return composite;
+    }
+	
+	private void addPortletBridgeGroup(Composite composite) {
+		GridData gd;
+		Group portletBridgeGroup = new Group(composite, SWT.NONE);
+		portletBridgeGroup.setText(Messages.JSFPortletFacetInstallPage_Portletbridge_Runtime);
+		portletBridgeGroup.setLayout(new GridLayout(2, false));
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		portletBridgeGroup.setLayoutData(gd);
+		
+		final Text folderText = new Text(portletBridgeGroup, SWT.SINGLE | SWT.BORDER);
+		folderText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		final JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig config = (JSFPortletbridgeRuntimeLibraryProviderInstallOperationConfig) getOperationConfig();
+		
+		folderText.addModifyListener(new ModifyListener() {
+			
+			public void modifyText(ModifyEvent e) {
+				config.setPortletbridgeHome(folderText.getText());
+				IDialogSettings section = getPortletBridgeSection();
+				section.put(IPortletConstants.PORTLET_BRIDGE_HOME, folderText.getText());
+			}
+		});
+		String portletbridgeRuntime = config.getPortletbridgeHome();
+		if (portletbridgeRuntime == null) {
+			IDialogSettings section = getPortletBridgeSection();
+			portletbridgeRuntime = section.get(IPortletConstants.PORTLET_BRIDGE_HOME);
+			if (portletbridgeRuntime == null){
+				portletbridgeRuntime = ""; //$NON-NLS-1$
+			}
+			config.setPortletbridgeHome(portletbridgeRuntime);
+		}
+		folderText.setText(portletbridgeRuntime);
+		
+		Button folderButton = new Button(portletBridgeGroup, SWT.PUSH);
+		folderButton.setText(Messages.JSFPortletFacetInstallPage_Browse);
+		folderButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+		folderButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				handleFolderButtonPressed(folderText);
+			}
+
+		});
+	}
+
+	private IDialogSettings getPortletBridgeSection() {
+		IDialogSettings dialogSettings = PortletUIActivator.getDefault().getDialogSettings();
+		IDialogSettings section = dialogSettings.getSection(IPortletConstants.PORTLET_BRIDGE_HOME);
+		if (section == null) {
+			section = dialogSettings.addNewSection(IPortletConstants.PORTLET_BRIDGE_HOME);
+		}
+		return section;
+	}
+	
+	private void handleFolderButtonPressed(Text folderText) {
+		String lastPath = folderText.getText();
+		DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.MULTI);
+		dialog.setText(Messages.JSFPortletFacetInstallPage_Select_Portletbridge_Runtime);
+		dialog.setFilterPath(lastPath);
+		String res = dialog.open();
+		if (res == null) {
+			return;
+		}
+		String newPath = dialog.getFilterPath();
+		folderText.setText(newPath);
+	}
+
+	private Shell getShell() {
+		return Display.getCurrent().getActiveShell();
+	}
+}

Added: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/PortletServerRuntimeProviderInstallPanel.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/PortletServerRuntimeProviderInstallPanel.java	                        (rev 0)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/libprov/PortletServerRuntimeProviderInstallPanel.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -0,0 +1,29 @@
+package org.jboss.tools.portlet.ui.internal.libprov;
+
+import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.gl;
+
+import org.eclipse.jst.common.project.facet.ui.libprov.LibraryProviderOperationPanel;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Link;
+import org.jboss.tools.portlet.ui.Messages;
+
+public class PortletServerRuntimeProviderInstallPanel extends LibraryProviderOperationPanel {
+
+	@Override
+    public Control createControl( final Composite parent )
+    {
+        final Composite composite = new Composite( parent, SWT.NONE );
+        composite.setLayout( gl( 1, 0, 0 ) );
+        
+        final Link link = new Link( composite, SWT.WRAP );
+        final GridData data = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        data.widthHint = 300;
+        link.setLayoutData( data );
+        link.setText( Messages.PortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library );
+        
+        return composite;
+    }
+}

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/JSFPortletFacetInstallPage.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/JSFPortletFacetInstallPage.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/JSFPortletFacetInstallPage.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -8,6 +8,8 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
+import org.eclipse.jst.common.project.facet.ui.libprov.LibraryProviderFrameworkUi;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -18,6 +20,7 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.DirectoryDialog;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Shell;
@@ -25,14 +28,19 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
 import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelSynchHelper;
+import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;
 import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-import org.eclipse.wst.common.project.facet.ui.AbstractFacetWizardPage;
+import org.eclipse.wst.common.project.facet.ui.IFacetWizardPage;
+import org.eclipse.wst.common.project.facet.ui.IWizardContext;
 import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.ServerCore;
 import org.jboss.ide.eclipse.as.core.server.IJBossServerConstants;
 import org.jboss.ide.eclipse.as.core.server.IJBossServerRuntime;
 import org.jboss.tools.portlet.core.IPortletConstants;
@@ -43,15 +51,14 @@
 /**
  * @author snjeza
  */
-public class JSFPortletFacetInstallPage extends AbstractFacetWizardPage {
+public class JSFPortletFacetInstallPage extends DataModelWizardPage implements IFacetWizardPage  {
 
+	private static final Object PORTLETBRIDGE_LIBRARY_PROVIDER = "jsfportletbridge-library-provider"; //$NON-NLS-1$
 	private IDialogSettings dialogSettings;
-	private IDataModel model;
 	private IDialogSettings jsfSection;
 	private boolean deployJars;
 	private String portletbridgeRuntime;
 	private Text folderText;
-	private DataModelSynchHelper synchHelper;
 	private Button folderButton;
 	private Button deployButton;
 	private Combo portletBridgeLibraryCombo;
@@ -59,7 +66,7 @@
 	private String userLibraryName;
 	private Button add;
 	private String implementationLibrary;
-	private Button addRichFacesCapabilities;
+	//private Button addRichFacesCapabilities;
 	private boolean hasSeamFacet;
 	private Button addRichFacesLibraries;
 	private Combo richFacesLibraryCombo;
@@ -69,7 +76,8 @@
 	private boolean richFacesLibrariesSelected;
 
 	public JSFPortletFacetInstallPage() {
-		super("JSFPortletProjectConfigurationWizardPage"); //$NON-NLS-1$
+		super(DataModelFactory.createDataModel(new AbstractDataModelProvider() {
+		}), "jboss.jsfportal.facet.install.page"); //$NON-NLS-1$
 		setTitle(Messages.JSFPortletFacetInstallPage_JBoss_JSF_Portlet_Capabilities);
 		setDescription(Messages.JSFPortletFacetInstallPage_Add_JBoss_JSF_Portlet_capabilities_to_this_Web_Project);
 		// ImageDescriptor imageDesc = getDefaultPageImageDescriptor( );
@@ -122,14 +130,21 @@
 
 	}
 
-	public void createControl(Composite parent) {
+	protected Composite createTopLevelComposite(Composite parent) {
 		initializeDialogUnits(parent);
 		Composite composite = new Composite(parent, SWT.NONE);
 		composite.setLayout(new GridLayout(1, false));
+		// createButton(composite);
+		LibraryInstallDelegate librariesInstallDelegate= (LibraryInstallDelegate) getDataModel().getProperty( IPortletConstants.JSFPORTLET_LIBRARY_PROVIDER_DELEGATE );
+		Control librariesComposite= LibraryProviderFrameworkUi.createInstallLibraryPanel( composite, librariesInstallDelegate,
+	                                                            Messages.JSFPortletFacetInstallPage_JSFPortletImplementationLibrariesFrame );
+		GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+		librariesComposite.setLayoutData( gd );
+		
 		synchHelper = new DataModelSynchHelper(model);
-		addFolderGroup(composite);
-		// createButton(composite);
-		setControl(composite);
+		//addFolderGroup(composite);
+		
+		return composite;
 	}
 
 	private void createButton(Composite composite) {
@@ -147,64 +162,61 @@
 		});
 	}
 
-	public void setConfig(Object config) {
-		this.model = (IDataModel) config;
-	}
-
 	private void addFolderGroup(Composite composite) {
-		portletBridgeLibraryCombo = new Combo(composite, SWT.READ_ONLY);
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		portletBridgeLibraryCombo.setLayoutData(gd);
-		portletBridgeLibraryCombo.addSelectionListener(new SelectionAdapter() {
-
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				boolean enabled = IPortletConstants.USER_LIBRARY
-						.equals(portletBridgeLibraryCombo.getText());
-				userLibraries.setEnabled(enabled);
-				add.setEnabled(enabled);
-
-				enabled = IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE.equals(portletBridgeLibraryCombo.getText());
-				folderText.setEnabled(enabled);
-				folderButton.setEnabled(enabled);
-				model.setProperty(IPortletConstants.IMPLEMENTATION_LIBRARY,
-						portletBridgeLibraryCombo.getText());
-				model.setProperty(IPortletConstants.PORTLET_BRIDGE_RUNTIME,folderText.getText().trim());
-				model.setProperty(IPortletConstants.USER_LIBRARY_NAME,userLibraries.getText());
-				if (IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE.equals(portletBridgeLibraryCombo.getText())) {
-					richFacesLibraryCombo.removeAll();
-					richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE);
-					richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES);
-					richFacesLibraryCombo.select(0);
-				} else {
-					richFacesLibraryCombo.removeAll();
-					richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES);
-					richFacesLibraryCombo.select(0);
-				}
-				validatePage();
-			}
-
-		});
+//		portletBridgeLibraryCombo = new Combo(composite, SWT.READ_ONLY);
+//		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+//		portletBridgeLibraryCombo.setLayoutData(gd);
+//		portletBridgeLibraryCombo.addSelectionListener(new SelectionAdapter() {
+//
+//			@Override
+//			public void widgetSelected(SelectionEvent e) {
+//				boolean enabled = IPortletConstants.USER_LIBRARY
+//						.equals(portletBridgeLibraryCombo.getText());
+//				userLibraries.setEnabled(enabled);
+//				add.setEnabled(enabled);
+//
+//				enabled = IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE.equals(portletBridgeLibraryCombo.getText());
+//				folderText.setEnabled(enabled);
+//				folderButton.setEnabled(enabled);
+//				model.setProperty(IPortletConstants.IMPLEMENTATION_LIBRARY,
+//						portletBridgeLibraryCombo.getText());
+//				model.setProperty(IPortletConstants.PORTLET_BRIDGE_RUNTIME,folderText.getText().trim());
+//				model.setProperty(IPortletConstants.USER_LIBRARY_NAME,userLibraries.getText());
+//				if (IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE.equals(portletBridgeLibraryCombo.getText())) {
+//					richFacesLibraryCombo.removeAll();
+//					richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE);
+//					richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES);
+//					richFacesLibraryCombo.select(0);
+//				} else {
+//					richFacesLibraryCombo.removeAll();
+//					richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES);
+//					richFacesLibraryCombo.select(0);
+//				}
+//				validatePage();
+//			}
+//
+//		});
+//		
+//		if (portletBridgeLibrariesExistOnServer()) {
+//			portletBridgeLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_SERVER_RUNTIME);
+//		}
+//		portletBridgeLibraryCombo.add(IPortletConstants.USER_LIBRARY);
+//		
+//		addUserLibraryGroup(composite);
+//		
+//		portletBridgeLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE);
+//		
+//		addPortletBridgeGroup(composite);
+//		
+//		portletBridgeLibraryCombo.setText(implementationLibrary);
+//		
+//		synchHelper.synchCombo(portletBridgeLibraryCombo, IPortletConstants.IMPLEMENTATION_LIBRARY, null);
+//		
 		
-		if (portletBridgeLibrariesExistOnServer()) {
-			portletBridgeLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_SERVER_RUNTIME);
-		}
-		portletBridgeLibraryCombo.add(IPortletConstants.USER_LIBRARY);
-		
-		addUserLibraryGroup(composite);
-		
-		portletBridgeLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE);
-		
-		addPortletBridgeGroup(composite);
-		
-		portletBridgeLibraryCombo.setText(implementationLibrary);
-		
-		synchHelper.synchCombo(portletBridgeLibraryCombo, IPortletConstants.IMPLEMENTATION_LIBRARY, null);
-		
 		Group richfacesGroup = new Group(composite, SWT.NONE);
 		richfacesGroup.setLayout(new GridLayout(2, false));
 		richfacesGroup.setText(Messages.JSFPortletFacetInstallPage_Richfaces_Capabilities);
-		gd = new GridData(GridData.FILL_HORIZONTAL);
+		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		richfacesGroup.setLayoutData(gd);
 		/*
 		addRichFacesCapabilities= new Button(richfacesGroup,SWT.CHECK);
@@ -251,14 +263,41 @@
 			
 		});
 		addRichFaces(richfacesGroup);
+		changeRichFaces();
+		getDataModel().addListener(new IDataModelListener() {
+			
+			public void propertyChanged(DataModelEvent event) {
+				String propertyName = event.getPropertyName();
+				if (IPortletConstants.JSFPORTLET_LIBRARY_PROVIDER_DELEGATE.equals(propertyName)) {
+					changeRichFaces();
+				}
+			}
+		});
 		
 		addRichFacesLibraries.setSelection(richFacesLibrariesSelected);
 		enableRichfacesLibraries();
 		richFacesLibraryCombo.select(0);
 		
-		validatePage();
+		//validatePage();
 	}
 
+	private void changeRichFaces() {
+		LibraryInstallDelegate librariesInstallDelegate= (LibraryInstallDelegate) getDataModel().getProperty( IPortletConstants.JSFPORTLET_LIBRARY_PROVIDER_DELEGATE );
+		String providerId = librariesInstallDelegate.getLibraryProvider().getId();
+		if (providerId != null && providerId.equals(PORTLETBRIDGE_LIBRARY_PROVIDER)) {
+			richFacesLibraryCombo.removeAll();
+			richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_PORTLETBRIDGE);
+			richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES);
+			richFacesLibraryCombo.select(0);
+		} else {
+			richFacesLibraryCombo.removeAll();
+			richFacesLibraryCombo.add(IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES);
+			richFacesLibraryCombo.select(0);
+		}
+		boolean enabled =IPortletConstants.LIBRARIES_PROVIDED_BY_RICHFACES.equals(richFacesLibraryCombo.getText());
+		richfacesText.setEnabled(enabled);
+		richfacesButton.setEnabled(enabled);
+	}
 	private void addRichFaces(Composite parent) {
 		richfacesText = new Text(parent, SWT.SINGLE | SWT.BORDER);
 		richfacesText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -382,22 +421,33 @@
 		validatePage();
 	}
 	
-	private void validatePage() {
-		if (!validatePortletBridge()) {
-			return;
-		}
-		if (!validateRichFaces()) {
-			return;
-		}
-		if (portletBridgeLibraryCombo.getText().equals(IPortletConstants.USER_LIBRARY) && userLibraries.getText().trim().length() <= 0) {
-			setErrorMessage(Messages.PortletFacetInstallPage_You_have_to_choose_an_user_library);
-			setPageComplete(false);
-		} else {
-			setErrorMessage(null);
-			setPageComplete(true);
-		}
+	@Override
+	protected String[] getValidationPropertyNames() {
+		return new String[] { IPortletConstants.JSFPORTLET_LIBRARY_PROVIDER_DELEGATE };
+	}
 
+	public void setConfig(Object config) {
+		model.removeListener(this);
+		synchHelper.dispose();
+
+		model = (IDataModel) config;
+		model.addListener(this);
+		synchHelper = initializeSynchHelper(model);
 	}
+
+	@Override
+	public void dispose() {
+		model.removeListener(this);
+		super.dispose();
+	}
+
+	public void setWizardContext(IWizardContext context) {
+
+	}
+
+	public void transferStateToConfig() {
+
+	}
 	
 	private boolean portletBridgeLibrariesExistOnServer() {
 		IFacetedProjectWorkingCopy fpwc = (IFacetedProjectWorkingCopy) model.getProperty(IFacetDataModelProperties.FACETED_PROJECT_WORKING_COPY);
@@ -570,24 +620,6 @@
 		richfacesText.setText(newPath);
 	}
 
-	@Override
-	public void transferStateToConfig() {
-		super.transferStateToConfig();
-		if (deployButton != null) {
-			jsfSection.put(IPortletConstants.DEPLOY_JARS, deployButton
-					.getSelection());
-		}
-		jsfSection.put(IPortletConstants.PORTLET_BRIDGE_RUNTIME,
-				portletbridgeRuntime);
-		jsfSection.put(IPortletConstants.RICHFACES_RUNTIME,
-				richfacesRuntime);
-		jsfSection.put(IPortletConstants.IMPLEMENTATION_LIBRARY, 
-				implementationLibrary);
-		jsfSection.put(IPortletConstants.RICHFACES_LIBRARIES_SELECTED, 
-				richFacesLibrariesSelected);
-		
-	}
-
 	private void enableRichfacesLibraries() {
 		boolean enabled = addRichFacesLibraries.getSelection();
 		richFacesLibraryCombo.setEnabled(enabled);

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/PortletFacetInstallPage.java
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/PortletFacetInstallPage.java	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/internal/project/facet/PortletFacetInstallPage.java	2009-09-10 00:27:18 UTC (rev 17509)
@@ -2,6 +2,8 @@
 
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
+import org.eclipse.jst.common.project.facet.ui.libprov.LibraryProviderFrameworkUi;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -10,6 +12,7 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Shell;
@@ -103,7 +106,13 @@
 		composite.setLayout(new GridLayout(1, false));
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		composite.setLayoutData(gd);
-		enableImplementationLibrary = new Button(composite, SWT.CHECK);
+		LibraryInstallDelegate librariesInstallDelegate= (LibraryInstallDelegate) getDataModel().getProperty( IPortletConstants.PORTLET_LIBRARY_PROVIDER_DELEGATE );
+		Control librariesComposite= LibraryProviderFrameworkUi.createInstallLibraryPanel( composite, librariesInstallDelegate,
+	                                                            Messages.PortletFacetInstallPage_PortletImplementationLibrariesFrame );
+		gd = new GridData( GridData.FILL_HORIZONTAL );
+		librariesComposite.setLayoutData( gd );
+	
+		/*enableImplementationLibrary = new Button(composite, SWT.CHECK);
 		enableImplementationLibrary.setText(Messages.PortletFacetInstallPage_Enable_implementation_library);
 		enableImplementationLibrary
 				.setSelection(enableImplementationLibraryValue);
@@ -215,7 +224,7 @@
 		model.setProperty(IPortletConstants.USER_LIBRARY_NAME,
 				userLibraries
 						.getText());
-		/*deployButton = new Button(composite, SWT.CHECK);
+*/		/*deployButton = new Button(composite, SWT.CHECK);
 		deployButton.setText(Messages.JSFPortletFacetInstallPage_Deploy_jars);
 		deployButton.setSelection(deployPortletJars);
 		deployButton.addSelectionListener(new SelectionAdapter() {
@@ -227,7 +236,7 @@
 			}
 
 		}); */
-		validatePage();
+		//validatePage();
 		return composite;
 	}
 
@@ -251,7 +260,7 @@
 
 	@Override
 	protected String[] getValidationPropertyNames() {
-		return new String[0];
+		return new String[] { IPortletConstants.PORTLET_LIBRARY_PROVIDER_DELEGATE };
 	}
 
 	public void setConfig(Object config) {
@@ -304,20 +313,5 @@
 		});
 		super.storeDefaultSettings();
 	}
-	
-	@Override
-	protected void validatePage() {
-		//super.validatePage();
-		if (enableImplementationLibrary == null) {
-			return;
-		}
-		if (enableImplementationLibrary.getSelection() && implementationLibraryCombo.getText().equals(IPortletConstants.USER_LIBRARY) && userLibraries.getText().trim().length() <= 0) {
-			setErrorMessage(Messages.PortletFacetInstallPage_You_have_to_choose_an_user_library);
-			setPageComplete(false);
-		} else {
-			setErrorMessage(null);
-			setPageComplete(true);
-		}
-	}
 
 }

Modified: trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/messages.properties
===================================================================
--- trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/messages.properties	2009-09-09 23:59:43 UTC (rev 17508)
+++ trunk/portlet/plugins/org.jboss.tools.portlet.ui/src/org/jboss/tools/portlet/ui/messages.properties	2009-09-10 00:27:18 UTC (rev 17509)
@@ -39,10 +39,10 @@
 JSFPortletFacetInstallPage_Select_RichFaces_Runtime=Select RichFaces Runtime
 PortletFacetInstallPage_Add=Add...
 PortletFacetInstallPage_Add_JBoss_Portlet_capabilities_to_this_Web_Project=Add JBoss Portlet capabilities to this Web Project
-PortletFacetInstallPage_Enable_implementation_library=Enable implementation library
+#PortletFacetInstallPage_Enable_implementation_library=Enable implementation library
 PortletFacetInstallPage_JBoss_Portlet_Capabilities=JBoss Portlet Capabilities
 PortletFacetInstallPage_User_Library=User Library
-PortletFacetInstallPage_You_have_to_choose_an_user_library=You have to choose an user library
+#PortletFacetInstallPage_You_have_to_choose_an_user_library=You have to choose an user library
 PortletUIActivator_The_portlet_xml_file_doesnt_exist=The portlet.xml file doesn't exist
 NewJSFPortletClassWizardPage_Choose_a_JSF_portlet_class=Choose a JSF portlet class:
 NewJSFPortletClassWizardPage_Choose_a_Seam_portlet_class=Choose a Seam portlet class:
@@ -54,3 +54,7 @@
 NewPortletWizard_Specify_modifiers_interfaces_to_implement_and_method_stubs_to_generate=Specify modifiers, interfaces to implement and method stubs to generate.
 No_portlets_exist_to_add=No portlets exist to add
 JBossPortletPreferencePage_Check_Runtimes_for_Portlet_Components=Check Runtimes for Portlet Components
+PortletFacetInstallPage_PortletImplementationLibrariesFrame=Portlet Implementation Library
+JSFPortletFacetInstallPage_JSFPortletImplementationLibrariesFrame=JSFPortlet Implementation Library
+PortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library=The targeted runtime contains a portlet library. Selecting this option will configure the classpath container that includes the library.
+JSFPortletServerRuntimeProviderInstallPanel_The_targeted_runtime_contains_a_portlet_library=The targeted runtime contains a JSF portlet library. Selecting this option will copy libraries from the Server Runtime.



More information about the jbosstools-commits mailing list