[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rhq-commits
Subject:    [rhq] Branch 'ie-fragment-fix' - modules/enterprise
From:       ips () fedoraproject ! org (ips)
Date:       2011-04-29 14:04:35
Message-ID: 20110429140435.47D9112020C () lists ! fedorahosted ! org
[Download RAW message or body]

 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java \
|   28 +--  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java \
|   18 --  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java \
|    4   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java \
|    2   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java \
|    6   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java \
|    9 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java \
|    9 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/Link.java \
|   65 ++++---  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ViewLink.java \
|   25 ++  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/CanvasField.java \
|   49 ++++-  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/EnhancedListGrid.java \
|   15 +  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java \
|   65 ++-----  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/ViewLinkField.java \
|   16 +  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java \
|    2   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java \
|    9 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationSchedulePortlet.java \
|   32 +--  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java \
|   14 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceConfigurationUpdatesPortlet.java \
|   18 --  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui \
/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java \
|   19 +-  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java \
|   14 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java \
|   14 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java \
|    2   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/c \
lient/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java \
|   14 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/ \
client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java  \
|   14 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java \
|    7   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java \
|   16 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java \
|   13 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/ \
client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java \
|    9 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java \
|   53 +++++-  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java \
|   13 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/ \
client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java \
|   15 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/ \
client/inventory/resource/detail/configuration/AbstractConfigurationHistoryView.java  \
|   30 ++-  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/ResourceMetricGraphView.java \
|    5   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/c \
lient/inventory/resource/detail/operation/history/ResourceOperationHistoryDetailsView.java \
|   20 --  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java \
|    5   modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/operation/OperationHistoryDataSource.java \
|   87 +++++-----  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java \
|   39 +---  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/ResourceInstallReport.java \
|   13 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBDataSource.java \
|   14 -  modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/SeleniumUtility.java \
|    3   modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css                   \
|   12 +  41 files changed, 454 insertions(+), 363 deletions(-)

New commits:
commit a4cd692a8893908fdc66a643830489886519ee78
Author: Ian Springer <ian.springer at redhat.com>
Date:   Fri Apr 29 10:04:06 2011 -0400

    the work goes on...

diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
 index 6475640..0209680 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
 @@ -36,6 +36,7 @@ import com.smartgwt.client.types.Alignment;
 import com.smartgwt.client.types.ListGridFieldType;
 import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
@@ -53,7 +54,9 @@ import org.rhq.core.domain.util.PageList;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
 +import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.AlertGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -61,7 +64,6 @@ import \
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp  import \
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.TypesLoadedCallback;
  import org.rhq.enterprise.gui.coregui.client.util.MeasurementConverterClient;
 import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
  * @author Ian Springer
@@ -107,15 +109,14 @@ public class AlertDataSource extends RPCDataSource<Alert, \
                AlertCriteria> {
         ctimeField.setHoverCustomizer(TimestampCellFormatter.getHoverCustomizer(AlertCriteria.SORT_FIELD_CTIME));
  fields.add(ctimeField);
 
-        ListGridField nameField = new ListGridField("name", \
                MSG.view_alerts_field_name());
-        nameField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                Integer resourceId = \
                listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID);
-                Integer defId = listGridRecord.getAttributeAsInt("definitionId");
+        ViewLinkField nameField = new ViewLinkField("name", \
MSG.view_alerts_field_name()) { +            protected ViewLink getViewLink(ListGrid \
grid, ListGridRecord record, Object value) { +                Integer resourceId = \
record.getAttributeAsInt(AncestryUtil.RESOURCE_ID); +                Integer defId = \
                record.getAttributeAsInt("definitionId");
                 String url = LinkManager.getSubsystemAlertDefinitionLink(resourceId, \
                defId);
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+                return new ViewLink(value.toString(), url);
             }
-        });
+        };
         fields.add(nameField);
 
         ListGridField conditionField = new ListGridField("conditionText", \
MSG.view_alerts_field_condition_text()); @@ -175,14 +176,13 @@ public class \
AlertDataSource extends RPCDataSource<Alert, AlertCriteria> {  \
fields.add(statusField);  
         if (this.entityContext.type != EntityContext.Type.Resource) {
-            ListGridField resourceNameField = new \
                ListGridField(AncestryUtil.RESOURCE_NAME, \
                MSG.common_title_resource());
-            resourceNameField.setCellFormatter(new CellFormatter() {
-                public String format(Object o, ListGridRecord listGridRecord, int i, \
int i1) { +            ViewLinkField resourceNameField = new \
ViewLinkField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource()) { +            \
protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) {  \
                String url = LinkManager
-                        \
                .getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                    return SeleniumUtility.getLocatableHref(url, o.toString(), \
null); +                        \
.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +               \
return new ViewLink(value.toString(), url);  }
-            });
+            };
             resourceNameField.setShowHover(true);
             resourceNameField.setHoverCustomizer(new HoverCustomizer() {
 
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
 index 45dd32c..01e7b7b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
 @@ -41,8 +41,10 @@ import org.rhq.core.domain.criteria.AlertCriteria;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem;
 import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableAction;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
@@ -151,16 +153,12 @@ public class AlertHistoryView extends \
TableSection<AlertDataSource> {  }
 
     @Override
-    protected CellFormatter getDetailsLinkColumnCellFormatter() {
-        return new CellFormatter() {
-            public String format(Object value, ListGridRecord record, int i, int i1) \
                {
-                Integer resourceId = \
                record.getAttributeAsInt(AncestryUtil.RESOURCE_ID);
-                Integer alertHistoryId = getId(record);
-                String url = LinkManager.getSubsystemAlertHistoryLink(resourceId, \
                alertHistoryId);
-                String formattedValue = TimestampCellFormatter.format(value);
-                return SeleniumUtility.getLocatableHref(url, formattedValue, null);
-            }
-        };
+    protected ViewLink createDetailsViewLink(ListGridRecord record, Object value) {
+        Integer resourceId = record.getAttributeAsInt(AncestryUtil.RESOURCE_ID);
+        Integer alertHistoryId = getId(record);
+        String url = LinkManager.getSubsystemAlertHistoryLink(resourceId, \
alertHistoryId); +        String formattedValue = \
TimestampCellFormatter.format(value); +        return new ViewLink(formattedValue, \
url);  }
 
     protected void setupTableInteractions(final boolean hasWriteAccess) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
 index d9d2d3d..5c2f5b6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
 @@ -66,7 +66,7 @@ public class BundleDeploymentListView extends \
Table<BundleDeploymentDataSource>  // only users that are authorized can see \
deployments  if (canManageBundles) {
             nameField = new ViewLinkField(BundleDeploymentDataSource.FIELD_NAME, \
                MSG.view_bundle_deploy_name()) {
-                protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) \
{ +                protected ViewLink getViewLink(ListGrid grid, ListGridRecord \
                record, Object value) {
                     String linkText = \
StringUtility.escapeHtml(record.getAttribute(BundleDeploymentDataSource.FIELD_NAME)); \
                String viewPath = getBundleDeploymentLink(record);
                     return new ViewLink(extendLocatorId("ViewLink"), linkText, \
viewPath); @@ -81,7 +81,7 @@ public class BundleDeploymentListView extends \
                Table<BundleDeploymentDataSource>
             .common_title_description());
         ViewLinkField bundleVersionField = new \
ViewLinkField(BundleDeploymentDataSource.FIELD_BUNDLE_VERSION_VERSION,  \
                MSG.view_bundle_bundleVersion()) {
-            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
                Object value) {
                 String linkText = \
record.getAttribute(BundleDeploymentDataSource.FIELD_BUNDLE_VERSION_VERSION);  String \
                viewPath = LinkManager.getBundleVersionLink(record
                         \
                .getAttributeAsInt(BundleDeploymentDataSource.FIELD_BUNDLE_ID), \
                record
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
 index 58b5664..e0da95d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentView.java
 @@ -345,7 +345,7 @@ public class BundleDeploymentView extends LocatableVLayout \
implements Bookmarkab  
         // resource field
         ViewLinkField resource = new ViewLinkField("resource", \
                MSG.common_title_platform()) {
-            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
                Object value) {
                 String resourceUrl = \
                LinkManager.getResourceLink(record.getAttributeAsInt("resourceId"));
                 String linkText = \
                StringUtility.escapeHtml(record.getAttribute("resource"));
                 return new ViewLink(extendLocatorId("ViewLink"), linkText, \
                resourceUrl);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
 index 2e94600..88867aa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
 @@ -60,7 +60,7 @@ public class BundleDestinationListView extends \
Table<BundleDestinationDataSource  protected void configureTable() {
         ListGridField idField = new \
                ListGridField(BundleDestinationDataSource.FIELD_ID, \
                MSG.common_title_id());
         ViewLinkField nameField = new \
                ViewLinkField(BundleDestinationDataSource.FIELD_NAME, \
                MSG.common_title_name()) {
-            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
                Object value) {
                 String bundleName = \
record.getAttribute(BundleDestinationDataSource.FIELD_NAME);  String linkText = \
StringUtility.escapeHtml(bundleName);  String viewPath = \
getBundleDestinationLink(record); @@ -71,7 +71,7 @@ public class \
                BundleDestinationListView extends Table<BundleDestinationDataSource
             .common_title_description());
         ViewLinkField bundleNameField = new \
                ViewLinkField(BundleDestinationDataSource.FIELD_BUNDLE_NAME, MSG
             .view_bundle_bundle()) {
-            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
                Object value) {
                 String bundleName = \
record.getAttribute(BundleDestinationDataSource.FIELD_BUNDLE_NAME);  String linkText \
                = StringUtility.escapeHtml(bundleName);
                 Integer bundleId = \
record.getAttributeAsInt(BundleDestinationDataSource.FIELD_BUNDLE_ID); @@ -81,7 +81,7 \
@@ public class BundleDestinationListView extends Table<BundleDestinationDataSource  \
                };
         ViewLinkField groupNameField = new \
                ViewLinkField(BundleDestinationDataSource.FIELD_GROUP_NAME, MSG
             .view_bundle_dest_group()) {
-            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
                Object value) {
                 String groupName = \
record.getAttribute(BundleDestinationDataSource.FIELD_GROUP_NAME);  String linkText = \
                StringUtility.escapeHtml(groupName);
                 Integer groupId = \
                record.getAttributeAsInt(BundleDestinationDataSource.FIELD_GROUP_ID);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
 index b0313bc..bc2ea3c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
 @@ -34,6 +34,7 @@ import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
 import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.core.domain.authz.Permission;
 import org.rhq.core.domain.bundle.Bundle;
 import org.rhq.core.domain.bundle.composite.BundleWithLatestVersionComposite;
@@ -91,13 +92,13 @@ public class BundlesListView extends \
Table<BundlesWithLatestVersionDataSource> {  
         CanvasField nameField = new \
                CanvasField(BundlesWithLatestVersionDataSource.FIELD_NAME, MSG
             .common_title_name()) {
-            protected Canvas createCanvas(ListGrid grid, ListGridRecord record) {
-                HLayout hLayout = createHLayout(grid);
+            protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value) { +                VLayout vLayout = createVLayout(grid);
                 String name = \
                record.getAttribute(BundlesWithLatestVersionDataSource.FIELD_NAME);
                 String nameLink = \
                record.getAttribute(BundlesWithLatestVersionDataSource.FIELD_NAMELINK);
                
                 ViewLink viewLink = new ViewLink(extendLocatorId("ViewLink"), \
                StringUtility.escapeHtml(name), nameLink);
-                hLayout.addMember(viewLink);
-                return hLayout;
+                vLayout.addMember(viewLink);
+                return vLayout;
             }
         };
         nameField.setWidth("33%");
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
 index 29c9744..bbb38f8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
 @@ -32,6 +32,7 @@ import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
 import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
 import org.rhq.enterprise.gui.coregui.client.bundle.list.BundleVersionDataSource;
@@ -65,13 +66,13 @@ public class BundleVersionListView extends \
Table<BundleVersionDataSource> {  
         CanvasField versionField = new \
                CanvasField(BundleVersionDataSource.FIELD_VERSION, MSG
             .common_title_version()) {
-            protected Canvas createCanvas(ListGrid grid, ListGridRecord record) {
-                HLayout hLayout = createHLayout(grid);
+            protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value) { +                VLayout vLayout = createVLayout(grid);
                 String viewPath = getBundleVersionViewPath(record);
                 ViewLink viewLink = new ViewLink(extendLocatorId("ViewLink"),
                         record.getAttribute(BundleVersionDataSource.FIELD_VERSION), \
                viewPath);
-                hLayout.addMember(viewLink);
-                return hLayout;
+                vLayout.addMember(viewLink);
+                return vLayout;
             }
         };
 
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/Link.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/Link.java
 index 240779a..553e2a0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/Link.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/Link.java
 @@ -33,48 +33,65 @@ import \
                org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHTMLFlow;
                
  */
 public class Link extends LocatableHTMLFlow {
 
-    private static final String DEFAULT_MOUSE_OUT_STYLE_NAME = "viewLink";
-    private static final String DEFAULT_MOUSE_OVER_STYLE_NAME = "viewLinkHover";
+    private static final String DEFAULT_MOUSE_OVER_STYLE_NAME = "linkHover";
+    private static final String DEFAULT_MOUSE_OUT_STYLE_NAME = "link";
 
     private String mouseOverStyleName;
     private String mouseOutStyleName;
 
+    public Link(String linkText, ClickHandler clickHandler) {
+        this(linkText, linkText, clickHandler);
+    }
+
     public Link(String locatorId, String linkText, ClickHandler clickHandler) {
         super(locatorId);
 
-        this.mouseOutStyleName = DEFAULT_MOUSE_OUT_STYLE_NAME;
         this.mouseOverStyleName = DEFAULT_MOUSE_OVER_STYLE_NAME;
+        this.mouseOutStyleName = DEFAULT_MOUSE_OUT_STYLE_NAME;
 
-	    setWidth100();
-        setHeight(25);
+        // TODO (ips, 04/28/11): This is lame - find a better way.
+	    int width = 0;
+        for (int i = 0; i < linkText.length(); i++) {
+            int charWidth = (Character.isUpperCase(linkText.charAt(i))) ? 8 : 6;
+            width += charWidth;
+        }
+        setWidth(width);
+        //setAutoWidth();
         setContents(linkText);
 
         addClickHandler(clickHandler);
-
-        addMouseOverHandler(new MouseOverHandler() {
-            public void onMouseOver(MouseOverEvent event) {
-                if (mouseOutStyleName != null && mouseOverStyleName != null) {
-                    setStyleName(mouseOverStyleName);
-                    markForRedraw();
-                }
-            }
-        });
-
-        addMouseOutHandler(new MouseOutHandler() {
-            public void onMouseOut(MouseOutEvent event) {
-                if (mouseOutStyleName != null && mouseOverStyleName != null) {
-                    setStyleName(mouseOutStyleName);
-                    markForRedraw();
-                }
-            }
-        });
     }
 
     @Override
     protected void onInit() {
         super.onInit();
 
-        setStyleName(getMouseOutStyleName());
+        if (this.mouseOverStyleName != null) {
+            addMouseOverHandler(new MouseOverHandler() {
+                public void onMouseOver(MouseOverEvent event) {
+                    handleMouseOverEvent();
+                }
+            });
+        }
+
+        if (this.mouseOutStyleName != null) {
+            setStyleName(this.mouseOutStyleName);
+            addMouseOutHandler(new MouseOutHandler() {
+                public void onMouseOut(MouseOutEvent event) {
+                    handleMouseOutEvent();
+                }
+            });
+        }
+    }
+
+    protected void handleMouseOverEvent() {
+        setStyleName(mouseOverStyleName);
+        markForRedraw();
+    }
+
+    protected void handleMouseOutEvent() {
+        setStyleName(mouseOutStyleName);
+        markForRedraw();
     }
 
     public String getMouseOverStyleName() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ViewLink.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ViewLink.java
 index 5446a8c..b8246e3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ViewLink.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/ViewLink.java
 @@ -19,14 +19,10 @@
  */
 package org.rhq.enterprise.gui.coregui.client.components;
 
+import com.google.gwt.user.client.Window;
 import com.smartgwt.client.widgets.events.ClickEvent;
 import com.smartgwt.client.widgets.events.ClickHandler;
-import com.smartgwt.client.widgets.events.MouseOutEvent;
-import com.smartgwt.client.widgets.events.MouseOutHandler;
-import com.smartgwt.client.widgets.events.MouseOverEvent;
-import com.smartgwt.client.widgets.events.MouseOverHandler;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHTMLFlow;
 
 /**
  * A link to another view within coregui.war. Clicking on the link will navigate to \
the view via the GWT history API @@ -38,6 +34,10 @@ public class ViewLink extends \
Link {  
     private String viewPath;
 
+    public ViewLink(String linkText, final String viewPath) {
+        this(linkText, linkText, viewPath);
+    }
+
     public ViewLink(String locatorId, String linkText, final String viewPath) {
         super(locatorId, linkText, new ClickHandler() {
             public void onClick(ClickEvent event) {
@@ -45,7 +45,20 @@ public class ViewLink extends Link {
             }
         });
 
-        this.viewPath = viewPath;
+        this.viewPath = (viewPath.charAt(0) == '#') ? viewPath.substring(1) : \
viewPath; +    }
+
+    @Override
+    protected void handleMouseOverEvent() {
+        super.handleMouseOverEvent();
+        // NOTE: This doesn't work on Firefox  :-(
+        Window.setStatus('#' + this.viewPath);
+    }
+
+    @Override
+    protected void handleMouseOutEvent() {
+        super.handleMouseOutEvent();
+        Window.setStatus("");
     }
 
     @Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/CanvasField.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/CanvasField.java
 index b28e51f..b3ff1b5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/CanvasField.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/CanvasField.java
 @@ -20,12 +20,12 @@
 package org.rhq.enterprise.gui.coregui.client.components.table;
 
 import com.google.gwt.core.client.JavaScriptObject;
-import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.VerticalAlignment;
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 
 /**
  * Formats a cell value as a SmartGWT canvas.
@@ -59,7 +59,7 @@ public abstract class CanvasField extends ListGridField {
         super(field.getName(), field.getTitle());
 
         setWidth(field.getWidth());
-        // TODO: clone other commonly used fields
+        // TODO (ips, 04/27/11): clone other commonly used fields
     }
 
     /**
@@ -67,18 +67,21 @@ public abstract class CanvasField extends ListGridField {
      *
      * @param grid
      * @param record
+     * @param value
+     *
      * @return
      */
-    protected abstract Canvas createCanvas(ListGrid grid, ListGridRecord record);
-
-    protected HLayout createHLayout(ListGrid grid) {
-        HLayout component = new HLayout();
-        component.setWidth100();
-        // TODO: is this the best way to deal w/ height?
-        component.setHeight(25);
-        component.setMargin(grid.getCellPadding());
-        component.setOverflow(Overflow.HIDDEN);
-        return component;
+    protected abstract Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value); +
+    protected VLayout createVLayout(ListGrid grid) {
+        VLayout vLayout = new CanvasFieldVLayout(grid);
+        /*vLayout.setWidth(grid.getFieldWidth(getName()));
+        vLayout.setHeight100();
+        //vLayout.setOverflow(Overflow.VISIBLE);
+        //vLayout.setAutoHeight();
+        vLayout.setMargin(grid.getCellPadding());
+        vLayout.setAlign(VerticalAlignment.CENTER);*/
+        return vLayout;
     }
 
     @Override
@@ -86,4 +89,24 @@ public abstract class CanvasField extends ListGridField {
         return getClass().getName() + "[name=" + getName() + ", title=" + getTitle() \
+ "]";  }
 
+    class CanvasFieldVLayout extends VLayout {
+        private ListGrid grid;
+
+        CanvasFieldVLayout(ListGrid grid) {
+            this.grid = grid;
+            setWidth(grid.getFieldWidth(getName()));
+            setHeight100();
+            //setOverflow(Overflow.VISIBLE);
+            //setAutoHeight();
+            setMargin(grid.getCellPadding());
+            setAlign(VerticalAlignment.CENTER);
+        }
+
+        @Override
+        public void redraw() {
+            setWidth(this.grid.getFieldWidth(getName()));
+            super.redraw();
+        }
+    }
+
 }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/EnhancedListGrid.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/EnhancedListGrid.java
 index b383443..972b2b0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/EnhancedListGrid.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/EnhancedListGrid.java
 @@ -19,6 +19,8 @@
  */
 package org.rhq.enterprise.gui.coregui.client.components.table;
 
+import com.google.gwt.core.client.JavaScriptObject;
+import com.smartgwt.client.util.JSOHelper;
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.ListGridField;
@@ -73,10 +75,19 @@ public class EnhancedListGrid extends LocatableListGrid {
         }
 
         ListGridField field = getField(colNum);
-        ListGridField originalField = this.originalFields.get(field.getName());
+        String fieldName = field.getName();
+        ListGridField originalField = this.originalFields.get(fieldName);
         if (originalField instanceof CanvasField) {
             CanvasField canvasField = (CanvasField)originalField;
-            return canvasField.createCanvas(this, record);
+            Object value;
+            try {
+                Object rawValue = record.getAttributeAsObject(fieldName);
+                value = (rawValue instanceof JavaScriptObject) ?
+                        JSOHelper.convertToJava((JavaScriptObject) rawValue) : \
rawValue; +            } catch (RuntimeException e) {
+                value = record.getAttribute(fieldName);
+            }
+            return canvasField.createCanvas(this, record, value);
         } else {
             return null;
         }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
 index 4b49302..3b6d11d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
 @@ -27,18 +27,14 @@ import com.google.gwt.user.client.History;
 import com.smartgwt.client.data.Criteria;
 import com.smartgwt.client.data.SortSpecifier;
 import com.smartgwt.client.types.AnimationEffect;
-import com.smartgwt.client.types.Overflow;
 import com.smartgwt.client.types.VerticalAlignment;
 import com.smartgwt.client.widgets.AnimationCallback;
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.events.DoubleClickEvent;
 import com.smartgwt.client.widgets.events.DoubleClickHandler;
-import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.layout.HLayout;
-import com.smartgwt.client.widgets.layout.Layout;
 import com.smartgwt.client.widgets.layout.VLayout;
 
 import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
@@ -122,8 +118,8 @@ public abstract class TableSection<DS extends RPCDataSource> \
extends Table<DS> i  }
 
     /**
-     * The default implementation wraps the {@link \
                #getDetailsLinkColumnCellFormatter()} column with the
-     * {@link #getDetailsLinkColumnCellFormatter()}. This is typically the 'name' \
column linking to the detail +     * The default implementation renders each cell in \
the {@link #getDetailsLinkColumnName()} column as a hyperlink +     * to the details \
                for the corresponding row. This is typically the 'name' column \
                linking to the detail
      * view, given the 'id'. Also, establishes a double click handler for the row \
                which invokes
      * {@link #showDetails(com.smartgwt.client.widgets.grid.ListGridRecord)}</br>
      * </br>
@@ -137,28 +133,14 @@ public abstract class TableSection<DS extends RPCDataSource> \
extends Table<DS> i  
             ListGrid grid = getListGrid();
 
-            // Make the value of some specific field a link to the details view for \
the corresponding record. +            // Make the value of some specific field \
(typically the 'name' field) a link to the details view for the +            // \
                corresponding record.
             ListGridField field = (grid != null) ? \
grid.getField(getDetailsLinkColumnName()) : null;  if (field != null) {
-                //field.setCellFormatter(getDetailsLinkColumnCellFormatter());
-
-                CanvasField canvasField = new CanvasField(field) {
-                    protected Canvas createCanvas(ListGrid grid, ListGridRecord \
                record) {
-                        HLayout hLayout = createHLayout(grid);
-                        Integer recordId = getId(record);
-                        String detailsViewPath = getBasePath() + "/" + recordId;
-                        String recordValue = \
                record.getAttribute(getDetailsLinkColumnName());
-                        String formattedValue = (escapeHtmlInDetailsLinkColumn) ? \
                StringUtility.escapeHtml(recordValue.toString())
-                            : recordValue.toString();
-                        ViewLink viewLink = new \
                ViewLink(extendLocatorId("ViewLink"), formattedValue, \
                detailsViewPath);
-                        hLayout.addMember(viewLink);
-                        return hLayout;
-                    }
-                };
-
+                CanvasField detailsViewLinkField = createDetailsLinkField(field);
                 int fieldIndex = grid.getFieldNum(field.getName());
                 ListGridField[] fields = grid.getFields();
-                fields[fieldIndex] = canvasField;
+                fields[fieldIndex] = detailsViewLinkField;
                 grid.setFields(fields);
             }
 
@@ -175,6 +157,22 @@ public abstract class TableSection<DS extends RPCDataSource> \
extends Table<DS> i  }
     }
 
+    protected CanvasField createDetailsLinkField(final ListGridField field) {
+        return new ViewLinkField(field) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
Object value) { +                return createDetailsViewLink(record, value);
+            }
+        };
+    }
+
+    protected ViewLink createDetailsViewLink(ListGridRecord record, Object value) {
+        Integer recordId = getId(record);
+        String detailsViewPath = getBasePath() + "/" + recordId;
+        String formattedValue = (this.escapeHtmlInDetailsLinkColumn) ? \
StringUtility.escapeHtml(value.toString()) +            : value.toString();
+        return new ViewLink(formattedValue, detailsViewPath);
+    }
+
     protected boolean isDetailsEnabled() {
         return true;
     }
@@ -192,25 +190,6 @@ public abstract class TableSection<DS extends RPCDataSource> \
extends Table<DS> i  }
 
     /**
-     * Override if you don't want the detailsLinkColumn to have the default link \
                wrapper.
-     * @return the desired CellFormatter. 
-     */
-    protected CellFormatter getDetailsLinkColumnCellFormatter() {
-        return new CellFormatter() {
-            public String format(Object value, ListGridRecord record, int i, int i1) \
                {
-                if (value == null) {
-                    return "";
-                }
-                Integer recordId = getId(record);
-                String detailsUrl = "#" + getBasePath() + "/" + recordId;
-                String formattedValue = (escapeHtmlInDetailsLinkColumn) ? \
                StringUtility.escapeHtml(value.toString())
-                    : value.toString();
-                return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, \
                null);
-            }
-        };
-    }
-
-    /**
      * Shows the details view for the given record of the table.
      *
      * The default implementation of this method assumes there is an
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/ViewLinkField.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/ViewLinkField.java
 index b91d48c..31fcced 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/ViewLinkField.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/ViewLinkField.java
 @@ -5,10 +5,12 @@ import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 
 /**
+ * A list grid field that is displayed as a link to another CoreGUI view.
+ *
  * @author Ian Springer
  */
 public abstract class ViewLinkField extends CanvasField {
@@ -38,14 +40,14 @@ public abstract class ViewLinkField extends CanvasField {
     }
 
     @Override
-    protected Canvas createCanvas(ListGrid grid, ListGridRecord record) {
-        HLayout hLayout = createHLayout(grid);
-        ViewLink viewLink = getViewLink(grid, record);
-        hLayout.addMember(viewLink);
-        return hLayout;
+    protected Canvas createCanvas(ListGrid grid, ListGridRecord record, Object \
value) { +        VLayout vLayout = createVLayout(grid);
+        ViewLink viewLink = getViewLink(grid, record, value);
+        vLayout.addMember(viewLink);
+        return vLayout;
     }
 
-    protected abstract ViewLink getViewLink(ListGrid grid, ListGridRecord record);
+    protected abstract ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
Object value);  
     protected ViewLinkField(ListGridField field) {
         super(field);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java
 index 831993c..bc50d85 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/platform/PlatformSummaryPortlet.java
 @@ -124,7 +124,7 @@ public class PlatformSummaryPortlet extends LocatableListGrid \
implements Portlet  private void buildUI() {
         ViewLinkField nameField = new \
                ViewLinkField(ResourceDataSourceField.NAME.propertyName(), MSG
             .common_title_name()) {
-            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) {
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
                Object value) {
                 String resourceUrl = \
                LinkManager.getResourceLink(record.getAttributeAsInt("id"));
                 String linkText = \
StringUtility.escapeHtml(record.getAttribute(ResourceDataSourceField.NAME.propertyName()));
                
                 return new ViewLink(extendLocatorId("ViewLink"), linkText, \
                resourceUrl);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java
 index 91289ba..9ee0eca 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java
 @@ -34,6 +34,7 @@ import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import com.smartgwt.client.widgets.tree.TreeGrid;
 
 import org.rhq.core.domain.configuration.PropertySimple;
@@ -93,15 +94,15 @@ public class RecentlyAddedResourcesPortlet extends \
LocatableVLayout implements C  treeGrid.setTreeFieldTitle("Resource Name");
 
         CanvasField resourceNameField = new CanvasField("name", \
                MSG.common_title_resource_name()) {
-            protected Canvas createCanvas(ListGrid grid, ListGridRecord record) {
-                HLayout hLayout = createHLayout(grid);
+            protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value) { +                VLayout vLayout = createVLayout(grid);
                 int resourceId = record.getAttributeAsInt("id");
                 String resourceName = record.getAttribute("name");
                 String resourceViewPath = LinkManager.getResourceLink(resourceId);
                 ViewLink viewLink = new ViewLink(extendLocatorId("ViewLink"), \
StringUtility.escapeHtml(resourceName),  resourceViewPath);
-                hLayout.addMember(viewLink);
-                return hLayout;
+                vLayout.addMember(viewLink);
+                return vLayout;
             }
         };
 
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationSchedulePortlet.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationSchedulePortlet.java
 index b26405b..3853ea7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationSchedulePortlet.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationSchedulePortlet.java
 @@ -31,6 +31,7 @@ import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
 import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
 import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 import com.smartgwt.client.widgets.layout.VStack;
@@ -41,7 +42,10 @@ import \
org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;  import \
org.rhq.core.domain.configuration.definition.PropertySimpleType;  import \
org.rhq.core.domain.dashboard.DashboardPortlet;  import \
org.rhq.enterprise.gui.coregui.client.LinkManager; +import \
org.rhq.enterprise.gui.coregui.client.components.ViewLink; +import \
org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; \
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;  import \
org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;  import \
org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;  import \
org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet; @@ -118,21 \
+122,20 @@ public class OperationSchedulePortlet extends LocatableVLayout implements \
Custom  protected void onDraw() {
         super.onDraw();
 
-        ListGridField timeNext = new \
                ListGridField(ScheduledOperationsDataSource.Field.TIME.propertyName(),
                
-            ScheduledOperationsDataSource.Field.TIME.title(), WIDTH_SCHEDULED_TIME);
-        timeNext.setCellFormatter(new TimestampCellFormatter() {
-            public String format(Object value, ListGridRecord record, int rowNum, \
int colNum) { +        CanvasField timeNext = new \
CanvasField(ScheduledOperationsDataSource.Field.TIME.propertyName(), +            \
ScheduledOperationsDataSource.Field.TIME.title(), WIDTH_SCHEDULED_TIME) { +           \
protected Canvas createCanvas(ListGrid grid, ListGridRecord record, Object value) {  \
                if (value != null) {
-                    String timestamp = super.format(value, record, rowNum, colNum);
+                    String timestamp = TimestampCellFormatter.format(value);
                     Integer resourceId = \
                record.getAttributeAsInt(AncestryUtil.RESOURCE_ID);
                     Integer opScheduleId = record.getAttributeAsInt("id");
                     String url = \
                LinkManager.getSubsystemResourceOperationScheduleLink(resourceId, \
                opScheduleId);
-                    return SeleniumUtility.getLocatableHref(url, timestamp, null);
+                    return new ViewLink(timestamp, url);
                 } else {
-                    return "<i>" + MSG.common_label_none() + "</i>";
+                    return new HTMLFlow("<i>" + MSG.common_label_none() + "</i>");
                 }
             }
-        });
+        };
         timeNext.setShowHover(true);
         timeNext.setHoverCustomizer(TimestampCellFormatter.getHoverCustomizer(ScheduledOperationsDataSource.Field.TIME
                
             .propertyName()));
@@ -140,14 +143,13 @@ public class OperationSchedulePortlet extends LocatableVLayout \
                implements Custom
         ListGridField operationNext = new \
ListGridField(ScheduledOperationsDataSource.Field.OPERATION.propertyName(),  \
ScheduledOperationsDataSource.Field.OPERATION.title());  
-        ListGridField resourceNext = new \
                ListGridField(ScheduledOperationsDataSource.Field.RESOURCE.propertyName(),
                
-            ScheduledOperationsDataSource.Field.RESOURCE.title());
-        resourceNext.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+        ViewLinkField resourceNext = new \
ViewLinkField(ScheduledOperationsDataSource.Field.RESOURCE.propertyName(), +          \
ScheduledOperationsDataSource.Field.RESOURCE.title()) { +            protected \
ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) { +          \
String url = LinkManager.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
 +                return new ViewLink(value.toString(), url);
             }
-        });
+        };
         resourceNext.setShowHover(true);
         resourceNext.setHoverCustomizer(new HoverCustomizer() {
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
 index f3738d4..a512bab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
 @@ -47,9 +47,11 @@ import \
org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;  import \
org.rhq.core.domain.configuration.definition.PropertySimpleType;  import \
org.rhq.core.domain.dashboard.DashboardPortlet;  import \
org.rhq.enterprise.gui.coregui.client.LinkManager; +import \
org.rhq.enterprise.gui.coregui.client.components.ViewLink;  import \
org.rhq.enterprise.gui.coregui.client.components.table.IconField;  import \
org.rhq.enterprise.gui.coregui.client.components.table.Table;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TableWidget; +import \
org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;  import \
org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;  import \
org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;  import \
org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet; @@ -120,13 \
+122,13 @@ public class ProblemResourcesPortlet extends \
                Table<ProblemResourcesDataSource> i
             addExtraWidget(new TimeRange(extendLocatorId("TimeRange"), this), \
false);  }
 
-        ListGridField resourceField = new ListGridField(RESOURCE.propertyName(), \
                RESOURCE.title());
-        resourceField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
                LinkManager.getResourceLink(listGridRecord.getAttributeAsInt("id"));
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+        ViewLinkField resourceField = new ViewLinkField(RESOURCE.propertyName(), \
RESOURCE.title()) { +            @Override
+            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
Object value) { +                String url = \
LinkManager.getResourceLink(record.getAttributeAsInt("id")); +                return \
new ViewLink(value.toString(), url);  }
-        });
+        };
         resourceField.setShowHover(true);
         resourceField.setHoverCustomizer(new HoverCustomizer() {
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceConfigurationUpdatesPortlet.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceConfigurationUpdatesPortlet.java
 index f9b2d9d..9f9a31a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceConfigurationUpdatesPortlet.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceConfigurationUpdatesPortlet.java
 @@ -41,6 +41,7 @@ import org.rhq.core.domain.util.PageControl;
 import org.rhq.core.domain.util.PageList;
 import org.rhq.core.domain.util.PageOrdering;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
 import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
 import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.PortletConfigurationEditorComponent.Constant;
 @@ -168,18 +169,11 @@ public class ResourceConfigurationUpdatesPortlet extends \
GroupConfigurationUpdat  }
         }
 
-        /**
-         * Override if you don't want the detailsLinkColumn to have the default link \
                wrapper.
-         * @return the desired CellFormatter.
-         */
-        protected CellFormatter getDetailsLinkColumnCellFormatter() {
-            return new CellFormatter() {
-                public String format(Object value, ListGridRecord record, int i, int \
                i1) {
-                    Integer recordId = getId(record);
-                    String detailsUrl = "#" + getBasePath() + "/" + recordId;
-                    return SeleniumUtility.getLocatableHref(detailsUrl, \
                value.toString(), null);
-                }
-            };
+        @Override
+        protected ViewLink createDetailsViewLink(ListGridRecord record, Object \
value) { +            Integer recordId = getId(record);
+            String detailsUrl = getBasePath() + "/" + recordId;
+            return new ViewLink(value.toString(), detailsUrl);
         }
 
         @Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java
 index 48fea33..c97a67e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
                nt/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java @@ \
-35,6 +35,7 @@ import com.smartgwt.client.widgets.events.CloseClickHandler;  import \
com.smartgwt.client.widgets.events.CloseClientEvent;  import \
com.smartgwt.client.widgets.grid.CellFormatter;  import \
com.smartgwt.client.widgets.grid.HoverCustomizer; +import \
com.smartgwt.client.widgets.grid.ListGrid;  import \
com.smartgwt.client.widgets.grid.ListGridField;  import \
com.smartgwt.client.widgets.grid.ListGridRecord;  import \
com.smartgwt.client.widgets.grid.events.RecordClickEvent; @@ -46,9 +47,11 @@ import \
org.rhq.core.domain.operation.ResourceOperationHistory;  import \
org.rhq.enterprise.gui.coregui.client.CoreGUI;  import \
org.rhq.enterprise.gui.coregui.client.ImageManager;  import \
org.rhq.enterprise.gui.coregui.client.LinkManager; +import \
org.rhq.enterprise.gui.coregui.client.components.ViewLink;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TableAction;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TableSection;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; \
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;  import \
org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;  import \
org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;  import \
org.rhq.enterprise.gui.coregui.client.operation.OperationHistoryDataSource; @@ \
-246,19 +249,17 @@ public abstract class AbstractOperationHistoryListView<T extends \
AbstractOperati  return statusField;
     }
 
-    protected ListGridField createResourceField() {
-        ListGridField resourceField = new ListGridField(AncestryUtil.RESOURCE_NAME, \
MSG.common_title_resource()); +    protected ViewLinkField createResourceField() {
+        ViewLinkField resourceField = new ViewLinkField(AncestryUtil.RESOURCE_NAME, \
MSG.common_title_resource()) { +            protected ViewLink getViewLink(ListGrid \
grid, ListGridRecord record, Object value) { +                String url = \
LinkManager.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +    \
return new ViewLink(value.toString(), url); +            }
+        };
         resourceField.setAlign(Alignment.LEFT);
         resourceField.setCellAlign(Alignment.LEFT);
-        resourceField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
-            }
-        });
         resourceField.setShowHover(true);
         resourceField.setHoverCustomizer(new HoverCustomizer() {
-
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
                 return AncestryUtil.getResourceHoverHTML(listGridRecord, 0);
             }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
 index 0965096..c70f4f4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
 @@ -44,6 +44,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
 import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem;
 import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
@@ -212,14 +213,11 @@ public class EventCompositeHistoryView extends \
TableSection<EventCompositeDataso  return "timestamp";
     }
 
-    protected CellFormatter getDetailsLinkColumnCellFormatter() {
-        return new CellFormatter() {
-            public String format(Object value, ListGridRecord record, int rowNum, \
                int colNum) {
-                Integer recordId = getId(record);
-                String detailsUrl = "#" + getBasePath() + "/" + recordId;
-                return SeleniumUtility.getLocatableHref(detailsUrl, \
                TimestampCellFormatter.format(value), null);
-            }
-        };
+    @Override
+    protected ViewLink createDetailsViewLink(ListGridRecord record, Object value) {
+        Integer recordId = getId(record);
+        String detailsUrl = getBasePath() + "/" + recordId;
+        return new ViewLink(TimestampCellFormatter.format(value), detailsUrl);
     }
 
     private void setupTableInteractions() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
 index c0ae2d7..7ab79dd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
 @@ -46,10 +46,12 @@ import org.rhq.core.domain.search.SearchSubsystem;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
 import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
 import org.rhq.enterprise.gui.coregui.client.components.table.Table;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.inventory.groups.wizard.GroupCreateWizard;
 @@ -136,16 +138,14 @@ public class ResourceGroupListView extends \
Table<ResourceGroupCompositeDataSourc  }
         });
 
-        ListGridField nameField = new ListGridField(NAME.propertyName(), \
                NAME.title());
-        nameField.setWidth("40%");
-
-        nameField.setCellFormatter(new CellFormatter() {
-            public String format(Object value, ListGridRecord record, int i, int i1) \
{ +        ViewLinkField nameField = new ViewLinkField(NAME.propertyName(), \
NAME.title()) { +            protected ViewLink getViewLink(ListGrid grid, \
ListGridRecord record, Object value) {  String groupId = record.getAttribute("id");
                 String groupUrl = \
                LinkManager.getResourceGroupLink(Integer.valueOf(groupId));
-                return SeleniumUtility.getLocatableHref(groupUrl, value.toString(), \
null); +                return new ViewLink(value.toString(), groupUrl);
             }
-        });
+        };
+        nameField.setWidth("40%");
 
         ListGridField descriptionField = new \
ListGridField(DESCRIPTION.propertyName(), DESCRIPTION.title());  \
                descriptionField.setWidth("30%");
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java
 index 3d2c15d..daf2c1a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java
 @@ -251,7 +251,7 @@ public class SingleGroupDefinitionView extends LocatableVLayout \
implements Bookm  idField.setWidth("50");
 
             ViewLinkField nameField = new ViewLinkField(NAME.propertyName(), \
                NAME.title()) {
-                protected ViewLink getViewLink(ListGrid grid, ListGridRecord record) \
{ +                protected ViewLink getViewLink(ListGrid grid, ListGridRecord \
                record, Object value) {
                     String linkName = \
                StringUtility.escapeHtml(record.getAttributeAsString(NAME.propertyName()));
                
                     String linkUrl = \
                LinkManager.getResourceGroupLink(record.getAttributeAsInt("id"));
                     return new ViewLink(extendLocatorId("ViewLink"), linkName, \
                linkUrl);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/i \
nventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java \
                index 31520bd..c0692dd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java
 @@ -50,9 +50,11 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ErrorMessageWindow;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
 import org.rhq.enterprise.gui.coregui.client.components.table.Table;
 import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
 +import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -103,17 +105,15 @@ public class HistoryGroupResourceConfigurationMembers extends \
LocatableVLayout {  
         @Override
         protected void configureTable() {
-            ListGridField fieldResource = new \
                ListGridField(AncestryUtil.RESOURCE_NAME, \
                MSG.common_title_resource());
-            fieldResource.setCellFormatter(new CellFormatter() {
-                public String format(Object o, ListGridRecord listGridRecord, int i, \
int i1) { +            ViewLinkField fieldResource = new \
ViewLinkField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource()) { +            \
protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) {  \
                String url = LinkManager
-                        \
                .getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                    return SeleniumUtility.getLocatableHref(url, o.toString(), \
null); +                        \
.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +               \
return new ViewLink(value.toString(), url);  }
-            });
+            };
             fieldResource.setShowHover(true);
             fieldResource.setHoverCustomizer(new HoverCustomizer() {
-
                 public String hoverHTML(Object value, ListGridRecord listGridRecord, \
                int rowNum, int colNum) {
                     return AncestryUtil.getResourceHoverHTML(listGridRecord, 0);
                 }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
 index 2699dff..cdb8551 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
 @@ -50,9 +50,11 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ErrorMessageWindow;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
 import org.rhq.enterprise.gui.coregui.client.components.table.Table;
 import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
 +import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -102,17 +104,15 @@ public class HistoryGroupPluginConfigurationMembers extends \
LocatableVLayout {  
         @Override
         protected void configureTable() {
-            ListGridField fieldResource = new \
                ListGridField(AncestryUtil.RESOURCE_NAME, \
                MSG.common_title_resource());
-            fieldResource.setCellFormatter(new CellFormatter() {
-                public String format(Object o, ListGridRecord listGridRecord, int i, \
int i1) { +            ViewLinkField fieldResource = new \
ViewLinkField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource()) { +            \
protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) {  \
                String url = LinkManager
-                        \
                .getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                    return SeleniumUtility.getLocatableHref(url, o.toString(), \
null); +                        \
.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +               \
return new ViewLink(value.toString(), url);  }
-            });
+            };
             fieldResource.setShowHover(true);
             fieldResource.setHoverCustomizer(new HoverCustomizer() {
-
                 public String hoverHTML(Object value, ListGridRecord listGridRecord, \
                int rowNum, int colNum) {
                     return AncestryUtil.getResourceHoverHTML(listGridRecord, 0);
                 }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java
 index 61a30ce..ae11ac8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/ResourceGroupMetricGraphView.java
 @@ -32,11 +32,12 @@ import org.rhq.core.domain.resource.group.ResourceGroup;
 import org.rhq.core.domain.util.PageList;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMetricGraphView;
  import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
                
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
 
 /**
  * @author Greg Hinkle
@@ -44,7 +45,7 @@ import \
                org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
  */
 public class ResourceGroupMetricGraphView extends AbstractMetricGraphView {
 
-    private HTMLFlow resourceGroupTitle;
+    private ViewLink resourceGroupTitle;
 
     public ResourceGroupMetricGraphView(String locatorId) {
         super(locatorId);
@@ -84,7 +85,7 @@ public class ResourceGroupMetricGraphView extends \
AbstractMetricGraphView {  
                     final ResourceGroup group = result.get(0);
                     String url = LinkManager.getResourceGroupLink(group.getId());
-                    resourceGroupTitle = new \
HTMLFlow(SeleniumUtility.getLocatableHref(url, group.getName(), null)); +             \
resourceGroupTitle = new ViewLink(StringUtility.escapeHtml(group.getName()), url);  
                     \
ResourceTypeRepository.Cache.getInstance().getResourceTypes(group.getResourceType().getId(),
                
                         \
                EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
 index e93a1cb..4d3122e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
 @@ -19,17 +19,16 @@
 package org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.monitoring.traits;
  
 import com.smartgwt.client.data.Criteria;
-import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
 import com.smartgwt.client.widgets.grid.ListGrid;
-import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
 import org.rhq.core.domain.criteria.MeasurementDataTraitCriteria;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementDataTraitListDetailView;
  import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
  * The detail view for the group Monitoring>Traits subtab.
@@ -47,13 +46,12 @@ public class TraitsDetailView extends \
AbstractMeasurementDataTraitListDetailView  
         ListGrid listGrid = getListGrid();
 
-        ListGridField resourceNameField = \
                listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME);
                
-        resourceNameField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+        ViewLinkField resourceNameField = new \
ViewLinkField(listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME)) \
{ +            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
Object value) { +                String url = \
LinkManager.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +    \
return new ViewLink(value.toString(), url);  }
-        });
+        };
         resourceNameField.setShowHover(true);
         resourceNameField.setHoverCustomizer(new HoverCustomizer() {
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
 index f1c7cfa..5de7e79 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
 @@ -29,6 +29,8 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
 
 import org.rhq.core.domain.criteria.MeasurementDataTraitCriteria;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementDataTraitListView;
  import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
 import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -54,13 +56,12 @@ public class TraitsView extends \
AbstractMeasurementDataTraitListView {  \
                listGrid.setGroupStartOpen(GroupStartOpen.ALL);
         listGrid.groupBy(MeasurementDataTraitCriteria.SORT_FIELD_DISPLAY_NAME);
 
-        ListGridField resourceNameField = \
                listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME);
                
-        resourceNameField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+        ViewLinkField resourceNameField = new \
ViewLinkField(listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME)) \
{ +            protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, \
Object value) { +                String url = \
LinkManager.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +    \
return new ViewLink(value.toString(), url);  }
-        });
+        };
         resourceNameField.setShowHover(true);
         resourceNameField.setHoverCustomizer(new HoverCustomizer() {
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/i \
nventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java
 index b9eb6bb..59e4ac2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java
 @@ -13,6 +13,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
 import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.operation.history.AbstractOperationHistoryDataSource;
  import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.operation.history.AbstractOperationHistoryListView;
  import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -44,14 +45,8 @@ public class GroupMemberResourceOperationHistoryListView extends
         idField.setWidth(38);
         fields.add(idField);
 
-        ListGridField resourceField = createResourceField();
+        ViewLinkField resourceField = createResourceField();
         resourceField.setWidth("25%");
-        resourceField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
-            }
-        });
         resourceField.setShowHover(true);
         resourceField.setHoverCustomizer(new HoverCustomizer() {
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
 index b451c0e..5b8d1a3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
 @@ -24,16 +24,23 @@ import java.util.Map;
 
 import com.smartgwt.client.data.Record;
 import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.HTMLFlow;
 import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
 import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
+import com.smartgwt.client.widgets.layout.HStack;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.core.domain.resource.Resource;
 import org.rhq.core.domain.resource.ResourceType;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
+import org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;
 import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
 import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
@@ -63,11 +70,53 @@ public abstract class AncestryUtil {
      * @return ancestry field
      */
     public static ListGridField setupAncestryListGridField() {
-        ListGridField ancestryField = new \
ListGridField(AncestryUtil.RESOURCE_ANCESTRY, \
CoreGUI.getMessages().common_title_ancestry()); +        CanvasField ancestryField = \
new CanvasField(AncestryUtil.RESOURCE_ANCESTRY, +                \
CoreGUI.getMessages().common_title_ancestry()) { +            protected Canvas \
createCanvas(ListGrid grid, ListGridRecord record, Object value) { +                \
VLayout vLayout = createVLayout(grid); +
+                if (value == null) {
+                    // no ancestry - render a blank cell
+                    return vLayout;
+                }
+
+                HStack hStack = new HStack();
+                hStack.setMembersMargin(4);
+                hStack.setOverflow(Overflow.AUTO);
+                Integer resourceId = getResourceId(record);
+                String[] ancestryEntries = \
value.toString().split(Resource.ANCESTRY_DELIM); +                for (int i = 0; i < \
ancestryEntries.length; ++i) { +                    String[] entryTokens = \
ancestryEntries[i].split(Resource.ANCESTRY_ENTRY_DELIM); +                    int \
ancestorResourceId = Integer.valueOf(entryTokens[1]); +                    String \
ancestorName = StringUtility.escapeHtml(entryTokens[2]); +
+                    if (i > 0) {
+                        HTMLFlow html = new HTMLFlow("&lt;");
+                        html.setAutoWidth();
+                        hStack.addMember(html);
+                    }
+                    boolean generateLinks = true; // TODO
+                    if (generateLinks) {
+                        String url = \
LinkManager.getResourceLink(ancestorResourceId); +                        String \
suffix = resourceId + "_" + entryTokens[1]; +                        ViewLink \
viewLink = new ViewLink(ancestorName + suffix, ancestorName, url); +                  \
hStack.addMember(viewLink); +                    } else {
+                        HTMLFlow html = new HTMLFlow(ancestorName);
+                        html.setAutoWidth();
+                        hStack.addMember(html);
+                    }
+                }
+
+                vLayout.addMember(hStack);
+                return vLayout;
+            }
+        };
+
         ancestryField.setAlign(Alignment.LEFT);
         ancestryField.setCellAlign(Alignment.LEFT);
-        setupAncestryListGridFieldCellFormatter(ancestryField);
         setupAncestryListGridFieldHover(ancestryField);
+
         return ancestryField;
     }
 
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
 index 025ee97..a33b8be 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
 @@ -30,7 +30,6 @@ import com.smartgwt.client.data.Record;
 import com.smartgwt.client.data.SortSpecifier;
 import com.smartgwt.client.widgets.events.DoubleClickEvent;
 import com.smartgwt.client.widgets.events.DoubleClickHandler;
-import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
 import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
@@ -43,6 +42,7 @@ import org.rhq.core.domain.resource.ResourceCategory;
 import org.rhq.core.domain.search.SearchSubsystem;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.table.EscapedHtmlCellFormatter;
  import org.rhq.enterprise.gui.coregui.client.components.table.RecordExtractor;
 import org.rhq.enterprise.gui.coregui.client.components.table.ResourceAuthorizedTableAction;
 @@ -51,6 +51,7 @@ import \
org.rhq.enterprise.gui.coregui.client.components.table.ResourceCategoryCe  import \
org.rhq.enterprise.gui.coregui.client.components.table.Table;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;  import \
org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; \
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;  import \
org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;  import \
org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;  import \
org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; @@ -58,7 +59,6 @@ import \
org.rhq.enterprise.gui.coregui.client.util.StringUtility;  import \
org.rhq.enterprise.gui.coregui.client.util.TableUtility;  import \
org.rhq.enterprise.gui.coregui.client.util.message.Message;  import \
                org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
  * The list view for {@link Resource}s.
@@ -193,14 +193,13 @@ public class ResourceSearchView extends Table {
         });
         fields.add(iconField);
 
-        ListGridField nameField = new ListGridField(NAME.propertyName(), \
                NAME.title(), 250);
-        nameField.setCellFormatter(new CellFormatter() {
-            public String format(Object value, ListGridRecord record, int rowNum, \
int colNum) { +        ViewLinkField nameField = new \
ViewLinkField(NAME.propertyName(), NAME.title(), 250) { +            protected \
                ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object \
                value) {
                 String url = \
LinkManager.getResourceLink(record.getAttributeAsInt("id"));  String name = \
                StringUtility.escapeHtml(value.toString());
-                return SeleniumUtility.getLocatableHref(url, name, null);
+                return new ViewLink(name, url);
             }
-        });
+        };
         nameField.setShowHover(true);
         nameField.setHoverCustomizer(new HoverCustomizer() {
             public String hoverHTML(Object value, ListGridRecord listGridRecord, int \
                rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/i \
nventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java \
                index 7993957..05a00b6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java
 @@ -47,6 +47,7 @@ import org.rhq.enterprise.gui.coregui.client.LinkManager;
 import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;
 import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
 +import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -201,7 +202,7 @@ public abstract class AbstractConfigurationHistoryDataSource<T \
extends AbstractR  
         CanvasField updateTypeField = new CanvasField(Field.GROUP_CONFIG_UPDATE_ID, \
                MSG
             .dataSource_configurationHistory_updateType()) {
-            protected Canvas createCanvas(ListGrid grid, ListGridRecord record) {
+            protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
                Object value) {
                 Integer groupConfigUpdateId = \
record.getAttributeAsInt(Field.GROUP_CONFIG_UPDATE_ID);  if (groupConfigUpdateId == \
                null) {
                     return new \
HTMLFlow(MSG.dataSource_configurationHistory_updateType_individual()); @@ -217,17 \
+218,15 @@ public abstract class AbstractConfigurationHistoryDataSource<T extends \
AbstractR  
         // determine the widths of our columns
         if (includeResourceFields) {
-            ListGridField resourceNameField = new \
                ListGridField(AncestryUtil.RESOURCE_NAME, \
                MSG.common_title_resource());
-            resourceNameField.setCellFormatter(new CellFormatter() {
-                public String format(Object o, ListGridRecord listGridRecord, int i, \
int i1) { +            ViewLinkField resourceNameField = new \
ViewLinkField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource()) { +            \
protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) {  \
                String url = LinkManager
-                        \
                .getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                    return SeleniumUtility.getLocatableHref(url, o.toString(), \
null); +                        \
.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +               \
return new ViewLink(value.toString(), url);  }
-            });
+            };
             resourceNameField.setShowHover(true);
             resourceNameField.setHoverCustomizer(new HoverCustomizer() {
-
                 public String hoverHTML(Object value, ListGridRecord listGridRecord, \
                int rowNum, int colNum) {
                     return AncestryUtil.getResourceHoverHTML(listGridRecord, 0);
                 }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryView.java
 index 72966cf..0d848a7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryView.java
 @@ -23,21 +23,25 @@ import java.util.List;
 
 import com.smartgwt.client.data.Criteria;
 import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.Img;
+import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.core.domain.configuration.AbstractResourceConfigurationUpdate;
 import org.rhq.core.domain.criteria.AbstractResourceConfigurationUpdateCriteria;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationComparisonView;
  import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
 import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
 import org.rhq.enterprise.gui.coregui.client.util.message.Message;
 import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
  * The superclass to the main plugin/resource views that lists all configuration \
history items. @@ -153,18 +157,24 @@ public abstract class \
AbstractConfigurationHistoryView<T extends AbstractConfigu  }
 
     @Override
-    protected CellFormatter getDetailsLinkColumnCellFormatter() {
-        return new CellFormatter() {
-            public String format(Object value, ListGridRecord record, int i, int i1) \
                {
-                Integer recordId = getId(record);
-                String detailsUrl = "#" + getBasePath() + "/" + recordId;
-                String cellHtml = SeleniumUtility.getLocatableHref(detailsUrl, \
value.toString(), null); +    protected CanvasField \
createDetailsLinkField(ListGridField field) { +        return new CanvasField(field) \
{ +            protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value) { +                VLayout vLayout = createVLayout(grid);
+                HLayout hLayout = new HLayout();
+
                 String isCurrentConfig = record
                     \
.getAttribute(AbstractConfigurationHistoryDataSource.Field.CURRENT_CONFIG);  if \
                (Boolean.parseBoolean(isCurrentConfig)) {
-                    cellHtml = Canvas.imgHTML(ImageManager.getApproveIcon()) + \
cellHtml; +                    Img approveIcon = new \
Img(ImageManager.getApproveIcon()); +                    \
hLayout.addMember(approveIcon);  }
-                return cellHtml;
+
+                ViewLink detailsViewLink = createDetailsViewLink(record, value);
+                hLayout.addMember(detailsViewLink);
+
+                vLayout.addMember(hLayout);
+                return vLayout;
             }
         };
     }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/ResourceMetricGraphView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/ResourceMetricGraphView.java
 index d051b92..def6455 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/ResourceMetricGraphView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/ResourceMetricGraphView.java
 @@ -34,11 +34,13 @@ import org.rhq.core.domain.resource.ResourceType;
 import org.rhq.core.domain.util.PageList;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMetricGraphView;
  import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
 +import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
 import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
@@ -99,8 +101,7 @@ public class ResourceMetricGraphView extends \
AbstractMetricGraphView {  
                             public void onTypesLoaded(Map<Integer, ResourceType> \
                types) {
                                 String url = \
                LinkManager.getResourceLink(resource.getId());
-                                resourceTitle = new \
                HTMLFlow(SeleniumUtility.getLocatableHref(url, resource.getName(),
-                                    null));
+                                resourceTitle = new \
                ViewLink(StringUtility.escapeHtml(resource.getName()), url);
                                 \
resourceTitle.setTooltip(AncestryUtil.getAncestryHoverHTMLForResource(resource, \
types,  0));
 
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coreg \
ui/client/inventory/resource/detail/operation/history/ResourceOperationHistoryDetailsView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/i \
nventory/resource/detail/operation/history/ResourceOperationHistoryDetailsView.java \
                index b94f59b..51f2027 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/resource/detail/operation/history/ResourceOperationHistoryDetailsView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/clie \
nt/inventory/resource/detail/operation/history/ResourceOperationHistoryDetailsView.java
 @@ -27,7 +27,6 @@ import com.smartgwt.client.widgets.HTMLFlow;
 import com.smartgwt.client.widgets.Label;
 import com.smartgwt.client.widgets.form.fields.CanvasItem;
 import com.smartgwt.client.widgets.form.fields.FormItem;
-import com.smartgwt.client.widgets.form.fields.StaticTextItem;
 
 import com.smartgwt.client.widgets.layout.HLayout;
 import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -45,15 +44,14 @@ import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
  import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.operation.history.AbstractOperationHistoryDetailsView;
 +import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
 import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
  * @author Ian Springer
  */
 public class ResourceOperationHistoryDetailsView extends \
AbstractOperationHistoryDetailsView<ResourceOperationHistory> {  
-    private String disambiguatedResourceName;
     private boolean showResourceField;
     private ResourceComposite resourceComposite;
 
@@ -77,9 +75,11 @@ public class ResourceOperationHistoryDetailsView extends \
AbstractOperationHistor  List<FormItem> items = super.createFields(operationHistory);
 
         if (this.showResourceField) {
-            StaticTextItem resourceItem = new \
                StaticTextItem(ResourceOperationHistoryDataSource.Field.RESOURCE,
-                "Resource");
-            resourceItem.setValue(this.disambiguatedResourceName);
+            CanvasItem resourceItem = new \
CanvasItem(ResourceOperationHistoryDataSource.Field.RESOURCE, "Resource"); +          \
Resource resource = resourceComposite.getResource(); +            String url = \
LinkManager.getResourceLink(resource.getId()); +            ViewLink viewLink = new \
ViewLink(StringUtility.escapeHtml(resource.getName()), url); +            \
resourceItem.setCanvas(viewLink);  items.add(1, resourceItem);
         }
 
@@ -120,14 +120,6 @@ public class ResourceOperationHistoryDetailsView extends \
AbstractOperationHistor  
                 public void onSuccess(PageList<ResourceOperationHistory> result) {
                     ResourceOperationHistory resourceOperationHistory = \
                result.get(0);
-
-                    if (showResourceField) {
-                        Resource resource = resourceOperationHistory.getResource();
-                        String url = LinkManager.getResourceLink(resource.getId());
-                        disambiguatedResourceName = \
                SeleniumUtility.getLocatableHref(url, resource.getName(), String
-                            .valueOf(resource.getId()));
-                    }
-
                     displayDetails(resourceOperationHistory);
                 }
             });
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
 index 70fdc4c..0eff890 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
 @@ -155,9 +155,8 @@ public class MenuBarView extends LocatableVLayout {
                 viewLinkContainer.setAlign(VerticalAlignment.CENTER);
                 ViewLink viewLink = new \
ViewLink(extendLocatorId(sectionName.getName()), sectionName.getTitle(),  \
                sectionName.getName());
-                viewLink.setStyleName(null);
-                viewLink.setMouseOutStyleName(null);
-                viewLink.setMouseOverStyleName(null);
+                viewLink.setMouseOutStyleName("menuBarLink");
+                viewLink.setMouseOverStyleName("menuBarLinkHover");
                 this.sectionNameToViewLinkMap.put(sectionName.getName(), \
viewLinkContainer);  viewLinkContainer.addMember(viewLink);
                 updateViewLinkStyle(sectionName.getName());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/operation/OperationHistoryDataSource.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/operation/OperationHistoryDataSource.java
 index 93a59a8..c910b32 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/operation/OperationHistoryDataSource.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/operation/OperationHistoryDataSource.java
 @@ -16,7 +16,6 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-
 package org.rhq.enterprise.gui.coregui.client.operation;
 
 import java.util.ArrayList;
@@ -32,11 +31,13 @@ import com.smartgwt.client.rpc.RPCResponse;
 import com.smartgwt.client.types.Alignment;
 import com.smartgwt.client.types.Overflow;
 import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.HTMLFlow;
 import com.smartgwt.client.widgets.Window;
 import com.smartgwt.client.widgets.events.CloseClickHandler;
 import com.smartgwt.client.widgets.events.CloseClientEvent;
 import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
@@ -54,7 +55,10 @@ import org.rhq.core.domain.util.PageList;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.ImageManager;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
+import org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;
 import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
 +import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.gwt.OperationGWTServiceAsync;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -63,7 +67,6 @@ import \
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp  import \
org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;  import \
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHTMLPane;  import \
                org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
 
 /**
  * @author Jay Shaughnessy
@@ -123,14 +126,13 @@ public class OperationHistoryDataSource extends
         fields.add(statusField);
 
         if (this.entityContext.type != EntityContext.Type.Resource) {
-            ListGridField resourceNameField = new \
                ListGridField(AncestryUtil.RESOURCE_NAME, \
                MSG.common_title_resource());
-            resourceNameField.setCellFormatter(new CellFormatter() {
-                public String format(Object o, ListGridRecord listGridRecord, int i, \
int i1) { +            ViewLinkField resourceNameField = new \
ViewLinkField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource()) { +            \
protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) {  \
                String url = LinkManager
-                        \
                .getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                    return SeleniumUtility.getLocatableHref(url, o.toString(), \
null); +                        \
.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +               \
return new ViewLink(value.toString(), url);  }
-            });
+            };
             resourceNameField.setShowHover(true);
             resourceNameField.setHoverCustomizer(new HoverCustomizer() {
 
@@ -160,23 +162,22 @@ public class OperationHistoryDataSource extends
     }
 
     protected ListGridField createStartedTimeField() {
-        ListGridField startedTimeField = new ListGridField(Field.STARTED_TIME, MSG
-            .view_operationHistoryDetails_dateSubmitted());
-        startedTimeField.setAlign(Alignment.LEFT);
-        startedTimeField.setCellAlign(Alignment.LEFT);
-        startedTimeField.setCellFormatter(new TimestampCellFormatter() {
-            public String format(Object value, ListGridRecord record, int rowNum, \
int colNum) { +        CanvasField startedTimeField = new \
CanvasField(Field.STARTED_TIME, MSG +            \
.view_operationHistoryDetails_dateSubmitted()) { +            protected Canvas \
createCanvas(ListGrid grid, ListGridRecord record, Object value) {  if (value != \
                null) {
-                    String timestamp = super.format(value, record, rowNum, colNum);
+                    String timestamp = TimestampCellFormatter.format(value);
                     Integer resourceId = \
record.getAttributeAsInt(AncestryUtil.RESOURCE_ID);  Integer opHistoryId = \
                record.getAttributeAsInt("id");
                     String url = \
                LinkManager.getSubsystemResourceOperationHistoryLink(resourceId, \
                opHistoryId);
-                    return SeleniumUtility.getLocatableHref(url, timestamp, null);
+                    return new ViewLink(timestamp, url);
                 } else {
-                    return "<i>" + MSG.view_operationHistoryList_notYetStarted() + \
"</i>"; +                    return new HTMLFlow("<i>" + \
MSG.view_operationHistoryList_notYetStarted() + "</i>");  }
             }
-        });
+        };
+        startedTimeField.setAlign(Alignment.LEFT);
+        startedTimeField.setCellAlign(Alignment.LEFT);
         startedTimeField.setShowHover(true);
         startedTimeField.setHoverCustomizer(TimestampCellFormatter.getHoverCustomizer(Field.STARTED_TIME));
  
@@ -194,18 +195,18 @@ public class OperationHistoryDataSource extends
                 String statusStr = record.getAttribute(Field.STATUS);
                 OperationRequestStatus status = \
OperationRequestStatus.valueOf(statusStr);  switch (status) {
-                case SUCCESS: {
-                    return MSG.common_status_success();
-                }
-                case FAILURE: {
-                    return MSG.common_status_failed();
-                }
-                case INPROGRESS: {
-                    return MSG.common_status_inprogress();
-                }
-                case CANCELED: {
-                    return MSG.common_status_canceled();
-                }
+                    case SUCCESS: {
+                        return MSG.common_status_success();
+                    }
+                    case FAILURE: {
+                        return MSG.common_status_failed();
+                    }
+                    case INPROGRESS: {
+                        return MSG.common_status_inprogress();
+                    }
+                    case CANCELED: {
+                        return MSG.common_status_canceled();
+                    }
                 }
                 // should never get here
                 return MSG.common_status_unknown();
@@ -276,22 +277,22 @@ public class OperationHistoryDataSource extends
         final long start = System.currentTimeMillis();
 
         this.operationService.findResourceOperationHistoriesByCriteria(criteria,
-            new AsyncCallback<PageList<ResourceOperationHistory>>() {
+                new AsyncCallback<PageList<ResourceOperationHistory>>() {
 
-                public void onFailure(Throwable caught) {
-                    CoreGUI.getErrorHandler()
-                        \
                .handleError(MSG.view_operationHistoryDetails_error_fetchFailure(), \
                caught);
-                    response.setStatus(RPCResponse.STATUS_FAILURE);
-                    processResponse(request.getRequestId(), response);
-                }
+                    public void onFailure(Throwable caught) {
+                        CoreGUI.getErrorHandler()
+                                \
.handleError(MSG.view_operationHistoryDetails_error_fetchFailure(), caught); +        \
response.setStatus(RPCResponse.STATUS_FAILURE); +                        \
processResponse(request.getRequestId(), response); +                    }
 
-                public void onSuccess(PageList<ResourceOperationHistory> result) {
-                    long fetchTime = System.currentTimeMillis() - start;
-                    Log.info(result.size() + " operation histories fetched in: " + \
fetchTime + "ms"); +                    public void \
onSuccess(PageList<ResourceOperationHistory> result) { +                        long \
fetchTime = System.currentTimeMillis() - start; +                        \
Log.info(result.size() + " operation histories fetched in: " + fetchTime + "ms");  
-                    dataRetrieved(result, response, request);
-                }
-            });
+                        dataRetrieved(result, response, request);
+                    }
+                });
     }
 
     /**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java
 index 23c6546..f8dcdb4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java
 @@ -22,7 +22,7 @@ import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
-import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.core.domain.alert.AlertDefinition;
 import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
 import org.rhq.core.domain.criteria.ResourceCriteria;
@@ -37,6 +37,7 @@ import org.rhq.enterprise.gui.coregui.client.components.Link;
 import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
 import org.rhq.enterprise.gui.coregui.client.components.table.CanvasField;
 import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
@@ -127,27 +128,24 @@ public class AlertDefinitionReportView extends \
                Table<AlertDefinitionReportView.D
                 if (fieldName.equals(FIELD_CTIME) || fieldName.equals(FIELD_MTIME)) \
{  field.setHidden(true);
                 } else if (fieldName.equals(FIELD_NAME)) {
-                    CanvasField canvasField = new CanvasField(field) {
-                        protected Canvas createCanvas(ListGrid grid, ListGridRecord \
                record) {
-                            HLayout hLayout = createHLayout(grid);
+                    ViewLinkField nameField = new ViewLinkField(field) {
+                        protected ViewLink getViewLink(ListGrid grid, ListGridRecord \
                record, Object value) {
                             AlertDefinition alertDef = copyValues(record);
                             int resourceId = alertDef.getResource().getId();
                             int alertDefId = alertDef.getId();
                             String link = \
                LinkManager.getSubsystemAlertDefinitionLink(resourceId, alertDefId);
-                            ViewLink viewLink = new \
                ViewLink(extendLocatorId("ViewLink"),
-                                    StringUtility.escapeHtml(alertDef.getName()), \
                link);
-                            hLayout.addMember(viewLink);
-                            return hLayout;
+                            String linkText = \
StringUtility.escapeHtml(alertDef.getName()); +                            return new \
ViewLink(linkText, link);  }
                     };
-                    fields.set(i, canvasField);
+                    fields.set(i, nameField);
                 }
             }
 
             // add more columns
             CanvasField parentField = new CanvasField(FIELD_PARENT, \
                MSG.view_alerts_field_parent(), 100) {
-                protected Canvas createCanvas(ListGrid grid, final ListGridRecord \
                record) {
-                    HLayout hLayout = createHLayout(grid);
+                protected Canvas createCanvas(ListGrid grid, final ListGridRecord \
record, Object value) { +                    VLayout vLayout = createVLayout(grid);
 
                     final AlertDefinition alertDef = copyValues(record);
                     boolean hasParent;
@@ -208,12 +206,12 @@ public class AlertDefinitionReportView extends \
Table<AlertDefinitionReportView.D  }
                             }
                         });
-                        hLayout.addMember(link);
+                        vLayout.addMember(link);
                     } else {
-                        hLayout.addMember(new HTMLFlow(MSG.common_val_na()));
+                        vLayout.addMember(new HTMLFlow(MSG.common_val_na()));
                     }
 
-                    return hLayout;
+                    return vLayout;
                 }
             };
             parentField.setShowHover(true);
@@ -228,15 +226,15 @@ public class AlertDefinitionReportView extends \
Table<AlertDefinitionReportView.D  fields.add(parentField);
 
             CanvasField resourceField = new CanvasField(FIELD_RESOURCE, \
                MSG.common_title_resource()) {
-                protected Canvas createCanvas(ListGrid grid, ListGridRecord record) \
                {
-                    HLayout hLayout = createHLayout(grid);
+                protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value) { +                    VLayout vLayout = createVLayout(grid);
                     Integer resourceId = \
record.getAttributeAsInt(AncestryUtil.RESOURCE_ID);  String url = \
                LinkManager.getResourceLink(resourceId);
                     String resourceName = record.getAttribute(FIELD_RESOURCE);
                     ViewLink viewLink = new ViewLink(extendLocatorId("ViewLink"),
                                     StringUtility.escapeHtml(resourceName), url);
-                    hLayout.addMember(viewLink);
-                    return hLayout;
+                    vLayout.addMember(viewLink);
+                    return vLayout;
                 }
             };
             resourceField.setShowHover(true);
@@ -303,10 +301,7 @@ public class AlertDefinitionReportView extends \
Table<AlertDefinitionReportView.D  }
 
         /**
-         * Additional processing to support a cross-resource view)
-         * @param result
-         * @param response
-         * @param request
+         * Additional processing to support a cross-resource view.
          */
         protected void dataRetrieved(final PageList<AlertDefinition> result, final \
DSResponse response,  final DSRequest request) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/ResourceInstallReport.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/ResourceInstallReport.java
 index caf8e8d..d03c62a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/ResourceInstallReport.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/ResourceInstallReport.java
 @@ -18,7 +18,7 @@ import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
-import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
 import org.rhq.core.domain.resource.ResourceCategory;
 import org.rhq.core.domain.resource.composite.ResourceInstallCount;
 import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
@@ -34,7 +34,6 @@ import \
org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;  import \
org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField;  \
import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSearchView;  \
                import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
-import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
 import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
 
 /**
@@ -119,18 +118,18 @@ public class ResourceInstallReport extends LocatableVLayout \
implements Bookmarka  @Override
         protected void configureTable() {
             CanvasField fieldTypeName = new CanvasField(DataSource.Field.TYPENAME, \
                MSG.common_title_resource_type()) {
-                protected Canvas createCanvas(ListGrid grid, ListGridRecord record) \
                {
-                    HLayout hLayout = createHLayout(grid);
+                protected Canvas createCanvas(ListGrid grid, ListGridRecord record, \
Object value) { +                    VLayout vLayout = createVLayout(grid);
                     String typeName = \
record.getAttribute(DataSource.Field.TYPENAME);  String url = \
getResourceTypeTableUrl(record);  if (url != null) {
                         ViewLink viewLink = new \
                ViewLink(extendLocatorId("ViewLink"), typeName, url);
-                        hLayout.addMember(viewLink);
+                        vLayout.addMember(viewLink);
                     } else {
                         HTMLFlow html = new HTMLFlow(typeName);
-                        hLayout.addMember(html);
+                        vLayout.addMember(html);
                     }
-                    return hLayout;
+                    return vLayout;
                 }
             };
             ListGridField fieldPlugin = new \
                ListGridField(DataSource.Field.TYPEPLUGIN, \
                MSG.common_title_plugin());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBDataSource.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBDataSource.java
 index d47b4f0..7794e3a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBDataSource.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBDataSource.java
 @@ -37,6 +37,7 @@ import com.smartgwt.client.data.Record;
 import com.smartgwt.client.widgets.HTMLFlow;
 import com.smartgwt.client.widgets.grid.CellFormatter;
 import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
 
@@ -47,6 +48,8 @@ import org.rhq.core.domain.util.PageControl;
 import org.rhq.core.domain.util.PageList;
 import org.rhq.enterprise.gui.coregui.client.CoreGUI;
 import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.ViewLink;
+import org.rhq.enterprise.gui.coregui.client.components.table.ViewLinkField;
 import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
 import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
 @@ -76,13 +79,12 @@ public class MeasurementOOBDataSource extends \
RPCDataSource<MeasurementOOBCompos  public ArrayList<ListGridField> \
getListGridFields() {  ArrayList<ListGridField> fields = new \
ArrayList<ListGridField>();  
-        ListGridField resourceNameField = new \
                ListGridField(AncestryUtil.RESOURCE_NAME, \
                MSG.common_title_resource());
-        resourceNameField.setCellFormatter(new CellFormatter() {
-            public String format(Object o, ListGridRecord listGridRecord, int i, int \
                i1) {
-                String url = \
LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID));
                
-                return SeleniumUtility.getLocatableHref(url, o.toString(), null);
+        ViewLinkField resourceNameField = new \
ViewLinkField(AncestryUtil.RESOURCE_NAME, MSG.common_title_resource()) { +            \
protected ViewLink getViewLink(ListGrid grid, ListGridRecord record, Object value) { \
+                String url = \
LinkManager.getResourceLink(record.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); +    \
return new ViewLink(value.toString(), url);  }
-        });
+        };
         resourceNameField.setShowHover(true);
         resourceNameField.setHoverCustomizer(new HoverCustomizer() {
 
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/SeleniumUtility.java \
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/SeleniumUtility.java
 index 60291bc..38df4b4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/SeleniumUtility.java
                
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/SeleniumUtility.java
 @@ -75,7 +75,8 @@ public class SeleniumUtility {
     }
 
     /**
-     * A utility for assigning an ID to a gwt uiobject.  For a smartgwt widget use \
{@link setId(BaseWidget)}. +     * A utility for assigning an ID to a gwt uiobject.  \
For a smartgwt widget, use +     * {@link \
                #setID(com.smartgwt.client.widgets.BaseWidget, String)}.
      * Any current ID will be overwritten.  The algorithm is:
      * <pre>
      * If    the unsafeId parameter is non-empty, the ID is set to the unsafeId, \
                with spaces removed.
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css \
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css index aebf32b..628c67c \
                100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
@@ -22,13 +22,19 @@ hr {
     width: 100%;
 }
 
-a, a:link, a:visited, a:hover, .viewLink, .viewLinkHover {
-    color: #4A5D75 !important;
+a, a:link, a:visited, a:hover, .link, .linkHover, .menuBarLink, .menuBarLinkHover {
     font-weight: bold !important;
+}
+
+a, a:link, a:visited, a:hover, .link, .linkHover {
+    color: #4A5D75 !important;
+}
+
+a, a:link, a:visited, .link, .menuBarLink {
     text-decoration: none !important;
 }
 
-a:hover, .viewLinkHover {
+a:hover, .linkHover, .menuBarLinkHover {
     text-decoration: underline !important;
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic