[290041] Ear Module page
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/icons/folder.gif b/plugins/org.eclipse.wst.common.modulecore.ui/icons/folder.gif
new file mode 100644
index 0000000..c91b267
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/icons/folder.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/icons/jar_obj.gif b/plugins/org.eclipse.wst.common.modulecore.ui/icons/jar_obj.gif
new file mode 100644
index 0000000..ec315d5
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/icons/jar_obj.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/plugin.properties b/plugins/org.eclipse.wst.common.modulecore.ui/plugin.properties
index 3d2d760..baccaf3 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/plugin.properties
@@ -10,4 +10,4 @@
 ###############################################################################
 provider=Eclipse.org
 Bundle-Name.0 = Modulecore UI Plug-in
-Module_assembly.name = Module Assembly **EXPERIMENTAL**
\ No newline at end of file
+Module_assembly.name = Module Assembly
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/ModuleCoreUIPlugin.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/ModuleCoreUIPlugin.java
index a73fc22..d73441d 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/ModuleCoreUIPlugin.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/ModuleCoreUIPlugin.java
@@ -10,11 +10,20 @@
  ******************************************************************************/
 package org.eclipse.wst.common.componentcore.ui;
 
+import java.net.MalformedURLException;
+import java.net.URL;
+
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -24,6 +33,16 @@
 
 	// The plug-in ID
 	public static final String PLUGIN_ID = "org.eclipse.wst.common.modulecore.ui"; //$NON-NLS-1$
+	
+	public static final String[] ICON_DIRS = new String[]{"icons/full/obj16", //$NON-NLS-1$
+		"icons/full/cview16", //$NON-NLS-1$
+		"icons/full/ctool16", //$NON-NLS-1$
+		"icons/full/clcl16", //$NON-NLS-1$
+		"icons/full/ovr16", //$NON-NLS-1$
+		"icons/full/extra", //$NON-NLS-1$
+		"icons/full/wizban", //$NON-NLS-1$
+		"icons", //$NON-NLS-1$
+		""}; //$NON-NLS-1$
 
 	// The shared instance
 	private static ModuleCoreUIPlugin plugin;
@@ -64,6 +83,53 @@
 	}
 
 	/**
+	 * Get a .gif from the image registry.
+	 */
+	public Image getImage(String key) {
+		ImageRegistry imageRegistry = getImageRegistry();
+		Image image = imageRegistry.get(key);
+		if (image == null || image.isDisposed()) {
+			ImageDescriptor descriptor = getImageDescriptor(key);
+			if (descriptor != null) {
+				image = descriptor.createImage();
+				imageRegistry.put(key, image);
+			}
+		}
+		return image;
+	}
+
+	/**
+	 * This gets a .gif from the icons folder.
+	 */
+	public ImageDescriptor getImageDescriptor(String key) {
+		ImageDescriptor imageDescriptor = null;
+		URL gifImageURL = getImageURL(key,getBundle());
+		if (gifImageURL != null)
+			imageDescriptor = ImageDescriptor.createFromURL(gifImageURL);
+		return imageDescriptor;
+	}
+
+	/**
+	 * This gets a .gif from the icons folder.
+	 */
+	public URL getImageURL(String key, Bundle bundle) {
+		String gif = "/" + key + ".gif"; //$NON-NLS-1$ //$NON-NLS-2$
+		IPath path = null;
+		for (int i = 0; i < ICON_DIRS.length; i++) {
+			path = new Path(ICON_DIRS[i]).append(gif);
+			if (Platform.find(bundle,path) == null)
+				continue;
+			try {
+				return new URL( bundle.getEntry("/"), path.toString()); //$NON-NLS-1$ 
+			} catch (MalformedURLException exception) {
+				logError(exception);
+				continue;
+			}
+		}
+		return null;
+	}
+
+	/**
 	 * Returns the shared instance
 	 *
 	 * @return the shared instance
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java
index eefcd27..4db50c0 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java
@@ -24,6 +24,7 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.ui.ModuleCoreUIPlugin;
 import org.eclipse.wst.common.componentcore.ui.propertypage.AddModuleDependenciesPropertiesPage.ComponentResourceProxy;
 
 
@@ -64,6 +65,15 @@
 	}
 	
 	public Image getColumnImage(Object element, int columnIndex) {
+		if( element instanceof ComponentResourceProxy) {
+			return ModuleCoreUIPlugin.getInstance().getImage("folder");
+		}
+		if (element instanceof IVirtualComponent) {
+			return ModuleCoreUIPlugin.getInstance().getImage("jar_obj");
+		} 
+		if (element instanceof IProject){
+			return ModuleCoreUIPlugin.getInstance().getImage("prj_obj");
+		}
 		return null;
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
index 1933797..210883d 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
@@ -142,13 +142,17 @@
 		composite.setLayout(layout);
 		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
 		ModuleAssemblyRootPage.createDescriptionComposite(composite,
-				Messages.ModuleAssemblyRootPageDescription);
+				getModuleAssemblyRootPageDescription());
 		createListGroup(composite);
 		refresh();
 		Dialog.applyDialogFont(parent);
 		return composite;
 	}
 
+	protected String getModuleAssemblyRootPageDescription() {
+		return Messages.ModuleAssemblyRootPageDescription;
+	}
+
 	protected void createListGroup(Composite parent) {
 		Composite listGroup = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
@@ -193,10 +197,26 @@
 	}
 
 	protected void createPushButtons() {
-		addMappingButton = createPushButton(Messages.AddFolderElipses);
-		addReferenceButton = createPushButton(Messages.AddReference);
-		editReferenceButton = createPushButton(Messages.EditReference);
-		removeButton = createPushButton(Messages.RemoveSelected);
+		addMappingButton = createPushButton(getAddFolderLabel());
+		addReferenceButton = createPushButton(getAddReferenceLabel());
+		editReferenceButton = createPushButton(getEditReferenceLabel());
+		removeButton = createPushButton(getRemoveSelectedLabel());
+	}
+
+	protected String getRemoveSelectedLabel() {
+		return Messages.RemoveSelected;
+	}
+
+	protected String getEditReferenceLabel() {
+		return Messages.EditReference;
+	}
+
+	protected String getAddReferenceLabel() {
+		return Messages.AddReference;
+	}
+
+	protected String getAddFolderLabel() {
+		return Messages.AddFolderElipses;
 	}
 
 	protected Button createPushButton(String label) {
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IDependencyPageProvider.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IDependencyPageProvider.java
index d4bc70b..725c4c8 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IDependencyPageProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IDependencyPageProvider.java
@@ -50,4 +50,10 @@
 	 * @return
 	 */
 	public Composite createRootControl(IFacetedProject project, IModuleDependenciesControl[] pages, Composite parent);
+
+	/**
+	 * 
+	 * @return String - page title string or null if default title is desired
+	 */
+	public String getPageTitle();
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java
index 20ca63c..4dd3123 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java
@@ -158,6 +158,8 @@
 				if( provider != null ) {
 					controls = provider.createPages(facetedProject, this);
 					controls = controls == null ? new IModuleDependenciesControl[]{} : controls;
+					if (provider.getPageTitle() != null)
+						setTitle(provider.getPageTitle());
 					return provider.createRootControl(facetedProject, controls, parent);
 				}