Applied patch for
https://bugs.eclipse.org/bugs/show_bug.cgi?id=187529
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/Messages.java
index 520277e..a98eafd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/Messages.java
@@ -21,6 +21,21 @@
public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.core.internal.messages"; //$NON-NLS-1$
+ /**
+ * see messages.properties
+ */
+ public static String JSFFacetInstallDataModelProvider_ClientImplValidationMsg;
+
+ /**
+ * see messages.properties
+ */
+ public static String JSFFacetInstallDataModelProvider_DupeJarValidation;
+
+ /**
+ * see messages.properties
+ */
+ public static String JSFFacetInstallDataModelProvider_INITIAL_VALIDATION_IMPL_TYPE;
+
/**
* see messages.properties
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java
index 36e3411..93086db 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java
@@ -13,6 +13,9 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties;
+import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE;
+
/**
* To construct implementation library and component libraries from sticky values
* in DialogSettings as saved libraries.
@@ -30,9 +33,22 @@
private String[] savedCompLibs;
private JSFLibraryInternalReference selJSFLibImpl; // lazy initialized
private List selJSFLibComp; // lazy initialized
+
+ private IMPLEMENTATION_TYPE implType;
+
+
+ /**
+ * Constructor where implementation type was chosen to be CLIENT_SUPPLIED. Created for backwards compatibilty when server supplied was not an option.
+ * @param implLibDeployFlag
+ * @param compLibs
+ */
+ public JSFLibraryConfigDialogSettingData(boolean implLibDeployFlag, String[] compLibs) {
+ this(IMPLEMENTATION_TYPE.CLIENT_SUPPLIED, implLibDeployFlag, compLibs);
+ }
/**
* Constructor
+ * @param implType {@link IMPLEMENTATION_TYPE}
* @param implLibDeployFlag String valid options are "true" or "false"
* @param compLibs String[] saved component library settings in string array
*
@@ -45,10 +61,12 @@
verifySavedLibAvailability();
}
*/
- public JSFLibraryConfigDialogSettingData(boolean implLibDeployFlag, String[] compLibs) {
+ public JSFLibraryConfigDialogSettingData(IMPLEMENTATION_TYPE implType, boolean implLibDeployFlag, String[] compLibs) {
+
this.jsfLibReg = JSFLibraryRegistryUtil.getInstance();
this.dftImplLibDeployFlag = implLibDeployFlag;
this.savedCompLibs = compLibs;
+ this.implType = implType;
// Verify and log a message if a saved component library no longer exists.
verifySavedLibAvailability();
@@ -144,4 +162,10 @@
}
+ /**
+ * @return {@link IMPLEMENTATION_TYPE}
+ */
+ public IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE getImplementationType(){
+ return implType;
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigModel.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigModel.java
index 4e6bb2d..6321353 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigModel.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigModel.java
@@ -15,6 +15,7 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.jst.jsf.core.internal.Messages;
+import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE;
/**
* Model for the custom control <b>JSFLibraryConfigControl</b>.
@@ -39,6 +40,12 @@
}
/**
+ * @return IMPLEMENTATION_TYPE
+ */
+ public IMPLEMENTATION_TYPE getImplementationType() {
+ return data.getImplementationType();
+ }
+ /**
* Return JSF implementation libraries.
*
* This list is initialized from JSF library registry and updated with persistent configuration data.
@@ -219,7 +226,7 @@
JSFLibraryConfigProjectData data_ = new JSFLibraryConfigProjectData(project);
List implLibs = new ArrayList();
implLibs.add(getCurrentJSFImplementationLibrarySelection());
- data_.saveData(implLibs, getCurrentJSFComponentLibrarySelection());
+ data_.saveData(implLibs, getCurrentJSFComponentLibrarySelection(), getImplementationType());
}
/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigProjectData.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigProjectData.java
index 4d89be6..70d36dc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigProjectData.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigProjectData.java
@@ -21,6 +21,7 @@
import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
import org.eclipse.jst.jsf.core.internal.Messages;
import org.eclipse.jst.jsf.core.internal.project.facet.JSFUtils;
+import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE;
import org.eclipse.osgi.util.NLS;
/**
@@ -42,8 +43,8 @@
final private IProject project;
final private JSFLibraryRegistryUtil jsfLibReg;
- private JSFLibraryInternalReference selJSFLibImpl = null;
- private List selJSFLibComp = null;
+ private JSFLibraryInternalReference selJSFLibImpl;
+ private List selJSFLibComp;
/**
* Constructor
@@ -61,6 +62,16 @@
}
}
+ public IMPLEMENTATION_TYPE getImplementationType() {
+ try {
+ String type = ((IResource)project).getPersistentProperty(new QualifiedName(QUALIFIEDNAME,
+ JSFUtils.PP_JSF_IMPLEMENTATION_TYPE));
+ return IMPLEMENTATION_TYPE.getValue(type);
+ } catch (CoreException e) {//
+ }
+ return IMPLEMENTATION_TYPE.UNKNOWN;
+ }
+
/**
* Return the previously selected JSF implementation library from project persistent properties.
* Return null if none exists.
@@ -128,10 +139,11 @@
* @param implementation
* @param component
*/
- void saveData(final List implementation, final List component) {
+ void saveData(final List implementation, final List component, final IMPLEMENTATION_TYPE implType) {
try {
((IResource)project).setPersistentProperty(new QualifiedName(QUALIFIEDNAME, JSFUtils.PP_JSF_IMPLEMENTATION_LIBRARIES), generatePersistString(implementation));
((IResource)project).setPersistentProperty(new QualifiedName(QUALIFIEDNAME, JSFUtils.PP_JSF_COMPONENT_LIBRARIES), generatePersistString(component));
+ ((IResource)project).setPersistentProperty(new QualifiedName(QUALIFIEDNAME, JSFUtils.PP_JSF_IMPLEMENTATION_TYPE), IMPLEMENTATION_TYPE.getStringValue(implType));
/* Flush the selection so that they can be reconstructed from
* persistent properties when getSavedJSFImplLib and getSavedJSFCompLibs
@@ -288,6 +300,6 @@
boolean needDeploy() {
return deploy;
}
- }
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfiglModelSource.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfiglModelSource.java
index 7cda7a3..5575835 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfiglModelSource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfiglModelSource.java
@@ -12,6 +12,8 @@
import java.util.List;
+import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE;
+
/**
* Interface for data source to instanciate a <b>JSFLibraryConfigModel</b> object.
*
@@ -35,5 +37,12 @@
*
* @return List
*/
- public List getJSFComponentLibraries();
+ public List getJSFComponentLibraries();
+
+ /**
+ * Return type of implementation
+ *
+ * @return {@link IMPLEMENTATION_TYPE}
+ */
+ public IMPLEMENTATION_TYPE getImplementationType();
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/messages.properties
index dfd88d3..4f8ac77 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/messages.properties
@@ -23,10 +23,13 @@
JSFLibraryClasspathContainer_NON_IMPL_LIBRARY=[JSF Library]
JSFLibrariesContainerInitializer_missing_library=[missing JSF Library]
JSFFacetInstallDataModelProvider_ValidateJSFImpl=A JSF implementation library has not been chosen
+JSFFacetInstallDataModelProvider_DupeJarValidation=Duplicated jar on classpath: {0}
JSFFacetInstallDataModelProvider_ValidateConfigFilePath=The configuration file path is not valid
JSFFacetInstallDataModelProvider_ValidateConfigFileEmpty=Specify a valid name and location for JSF configuration file
+JSFFacetInstallDataModelProvider_ClientImplValidationMsg=JSF Implementation library must be specified.
JSFFacetInstallDataModelProvider_ValidateConfigFileRelative1=Configuration file must be specified relative to the project's {0} folder
JSFFacetInstallDataModelProvider_ValidateConfigFileRelative2=Configuration file must be located in the project's {0} folder
+JSFFacetInstallDataModelProvider_INITIAL_VALIDATION_IMPL_TYPE=Select an implementation library. If a server supplied library is chosen , the chosen server adapter must be capable of providing the JSF Implementation jars, or the application will not validate or compile.
JSFFacetInstallDataModelProvider_ValidateConfigFileXML=JSF configuration file must be an XML file
JSFFacetInstallDataModelProvider_ValidateConfigFileSlashes=Configuration file path must not contain "\\"s. Use "/" instead.
JSFLibCfgDialogSettingData_Sticky_Component_Lib_Not_Exist=A sticky component library selection no longer exists.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java
index 2a7c38b..42523a2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java
@@ -105,15 +105,22 @@
cpEntries.add(javaProject.getRawClasspath()[i]);
}
} catch (JavaModelException e) {
- JSFCorePlugin.log(e, "Unable to read classpath");
+ JSFCorePlugin.log(e, "Unable to read classpath"); //$NON-NLS-1$
}
+ IPath path, cp = null;
+ IClasspathEntry entry = null;
+ JSFLibraryInternalReference libref = null;
+
//Implementation
- IPath cp = new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID);
- JSFLibraryInternalReference libref = (JSFLibraryInternalReference)config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION);
- IPath path = cp.append(new Path(libref.getID()));
- IClasspathEntry entry = getNewCPEntry(path, libref);
- cpEntries.add(entry);
+ if (config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME)
+ == IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.CLIENT_SUPPLIED){
+ cp = new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID);
+ libref = (JSFLibraryInternalReference)config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION);
+ path = cp.append(new Path(libref.getID()));
+ entry = getNewCPEntry(path, libref);
+ cpEntries.add(entry);
+ }
JSFLibraryInternalReference[] compLibs = (JSFLibraryInternalReference[])config.getProperty(IJSFFacetInstallDataModelProperties.COMPONENT_LIBRARIES);
for (int i=0;i<compLibs.length;i++){
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java
index 9d891d2..ad03d47 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java
@@ -19,6 +19,12 @@
*/
public interface IJSFFacetInstallDataModelProperties extends
IFacetInstallDataModelProperties {
+
+ /**
+ * TODO:
+ */
+ public static final String IMPLEMENTATION_TYPE_PROPERTY_NAME = "IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME"; //$NON-NLS-1$
+
/**
* TODO:
*/
@@ -57,15 +63,62 @@
/**
* TODO:
*/
- public static final String DEFAULT_IMPLEMENTATION_LIBRARY = "IJSFFacetInstallDataModelProperties.DEFAULT_IMPLEMENTATION_LIBRARY";
+ public static final String DEFAULT_IMPLEMENTATION_LIBRARY = "IJSFFacetInstallDataModelProperties.DEFAULT_IMPLEMENTATION_LIBRARY"; //$NON-NLS-1$
/**
* TODO:
*/
- public static final String IMPLEMENTATION_LIBRARIES = "IJSFFacetInstallDataModelProperties.IMPLEMENTATION_LIBRARIES";
+ public static final String IMPLEMENTATION_LIBRARIES = "IJSFFacetInstallDataModelProperties.IMPLEMENTATION_LIBRARIES"; //$NON-NLS-1$
/**
* TODO:
*/
public static final String COMPONENT_LIBRARIES = "IJSFFacetInstallDataModelProperties.COMPONENT_LIBRARIES"; //$NON-NLS-1$
+
+ /**
+ * Enumeration of implementation types
+ */
+ public enum IMPLEMENTATION_TYPE {
+
+ /**
+ * Unknown
+ */
+ UNKNOWN,
+ /**
+ * Server supplied
+ */
+ SERVER_SUPPLIED,
+ /**
+ * Client supplied
+ */
+ CLIENT_SUPPLIED;
+
+ /**
+ * @param type
+ * @return String value
+ */
+ public static String getStringValue(final IMPLEMENTATION_TYPE type){
+ if (type == null)
+ return "UNKNOWN"; //$NON-NLS-1$
+ if (type == SERVER_SUPPLIED)
+ return "SERVER_SUPPLIED";//$NON-NLS-1$
+ if (type == CLIENT_SUPPLIED)
+ return "CLIENT_SUPPLIED";//$NON-NLS-1$
+ return "UNKNOWN"; //$NON-NLS-1$
+ }
+
+ /**
+ * @param type
+ * @return IMPLEMENTATION_TYPE
+ */
+ public static IMPLEMENTATION_TYPE getValue(final String type){
+ if (type == null)
+ return UNKNOWN;
+ if (type.equals("SERVER_SUPPLIED"))//$NON-NLS-1$
+ return SERVER_SUPPLIED;
+ if (type.equals("CLIENT_SUPPLIED"))//$NON-NLS-1$
+ return CLIENT_SUPPLIED;
+ return UNKNOWN;
+ }
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
index c9ce379..1c7b7db 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
@@ -56,6 +56,7 @@
public Set getPropertyNames() {
Set names = super.getPropertyNames();
+ names.add(IMPLEMENTATION_TYPE_PROPERTY_NAME);
names.add(IMPLEMENTATION);
names.add(DEPLOY_IMPLEMENTATION);
names.add(CONFIG_PATH);
@@ -72,7 +73,10 @@
}
public Object getDefaultProperty(String propertyName) {
- if (propertyName.equals(IMPLEMENTATION)) {
+ if (propertyName.equals(IMPLEMENTATION_TYPE_PROPERTY_NAME)){
+ return IMPLEMENTATION_TYPE.UNKNOWN;
+ }
+ else if (propertyName.equals(IMPLEMENTATION)) {
if (JSFLibraryRegistryUtil.getInstance().getJSFLibraryRegistry() == null)
return null;
return getDefaultImplementationLibrary();//JSFCorePlugin.getDefault().getJSFLibraryRegistry().getDefaultImplementation();
@@ -89,7 +93,7 @@
} else if (propertyName.equals(FACET_ID)) {
return IJSFCoreConstants.JSF_CORE_FACET_ID;
} else if (propertyName.equals(WEBCONTENT_DIR)){
- return "WebContent"; //not sure I need this
+ return "WebContent"; //not sure I need this //$NON-NLS-1$
} else if (propertyName.equals(COMPONENT_LIBRARIES)) {
return new JSFLibraryInternalReference[0];
} else if (propertyName.equals(IMPLEMENTATION_LIBRARIES)) {
@@ -102,13 +106,20 @@
public IStatus validate(String name) {
errorMessage = null;
- if (name.equals(IMPLEMENTATION)) {
- JSFLibraryInternalReference lib = (JSFLibraryInternalReference)getProperty(IMPLEMENTATION);
- IStatus status = validateImpl(lib.getLibrary());
- if (!OK_STATUS.equals(status))
- return status;
-
- return validateClasspath();
+ if (name.equals(IMPLEMENTATION_TYPE_PROPERTY_NAME)) {
+ if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.UNKNOWN) {
+ return createErrorStatus(Messages.JSFFacetInstallDataModelProvider_INITIAL_VALIDATION_IMPL_TYPE);
+ }
+ }
+ else if (name.equals(IMPLEMENTATION)) {
+ if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED) {
+ JSFLibraryInternalReference lib = (JSFLibraryInternalReference)getProperty(IMPLEMENTATION);
+ IStatus status = validateImpl(lib.getLibrary());
+ if (!OK_STATUS.equals(status))
+ return status;
+
+ return validateClasspath();
+ }
} else if (name.equals(CONFIG_PATH)) {
return validateConfigLocation(getStringProperty(CONFIG_PATH));
} else if (name.equals(SERVLET_NAME)) {
@@ -123,7 +134,7 @@
private IStatus createErrorStatus(String msg) {
return new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID, msg);
}
-
+
private IStatus validateServletName(String servletName) {
if (servletName == null || servletName.trim().length() == 0) {
errorMessage = Messages.JSFFacetInstallDataModelProvider_ValidateServletName;
@@ -208,22 +219,26 @@
}
} catch (JavaModelException e) {
// FIXME: what should we do in this case?
- JSFCorePlugin.log(e, "Error searching class path");
+ JSFCorePlugin.log(e, "Error searching class path"); //$NON-NLS-1$
}
}
//else as we do not have a javaProject yet, all we can do is validate that there is no duplicate jars (absolute path)
IStatus status = null;
- JSFLibraryInternalReference ref = ((JSFLibraryInternalReference)getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION));
- if (ref != null){
- status = checkForDupeArchiveFiles(jars, ((JSFLibraryInternalReference)getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION)).getLibrary());
- if (!OK_STATUS.equals(status)){
- return status;
- }
- } else {
- return createErrorStatus("JSF Implementation library must be specified.");
- }
+ JSFLibraryInternalReference ref = null;
+ if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED) {
+ ref = ((JSFLibraryInternalReference)getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION));
+ if (ref != null){
+ status = checkForDupeArchiveFiles(jars, ((JSFLibraryInternalReference)getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION)).getLibrary());
+ if (!OK_STATUS.equals(status)){
+ return status;
+ }
+ } else {
+ return createErrorStatus(Messages.JSFFacetInstallDataModelProvider_ClientImplValidationMsg);
+ }
+ }
+
JSFLibraryInternalReference[] compLibs = (JSFLibraryInternalReference[]) getProperty(IJSFFacetInstallDataModelProperties.COMPONENT_LIBRARIES);
if (compLibs != null){
for (int i=0;i<compLibs.length;i++){
@@ -263,7 +278,7 @@
for (Iterator it=aJSFLib.getArchiveFiles().iterator();it.hasNext();){
ArchiveFile jar = (ArchiveFile)it.next();
if (jars.contains(jar.getResolvedSourceLocation())){
- return createErrorStatus("Duplicated jar on classpath: "+jar.getResolvedSourceLocation());
+ return createErrorStatus(NLS.bind(Messages.JSFFacetInstallDataModelProvider_DupeJarValidation,jar.getResolvedSourceLocation()));
}
jars.add(jar.getResolvedSourceLocation());
}
@@ -325,7 +340,7 @@
IDataModel projModel = (IDataModel)getProperty(MASTER_PROJECT_DM);
FacetDataModelMap dmMap = (FacetDataModelMap)projModel.getProperty(IFacetProjectCreationDataModelProperties.FACET_DM_MAP);
- IDataModel webFacet = dmMap.getFacetDataModel("jst.web");
+ IDataModel webFacet = dmMap.getFacetDataModel("jst.web"); //$NON-NLS-1$
return webFacet.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER );
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java
index 44c0d94..a24f561 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java
@@ -64,7 +64,7 @@
op.run(monitor);
}
} catch (CoreException e) {
- JSFCorePlugin.log(e, "Exception occured while creating faces-config.xml");
+ JSFCorePlugin.log(e, "Exception occured while creating faces-config.xml"); //$NON-NLS-1$
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java
index 8d520ee..9d8df2b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java
@@ -50,7 +50,7 @@
/**
* The path to the default application configuration file
*/
- public static final String JSF_DEFAULT_CONFIG_PATH = "/WEB-INF/faces-config.xml";
+ public static final String JSF_DEFAULT_CONFIG_PATH = "/WEB-INF/faces-config.xml"; //$NON-NLS-1$
/**
* Default URL mapping to faces servlet
@@ -67,7 +67,11 @@
* TODO: should encapsulate the property somewhere and hide the constant
*/
public static final String PP_JSF_COMPONENT_LIBRARIES = "jsf.component.libraries"; //$NON-NLS-1$
-
+ /**
+ * the key for implementation type in persistent properties
+ * TODO: should encapsulate the property somewhere and hide the constant
+ */
+ public static final String PP_JSF_IMPLEMENTATION_TYPE = "jsf.implementation.type"; //$NON-NLS-1$
/**
* Construct an array that hold paths for all JARs in a JSF library.
* However, archive files that no longer exist are filtered out.
@@ -145,7 +149,7 @@
*/
protected static String getDisplayName(IDataModel config) {
String displayName = config.getStringProperty(IJSFFacetInstallDataModelProperties.SERVLET_NAME);
- if (displayName.equals(""))
+ if (displayName.equals("")) //$NON-NLS-1$
displayName = JSF_DEFAULT_SERVLET_NAME;
return displayName;
}
@@ -156,7 +160,7 @@
*/
protected static String getServletClassname(IDataModel config) {
String className = config.getStringProperty(IJSFFacetInstallDataModelProperties.SERVLET_CLASSNAME);
- if (className.equals(""))
+ if (className.equals("")) //$NON-NLS-1$
className = JSF_SERVLET_CLASS;
return className;
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
index 5bc3932..e1245ba 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
@@ -157,6 +157,10 @@
/**
* see messages.properties
*/
+ public static String JSFLibraryConfigControl_DeployButtonLabel;
+ /**
+ * see messages.properties
+ */
public static String JSFLibraryConfigControl_DeployJAR;
/**
* see messages.properties
@@ -169,6 +173,10 @@
/**
* see messages.properties
*/
+ public static String JSFLibraryConfigControl_NewImplButtonTooltip;
+ /**
+ * see messages.properties
+ */
public static String JSFLibraryConfigControl_NewImplementationLibrary;
/**
* see messages.properties
@@ -185,6 +193,14 @@
/**
* see messages.properties
*/
+ public static String JSFLibraryConfigControl_ServerSuppliedButtonLabel;
+ /**
+ * see messages.properties
+ */
+ public static String JSFLibraryConfigControl_ServerSuppliedButtonTooltip;
+ /**
+ * see messages.properties
+ */
public static String JSFLibraryConfigControl_TH_Deploy;
/**
* see messages.properties
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
index 17d095a..26386cd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
@@ -52,10 +52,13 @@
import org.eclipse.jst.jsf.core.internal.jsflibraryregistry.JSFLibrary;
import org.eclipse.jst.jsf.core.internal.jsflibraryregistry.JSFLibraryRegistry;
import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties;
+import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE;
import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
import org.eclipse.jst.jsf.ui.internal.Messages;
import org.eclipse.jst.jsf.ui.internal.classpath.JSFLibraryWizard;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
@@ -88,6 +91,8 @@
private JSFLibraryConfigModel workingCopyModel = null;
+ private Button btnServerSupplied;
+ private Button btnUserSupplied;
private ComboViewer cvImplLib;
private CheckboxTableViewer ctvSelCompLib;
private Button btnDeployJars;
@@ -255,9 +260,27 @@
}
setCompListModelProperty();
+
+ initializeImplementationType();
+
redraw();
}
+ private void initializeImplementationType() {
+ IMPLEMENTATION_TYPE implType = workingCopyModel.getImplementationType();
+ if (implType == IMPLEMENTATION_TYPE.SERVER_SUPPLIED) {
+ btnServerSupplied.setSelection(true);
+ btnUserSupplied.setSelection(false);
+ enableUserSupplied(false);
+ } else if (implType == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED) {
+ btnServerSupplied.setSelection(false);
+ btnUserSupplied.setSelection(true);
+ enableUserSupplied(true);
+ } else {
+ enableUserSupplied(false);
+ }
+ model.setProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME, implType);
+ }
private void loadJSFImplList() {
cvImplLib.setInput(workingCopyModel.getJSFImplementationLibraries());
}
@@ -278,53 +301,75 @@
return selJSFImpl;
}
- private void createControls() {
- setRedraw(true);
- final GridLayout gridLayout = new GridLayout();
- gridLayout.numColumns = 4;
- gridLayout.marginLeft = 0;
- gridLayout.marginRight = 0;
- gridLayout.marginWidth = 0;
- setLayout(gridLayout);
+ private void createImplLibControls(Composite parent) {
+ final Composite cmpImpls = new Composite(parent, SWT.NONE);
+ final GridLayout gridLayoutImpls = new GridLayout();
+ gridLayoutImpls.numColumns = 4;
+ gridLayoutImpls.marginLeft = 0;
+ gridLayoutImpls.marginTop = 0;
+ gridLayoutImpls.marginBottom = 0;
- final Label lblImplLib = new Label(this, SWT.NONE);
- final GridData gd_lbl_impl = new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1);
- lblImplLib.setLayoutData(gd_lbl_impl);
- lblImplLib.setText(Messages.JSFLibraryConfigControl_ImplementationLibrary);
+ cmpImpls.setLayout(gridLayoutImpls);
+ GridData gdCmpImpls = new GridData();
+ gdCmpImpls.horizontalAlignment = SWT.FILL;
+ gdCmpImpls.grabExcessHorizontalSpace = true;
+ cmpImpls.setLayoutData(gdCmpImpls);
- btnDeployJars = new Button(this, SWT.CHECK);
- btnDeployJars.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false, 2, 1));
- btnDeployJars.setText(Messages.JSFLibraryConfigControl_DeployJAR);
- btnDeployJars.addSelectionListener(new SelectionAdapter() {
+ btnServerSupplied = new Button(cmpImpls, SWT.RADIO);
+ btnServerSupplied.setToolTipText(Messages.JSFLibraryConfigControl_ServerSuppliedButtonTooltip);
+ GridData gdSS = new GridData();
+ gdSS.horizontalAlignment = SWT.BEGINNING;
+ btnServerSupplied.setLayoutData(gdSS);
+
+ btnServerSupplied.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
- if (! _initing){
- JSFLibraryInternalReference jsflib = getCurrentSelectedJSFImplLib();
- if (jsflib != null)
- jsflib.setToBeDeployed(btnDeployJars.getSelection());
- workingCopyModel.setCurrentJSFImplementationLibrarySelection(jsflib);//why r we doing this here???
- // model.setProperty(IJSFFacetInstallDataModelProperties.DEPLOY_IMPLEMENTATION, btnDeployJars.getSelection());
- fireChangedEvent(e);
- }
- }
- }
- );
+ setServerSuppliedLibrarySelection(e);
+ }
+ });
- final Composite compTest = new Composite(this, SWT.None);
- final GridLayout compgl = new GridLayout();
- compgl.numColumns = 2;
- compgl.marginLeft = 0;
- compgl.marginRight = 0;
- compgl.marginWidth = 0;
- GridData gdCompTest = new GridData(SWT.FILL, SWT.FILL, true, false);
- gdCompTest.horizontalSpan = 4;
- compTest.setLayoutData(gdCompTest);
- compTest.setLayout(compgl);
+ Label lblServerSupplied = new Label(cmpImpls, SWT.NONE);
+ lblServerSupplied.setText(Messages.JSFLibraryConfigControl_ServerSuppliedButtonLabel);
+ GridData lblSS = new GridData();
+ lblSS.grabExcessHorizontalSpace = true;
+ lblServerSupplied.setLayoutData(lblSS);
+ lblServerSupplied.addMouseListener(new MouseAdapter(){
+ public void mouseUp(MouseEvent e) {
+ btnServerSupplied.setSelection(true);
+ setServerSuppliedLibrarySelection(e);
+ }
+ });
- cvImplLib = new ComboViewer(compTest, SWT.READ_ONLY);
+
+ Label lblSpacer1 = new Label(cmpImpls, SWT.NONE);
+ GridData gdSpc1 = new GridData();
+ gdSpc1.horizontalAlignment = SWT.END;
+ gdSpc1.horizontalSpan = 2;
+ lblSpacer1.setLayoutData(gdSpc1);
+
+ btnUserSupplied = new Button(cmpImpls, SWT.RADIO);
+ btnUserSupplied.setLayoutData(new GridData());
+ btnUserSupplied.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e) {
+ setUserSuppliedLibrarySelection(e);
+ }
+ });
+
+ this.addOkClickedListener(new IJSFImplLibraryCreationListener() {
+ public void okClicked(JSFImplLibraryCreationEvent event) {
+ if (! btnUserSupplied.getSelection() && event.isLibraryCreated()) {
+ btnServerSupplied.setSelection(false);
+ setUserSuppliedLibrarySelection(event);
+ }
+ }
+ });
+
+ cvImplLib = new ComboViewer(cmpImpls, SWT.READ_ONLY);
cvImplLib.setLabelProvider(new ImplLibCVListLabelProvider());
cvImplLib.setContentProvider(new ImplLibCVContentProvider());
comboImplLib = cvImplLib.getCombo();
- final GridData gd_cvImplLib = new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1);
+ GridData gd_cvImplLib = new GridData();
+ gd_cvImplLib.horizontalAlignment = SWT.FILL;
+ gd_cvImplLib.grabExcessHorizontalSpace = true;
comboImplLib.setLayoutData(gd_cvImplLib);
cvImplLib.addSelectionChangedListener(
new ISelectionChangedListener() {
@@ -339,10 +384,32 @@
}
}
);
-
- final Button btnNewImpl = new Button(compTest, SWT.NONE);
- btnNewImpl.setLayoutData(new GridData(GridData.CENTER, GridData.CENTER, false, false));
+
+ btnDeployJars = new Button(cmpImpls, SWT.CHECK);
+ GridData gdDeploy = new GridData();
+ btnDeployJars.setLayoutData(gdDeploy);
+ btnDeployJars.setText(Messages.JSFLibraryConfigControl_DeployButtonLabel);
+ btnDeployJars.setToolTipText(Messages.JSFLibraryConfigControl_DeployJAR);
+ btnDeployJars.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ if (! _initing){
+ JSFLibraryInternalReference jsflib = getCurrentSelectedJSFImplLib();
+ if (jsflib != null)
+ jsflib.setToBeDeployed(btnDeployJars.getSelection());
+ workingCopyModel.setCurrentJSFImplementationLibrarySelection(jsflib);//why r we doing this here???
+ // model.setProperty(IJSFFacetInstallDataModelProperties.DEPLOY_IMPLEMENTATION, btnDeployJars.getSelection());
+ fireChangedEvent(e);
+ }
+ }
+ }
+ );
+
+ final Button btnNewImpl = new Button(cmpImpls, SWT.NONE); //compTest,
+ GridData gdNew = new GridData();
+ gdNew.horizontalAlignment = SWT.END;
+ btnNewImpl.setLayoutData(gdNew);
btnNewImpl.setText(Messages.JSFLibraryConfigControl_NewImplementationLibrary);
+ btnNewImpl.setToolTipText(Messages.JSFLibraryConfigControl_NewImplButtonTooltip);
btnNewImpl.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
JSFLibraryWizard wizard = new JSFLibraryWizard(JSFLibraryWizard.IMPLS);
@@ -360,6 +427,7 @@
loadJSFImplList();
btnDeployJars.setSelection(true);
cvImplLib.setSelection(new StructuredSelection(lib), true);
+
}
// notify listeners that a JSF implementation is created.
JSFImplLibraryCreationEvent event = new JSFImplLibraryCreationEvent(this, (ret == Window.OK));
@@ -371,18 +439,48 @@
}
}
});
-
- final Label lblSeparator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
- GridData gd_lbl_spacer = new GridData(GridData.FILL, GridData.CENTER, true, false, 4, 1);
- lblSeparator.setLayoutData(gd_lbl_spacer);
- lblSeparator.setAlignment(SWT.CENTER);
-
- final Label lblCompLib = new Label(this, SWT.NONE);
+ }
+
+ private void setServerSuppliedLibrarySelection(final EventObject e) {
+ btnUserSupplied.setSelection(false);
+ model.setProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME, IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.SERVER_SUPPLIED);
+ enableUserSupplied(false);
+ fireChangedEvent(e);
+
+ }
+
+ private void setUserSuppliedLibrarySelection(final EventObject e) {
+ btnUserSupplied.setSelection(true);
+ model.setProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME, IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.CLIENT_SUPPLIED);
+ enableUserSupplied(true);
+ fireChangedEvent(e);
+ }
+
+ private void enableUserSupplied(boolean enabled) {
+ cvImplLib.getCombo().setEnabled(enabled);
+ btnDeployJars.setEnabled(enabled);
+ }
+
+ private void createCompLibControls(Composite parent) {
+ final Composite cmpCompLibs = new Composite(parent, SWT.NONE);
+ final GridLayout gridLayoutCompLibs = new GridLayout();
+ gridLayoutCompLibs.numColumns = 4;
+ gridLayoutCompLibs.marginLeft = 0;
+ gridLayoutCompLibs.marginRight = 0;
+ gridLayoutCompLibs.marginWidth = 0;
+ cmpCompLibs.setLayout(gridLayoutCompLibs);
+ GridData gdComp = new GridData();
+ gdComp.horizontalAlignment = SWT.FILL;
+ gdComp.grabExcessHorizontalSpace = true;
+ cmpCompLibs.setLayoutData(gdComp);
+
+
+ final Label lblCompLib = new Label(cmpCompLibs, SWT.NONE);
final GridData gd_lbl_complib = new GridData(GridData.FILL, GridData.CENTER, false, false, 4, 1);
lblCompLib.setLayoutData(gd_lbl_complib);
lblCompLib.setText(Messages.JSFLibraryConfigControl_ComponentLibrary);
- tvCompLib = new TreeViewer(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+ tvCompLib = new TreeViewer(cmpCompLibs, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
tvAdapter = new TreeViewerAdapter();
tvLabelProvider = new TreeLabelProvider();
tvCompLib.setContentProvider(tvAdapter);
@@ -399,7 +497,7 @@
tvCompLib.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
tvCompLib.addFilter(new TreeViewerFilter());
- final Composite composite_buttons = new Composite(this, SWT.NONE);
+ final Composite composite_buttons = new Composite(cmpCompLibs, SWT.NONE);
composite_buttons.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
composite_buttons.setLayout(new GridLayout());
@@ -465,7 +563,7 @@
}
});
- ctvSelCompLib = CheckboxTableViewer.newCheckList(this, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
+ ctvSelCompLib = CheckboxTableViewer.newCheckList(cmpCompLibs, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
ctvSelCompLib.addFilter(new CheckedTableViewerFilter());
final Table table = ctvSelCompLib.getTable();
table.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
@@ -473,6 +571,7 @@
final TableColumn tcDeploy = new TableColumn(table, SWT.LEFT);
tcDeploy.setWidth(50);
tcDeploy.setText(Messages.JSFLibraryConfigControl_TH_Deploy);
+ tcDeploy.setToolTipText(Messages.JSFLibraryConfigControl_DeployJAR);
final TableColumn tcLibName = new TableColumn(table, SWT.LEFT);
tcLibName.setWidth(150);
tcLibName.setText(Messages.JSFLibraryConfigControl_TH_LibraryName);
@@ -557,8 +656,35 @@
btnRemoveAll.setEnabled(ctvSelCompLib.getTable().getItemCount() > 0);
}
});
+
+ }
+ private void createControls() {
+ setRedraw(true);
+ final GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 1;
+ gridLayout.marginLeft = 0;
+ gridLayout.marginRight = 0;
+ gridLayout.marginWidth = 0;
+ gridLayout.marginTop = 0;
+ this.setLayout(gridLayout);
+
+ createImplLibControls(this);
+ createSeparator(this);
+ createCompLibControls(this);
+
+
+
+
}
+ private void createSeparator(Composite parent) {
+ final Label lblSeparator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL );
+ GridData gd_lbl_spacer = new GridData();
+ gd_lbl_spacer.horizontalAlignment = SWT.FILL;
+ lblSeparator.setLayoutData(gd_lbl_spacer);
+ lblSeparator.setAlignment(SWT.CENTER);
+ }
+
/*
* Event handling helper methods
*/
@@ -643,6 +769,7 @@
model = synchHelper.getDataModel();
synchHelper.synchCombo(cvImplLib.getCombo(), IJSFFacetInstallDataModelProperties.IMPLEMENTATION_LIBRARIES, null);
synchHelper.synchCheckbox(btnDeployJars, IJSFFacetInstallDataModelProperties.DEPLOY_IMPLEMENTATION, null);
+ //not using synch helper for IMPLEMENTATION_TYPE
// synchHelper.synchCheckBoxTableViewer(ctvSelCompLib, IJSFFacetInstallDataModelProperties.COMPONENT_LIBRARIES, new Control[]{hiddenList});
}
@@ -830,7 +957,7 @@
JSFLibrary lib = libWrapper.getLibrary();
labelBuf.append(lib.getLabel());
if (lib.isImplementation()) {
- labelBuf.append(" ");
+ labelBuf.append(" "); //$NON-NLS-1$
if (lib == JSFLibraryRegistryUtil.getInstance().getJSFLibraryRegistry().getDefaultImplementation()) {
labelBuf.append(DEFAULT_IMPL_DESC);
} else {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
index cd1b665..27f02cd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
@@ -85,8 +85,12 @@
JSFLibraryConfigControl_ImplementationLibrary=Implementation Library
JSFLibraryPropertyPage_No_JSF_Facet_Installed=JSF Facet not installed.
JSFLibraryConfigControl_NewImplementationLibrary=New...
+JSFLibraryConfigControl_ServerSuppliedButtonTooltip=Chosen server adapter must supply the JSF Implementation jars.
+JSFLibraryConfigControl_ServerSuppliedButtonLabel=Server Supplied JSF Implementation
+JSFLibraryConfigControl_NewImplButtonTooltip=Create new user supplied implementation library
JSFLibraryConfigControl_DeployJAR=Deploy jars to WEB-INF/lib
JSFLibraryConfigControl_ComponentLibrary=Component Libraries
+JSFLibraryConfigControl_DeployButtonLabel=Deploy
JSFLibraryConfigControl_Add=\ \ >
JSFLibraryConfigControl_Remove=\ \ <
JSFLibraryConfigControl_AddAll=\ \ >>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
index e39ef2f..eabb6d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
@@ -82,6 +82,7 @@
private static final String SETTINGS_URL_MAPPINGS = "urlMappings"; //$NON-NLS-1$
private static final String SETTINGS_URL_PATTERN = "pattern"; //$NON-NLS-1$
private static final String SETTINGS_DEPLOY_IMPL = "deployImplementation"; //$NON-NLS-1$
+ private static final String SETTINGS_IMPL_TYPE = "deployImplType";//$NON-NLS-1$
private static final String SETTINGS_COMPLIB = "selectedComponent"; //$NON-NLS-1$
private static final String SETTINGS_COMPLIB_SELECT_DEPLOY = "selectdeploycomplib"; //$NON-NLS-1$
@@ -117,16 +118,19 @@
initializeDialogUnits(parent);
composite = new Composite(parent, SWT.NONE);
final GridLayout jsfCompositeLayout = new GridLayout(3, false);
+ jsfCompositeLayout.marginTop = 0;
+ jsfCompositeLayout.marginBottom = 0;
+ jsfCompositeLayout.marginRight = 0;
jsfCompositeLayout.marginLeft = 0;
composite.setLayout(jsfCompositeLayout);
lblJSFImpl = new Label(composite, SWT.None);
- lblJSFImpl.setLayoutData(new GridData(GridData.BEGINNING,
- GridData.BEGINNING, false, false));
+ GridData gdLbl = new GridData();
+ gdLbl.verticalIndent = 5;
+ gdLbl.verticalAlignment = SWT.BEGINNING;
+ lblJSFImpl.setLayoutData(gdLbl);
lblJSFImpl.setText(Messages.JSFFacetInstallPage_JSFLibraryLabel0);
-
- ((GridLayout) composite.getLayout()).marginLeft = 0;
-
+
jsfLibCfgComp = new JSFLibraryConfigControl(composite, SWT.NONE);
jsfLibCfgComp
.addOkClickedListener(new IJSFImplLibraryCreationListener() {
@@ -136,7 +140,7 @@
}
}
});
-
+
jsfLibCfgComp.addChangeListener( new JSFLibraryConfigControlChangeListener(){
public void changed(JSFLibraryConfigControlChangeEvent e) {
@@ -144,10 +148,11 @@
}
});
- GridData gd_comp = new GridData(GridData.FILL, GridData.FILL, true,
- true);
+ GridData gd_comp = new GridData();
gd_comp.horizontalSpan = 2;
- ((GridLayout) jsfLibCfgComp.getLayout()).marginLeft = 0;
+ gd_comp.grabExcessHorizontalSpace = true;
+ gd_comp.grabExcessVerticalSpace = true;
+ gd_comp.horizontalAlignment = SWT.FILL;
jsfLibCfgComp.setLayoutData(gd_comp);
lblJSFConfig = new Label(composite, SWT.NONE);
@@ -283,10 +288,15 @@
}
private void initJSFCfgCtrlValues(IDialogSettings root) {
+ IMPLEMENTATION_TYPE implType = IMPLEMENTATION_TYPE.UNKNOWN;
String deployImpl = null;
+
if (root != null) {
+ implType = IMPLEMENTATION_TYPE.getValue(root.get(SETTINGS_IMPL_TYPE));
deployImpl = root.get(SETTINGS_DEPLOY_IMPL);
+
}
+
if (deployImpl == null || deployImpl.equals("")) { //$NON-NLS-1$
deployImpl = ((Boolean) model
.getDefaultProperty(IJSFFacetInstallDataModelProperties.DEPLOY_IMPLEMENTATION))
@@ -303,7 +313,7 @@
selection = complibs.getArray(SETTINGS_COMPLIB_SELECT_DEPLOY);
}
- JSFLibraryConfiglModelSource source = new JSFLibraryConfigDialogSettingData(
+ JSFLibraryConfiglModelSource source = new JSFLibraryConfigDialogSettingData(implType,
Boolean.valueOf(deployImpl).booleanValue(), selection);
jsfLibCfgComp.loadControlValuesFromModel(source);
}
@@ -313,6 +323,7 @@
DialogSettings root = new DialogSettings(SETTINGS_ROOT);
dialogSettings.addSection(root);
+ root.put(SETTINGS_IMPL_TYPE, getJSFImplType());
root.put(SETTINGS_DEPLOY_IMPL, String.valueOf(getDeployJSFImpl()));
root.put(SETTINGS_CONFIG, getJSFConfig());
root.put(SETTINGS_SERVLET, getJSFServletName());
@@ -326,6 +337,10 @@
complibs.put(SETTINGS_COMPLIB_SELECT_DEPLOY, getCompLibSelections());
}
+ private String getJSFImplType() {
+ return IMPLEMENTATION_TYPE.getStringValue((IMPLEMENTATION_TYPE)model.getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME));
+ }
+
private boolean getDeployJSFImpl() {
if (jsfLibCfgComp.getSelectedJSFLibImplementation() == null) {
return false;
@@ -482,7 +497,7 @@
* @see org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage#getValidationPropertyNames()
*/
protected String[] getValidationPropertyNames() {
- return new String[] { IMPLEMENTATION, DEPLOY_IMPLEMENTATION,
+ return new String[] { IMPLEMENTATION_TYPE_PROPERTY_NAME, IMPLEMENTATION, DEPLOY_IMPLEMENTATION,
CONFIG_PATH, SERVLET_NAME, SERVLET_CLASSNAME, COMPONENT_LIBRARIES };
}
@@ -557,9 +572,13 @@
*/
private void checkToCompletePage(Composite control) {
boolean enableFinish = false;
- if (control != null && control instanceof JSFLibraryConfigControl) {
+ IMPLEMENTATION_TYPE implType = (IMPLEMENTATION_TYPE)model.getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME);
+ if (implType == IMPLEMENTATION_TYPE.SERVER_SUPPLIED)
+ enableFinish = true;
+ else if (implType == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED &&
+ control != null && control instanceof JSFLibraryConfigControl) {
enableFinish = (((JSFLibraryConfigControl)control).getSelectedJSFLibImplementation() != null);
- }
+ } //else must be unknown type and requires user interaction
setPageComplete(enableFinish);
}