modules/core/domain/src/main/java/org/rhq/core/domain/operation/composite/ResourceOperationLastCompletedComposite.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java | 18 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDetailsView.java | 5 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java | 21 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java | 7 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceOperationNotificationSenderForm.java | 15 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java | 10 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java | 30 -- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java | 8 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java | 5 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/ResourceOperationHistoryDetailsView.java | 9 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/GraphListView.java | 5 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java | 139 +++++----- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableHLayout.java | 5 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableLayout.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/SeleniumUtility.java | 11 18 files changed, 154 insertions(+), 152 deletions(-)
New commits: commit bb15343956a366d077ef1d2707688678b6c7d77f Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Jan 25 17:33:58 2011 -0500
Fix a selenium locator id issue in Dash update
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java index dbe0505..f652874 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java @@ -163,6 +163,10 @@ public class DashboardsView extends LocatableVLayout implements BookmarkableView Canvas[] members = getMembers(); removeMembers(members);
+ if (null != tabSet) { + tabSet.destroy(); + } + this.dashboardsByName = new HashMap<String, Dashboard>(dashboards.size()); for (Dashboard dashboard : dashboards) { this.dashboardsByName.put(dashboard.getName(), dashboard);
commit a27efb2e62c8e579c7cb33756f5f1e8a2172fb03 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Jan 25 17:33:23 2011 -0500
Where we were destroying a Layout's members with explicit code I replaced it with a call to the existing SeleniumUtility.destroyMembers(). This ensures that the member is both removed from the parent layout and destroyed.
There are several remnaining places in the code where we call removeMembers() without any destroy(). This is very possible fine but may also be a spot where we could run into Id conflict.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java index 22417ce..01a5571 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java @@ -55,6 +55,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * A tree view of all known ResourceTypes, which includes summaries of metric schedule and alert definition templates @@ -185,30 +186,21 @@ public class ResourceTypeTreeView extends LocatableVLayout implements Bookmarkab * @param canvasToShow the canvas to show in the parent */ private void switchToCanvas(Layout parentCanvas, Canvas canvasToShow) { - Canvas[] members = getMembers(); - if (members != null) { - for (Canvas c : members) { - parentCanvas.removeMember(c); - } - } + SeleniumUtility.destroyMembers(parentCanvas); + parentCanvas.addMember(canvasToShow); parentCanvas.markForRedraw(); }
private void prepareSubCanvas(Layout parentCanvas, Canvas canvasToShow, boolean showBackButton) { - Canvas[] members = getMembers(); - if (members != null) { - for (Canvas c : members) { - parentCanvas.removeMember(c); - c.destroy(); - } - } + SeleniumUtility.destroyMembers(parentCanvas);
if (showBackButton) { String backLink = LinkManager.getAdminTemplatesLink().substring(1); // strip the # BackButton backButton = new BackButton(extendLocatorId("BackButton"), "Back to List", backLink); parentCanvas.addMember(backButton); } + parentCanvas.addMember(canvasToShow); parentCanvas.markForRedraw(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDetailsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDetailsView.java index 594cbb4..265167a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDetailsView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDetailsView.java @@ -29,7 +29,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.core.DataClass; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.Alignment; -import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.StaticTextItem; @@ -87,9 +86,7 @@ public class AlertDetailsView extends LocatableVLayout implements BookmarkableVi }
private void show(Alert alert) { - for (Canvas child : getMembers()) { - removeChild(child); - } + destroyMembers();
Log.info("AlertDetailsView-Alert: " + alert); ListGridRecord record = AlertDataSource.convert(alert); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceOperationNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceOperationNotificationSenderForm.java index 22f5569..6d2f8f6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceOperationNotificationSenderForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceOperationNotificationSenderForm.java @@ -64,6 +64,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.selection.Single import org.rhq.enterprise.gui.coregui.client.inventory.resource.selection.ResourcePicker.OkHandler; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * This notification form will be used for the Resource Operation sender. This form lets @@ -521,22 +522,12 @@ public class ResourceOperationNotificationSenderForm extends AbstractNotificatio }
private void hideOperationArguments() { - Canvas[] canvii = operationArgumentsCanvasItem.getMembers(); - if (canvii != null) { - for (Canvas canvas : canvii) { - canvas.destroy(); - } - } + SeleniumUtility.destroyMembers(operationArgumentsCanvasItem); markForRedraw(); }
private void showOperationArguments(ConfigurationDefinition def, Configuration config) { - Canvas[] canvii = operationArgumentsCanvasItem.getMembers(); - if (canvii != null) { - for (Canvas canvas : canvii) { - canvas.destroy(); - } - } + SeleniumUtility.destroyMembers(operationArgumentsCanvasItem);
if (def != null) { ConfigurationEditor configEditor = new ConfigurationEditor(extendLocatorId("opArgs"), def, config); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java index b66a340..2aab6e2 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java @@ -40,6 +40,7 @@ import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; import org.rhq.enterprise.gui.coregui.client.content.repository.tree.ContentRepositoryTreeView; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * This is the main bundle view with left hand side trees and right hand side list/details view. @@ -136,9 +137,8 @@ public class BundleTopView extends LocatableHLayout implements BookmarkableView }
private void setContent(Canvas newContent) { - for (Canvas c : contentCanvas.getMembers()) { - c.destroy(); - } + SeleniumUtility.destroyMembers(contentCanvas); + contentCanvas.addMember(newContent); contentCanvas.markForRedraw(); } 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 cd25235..682b3d8 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 @@ -293,9 +293,7 @@ public abstract class TableSection<DS extends RPCDataSource> extends Table<DS> i * therefore, we need to explicitly destroy what's already there (presumably the detailsView * in create-mode), and then rebuild it (presumably the detailsView in edit-mode). */ - for (Canvas child : detailsHolder.getMembers()) { - child.destroy(); - } + SeleniumUtility.destroyMembers(detailsHolder);
buildDetailsView(); } @@ -335,9 +333,7 @@ public abstract class TableSection<DS extends RPCDataSource> extends Table<DS> i detailsHolder.animateHide(AnimationEffect.WIPE, new AnimationCallback() { @Override public void execute(boolean b) { - for (Canvas child : detailsHolder.getMembers()) { - child.destroy(); - } + SeleniumUtility.destroyMembers(detailsHolder);
contents.animateShow(AnimationEffect.WIPE); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java index a964f0f..522c9cd 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java @@ -30,7 +30,6 @@ import java.util.Set; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.TextMatchStyle; -import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HTMLFlow; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.events.ClickEvent; @@ -110,9 +109,7 @@ public class TagEditorView extends LocatableLayout { }
private void setup() { - for (Canvas child : getMembers()) { - child.destroy(); - } + destroyMembers();
Layout layout = vertical ? new LocatableVLayout(getLocatorId()) : new LocatableHLayout(getLocatorId()); if (!vertical) diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/ResourceOperationHistoryDetailsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/ResourceOperationHistoryDetailsView.java index b3e869a..9d5c382 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/ResourceOperationHistoryDetailsView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/ResourceOperationHistoryDetailsView.java @@ -74,9 +74,7 @@ public class ResourceOperationHistoryDetailsView extends LocatableVLayout implem protected void onDraw() { super.onDraw();
- for (Canvas child : getMembers()) { - child.destroy(); - } + destroyMembers();
if (this.operationHistory != null) { displayDetails(operationHistory); @@ -139,7 +137,8 @@ public class ResourceOperationHistoryDetailsView extends LocatableVLayout implem errorLinkItem.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - final Window winModal = new LocatableWindow(ResourceOperationHistoryDetailsView.this.extendLocatorId("errorWin")); + final Window winModal = new LocatableWindow(ResourceOperationHistoryDetailsView.this + .extendLocatorId("errorWin")); winModal.setTitle(MSG.common_title_details()); winModal.setOverflow(Overflow.VISIBLE); winModal.setShowMinimizeButton(false); @@ -260,5 +259,5 @@ public class ResourceOperationHistoryDetailsView extends LocatableVLayout implem } return errMsg; } - + } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/GraphListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/GraphListView.java index becbd02..6f27e8f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/GraphListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/GraphListView.java @@ -26,7 +26,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label;
import org.rhq.core.domain.measurement.DataType; @@ -62,9 +61,7 @@ public class GraphListView extends LocatableVLayout implements ResourceSelectLis protected void onDraw() { super.onDraw();
- for (Canvas c : getMembers()) { - c.destroy(); - } + destroyMembers();
addMember(new AvailabilityBarView(resource));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableHLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableHLayout.java index 8fb1e41..5064527 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableHLayout.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableHLayout.java @@ -46,4 +46,9 @@ public class LocatableHLayout extends HLayout implements Locatable { public String extendLocatorId(String extension) { return this.locatorId + "_" + extension; } + + public void destroyMembers() { + SeleniumUtility.destroyMembers(this); + } + } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableLayout.java index 7a2e99b..17c1f9c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableLayout.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/selenium/LocatableLayout.java @@ -31,4 +31,8 @@ public class LocatableLayout extends Layout implements Locatable { return this.locatorId + "_" + extension; }
+ public void destroyMembers() { + SeleniumUtility.destroyMembers(this); + } + } 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 160cf18..43893a6 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 @@ -156,7 +156,16 @@ public class SeleniumUtility { * @param layout */ static public <T extends Layout> void destroyMembers(T layout) { - for (Canvas currentMember : layout.getMembers()) { + if (null == layout) { + return; + } + + Canvas[] members = layout.getMembers(); + if (null == members) { + return; + } + + for (Canvas currentMember : members) { layout.removeMember(currentMember); currentMember.destroy(); }
commit 8ffdb1319a0a610e1222eb6b453b95a8d6965643 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Jan 25 17:17:56 2011 -0500
Selenium Locator Work - Activity2 subtab
This class suffered from two main issues with its locator impl. 1) You don't need locators on "inaccessible" widgets. Often H/V/Layouts are used purely for formatting and are not really part of any widget parent-child identification scheme. In this case just use non-Locatable widgets to keep things as simple as possible. I made these conversions in a few places.
2) You can't use static locatorIds on multiple widgets. Basically, avoid re-using the same locatorId for widgets created inside of a loop. There were a few places like this where result rows are being looped through. Note that not all data is conducive to unique identifiers. In several places the best that we can do is to use unique rowNums in the locators.
In general tried to shorten up he locator id strings as possible. They need to be unique and descriptive, but as short as needed is good.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java index 9930108..442dfce 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ActivityView2.java @@ -36,6 +36,8 @@ import com.smartgwt.client.widgets.form.fields.CanvasItem; import com.smartgwt.client.widgets.form.fields.FormItemIcon; import com.smartgwt.client.widgets.form.fields.LinkItem; import com.smartgwt.client.widgets.form.fields.StaticTextItem; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.alert.Alert; import org.rhq.core.domain.configuration.ResourceConfigurationUpdate; @@ -59,11 +61,9 @@ import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecor import org.rhq.enterprise.gui.coregui.client.util.GwtRelativeDurationConverter; import org.rhq.enterprise.gui.coregui.client.util.GwtTuple; import org.rhq.enterprise.gui.coregui.client.util.measurement.GwtMonitorUtils; -import org.rhq.enterprise.gui.coregui.client.util.selenium.Locatable; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout; -import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/** * The content pane of the Resource Summary>Activity tab. @@ -73,19 +73,15 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; public class ActivityView2 extends LocatableHLayout implements RefreshableView {
//Locatable ui references - private LocatableVLayout leftPane = new LocatableVLayout(extendLocatorId("Left"));; - private LocatableVLayout rightPane = new LocatableVLayout(extendLocatorId("Right"));; - private LocatableCanvas recentMeasurementsContent = new LocatableCanvas(leftPane - .extendLocatorId("RecentMetricsContent")); - private LocatableCanvas recentAlertsContent = new LocatableCanvas(leftPane.extendLocatorId("RecentAlertsContent")); - private LocatableCanvas recentOobContent = new LocatableCanvas(leftPane.extendLocatorId("RecentOobsContent")); - private LocatableCanvas recentConfigurationContent = new LocatableCanvas(rightPane - .extendLocatorId("RecentConfigContent")); - private LocatableCanvas recentOperationsContent = new LocatableCanvas(rightPane - .extendLocatorId("RecentOperationsContent")); - private LocatableCanvas recentEventsContent = new LocatableCanvas(rightPane.extendLocatorId("RecentEventsContent")); - private LocatableCanvas recentPkgHistoryContent = new LocatableCanvas(rightPane - .extendLocatorId("RecentPkgHistoryContent")); + private VLayout leftPane = new VLayout();; + private VLayout rightPane = new VLayout();; + private LocatableCanvas recentMeasurementsContent = new LocatableCanvas(extendLocatorId("RecentMetrics")); + private LocatableCanvas recentAlertsContent = new LocatableCanvas(extendLocatorId("RecentAlerts")); + private LocatableCanvas recentOobContent = new LocatableCanvas(extendLocatorId("RecentOobs")); + private LocatableCanvas recentConfigurationContent = new LocatableCanvas(extendLocatorId("RecentConfig")); + private LocatableCanvas recentOperationsContent = new LocatableCanvas(extendLocatorId("RecentOperations")); + private LocatableCanvas recentEventsContent = new LocatableCanvas(extendLocatorId("RecentEvents")); + private LocatableCanvas recentPkgHistoryContent = new LocatableCanvas(extendLocatorId("RecentPkgHistory"));
//retrieve localized text private String RECENT_MEASUREMENTS = MSG.common_title_recent_measurements(); @@ -137,22 +133,19 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { leftPane.setAutoHeight();
//recentMetrics.xhtml - LocatableHLayout recentMetricsTitle = new TitleWithIcon(leftPane, "RecentMetrics", - "subsystems/monitor/Monitor_24.png", RECENT_MEASUREMENTS); + HLayout recentMetricsTitle = new TitleWithIcon("subsystems/monitor/Monitor_24.png", RECENT_MEASUREMENTS); leftPane.addMember(recentMetricsTitle); leftPane.addMember(recentMeasurementsContent); recentMeasurementsContent.setHeight(20); leftPane.addMember(divider1); //recentAlerts.xhtml - LocatableHLayout recentAlertsTitle = new TitleWithIcon(leftPane, "RecentAlerts", - "subsystems/alert/Flag_blue_24.png", RECENT_ALERTS); + HLayout recentAlertsTitle = new TitleWithIcon("subsystems/alert/Flag_blue_24.png", RECENT_ALERTS); leftPane.addMember(recentAlertsTitle); leftPane.addMember(recentAlertsContent); recentAlertsContent.setHeight(20); leftPane.addMember(divider2); //recentOOBs.xhtml - LocatableHLayout recentOobsTitle = new TitleWithIcon(leftPane, "RecentOobs", - "subsystems/monitor/Monitor_failed_24.png", RECENT_OOB); + HLayout recentOobsTitle = new TitleWithIcon("subsystems/monitor/Monitor_failed_24.png", RECENT_OOB); leftPane.addMember(recentOobsTitle); leftPane.addMember(recentOobContent); recentOobContent.setHeight(20); @@ -163,29 +156,26 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { rightPane.setMembersMargin(5); rightPane.setAutoHeight(); //recentConfigUpdates.xhtml - LocatableHLayout recentConfigUpdatesTitle = new TitleWithIcon(leftPane, "RecentConfigUpdates", - "subsystems/configure/Configure_24.png", RECENT_CONFIGURATIONS); + HLayout recentConfigUpdatesTitle = new TitleWithIcon("subsystems/configure/Configure_24.png", + RECENT_CONFIGURATIONS); rightPane.addMember(recentConfigUpdatesTitle); rightPane.addMember(recentConfigurationContent); recentConfigurationContent.setHeight(20); rightPane.addMember(divider3); //recentOperations.xhtml - LocatableHLayout recentOperationsTitle = new TitleWithIcon(leftPane, "RecentOperations", - "subsystems/control/Operation_24.png", RECENT_OPERATIONS); + HLayout recentOperationsTitle = new TitleWithIcon("subsystems/control/Operation_24.png", RECENT_OPERATIONS); rightPane.addMember(recentOperationsTitle); rightPane.addMember(recentOperationsContent); recentOperationsContent.setHeight(20); rightPane.addMember(divider4); //recentEventCounts.xhtml - LocatableHLayout recentEventsTitle = new TitleWithIcon(leftPane, "RecentEvent", - "subsystems/event/Events_24.png", RECENT_EVENTS); + HLayout recentEventsTitle = new TitleWithIcon("subsystems/event/Events_24.png", RECENT_EVENTS); rightPane.addMember(recentEventsTitle); rightPane.addMember(recentEventsContent); recentEventsContent.setHeight(20); rightPane.addMember(divider5); //recentPackageHistory.xhtml - LocatableHLayout recentPkgHistoryTitle = new TitleWithIcon(leftPane, "RecentPkgHistory", - "subsystems/content/Content_24.png", RECENT_PKG_HISTORY); + HLayout recentPkgHistoryTitle = new TitleWithIcon("subsystems/content/Content_24.png", RECENT_PKG_HISTORY); rightPane.addMember(recentPkgHistoryTitle); rightPane.addMember(recentPkgHistoryContent); recentPkgHistoryContent.setHeight(20); @@ -225,14 +215,10 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView {
/**Creates the section top titles with icon for regions of Activity page. */ - class TitleWithIcon extends LocatableHLayout { + class TitleWithIcon extends HLayout {
- public TitleWithIcon(String locatorId) { - super(locatorId); - } - - public TitleWithIcon(Locatable parentContainer, String locatorIdentifier, String imageUrl, String title) { - super(parentContainer.extendLocatorId(locatorIdentifier)); + public TitleWithIcon(String imageUrl, String title) { + super(); Img titleImage = new Img(imageUrl, 24, 24); HTMLFlow titleElement = new HTMLFlow(); titleElement.setWidth("*"); @@ -258,11 +244,15 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { GWTServiceLookup.getAlertService().findAlertsByCriteria(criteria, new AsyncCallback<PageList<Alert>>() { @Override public void onSuccess(PageList<Alert> result) { - LocatableVLayout column = new LocatableVLayout(recentAlertsContent.extendLocatorId("Content")); + VLayout column = new VLayout(); column.setHeight(10); if (!result.isEmpty()) { + int rowNum = 0; for (Alert alert : result) { - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + // alert history records do not have a usable locatorId, we'll use rownum, which is unique and + // may be repeatable. + LocatableDynamicForm row = new LocatableDynamicForm(recentAlertsContent.extendLocatorId(String + .valueOf(rowNum++))); row.setNumCols(3);
StaticTextItem iconItem = newTextItemIcon(ImageManager.getAlertIcon(alert.getAlertDefinition() @@ -275,7 +265,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { column.addMember(row); } } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_ALERTS_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentAlertsContent.extendLocatorId("None"), + RECENT_ALERTS_NONE); column.addMember(row); } for (Canvas child : recentAlertsContent.getChildren()) { @@ -311,11 +302,15 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView {
@Override public void onSuccess(List<DisambiguationReport<ResourceOperationLastCompletedComposite>> result) { - LocatableVLayout column = new LocatableVLayout(recentOperationsContent.extendLocatorId("Content")); + VLayout column = new VLayout(); column.setHeight(10); if (!result.isEmpty()) { + int rowNum = 0; for (DisambiguationReport<ResourceOperationLastCompletedComposite> report : result) { - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + // operation history records do not have a usable locatorId, we'll use rownum, which is unique and + // may be repeatable. + LocatableDynamicForm row = new LocatableDynamicForm(recentOperationsContent + .extendLocatorId(String.valueOf(rowNum))); row.setNumCols(3);
StaticTextItem iconItem = newTextItemIcon(ImageManager.getOperationResultsIcon(report @@ -331,7 +326,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { column.addMember(row); } } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_OPERATIONS_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentOperationsContent + .extendLocatorId("None"), RECENT_OPERATIONS_NONE); column.addMember(row); } for (Canvas child : recentOperationsContent.getChildren()) { @@ -363,12 +359,15 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView {
@Override public void onSuccess(PageList<ResourceConfigurationUpdate> result) { - LocatableVLayout column = new LocatableVLayout(recentConfigurationContent - .extendLocatorId("Content")); + VLayout column = new VLayout(); column.setHeight(10); if (!result.isEmpty()) { + int rowNum = 0; for (ResourceConfigurationUpdate update : result) { - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + // config update history records do not have a usable locatorId, we'll use rownum, which is unique and + // may be repeatable. + LocatableDynamicForm row = new LocatableDynamicForm(recentConfigurationContent + .extendLocatorId(String.valueOf(rowNum))); row.setNumCols(3);
StaticTextItem iconItem = newTextItemIcon(ImageManager.getResourceConfigurationIcon(update @@ -387,7 +386,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { column.addMember(row); } } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_CONFIGURATIONS_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentConfigurationContent + .extendLocatorId("None"), RECENT_CONFIGURATIONS_NONE); column.addMember(row); } //cleanup @@ -429,12 +429,16 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { } } //build display - LocatableVLayout column = new LocatableVLayout(recentEventsContent.extendLocatorId("Content")); + VLayout column = new VLayout(); column.setHeight(10);
if (!results.isEmpty()) { + int rowNum = 0; for (GwtTuple<EventSeverity, Integer> tuple : results) { - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + // event history records do not have a usable locatorId, we'll use rownum, which is unique and + // may be repeatable. + LocatableDynamicForm row = new LocatableDynamicForm(recentEventsContent + .extendLocatorId(String.valueOf(rowNum))); row.setNumCols(2); row.setWidth(10);//pack.
@@ -448,7 +452,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { column.addMember(row); } } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_EVENTS_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentEventsContent.extendLocatorId("None"), + RECENT_EVENTS_NONE); column.addMember(row); } //cleanup @@ -476,11 +481,12 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView {
@Override public void onSuccess(PageList<MeasurementOOBComposite> result) { - LocatableVLayout column = new LocatableVLayout(recentAlertsContent.extendLocatorId("Content")); + VLayout column = new VLayout(); column.setHeight(10); if (!result.isEmpty()) { for (MeasurementOOBComposite oob : result) { - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + LocatableDynamicForm row = new LocatableDynamicForm(recentOobContent.extendLocatorId(oob + .getScheduleName())); row.setNumCols(2);
String title = oob.getScheduleName() + ":"; @@ -493,7 +499,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { column.addMember(row); } } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_OOB_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentOobContent.extendLocatorId("None"), + RECENT_OOB_NONE); column.addMember(row); } recentOobContent.setContents(""); @@ -525,11 +532,13 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView {
@Override public void onSuccess(PageList<InstalledPackageHistory> result) { - LocatableVLayout column = new LocatableVLayout(recentPkgHistoryContent.extendLocatorId("Content")); + VLayout column = new VLayout(); column.setHeight(10); if (!result.isEmpty()) { for (InstalledPackageHistory history : result) { - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + LocatableDynamicForm row = new LocatableDynamicForm(recentPkgHistoryContent + .extendLocatorId(history.getPackageVersion().getFileName() + + history.getPackageVersion().getVersion())); row.setNumCols(3);
StaticTextItem iconItem = newTextItemIcon("subsystems/content/Content_16.png", null); @@ -544,7 +553,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { column.addMember(row); } } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_PKG_HISTORY_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentPkgHistoryContent + .extendLocatorId("None"), RECENT_PKG_HISTORY_NONE); column.addMember(row); } //cleanup @@ -563,7 +573,7 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { */ private void getRecentMetrics() { //display container - final LocatableVLayout column = new LocatableVLayout(recentMeasurementsContent.extendLocatorId("Content")); + final VLayout column = new VLayout(); column.setHeight(10);//pack final int resourceId = this.resourceComposite.getResource().getId();
@@ -635,7 +645,8 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { commaDelimitedList += d.getValue() + ","; } } - LocatableDynamicForm row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); + LocatableDynamicForm row = new LocatableDynamicForm(recentMeasurementsContent + .extendLocatorId(md.getName())); row.setNumCols(3); HTMLFlow graph = new HTMLFlow(); // String contents = "<span id='sparkline_" + index + "' class='dynamicsparkline' width='0'>" @@ -673,13 +684,15 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { } } if (!someChartedData) {// when there are results but no chartable entries. - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_MEASUREMENTS_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentMeasurementsContent + .extendLocatorId("None"), RECENT_MEASUREMENTS_NONE); column.addMember(row); } //call out to 3rd party javascript lib graphSparkLines(); } else { - LocatableDynamicForm row = createEmptyDisplayRow(column, RECENT_MEASUREMENTS_NONE); + LocatableDynamicForm row = createEmptyDisplayRow(recentMeasurementsContent + .extendLocatorId("None"), RECENT_MEASUREMENTS_NONE); column.addMember(row); } } @@ -725,13 +738,9 @@ public class ActivityView2 extends LocatableHLayout implements RefreshableView { * @param emptyMessage Contents of the empty region * @return */ - private LocatableDynamicForm createEmptyDisplayRow(Locatable column, String emptyMessage) { + private LocatableDynamicForm createEmptyDisplayRow(String locatorId, String emptyMessage) { LocatableDynamicForm row = null; - if (column != null) { - row = new LocatableDynamicForm(column.extendLocatorId("ContentForm")); - } else { - row = new LocatableDynamicForm(extendLocatorId("ContentForm")); - } + row = new LocatableDynamicForm(locatorId);
row.setNumCols(3); StaticTextItem none = new StaticTextItem();
commit 9208c64bbd017abca809113633547dbb18fdea85 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Jan 25 17:09:32 2011 -0500
Selenium Locator Work - Fix a problem in AbstractSelector.onDestroy(). We have to be careful of destroying things manually that are also destroyed automatically by SmartGwt. In general, destroying a parent will destroy it's children automatically. For example, destroying a SectionStack as a whole, destroying a Layout, Window, etc.
We are still usually on the hook for member canvas's.
Calling destroy() on a widget that has already been destroyed will force an unwanted reinitialization (onInit) of the widget (just so it can be properly destroyed immediately following). This behavior isn't great in smartgwt, I wonder if they could change this...
This instance of the issue was in the Alert Notification Sender definition call chain. I'm sure it would have cropped up in other places as well.
Also, in general we don't use markForDestroy() but rather destroy() for immediate removal from the DOM. This protectes against selenium ID conflict.
- there is still one onInit() reinvocation I'm not able to explain. I protected against it.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/composite/ResourceOperationLastCompletedComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/composite/ResourceOperationLastCompletedComposite.java index 0b8bfbd..7d2ae83 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/composite/ResourceOperationLastCompletedComposite.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/composite/ResourceOperationLastCompletedComposite.java @@ -35,8 +35,8 @@ public class ResourceOperationLastCompletedComposite extends OperationLastComple //no args constructor. Not to be used. java bean/serialization requirement private ResourceOperationLastCompletedComposite() { super(); - this.resourceTypeName = "(unitialized type)"; - this.resourceName = "(unitialized)"; + this.resourceTypeName = "(uninitialized type)"; + this.resourceName = "(uninitialized)"; this.resourceId = 0; }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java index c36e7c2..bcea118 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java @@ -29,7 +29,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Alignment; -import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.fields.ButtonItem; import com.smartgwt.client.widgets.form.fields.CanvasItem; import com.smartgwt.client.widgets.form.fields.FormItem; @@ -39,6 +38,7 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler; +import com.smartgwt.client.widgets.layout.Layout;
import org.rhq.core.domain.alert.AlertDefinition; import org.rhq.core.domain.alert.notification.AlertNotification; @@ -47,6 +47,7 @@ import org.rhq.core.domain.resource.ResourceType; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * @author John Mazzitelli @@ -60,9 +61,10 @@ public class NewNotificationEditor extends LocatableDynamicForm {
private SelectItem notificationSenderSelectItem; private CanvasItem senderCanvasItem; + private boolean senderCanvasInitialized = false;
- public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition, - List<AlertNotification> notifs, AlertNotification notifToEdit, Runnable closeFunc) { + public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition, List<AlertNotification> notifs, + AlertNotification notifToEdit, Runnable closeFunc) {
super(locatorId); this.alertDefinition = alertDefinition; @@ -114,6 +116,7 @@ public class NewNotificationEditor extends LocatableDynamicForm { notificationSenderSelectItem.setValueMap(senders); notificationSenderSelectItem.setDisabled(false); notificationSenderSelectItem.redraw(); + switchToAlertSender(result[0]); senderCanvasItem.show(); } else { @@ -203,11 +206,15 @@ public class NewNotificationEditor extends LocatableDynamicForm { }
private void switchToAlertSender(String newAlertSender) { - Canvas oldCanvas = senderCanvasItem.getCanvas(); - if (oldCanvas != null) { - oldCanvas.markForDestroy(); - } AbstractNotificationSenderForm newCanvas = createNotificationSenderForm(newAlertSender); + // wipe existing DOM to avoid id conflicts. Use this flag to avoid having getCanvas() general a default + // Canvas on the first "switch". + if (senderCanvasInitialized) { + Layout senderLayout = (Layout) senderCanvasItem.getCanvas(); + SeleniumUtility.destroyMembers(senderLayout); + senderLayout.destroy(); + } + senderCanvasInitialized = true; senderCanvasItem.setCanvas(newCanvas); markForRedraw(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java index d63159b..970fb66 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java @@ -258,8 +258,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement ListGrid listGrid = (ListGrid) event.getSource(); ListGridRecord[] selectedRows = listGrid.getSelection(); if (selectedRows != null && selectedRows.length == 1) { - AlertNotification notif = (getDataSource()) - .copyValues(selectedRows[0]); + AlertNotification notif = (getDataSource()).copyValues(selectedRows[0]); popupNotificationEditor(notif); } } @@ -306,7 +305,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement winModal.addCloseClickHandler(new CloseClickHandler() { @Override public void onCloseClick(CloseClientEvent event) { - winModal.markForDestroy(); + winModal.destroy(); } });
@@ -314,7 +313,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement alertDefinition, notifications, notifToEdit, new Runnable() { @Override public void run() { - winModal.markForDestroy(); + winModal.destroy(); table.refresh(); } }); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java index 726bdc5..7e45d52 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java @@ -56,12 +56,22 @@ public class SystemUsersNotificationSenderForm extends AbstractNotificationSende
private SubjectSelector selector;
+ private boolean isInitialized = false; + public SystemUsersNotificationSenderForm(String locatorId, AlertNotification notif, String sender) { super(locatorId, notif, sender); }
@Override protected void onInit() { + // for reasons I'm not sure about, perhaps due to the way NewNotificationEditor destroys its own parent + // via callback, this onInit may be called a second time, during the destroy() call chain. Prevent + // it from re-executing. + if (isInitialized) { + return; + } + isInitialized = true; + super.onInit();
String subjectIds = getConfiguration().getSimpleValue(PROPNAME, ""); // we know the subject plugin defines this diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java index e23c0f1..062a47f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java @@ -65,6 +65,7 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTransferImgButton; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * @author Greg Hinkle @@ -202,6 +203,11 @@ public abstract class AbstractSelector<T> extends LocatableVLayout { addMember(this.hlayout); }
+ @Override + protected void onDestroy() { + SeleniumUtility.destroyMembers(hlayout); + } + private SectionStack buildAvailableItemsStack() { SectionStack availableSectionStack = new SectionStack(); availableSectionStack.setWidth(300); @@ -265,7 +271,7 @@ public abstract class AbstractSelector<T> extends LocatableVLayout { }
// Add event handlers. - + this.availableGrid.addSelectionChangedHandler(new SelectionChangedHandler() { public void onSelectionChanged(SelectionEvent selectionEvent) { updateButtonEnablement(); @@ -311,7 +317,7 @@ public abstract class AbstractSelector<T> extends LocatableVLayout { } } else { availableRecords.addAll(Arrays.asList(allRecords)); - } + } availableGrid.setData(availableRecords.toArray(new Record[availableRecords.size()])); } finally { updateButtonEnablement(); @@ -507,26 +513,6 @@ public abstract class AbstractSelector<T> extends LocatableVLayout { return MSG.view_selector_assigned(itemTitle); }
- @Override - protected void onDestroy() { - super.onDestroy(); - - assignedGrid.destroy(); - - if (!isReadOnly) { - if (availableFilterForm != null) { - availableFilterForm.destroy(); - } - - availableGrid.destroy(); - - addButton.destroy(); - removeButton.destroy(); - addAllButton.destroy(); - removeAllButton.destroy(); - } - } - protected void updateButtonEnablement() { if (!isReadOnly) { addButton.setDisabled(!availableGrid.anySelected());
rhq-commits@lists.fedorahosted.org