modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java | 34 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java | 193 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java | 148 +++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java | 191 ++++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java | 23
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java | 67 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml | 1
modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml | 8
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/PingAgentUIBean.java | 3
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/navigation/resource/ResourceTreeModelUIBean.java | 58 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java | 35 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java | 9
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerLocal.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java | 40 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java | 15
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java | 84 +--
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java | 18
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/support/SupportManagerBean.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/performance/test/AvailabilityInsertPurgeTest.java | 246 ++++------
29 files changed, 839 insertions(+), 392 deletions(-)
New commits:
commit 53e4e07f5a2449e632bf22d35f9af9cd2ee56fb0
Merge: 44d5d22... b015b89...
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Nov 19 13:36:53 2010 -0500
Merge branch 'master' of ssh://spinder@git.fedorahosted.org/git/rhq/rhq into track-master
commit 44d5d22cb1aac81123b10ccff25ff8a86f7b3e53
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Nov 19 13:35:57 2010 -0500
refresh and i18n fix.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
index cc93832..37ba5f3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
@@ -284,6 +284,8 @@ public class ResourceTitleBar extends LocatableVLayout {
//order the components
addMember(top);
addMember(details);
+ top.markForRedraw();
+ details.markForRedraw();
}
private void loadTags(final TagEditorView tagEditorView) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
index 3f45d55..f398136 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
@@ -74,7 +74,7 @@ public class OverviewView extends LocatableVLayout {
setWidth("80%");
final List<FormItem> formItems = new ArrayList<FormItem>();
HeaderItem headerItem = new HeaderItem("header", MSG.view_inventory_summary_agent_title());
- headerItem.setValue("Agent Managing this Resource");
+ headerItem.setValue(MSG.view_inventory_summary_agent_title());
formItems.add(headerItem);
//populate remaining details
GWTServiceLookup.getAgentService().getAgentForResource(id, new AsyncCallback<Agent>() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
index 6b6c703..1bbeccf 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
@@ -109,7 +109,7 @@ public class SearchBarPane extends LocatableHLayout {
ComboBoxItem resourceSearch = getResourceComboBox();
ComboBoxItem groupSearch = getGroupComboBox();
- ButtonItem search = new ButtonItem("Search", MSG.common_button_search());
+ ButtonItem search = new ButtonItem("Search", MSG.common_title_search());
search.setStartRow(false);
search.setEndRow(false);
search.setShowTitle(false);
commit 3ca57ee53471e5aee41b60e46c22702ba38b5549
Merge: 943d060... bcfc55f...
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Nov 19 12:06:57 2010 -0500
Merge branch 'master' of ssh://spinder@git.fedorahosted.org/git/rhq/rhq into track-master
Conflicts:
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
index 3372b61,4402029..52a7f7d
--- 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
@@@ -184,22 -180,10 +183,24 @@@ public class ResourceSearchView extend
}
}
});*/
+
+
}
+ // /** Defines the double click handler action for ResourceSearch. This means that on double
+ // * click a (Resource-relative) url, specifically Summary/Overview is what will happen
+ // * with this action. Override in subclasses to define alternate behavior.
+ // */
+ // protected void configureDoubleClickHandler() {
+ // //adding cell double click handler
+ // getListGrid().addCellDoubleClickHandler(new CellDoubleClickHandler() {
+ // @Override
+ // public void onCellDoubleClick(CellDoubleClickEvent event) {
+ // CoreGUI.goToView("Resource/" + event.getRecord().getAttribute("id") + "/Summary/Overview");
+ // }
+ // });
+ // }
+
public int getMatches() {
return this.getListGrid().getTotalRows();
}
commit 943d06059cb871e137e78e71965ea8a172f4eaae
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Nov 19 11:59:56 2010 -0500
Numerous fixes:
i)added pingAgentForResource to agentManagerBean
ii)i18n of new titles/strings
iii)descriptive link for Resource/plugin errors.
iv)moved ResourceErrors table from Inv/Summary to element in Resource title
v)added missing agentDetails to Summary/View
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
index fd08d80..7b55598 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
@@ -29,4 +29,6 @@ public interface AgentGWTService extends RemoteService {
Agent getAgentForResource(int resourceId);
+ Boolean pingAgentForResource(int resourceId);
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
index cfae5a7..cc93832 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
@@ -20,15 +20,20 @@ package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail;
import java.util.HashSet;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.Img;
+import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.events.CloseClientEvent;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.LinkItem;
@@ -40,6 +45,7 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceError;
import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.tagging.Tag;
import org.rhq.core.domain.util.PageList;
@@ -49,6 +55,8 @@ import org.rhq.enterprise.gui.coregui.client.components.tagging.TagEditorView;
import org.rhq.enterprise.gui.coregui.client.components.tagging.TagsChangedCallback;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.OverviewForm;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.ResourceErrorsDataSource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.ResourceErrorsView;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
@@ -65,6 +73,7 @@ public class ResourceTitleBar extends LocatableVLayout {
private LocatableHLayout top;
//represents normally closed region of Resource details[to verbosely describe resource across all tabs]
private LocatableHLayout details;
+ private static String COMPONENT_ERROR_COUNT_MSG = MSG.common_title_component_errors();
private static final String FAV_ICON = "Favorite_24_Selected.png";
private static final String NOT_FAV_ICON = "Favorite_24.png";
@@ -128,7 +137,8 @@ public class ResourceTitleBar extends LocatableVLayout {
GWTServiceLookup.getTagService().updateResourceTags(resource.getId(), tags,
new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to update resource tags", caught);
+ CoreGUI.getErrorHandler()
+ .handleError(MSG.view_resource_title_tagUpdateFailed(), caught);
}
public void onSuccess(Void result) {
@@ -144,33 +154,93 @@ public class ResourceTitleBar extends LocatableVLayout {
loadTags(tagEditorView);
+ //creating link to put in resource title bar
pluginErrors = new LinkItem("plugin-errors");
pluginErrors.setTitle("");
- pluginErrors.setLinkTitle("Component errors (0)");
- pluginErrors.setPrompt("Managed component errors exist. Click for details");
- // pluginErrors.addClickHandler(new ClickHandler() {
- // public void onClick(ClickEvent event) {
- // SC.say("Hello World");
- // }
- // });
+ pluginErrors.setLinkTitle(COMPONENT_ERROR_COUNT_MSG + " (0)");
+ GWTServiceLookup.getResourceService().findResourceErrors(resourceComposite.getResource().getId(),
+ new AsyncCallback<List<ResourceError>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.dataSource_resourceErrors_error_fetchFailure(String.valueOf(resourceComposite.getResource()
+ .getId())), caught);
+ }
+
+ public void onSuccess(List<ResourceError> result) {
+ if (result.isEmpty()) {
+ pluginErrors.setLinkTitle(COMPONENT_ERROR_COUNT_MSG + " (" + result.size() + ")");
+ } else {
+ pluginErrors.setLinkTitle("<font color='red'>" + COMPONENT_ERROR_COUNT_MSG + " ("
+ + result.size() + ")</font>");
+ }
+ markForRedraw();
+ }
+ });
+
+ //define tool tip
+ pluginErrors.setPrompt(MSG.view_resource_title_component_errors_tooltip());
+
+ //define click action to pop open detailed view of Component plugin errors
+ pluginErrors.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
+ @Override
+ public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {
+ final Window winModal = new Window();
+ winModal.setWidth("70%");
+ winModal.setHeight("70%");
+ winModal.setTitle(MSG.common_title_component_errors() + ":");
+ winModal.setShowMinimizeButton(false);
+ winModal.setIsModal(true);
+ winModal.setShowModalMask(true);
+ winModal.setShowCloseButton(true);
+ winModal.centerInPage();
+ winModal.addCloseClickHandler(new CloseClickHandler() {
+ @Override
+ public void onCloseClick(CloseClientEvent event) {
+ winModal.destroy();
+ }
+ });
+
+ LocatableVLayout form = new LocatableVLayout(extendLocatorId("_Modal_Form"));
+ form.setAlign(VerticalAlignment.CENTER);
+ form.setLayoutMargin(20);
+ form.setWidth100();
+ form.setHeight("40%");
+ ResourceErrorsView errorsGrid = new ResourceErrorsView(extendLocatorId("errors"), MSG
+ .view_summaryOverview_header_detectedErrors(), null, null,
+ new String[] { ResourceErrorsDataSource.Field.DETAIL });
+ errorsGrid.setWidth100();
+ errorsGrid.setHeight("400");
+
+ Resource resource = resourceComposite.getResource();
+ ResourceErrorsDataSource errors = new ResourceErrorsDataSource(resource.getId());
+
+ errorsGrid.setShowFooter(false);
+ errorsGrid.setDataSource(errors);
+ form.addMember(errorsGrid);
+ winModal.addChild(form);
+
+ winModal.show();
+ }
+ });
//top information
top.addMember(badge);
top.addMember(title);
top.addMember(tagEditorView);
- DynamicForm wrap = new DynamicForm();
- wrap.setFields(pluginErrors);
- top.addMember(wrap);
+ DynamicForm wrappedPluginErrors = new DynamicForm();
+ wrappedPluginErrors.setFields(pluginErrors);
+ top.addMember(wrappedPluginErrors);
top.addMember(availabilityImage);
top.addMember(favoriteButton);
//detail information
//checkbox
final CheckboxItem displayMore = new CheckboxItem();
- final String moreDetails = "Show more...";
+ final String moreDetails = MSG.common_title_show_more();
displayMore.setName("resourceDetails");
displayMore.setTitle(moreDetails);
displayMore.setWidth(120);
+ //conditionally expand more details section.
displayMore.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
Boolean displayMoreDetails = (Boolean) event.getValue();
@@ -183,6 +253,7 @@ public class ResourceTitleBar extends LocatableVLayout {
}
});
+ //wrap checkbox for inclusion in details form.
LocatableDynamicForm wrappedCheckbox = new LocatableDynamicForm(extendLocatorId("Title_Bar_Checkbox"));
wrappedCheckbox.setFields(displayMore);
detailsForm = new LocatableHLayout(extendLocatorId("_Resource_Details"));
@@ -190,16 +261,19 @@ public class ResourceTitleBar extends LocatableVLayout {
detailsForm.setHeight(10);
detailsForm.setAlign(Alignment.LEFT);
detailsForm.addMember(wrappedCheckbox);
+
detailsFormSummary = new OverviewForm(extendLocatorId("Title_Optional_Summary"), resourceComposite);
detailsFormSummary.setWidth100();
detailsFormSummary.setPadding(0);
detailsFormSummary.setMargin(0);
detailsFormSummary.setLayoutAlign(Alignment.LEFT);
+
//condense details for display
detailsFormSummary.setHeaderEnabled(false);
detailsFormSummary.setDisplayCondensed(true);
detailsFormSummary.hide();
detailsForm.addMember(detailsFormSummary);
+
SpacerItem widthSpace = new SpacerItem();
widthSpace.setWidth(40);
DynamicForm wrappedSpacer = new DynamicForm();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
index 087e912..3f45d55 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
@@ -19,29 +19,19 @@
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
-import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.types.Alignment;
-import com.smartgwt.client.widgets.HTMLPane;
-import com.smartgwt.client.widgets.IButton;
-import com.smartgwt.client.widgets.Img;
-import com.smartgwt.client.widgets.Window;
-import com.smartgwt.client.widgets.events.ClickEvent;
-import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.FormItemIcon;
import com.smartgwt.client.widgets.form.fields.HeaderItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.grid.events.CellClickEvent;
-import com.smartgwt.client.widgets.grid.events.CellClickHandler;
import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.components.table.Table;
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.LocatableVLayout;
@@ -53,79 +43,108 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class OverviewView extends LocatableVLayout {
- private Table errorsGrid;
- private Img availabilityImage;
+ private StaticTextItem nameValue;
+ private StaticTextItem addressValue;
+ private StaticTextItem portValue;
+ private StaticTextItem agentStatus;
+ private FormItemIcon agentStatusIcon;
+ private StaticTextItem lastAvailReportValue;
+ private StaticTextItem endpointValue;
public OverviewView(String locatorId, ResourceComposite resourceComposite) {
super(locatorId);
OverviewForm form = new OverviewForm(extendLocatorId("form"), resourceComposite);
LocatableDynamicForm currentAgentInfo = new LocatableDynamicForm(extendLocatorId("Agent_Info"));
populateAgentInfo(resourceComposite.getResource().getId(), currentAgentInfo);
- errorsGrid = new Table(extendLocatorId("errors"), MSG.view_summaryOverview_header_detectedErrors(), null, null,
- new String[] { ResourceErrorsDataSource.Field.DETAIL });
+ HTMLFlow separator = new HTMLFlow();
+ separator.setContents("<hr>");
- Resource resource = resourceComposite.getResource();
- ResourceErrorsDataSource errors = new ResourceErrorsDataSource(resource.getId());
-
- errorsGrid.setShowFooter(false);
- errorsGrid.setDataSource(errors);
-
- // form.setHeight("*");
form.setHeight("200");
- errorsGrid.setHeight(200); //this should be just enough to fit the maximum of 3 rows in this table (there's at most 1 error per type)
+ currentAgentInfo.setHeight(200);
+ setLeft("10%");
addMember(form);
+ addMember(separator);
addMember(currentAgentInfo);
- addMember(errorsGrid);
}
private void populateAgentInfo(final int id, final LocatableDynamicForm currentAgentInfo) {
if (currentAgentInfo != null) {
setLeft("10%");
setWidth("80%");
- // currentAgentInfo.setBorder("1px dashed black");
final List<FormItem> formItems = new ArrayList<FormItem>();
- HeaderItem headerItem = new HeaderItem("header", "Agent Managing this Resource");
+ HeaderItem headerItem = new HeaderItem("header", MSG.view_inventory_summary_agent_title());
headerItem.setValue("Agent Managing this Resource");
formItems.add(headerItem);
//populate remaining details
GWTServiceLookup.getAgentService().getAgentForResource(id, new AsyncCallback<Agent>() {
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to locate agent managing resource id " + id + ".",
- caught);
+ CoreGUI.getErrorHandler().handleError(MSG.view_inventory_summary_agent_error1() + id + ".", caught);
}
@Override
public void onSuccess(Agent agent) {
- Log.debug("############ Debug: agent:" + agent);
//name
String name = "name";
- StaticTextItem nameValue = new StaticTextItem(name, "Name");
+ nameValue = new StaticTextItem(name, MSG.common_title_name());
nameValue.setValue(agent.getName());
formItems.add(nameValue);
//address
String address = "address";
- StaticTextItem addressValue = new StaticTextItem(address, "Address");
+ addressValue = new StaticTextItem(address, MSG.common_title_address());
addressValue.setValue(agent.getAddress());
formItems.add(addressValue);
//port
String port = "port";
- StaticTextItem portValue = new StaticTextItem(port, "Port");
+ portValue = new StaticTextItem(port, MSG.common_title_port());
portValue.setValue(agent.getPort());
formItems.add(portValue);
- // AgentClient client = agentManager.getAgentClient(agent);
- // pingResults = client.ping(5000L);
- //
- // pingResults = agent.ping(5000L);
- // //Agent Communiation status
- // availabilityImage.setSrc("resources/availability_"
- // + (resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP ? "green" : "red")
- // + "_24.png");
+ //agent-comm-status
+ String agentComStatus = "agent-comm-status";
+ agentStatusIcon = new FormItemIcon();
+ agentStatusIcon.setSrc("resources/availability_grey_24.png");
+ agentStatus = new StaticTextItem(agentComStatus, MSG.view_inventory_summary_agent_status_title());
+ agentStatus.setIcons(agentStatusIcon);
+ agentStatus.setWrapTitle(false);
+ formItems.add(agentStatus);
+ GWTServiceLookup.getAgentService().pingAgentForResource(id, new AsyncCallback<Boolean>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_inventory_summary_agent_error2() + id + ".",
+ caught);
+ }
+
+ @Override
+ public void onSuccess(Boolean result) {
+ //update icon with correct status
+ agentStatusIcon.setSrc("resources/availability_" + (result ? "green" : "red") + "_24.png");
+ currentAgentInfo.markForRedraw();
+ }
+ });
//Last Received Avail report
+ String lastAvailReport = "last-avail-report";
+ lastAvailReportValue = new StaticTextItem(lastAvailReport, MSG
+ .view_inventory_summary_agent_last_title());
+ lastAvailReportValue.setWrapTitle(false);
+ lastAvailReportValue.setValue(new Date(agent.getLastAvailabilityReport()));
+ formItems.add(lastAvailReportValue);
+
//Full Endpoint
+ String fullEndpoint = "full-endpoint";
+ endpointValue = new StaticTextItem(fullEndpoint, MSG.view_inventory_summary_agent_fullEnpoint());
+ String remoteEndpoint = agent.getRemoteEndpoint();
+ if (remoteEndpoint != null) {
+ // some browsers (firefox in particular) won't wrap unless you put breaks in the string
+ remoteEndpoint = remoteEndpoint.replaceAll("&", " &");
+ } else {
+ remoteEndpoint = MSG.view_inventory_summary_agent_fullEnpoint_err1();
+ }
+ endpointValue.setValue(remoteEndpoint);
+ formItems.add(endpointValue);
+
currentAgentInfo.setItems(formItems.toArray(new FormItem[formItems.size()]));
currentAgentInfo.markForRedraw();
}
@@ -139,46 +158,5 @@ public class OverviewView extends LocatableVLayout {
@Override
public void onInit() {
super.onInit();
- initErrorsGrid();
}
-
- private void initErrorsGrid() {
- errorsGrid.setTooltip(MSG.view_summaryOverview_tooltip_detectedErrors());
- errorsGrid.getListGrid().addCellClickHandler(new CellClickHandler() {
- public void onCellClick(CellClickEvent event) {
- ListGridRecord record = event.getRecord();
- final Window w = new Window();
- w.setTitle(MSG.view_summaryOverview_title_errorDetailsWindow());
- w.setIsModal(true);
- w.setShowMinimizeButton(false);
- w.setShowModalMask(true);
- w.setWidth(640);
- w.setHeight(480);
- w.centerInPage();
- w.setCanDragResize(true);
-
- LocatableVLayout layout = new LocatableVLayout(errorsGrid.extendLocatorId("dialogLayout"), 10);
- layout.setDefaultLayoutAlign(Alignment.CENTER);
- layout.setLayoutMargin(10);
-
- w.addItem(layout);
-
- HTMLPane details = new HTMLPane();
- details.setContents("<pre>" + record.getAttribute(ResourceErrorsDataSource.Field.DETAIL) + "</pre>");
- layout.addMember(details);
-
- IButton ok = new IButton(MSG.common_button_ok());
- ok.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- w.destroy();
- }
- });
-
- layout.addMember(ok);
-
- w.show();
- }
- });
- }
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java
index 2943b8e..7b55f56 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java
@@ -66,10 +66,10 @@ public class ResourceErrorsDataSource extends RPCDataSource<ResourceError> {
protected List<DataSourceField> addDataSourceFields() {
List<DataSourceField> fields = super.addDataSourceFields();
- fields.add(new DataSourceTextField(Field.SUMMARY, MSG.dataSource_resourceErrors_field_summary()));
- fields.add(new DataSourceTextField(Field.DETAIL, MSG.dataSource_resourceErrors_field_detail()));
fields.add(new DataSourceEnumField(Field.ERROR_TYPE, MSG.dataSource_resourceErrors_field_errorType()));
fields.add(new DataSourceDateTimeField(Field.TIME_OCCURED, MSG.dataSource_resourceErrors_field_timeOccured()));
+ fields.add(new DataSourceTextField(Field.SUMMARY, MSG.dataSource_resourceErrors_field_summary()));
+ fields.add(new DataSourceTextField(Field.DETAIL, MSG.dataSource_resourceErrors_field_detail()));
return fields;
}
@@ -82,8 +82,7 @@ public class ResourceErrorsDataSource extends RPCDataSource<ResourceError> {
resourceService.findResourceErrors(resourceId, new AsyncCallback<List<ResourceError>>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(
- MSG.dataSource_resourceErrors_error_fetchFailure(String.valueOf(resourceId)),
- caught);
+ MSG.dataSource_resourceErrors_error_fetchFailure(String.valueOf(resourceId)), caught);
response.setStatus(RPCResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java
new file mode 100644
index 0000000..9bc40ff
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java
@@ -0,0 +1,23 @@
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary;
+
+import com.smartgwt.client.data.Criteria;
+
+import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+
+public class ResourceErrorsView extends Table {
+ public ResourceErrorsView(String locatorId, String string, Criteria criteria, Object object, String[] strings) {
+ super(locatorId, MSG.view_bundle_bundles(), criteria);
+ }
+
+ /** Set order and width of table display
+ */
+ @Override
+ protected void configureTable() {
+ getListGrid().getField(ResourceErrorsDataSource.Field.ERROR_TYPE).setWidth("10%");
+ getListGrid().getField(ResourceErrorsDataSource.Field.TIME_OCCURED).setWidth("10%");
+ getListGrid().getField(ResourceErrorsDataSource.Field.SUMMARY).setWidth("20%");
+ getListGrid().getField(ResourceErrorsDataSource.Field.DETAIL).setWidth("60%");
+ getListGrid().setWrapCells(true);
+ getListGrid().setCellHeight(100);
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
index 75a51a2..80bc779 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
@@ -37,7 +37,7 @@ public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements Agent
@Override
public Agent getAgentForResource(int resourceId) {
try {
- //TODO: this needs security that was not handled before. No AgentManagerRemote... ??
+ //security handled in AgentManagerBean. requires View_Resource.
return SerialUtility.prepare(agentManager.getAgentByResourceId(getSessionSubject(), resourceId),
"AgentService.getAgentForResource");
} catch (Exception e) {
@@ -45,6 +45,17 @@ public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements Agent
}
}
+ @Override
+ public Boolean pingAgentForResource(int resourceId) {
+ try {
+ //security handled in AgentManagerBean. requires View_Resource.
+ return SerialUtility.prepare(agentManager.pingAgentByResourceId(getSessionSubject(), resourceId),
+ "AgentService.pingAgentForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
// public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) {
// try {
// return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(),
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
index 201fccf..79b7190 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
@@ -547,4 +547,26 @@ public class AgentManagerBean implements AgentManagerLocal {
Long backfilledCount = (Long) query.getSingleResult();
return backfilledCount != 0L;
}
+
+ @ExcludeDefaultInterceptors
+ public Boolean pingAgentByResourceId(Subject subject, int resourceId) {
+ Boolean pingResults = Boolean.FALSE;
+ Agent agent;
+
+ try {
+ //insert call to method doing logged in check and view resources perm check as method calld from GWT*Service
+ agent = getAgentByResourceId(subject, resourceId);
+
+ //now ping
+ AgentClient client = getAgentClient(agent);
+ pingResults = client.ping(5000L);
+
+ } catch (NoResultException e) {
+ log.debug("Failed to lookup agent for resource with ID of [" + resourceId + "] : " + e);
+ agent = null;
+ }
+
+ return pingResults;
+ }
+
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
index 4821b91..a5a0a3b 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
@@ -278,4 +278,14 @@ public interface AgentManagerLocal {
*/
boolean isAgentBackfilled(int agentId);
+ /**
+ * Returns <code>true</code> indicating successful ping of agent. Exposed so server could
+ * initiate N requests so gwt clients wont face Single Origin Policy issues.
+ *
+ * @param agentId the id of the agent
+ *
+ * @return <code>true</code> if the agent was successfully pinged.
+ */
+ Boolean pingAgentByResourceId(Subject subject, int resourceId);
+
}
\ No newline at end of file
commit 492a3d71091b9affbda6c86566cf8b93697204d9
Merge: 2187b1d... 27cf8cf...
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Thu Nov 18 13:09:18 2010 -0500
Merge branch 'master' of ssh://spinder@git.fedorahosted.org/git/rhq/rhq into track-master
-pulling in i18n changes from merge effort and a few additional i18n fixes.
Conflicts:
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
index b894bb6,ae10b19..70165ba
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@@ -158,7 -159,7 +161,7 @@@ public class LoginView extends Locatabl
window = new Window();
window.setWidth(400);
window.setHeight(275);
-- window.setTitle("Welcome");
++ window.setTitle(MSG.common_title_welcome());
// forced focused, static size, can't close / dismiss
window.setIsModal(true);
@@@ -250,7 -249,7 +251,7 @@@
HStack row = new HStack();
row.setMembersMargin(5);
row.setAlign(VerticalAlignment.CENTER);
-- IButton okButton = new IButton("OK");
++ IButton okButton = new IButton(MSG.common_button_ok());
okButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//F5 refresh check? If they've reloaded the form for some reason then bail.
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java
index 0340675,d2596c9..a81c97f
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java
@@@ -381,7 -385,7 +385,7 @@@ public class RecentAlertsPortlet extend
// build resource selection drop down
//------------- Build second combobox for timeframe for problem resources search.
final SelectItem alertResourcesComboBox = new SelectItem(ALERT_RANGE_RESOURCES_VALUE);
-- alertResourcesComboBox.setTitle("for");
++ alertResourcesComboBox.setTitle(MSG.common_val_for());
alertResourcesComboBox.setHint("");
alertResourcesComboBox.setType("selection");
String[] acceptableResourceDisplayValues = { RESOURCES_ALL, RESOURCES_SELECTED };
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
index 6ee4da6,078461f..3372b61
--- 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
@@@ -137,32 -142,27 +142,30 @@@ public class ResourceSearchView extend
setListGridFields(iconField, nameField, descriptionField, typeNameField, pluginNameField, categoryField,
availabilityField);
- addTableAction(extendLocatorId("Uninventory"), "Uninventory",
- "Are you sure you want to uninventory # resources?", new AbstractTableAction(TableActionEnablement.ANY) {
- public void executeAction(ListGridRecord[] selection) {
- int[] resourceIds = TableUtility.getIds(selection);
- ResourceGWTServiceAsync resourceManager = GWTServiceLookup.getResourceService();
-
- resourceManager.uninventoryResources(resourceIds, new AsyncCallback<List<Integer>>() {
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to uninventory selected resources", caught);
- }
-
- public void onSuccess(List<Integer> result) {
- CoreGUI.getMessageCenter()
- .notify(
- new Message("Successfully uninventoried " + result.size() + " resources",
- Severity.Info));
-
- ResourceSearchView.this.refresh();
- }
- });
- }
- });
+ addTableAction(extendLocatorId("Uninventory"), MSG.common_button_uninventory(), MSG
+ .view_inventory_resources_deleteConfirm(), new AbstractTableAction(TableActionEnablement.ANY) {
+ public void executeAction(ListGridRecord[] selection, Object actionValue) {
+ int[] resourceIds = TableUtility.getIds(selection);
+ ResourceGWTServiceAsync resourceManager = GWTServiceLookup.getResourceService();
+
+ resourceManager.uninventoryResources(resourceIds, new AsyncCallback<List<Integer>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_inventory_resources_deleteFailed(), caught);
+ }
+
+ public void onSuccess(List<Integer> result) {
+ CoreGUI.getMessageCenter().notify(
+ new Message(MSG.view_inventory_resources_deleteSuccessful(), Severity.Info));
+
+ ResourceSearchView.this.refresh();
+ }
+ });
+ }
+ });
+ // //load double click handler for this table
+ // configureDoubleClickHandler();
+
/*searchBox.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) {
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
index e5e65dc,9c5a1b8..3cd120d
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
@@@ -25,13 -25,6 +25,12 @@@ import java.util.Comparator
import java.util.EnumSet;
import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback;
- import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.HeaderItem;
+import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.DisplayType;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
@@@ -48,8 -41,14 +47,8 @@@ import org.rhq.enterprise.gui.coregui.c
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.widgets.form.fields.FormItem;
-import com.smartgwt.client.widgets.form.fields.HeaderItem;
-import com.smartgwt.client.widgets.form.fields.SpacerItem;
-import com.smartgwt.client.widgets.form.fields.StaticTextItem;
-
/**
- * The Resource Summary>Overview tab, the form with resource data.
+ * The Resource Summary>Overview tab - Resource general properties + summary traits.
*
* @author Greg Hinkle
* @author Ian Springer
@@@ -106,26 -93,30 +100,26 @@@ public class OverviewForm extends Enhan
private void loadTraitValues() {
final Resource resource = resourceComposite.getResource();
- GWTServiceLookup.getMeasurementDataService().findCurrentTraitsForResource(
- resource.getId(),
- DisplayType.SUMMARY,
- new AsyncCallback<List<MeasurementDataTrait>>() {
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_summaryOverviewForm_error_traitsLoadFailure(resource.toString()),
- caught);
- }
+ GWTServiceLookup.getMeasurementDataService().findCurrentTraitsForResource(resource.getId(),
+ DisplayType.SUMMARY, new AsyncCallback<List<MeasurementDataTrait>>() {
+ public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to load traits for " + resource + ".", caught);
++ CoreGUI.getErrorHandler().handleError(
++ MSG.view_summaryOverviewForm_error_traitsLoadFailure(resource.toString()), caught);
+ }
- public void onSuccess(List<MeasurementDataTrait> result) {
- // TODO: Implement this method.
- for (MeasurementDataTrait trait : result) {
- String formId = trait.getName().replaceAll("\\.", "_").replaceAll(" ", "__");
- FormItem item = getItem(formId);
+ public void onSuccess(List<MeasurementDataTrait> result) {
+ // TODO: Implement this method.
+ for (MeasurementDataTrait trait : result) {
+ String formId = trait.getName().replaceAll("\\.", "_").replaceAll(" ", "__");
+ FormItem item = getItem(formId);
- if (item != null) {
- setValue(formId, trait.getValue());
- }
+ if (item != null) {
+ setValue(formId, trait.getValue());
}
- markForRedraw();
}
+ markForRedraw();
}
- );
+ });
-
}
private void buildForm(ResourceType type) {
@@@ -145,14 -136,13 +139,15 @@@
List<FormItem> formItems = new ArrayList<FormItem>();
- HeaderItem headerItem = new HeaderItem("header", MSG.view_summaryOverviewForm_header_summary());
- headerItem.setValue(MSG.view_summaryOverviewForm_header_summary());
- formItems.add(headerItem);
+ if (isHeaderEnabled()) {//conditionally display header
- HeaderItem headerItem = new HeaderItem("header", "Summary");
- headerItem.setValue("Summary");
++ HeaderItem headerItem = new HeaderItem("header", MSG.view_summaryOverviewForm_header_summary());
++ headerItem.setValue(MSG.view_summaryOverviewForm_header_summary());
+ formItems.add(headerItem);
+ }
- StaticTextItem typeItem = new StaticTextItem("type", "Type");
- typeItem.setTooltip("Plugin: " + type.getPlugin() + "\n<br>" + "Type: " + type.getName());
+ StaticTextItem typeItem = new StaticTextItem("type", MSG.view_summaryOverviewForm_field_type());
+ typeItem.setTooltip(MSG.view_summaryOverviewForm_label_plugin() + type.getPlugin() + "\n<br>"
+ + MSG.view_summaryOverviewForm_label_type() + type.getName());
typeItem.setValue(type.getName() + " (" + type.getPlugin() + ")");
formItems.add(typeItem);
@@@ -174,9 -164,9 +169,9 @@@
resource.setName(newName);
OverviewForm.this.resourceService.updateResource(resource, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_summaryOverviewForm_error_nameChangeFailure(
- String.valueOf(resource.getId()),
- oldName, newName), caught);
+ CoreGUI.getErrorHandler().handleError(
- "Failed to change name of Resource with id " + resource.getId() + " from \"" + oldName
- + "\" to \"" + newName + "\".", caught);
++ MSG.view_summaryOverviewForm_error_nameChangeFailure(String.valueOf(resource.getId()),
++ oldName, newName), caught);
// We failed to update it on the Server, so change back the Resource and the form item to
// the original value.
resource.setName(oldName);
@@@ -184,9 -174,10 +179,9 @@@
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(new Message(MSG.view_summaryOverviewForm_message_nameChangeSuccess(
- String.valueOf(resource.getId()),
- oldName, newName)
- , Message.Severity.Info));
+ CoreGUI.getMessageCenter().notify(
- new Message("Name of Resource with id " + resource.getId() + " was changed from \""
- + oldName + "\" to \"" + newName + "\".", Message.Severity.Info));
++ new Message(MSG.view_summaryOverviewForm_message_nameChangeSuccess(String
++ .valueOf(resource.getId()), oldName, newName), Message.Severity.Info));
}
});
}
@@@ -209,9 -200,9 +204,9 @@@
resource.setDescription(newDescription);
OverviewForm.this.resourceService.updateResource(resource, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_summaryOverviewForm_error_descriptionChangeFailure(
- String.valueOf(resource.getId()),
- oldDescription, newDescription), caught);
+ CoreGUI.getErrorHandler().handleError(
- "Failed to change description of Resource with id " + resource.getId() + " from \""
- + oldDescription + "\" to \"" + newDescription + "\".", caught);
++ MSG.view_summaryOverviewForm_error_descriptionChangeFailure(String.valueOf(resource
++ .getId()), oldDescription, newDescription), caught);
// We failed to update it on the Server, so change back the Resource and the form item to
// the original value.
resource.setDescription(oldDescription);
@@@ -219,10 -210,9 +214,11 @@@
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(
- new Message("Description of Resource with id " + resource.getId()
- + " was changed from \"" + oldDescription + "\" to \"" + newDescription + "\".",
- Message.Severity.Info));
- CoreGUI.getMessageCenter().notify(new Message(MSG.view_summaryOverviewForm_message_nameChangeSuccess(
- String.valueOf(resource.getId()),
- oldDescription, newDescription), Message.Severity.Info));
++ CoreGUI.getMessageCenter()
++ .notify(
++ new Message(MSG.view_summaryOverviewForm_message_nameChangeSuccess(String
++ .valueOf(resource.getId()), oldDescription, newDescription),
++ Message.Severity.Info));
}
});
}
@@@ -245,9 -235,9 +241,9 @@@
resource.setLocation(newLocation);
OverviewForm.this.resourceService.updateResource(resource, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_summaryOverviewForm_error_locationChangeFailure(
- String.valueOf(resource.getId()),
- oldLocation, newLocation), caught);
+ CoreGUI.getErrorHandler().handleError(
- "Failed to change location of Resource with id " + resource.getId() + " from \""
- + oldLocation + "\" to \"" + newLocation + "\".", caught);
++ MSG.view_summaryOverviewForm_error_locationChangeFailure(String.valueOf(resource
++ .getId()), oldLocation, newLocation), caught);
// We failed to update it on the Server, so change back the Resource and the form item to
// the original value.
resource.setLocation(oldLocation);
@@@ -255,9 -245,9 +251,9 @@@
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(new Message(MSG.view_summaryOverviewForm_message_nameChangeSuccess(
- String.valueOf(resource.getId()),
- oldLocation, newLocation), Message.Severity.Info));
+ CoreGUI.getMessageCenter().notify(
- new Message("Location of Resource with id " + resource.getId() + " was changed from \""
- + oldLocation + "\" to \"" + newLocation + "\".", Message.Severity.Info));
++ new Message(MSG.view_summaryOverviewForm_message_nameChangeSuccess(String
++ .valueOf(resource.getId()), oldLocation, newLocation), Message.Severity.Info));
}
});
}
@@@ -265,10 -255,11 +261,10 @@@
}
formItems.add(locationItem);
- StaticTextItem versionItem = new StaticTextItem("version", "Version");
-
+ StaticTextItem versionItem = new StaticTextItem("version", MSG.view_summaryOverviewForm_field_version());
formItems.add(versionItem);
- StaticTextItem parentItem = new StaticTextItem("parent", "Parent");
+ StaticTextItem parentItem = new StaticTextItem("parent", MSG.view_summaryOverviewForm_field_parent());
formItems.add(parentItem);
for (MeasurementDefinition trait : traits) {
@@@ -296,25 -286,11 +292,27 @@@
setValue("name", resource.getName());
setValue("description", resource.getDescription());
setValue("location", resource.getLocation());
- setValue("version", (resource.getVersion() != null) ? resource.getVersion() : "<i>none</i>");
- setValue("version", (resource.getVersion() != null) ? resource.getVersion() : "<i>" + MSG.common_label_none() + "</i>");
++ setValue("version", (resource.getVersion() != null) ? resource.getVersion() : "<i>" + MSG.common_label_none()
++ + "</i>");
Resource parentResource = resource.getParentResource();
- setValue("parent", parentResource != null ?
- ("<a href=\"#Resource/" + parentResource.getId() + "\">" +
- parentResource.getName() + "</a>") : "<i>" + MSG.common_label_none() + "</i>");
+ setValue("parent", parentResource != null ? ("<a href=\"#Resource/" + parentResource.getId() + "\">"
+ + parentResource.getName() + "</a>") : "<i>none</i>");
+ }
+
+ public boolean isHeaderEnabled() {
+ return headerEnabled;
}
-
+
+ public void setHeaderEnabled(boolean headerEnabled) {
+ this.headerEnabled = headerEnabled;
+ }
+
+ public boolean isDisplayCondensed() {
+ return displayCondensed;
+ }
+
+ public void setDisplayCondensed(boolean displayCondensed) {
+ this.displayCondensed = displayCondensed;
+ }
++
}
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
index 71f3824,754ad0d..087e912
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
@@@ -53,100 -40,35 +53,97 @@@ import org.rhq.enterprise.gui.coregui.c
*/
public class OverviewView extends LocatableVLayout {
- private OverviewForm form;
private Table errorsGrid;
-
+ private Img availabilityImage;
+
public OverviewView(String locatorId, ResourceComposite resourceComposite) {
super(locatorId);
- form = new OverviewForm(extendLocatorId("form"), resourceComposite);
+ OverviewForm form = new OverviewForm(extendLocatorId("form"), resourceComposite);
- errorsGrid = new Table(extendLocatorId("errors"), MSG.view_summaryOverview_header_detectedErrors(), null, null, new String[]
- { ResourceErrorsDataSource.Field.DETAIL });
+ LocatableDynamicForm currentAgentInfo = new LocatableDynamicForm(extendLocatorId("Agent_Info"));
+ populateAgentInfo(resourceComposite.getResource().getId(), currentAgentInfo);
-
- errorsGrid = new Table(extendLocatorId("errors"), "Detected errors", null, null,
- new String[] { ResourceErrorsDataSource.DETAIL_ID });
++ errorsGrid = new Table(extendLocatorId("errors"), MSG.view_summaryOverview_header_detectedErrors(), null, null,
++ new String[] { ResourceErrorsDataSource.Field.DETAIL });
- Resource resource = resourceComposite.getResource();
+ Resource resource = resourceComposite.getResource();
ResourceErrorsDataSource errors = new ResourceErrorsDataSource(resource.getId());
-
+
errorsGrid.setShowFooter(false);
errorsGrid.setDataSource(errors);
-
- form.setHeight("*");
+
+ // form.setHeight("*");
+ form.setHeight("200");
errorsGrid.setHeight(200); //this should be just enough to fit the maximum of 3 rows in this table (there's at most 1 error per type)
-
+
addMember(form);
+ addMember(currentAgentInfo);
addMember(errorsGrid);
-
}
- @Override
+ private void populateAgentInfo(final int id, final LocatableDynamicForm currentAgentInfo) {
+ if (currentAgentInfo != null) {
+ setLeft("10%");
+ setWidth("80%");
+ // currentAgentInfo.setBorder("1px dashed black");
+ final List<FormItem> formItems = new ArrayList<FormItem>();
+ HeaderItem headerItem = new HeaderItem("header", "Agent Managing this Resource");
+ headerItem.setValue("Agent Managing this Resource");
+ formItems.add(headerItem);
+ //populate remaining details
+ GWTServiceLookup.getAgentService().getAgentForResource(id, new AsyncCallback<Agent>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to locate agent managing resource id " + id + ".",
+ caught);
+ }
+
+ @Override
+ public void onSuccess(Agent agent) {
+ Log.debug("############ Debug: agent:" + agent);
+ //name
+ String name = "name";
+ StaticTextItem nameValue = new StaticTextItem(name, "Name");
+ nameValue.setValue(agent.getName());
+ formItems.add(nameValue);
+ //address
+ String address = "address";
+ StaticTextItem addressValue = new StaticTextItem(address, "Address");
+ addressValue.setValue(agent.getAddress());
+ formItems.add(addressValue);
+ //port
+ String port = "port";
+ StaticTextItem portValue = new StaticTextItem(port, "Port");
+ portValue.setValue(agent.getPort());
+ formItems.add(portValue);
+
+ // AgentClient client = agentManager.getAgentClient(agent);
+ // pingResults = client.ping(5000L);
+ //
+ // pingResults = agent.ping(5000L);
+ // //Agent Communiation status
+ // availabilityImage.setSrc("resources/availability_"
+ // + (resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP ? "green" : "red")
+ // + "_24.png");
+
+ //Last Received Avail report
+ //Full Endpoint
+ currentAgentInfo.setItems(formItems.toArray(new FormItem[formItems.size()]));
+ currentAgentInfo.markForRedraw();
+ }
+ });
+
+ //final form population
+ currentAgentInfo.setItems(formItems.toArray(new FormItem[formItems.size()]));
+ }
+ }
+
+ @Override
public void onInit() {
super.onInit();
initErrorsGrid();
}
-
- private void initErrorsGrid() {
+
+ private void initErrorsGrid() {
- errorsGrid.setTooltip("Click on the rows to see the error details.");
+ errorsGrid.setTooltip(MSG.view_summaryOverview_tooltip_detectedErrors());
errorsGrid.getListGrid().addCellClickHandler(new CellClickHandler() {
public void onCellClick(CellClickEvent event) {
ListGridRecord record = event.getRecord();
@@@ -163,14 -85,14 +160,14 @@@
LocatableVLayout layout = new LocatableVLayout(errorsGrid.extendLocatorId("dialogLayout"), 10);
layout.setDefaultLayoutAlign(Alignment.CENTER);
layout.setLayoutMargin(10);
-
+
w.addItem(layout);
-
- HTMLPane details = new HTMLPane();
+
+ HTMLPane details = new HTMLPane();
- details.setContents("<pre>" + record.getAttribute(ResourceErrorsDataSource.DETAIL_ID) + "</pre>");
+ details.setContents("<pre>" + record.getAttribute(ResourceErrorsDataSource.Field.DETAIL) + "</pre>");
layout.addMember(details);
-
+
- IButton ok = new IButton("Ok");
+ IButton ok = new IButton(MSG.common_button_ok());
ok.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
w.destroy();
@@@ -183,4 -105,5 +180,5 @@@
}
});
}
-
++
}
diff --cc modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 0d413a4,edc98dee..8bf33ca
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@@ -90,8 -95,6 +95,7 @@@
<entry-point class='org.rhq.enterprise.gui.coregui.client.CoreGUI'/>
<entry-point class='org.rhq.enterprise.gui.coregui.client.SearchGUI'/>
-
+ <servlet path="/AgentGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AgentGWTServiceImpl"/>
<servlet path="/AlertGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertGWTServiceImpl"/>
<servlet path="/AlertDefinitionGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertDefinitionGWTServiceImpl"/>
<servlet path="/AlertTemplateGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertTemplateGWTServiceImpl"/>
commit 2187b1d51bfd8503236fecdadef8984e23aa9c7d
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Tue Nov 16 11:47:07 2010 -0500
Numerous fixes: not complete. Saving for i18n work
-ResourceTitleChanges i)conditional details ii)plugin conf errors
-AgentGWT* changes
-AgentManagerBean perm check for View_Resources
-moved AgentDetails to Summary Tab
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
new file mode 100644
index 0000000..fd08d80
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
@@ -0,0 +1,32 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * 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.gwt;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+
+import org.rhq.core.domain.resource.Agent;
+
+/**
+ * @author Simeon Pinder
+ */
+public interface AgentGWTService extends RemoteService {
+
+ Agent getAgentForResource(int resourceId);
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
index 7d839eb..af662db 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
@@ -145,6 +145,10 @@ public class GWTServiceLookup {
return secure(LdapGWTServiceAsync.Util.getInstance());
}
+ public static AgentGWTServiceAsync getAgentService() {
+ return secure(AgentGWTServiceAsync.Util.getInstance());
+ }
+
@SuppressWarnings("unchecked")
private static <T> T secure(Object sdt) {
return (T) secure(sdt, -1);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
index 2e4e942..55a1cac 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
@@ -31,6 +31,7 @@ import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
+import com.smartgwt.client.widgets.form.fields.LinkItem;
import com.smartgwt.client.widgets.form.fields.SpacerItem;
import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
@@ -77,6 +78,7 @@ public class ResourceTitleBar extends LocatableVLayout {
private boolean favorite;
private LocatableHLayout detailsForm;
private OverviewForm detailsFormSummary;
+ private LinkItem pluginErrors;
public ResourceTitleBar(String locatorId) {
super(locatorId);
@@ -141,10 +143,23 @@ public class ResourceTitleBar extends LocatableVLayout {
loadTags(tagEditorView);
+ pluginErrors = new LinkItem("plugin-errors");
+ pluginErrors.setTitle("");
+ pluginErrors.setLinkTitle("Component errors (0)");
+ pluginErrors.setPrompt("Managed component errors exist. Click for details");
+ // pluginErrors.addClickHandler(new ClickHandler() {
+ // public void onClick(ClickEvent event) {
+ // SC.say("Hello World");
+ // }
+ // });
+
//top information
top.addMember(badge);
top.addMember(title);
top.addMember(tagEditorView);
+ DynamicForm wrap = new DynamicForm();
+ wrap.setFields(pluginErrors);
+ top.addMember(wrap);
top.addMember(availabilityImage);
top.addMember(favoriteButton);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
index b439d44..71f3824 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewView.java
@@ -18,21 +18,34 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary;
-import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.composite.ResourceComposite;
-import org.rhq.enterprise.gui.coregui.client.components.table.Table;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+import java.util.ArrayList;
+import java.util.List;
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.HTMLPane;
import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.HeaderItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.CellClickEvent;
import com.smartgwt.client.widgets.grid.events.CellClickHandler;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+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.LocatableVLayout;
+
/**
* The Resource Summary>Overview tab.
*
@@ -42,33 +55,97 @@ public class OverviewView extends LocatableVLayout {
private OverviewForm form;
private Table errorsGrid;
-
+ private Img availabilityImage;
+
public OverviewView(String locatorId, ResourceComposite resourceComposite) {
super(locatorId);
form = new OverviewForm(extendLocatorId("form"), resourceComposite);
- errorsGrid = new Table(extendLocatorId("errors"), "Detected errors", null, null, new String[] { ResourceErrorsDataSource.DETAIL_ID });
+ LocatableDynamicForm currentAgentInfo = new LocatableDynamicForm(extendLocatorId("Agent_Info"));
+ populateAgentInfo(resourceComposite.getResource().getId(), currentAgentInfo);
+
+ errorsGrid = new Table(extendLocatorId("errors"), "Detected errors", null, null,
+ new String[] { ResourceErrorsDataSource.DETAIL_ID });
- Resource resource = resourceComposite.getResource();
+ Resource resource = resourceComposite.getResource();
ResourceErrorsDataSource errors = new ResourceErrorsDataSource(resource.getId());
-
+
errorsGrid.setShowFooter(false);
errorsGrid.setDataSource(errors);
-
- form.setHeight("*");
+
+ // form.setHeight("*");
+ form.setHeight("200");
errorsGrid.setHeight(200); //this should be just enough to fit the maximum of 3 rows in this table (there's at most 1 error per type)
-
+
addMember(form);
+ addMember(currentAgentInfo);
addMember(errorsGrid);
-
+
+ }
+
+ private void populateAgentInfo(final int id, final LocatableDynamicForm currentAgentInfo) {
+ if (currentAgentInfo != null) {
+ setLeft("10%");
+ setWidth("80%");
+ // currentAgentInfo.setBorder("1px dashed black");
+ final List<FormItem> formItems = new ArrayList<FormItem>();
+ HeaderItem headerItem = new HeaderItem("header", "Agent Managing this Resource");
+ headerItem.setValue("Agent Managing this Resource");
+ formItems.add(headerItem);
+ //populate remaining details
+ GWTServiceLookup.getAgentService().getAgentForResource(id, new AsyncCallback<Agent>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to locate agent managing resource id " + id + ".",
+ caught);
+ }
+
+ @Override
+ public void onSuccess(Agent agent) {
+ Log.debug("############ Debug: agent:" + agent);
+ //name
+ String name = "name";
+ StaticTextItem nameValue = new StaticTextItem(name, "Name");
+ nameValue.setValue(agent.getName());
+ formItems.add(nameValue);
+ //address
+ String address = "address";
+ StaticTextItem addressValue = new StaticTextItem(address, "Address");
+ addressValue.setValue(agent.getAddress());
+ formItems.add(addressValue);
+ //port
+ String port = "port";
+ StaticTextItem portValue = new StaticTextItem(port, "Port");
+ portValue.setValue(agent.getPort());
+ formItems.add(portValue);
+
+ // AgentClient client = agentManager.getAgentClient(agent);
+ // pingResults = client.ping(5000L);
+ //
+ // pingResults = agent.ping(5000L);
+ // //Agent Communiation status
+ // availabilityImage.setSrc("resources/availability_"
+ // + (resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP ? "green" : "red")
+ // + "_24.png");
+
+ //Last Received Avail report
+ //Full Endpoint
+ currentAgentInfo.setItems(formItems.toArray(new FormItem[formItems.size()]));
+ currentAgentInfo.markForRedraw();
+ }
+ });
+
+ //final form population
+ currentAgentInfo.setItems(formItems.toArray(new FormItem[formItems.size()]));
+ }
}
- @Override
+ @Override
public void onInit() {
super.onInit();
initErrorsGrid();
}
-
- private void initErrorsGrid() {
+
+ private void initErrorsGrid() {
errorsGrid.setTooltip("Click on the rows to see the error details.");
errorsGrid.getListGrid().addCellClickHandler(new CellClickHandler() {
public void onCellClick(CellClickEvent event) {
@@ -82,26 +159,26 @@ public class OverviewView extends LocatableVLayout {
w.setHeight(480);
w.centerInPage();
w.setCanDragResize(true);
-
+
LocatableVLayout layout = new LocatableVLayout(errorsGrid.extendLocatorId("dialogLayout"), 10);
layout.setDefaultLayoutAlign(Alignment.CENTER);
layout.setLayoutMargin(10);
-
+
w.addItem(layout);
-
- HTMLPane details = new HTMLPane();
+
+ HTMLPane details = new HTMLPane();
details.setContents("<pre>" + record.getAttribute(ResourceErrorsDataSource.DETAIL_ID) + "</pre>");
layout.addMember(details);
-
+
IButton ok = new IButton("Ok");
ok.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
w.destroy();
}
});
-
+
layout.addMember(ok);
-
+
w.show();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
new file mode 100644
index 0000000..75a51a2
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
@@ -0,0 +1,56 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * 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.server.gwt;
+
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.util.exception.ThrowableUtil;
+import org.rhq.enterprise.gui.coregui.client.gwt.AgentGWTService;
+import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
+import org.rhq.enterprise.server.core.AgentManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * @author Simeon Pinder
+ */
+public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements AgentGWTService {
+
+ private static final long serialVersionUID = 1L;
+
+ private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
+
+ @Override
+ public Agent getAgentForResource(int resourceId) {
+ try {
+ //TODO: this needs security that was not handled before. No AgentManagerRemote... ??
+ return SerialUtility.prepare(agentManager.getAgentByResourceId(getSessionSubject(), resourceId),
+ "AgentService.getAgentForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ // public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) {
+ // try {
+ // return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(),
+ // resourceId, pc), "AvailabilityService.findAvailabilityForResource");
+ // } catch (Exception e) {
+ // throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ // }
+ // }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 13f4660..0d413a4 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -91,6 +91,7 @@
<entry-point class='org.rhq.enterprise.gui.coregui.client.SearchGUI'/>
+ <servlet path="/AgentGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AgentGWTServiceImpl"/>
<servlet path="/AlertGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertGWTServiceImpl"/>
<servlet path="/AlertDefinitionGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertDefinitionGWTServiceImpl"/>
<servlet path="/AlertTemplateGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertTemplateGWTServiceImpl"/>
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index 9337163..259ee73 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@ -128,6 +128,10 @@
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI LdapGWTService</servlet-name>
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.LdapGWTServiceImpl</servlet-class>
</servlet>
+ <servlet>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI AgentGWTService</servlet-name>
+ <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.AgentGWTServiceImpl</servlet-class>
+ </servlet>
<servlet-mapping>
@@ -254,6 +258,10 @@
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI LdapGWTService</servlet-name>
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/LdapGWTService</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI AgentGWTService</servlet-name>
+ <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/AgentGWTService</url-pattern>
+ </servlet-mapping>
<welcome-file-list>
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/PingAgentUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/PingAgentUIBean.java
index 4879d09..989d10d 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/PingAgentUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/PingAgentUIBean.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.inventory.resource;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.legacy.ParamConstants;
+import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.agentclient.AgentClient;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -75,7 +76,7 @@ public class PingAgentUIBean {
try {
int resourceId = FacesContextUtility.getRequiredRequestParameter(ParamConstants.RESOURCE_ID_PARAM,
Integer.class);
- agent = agentManager.getAgentByResourceId(resourceId);
+ agent = agentManager.getAgentByResourceId(EnterpriseFacesContextUtility.getSubject(), resourceId);
if (agent == null) {
throw new IllegalStateException("No agent is associated with the resource with id " + resourceId + ".");
}
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/navigation/resource/ResourceTreeModelUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/navigation/resource/ResourceTreeModelUIBean.java
index 269360c..6b8af11 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/navigation/resource/ResourceTreeModelUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/navigation/resource/ResourceTreeModelUIBean.java
@@ -80,7 +80,8 @@ public class ResourceTreeModelUIBean {
HibernatePerformanceMonitor.get().stop(monitorId, "ResourceTree root resource");
log.debug("Found root resource in " + (end - start));
- Agent agent = agentManager.getAgentByResourceId(rootResource.getId());
+ Agent agent = agentManager.getAgentByResourceId(EnterpriseFacesContextUtility.getSubject(), rootResource
+ .getId());
start = System.currentTimeMillis();
monitorId = HibernatePerformanceMonitor.get().start();
@@ -120,7 +121,8 @@ public class ResourceTreeModelUIBean {
if (res.getResourceType().getSubCategory() != null) {
// These are children that have subcategories
// Split them by if they are a sub-sub category or just a category
- ResourceSubCategoryFlyweight categoryKey = res.getResourceType().getSubCategory().getParentSubCategory();
+ ResourceSubCategoryFlyweight categoryKey = res.getResourceType().getSubCategory()
+ .getParentSubCategory();
if (categoryKey == null) {
categoryKey = res.getResourceType().getSubCategory();
}
@@ -132,13 +134,13 @@ public class ResourceTreeModelUIBean {
}
}
-
+
Set<String> dupResourceTypeNames = getDuplicateResourceTypeNames(children);
- for(Map.Entry<Object, List<ResourceFlyweight>> entry : children.entrySet()) {
+ for (Map.Entry<Object, List<ResourceFlyweight>> entry : children.entrySet()) {
Object key = entry.getKey();
List<ResourceFlyweight> resources = entry.getValue();
-
+
double avail = 0;
for (ResourceFlyweight res : resources) {
avail += res.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP ? 1 : 0;
@@ -147,10 +149,11 @@ public class ResourceTreeModelUIBean {
Object nodeData = null;
if (key instanceof ResourceSubCategoryFlyweight) {
- nodeData = new AutoGroupCompositeFlyweight(avail, parentResource, (ResourceSubCategoryFlyweight) key, resources.size());
+ nodeData = new AutoGroupCompositeFlyweight(avail, parentResource,
+ (ResourceSubCategoryFlyweight) key, resources.size());
} else if (key instanceof ResourceTypeFlyweight) {
ResourceTypeFlyweight typeKey = (ResourceTypeFlyweight) key;
-
+
if (typeKey.isSingleton()) {
nodeData = resources.get(0);
} else {
@@ -174,10 +177,10 @@ public class ResourceTreeModelUIBean {
Map<Object, List<ResourceFlyweight>> children = new HashMap<Object, List<ResourceFlyweight>>();
log.debug("composite parent" + compositeParent);
if (compositeParent != null) {
-
+
MembersCategoryHint membersCategory = MembersCategoryHint.NONE;
MembersAvailabilityHint membersAvailabilityHint = MembersAvailabilityHint.UP;
-
+
for (ResourceFlyweight res : compositeParent.getParentResource().getChildResources()) {
boolean process = false;
if (compositeParent.getSubcategory() != null) {
@@ -199,17 +202,18 @@ public class ResourceTreeModelUIBean {
} else if (compositeParent.getResourceType() != null) {
if (compositeParent.getResourceType().equals(res.getResourceType())
&& compositeParent.getParentResource().getId() == res.getParentResource().getId()) {
-
+
addToList(children, res.getResourceType(), res);
process = true;
}
}
-
+
if (process) {
//amend the overall category of all the members of the auto group.
switch (membersCategory) {
case NONE: //this is the first child, so let's use its category as a starting point
- membersCategory = MembersCategoryHint.fromResourceCategory(res.getResourceType().getCategory());
+ membersCategory = MembersCategoryHint.fromResourceCategory(res.getResourceType()
+ .getCategory());
break;
case MIXED: //this is the "final" state. The children type is not going to change from this.
break;
@@ -218,34 +222,36 @@ public class ResourceTreeModelUIBean {
membersCategory = MembersCategoryHint.MIXED;
}
}
-
+
//amend the availability hint of the autogroup. If all resources are up, the hint is UP, if some of the resources
//are down, the hint is DOWN, if some of the resources' avail state is unknown, the hint is UNKNOWN.
//The down state has the highest priority.
switch (membersAvailabilityHint) {
case UP:
- membersAvailabilityHint = MembersAvailabilityHint.fromAvailabilityType(res.getCurrentAvailability().getAvailabilityType());
+ membersAvailabilityHint = MembersAvailabilityHint.fromAvailabilityType(res
+ .getCurrentAvailability().getAvailabilityType());
break;
case UNKNOWN:
if (res.getCurrentAvailability().getAvailabilityType() == AvailabilityType.DOWN) {
membersAvailabilityHint = MembersAvailabilityHint.DOWN;
}
break;
- case DOWN:; //a "terminal" state... if some resource is down, the overall state is going to be down as that is the most important information.
+ case DOWN:
+ ; //a "terminal" state... if some resource is down, the overall state is going to be down as that is the most important information.
}
}
}
-
+
compositeParent.setMembersCategoryHint(membersCategory);
compositeParent.setMembersAvailabilityHint(membersAvailabilityHint);
}
AutoGroupCompositeFlyweight compositeParentNode = (AutoGroupCompositeFlyweight) parentNode.getData();
-
+
for (Map.Entry<Object, List<ResourceFlyweight>> entry : children.entrySet()) {
Object key = entry.getKey();
List<ResourceFlyweight> resources = entry.getValue();
-
+
if (compositeParentNode.getSubcategory() != null) {
double avail = 0;
for (ResourceFlyweight res : resources) {
@@ -262,13 +268,13 @@ public class ResourceTreeModelUIBean {
if (typeKey.isSingleton()) {
nodeData = resources.get(0);
} else {
- nodeData = new AutoGroupCompositeFlyweight(avail, compositeParent.getParentResource(), typeKey,
- resources.size(), false);
+ nodeData = new AutoGroupCompositeFlyweight(avail, compositeParent.getParentResource(),
+ typeKey, resources.size(), false);
}
}
ResourceTreeNode node = new ResourceTreeNode(nodeData, parentNode);
load(node);
-
+
if (!recursivelyLocked(node)) {
parentNode.getChildren().add(node);
}
@@ -279,7 +285,7 @@ public class ResourceTreeModelUIBean {
if (!recursivelyLocked(node)) {
parentNode.getChildren().add(node);
}
- }
+ }
}
}
}
@@ -289,7 +295,7 @@ public class ResourceTreeModelUIBean {
if (node.getData() instanceof ResourceFlyweight && !((ResourceFlyweight) node.getData()).isLocked()) {
return false;
}
-
+
boolean allLocked = true;
for (ResourceTreeNode child : node.getChildren()) {
if (!recursivelyLocked(child))
@@ -337,15 +343,15 @@ public class ResourceTreeModelUIBean {
}
return dupResourceTypeNames;
}
-
+
private static <K, V> void addToList(Map<K, List<V>> mapOfLists, K key, V value) {
List<V> list = mapOfLists.get(key);
-
+
if (list == null) {
list = new ArrayList<V>();
mapOfLists.put(key, list);
}
-
+
list.add(value);
}
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
index 2ceaa88..76c4d15 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertDefinitionManagerBean.java
@@ -243,8 +243,8 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
if (alertDefinition.getRecoveryId() != 0) {
// only add to the cache if the to-be-recovered definition is disabled, and thus needs recovering
// use entityManager direct to bypass security checks, we already know this user is authorized
- AlertDefinition toBeRecoveredDefinition = entityManager.find(AlertDefinition.class,
- alertDefinition.getRecoveryId());
+ AlertDefinition toBeRecoveredDefinition = entityManager.find(AlertDefinition.class, alertDefinition
+ .getRecoveryId());
if (toBeRecoveredDefinition.getEnabled() == false) {
addToCache = true;
}
@@ -254,7 +254,8 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
}
if (addToCache) {
- notifyAlertConditionCacheManager("createAlertDefinition", alertDefinition, AlertDefinitionEvent.CREATED);
+ notifyAlertConditionCacheManager(subject, "createAlertDefinition", alertDefinition,
+ AlertDefinitionEvent.CREATED);
}
return alertDefinition.getId();
@@ -309,7 +310,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
// alertTemplates and groupAlertDefinitions do not need to update the cache
isResourceLevel = (null != alertDefinition.getResource());
if (isResourceLevel) {
- notifyAlertConditionCacheManager("removeAlertDefinitions", alertDefinition,
+ notifyAlertConditionCacheManager(subject, "removeAlertDefinitions", alertDefinition,
AlertDefinitionEvent.DELETED);
}
if (alertDefinition.getResourceGroup() != null) {
@@ -337,7 +338,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
// alertTemplates and groupAlertDefinitions do not need to update the cache
isResourceLevel = (null != alertDefinition.getResource());
if (isResourceLevel) {
- notifyAlertConditionCacheManager("enableAlertDefinitions", alertDefinition,
+ notifyAlertConditionCacheManager(subject, "enableAlertDefinitions", alertDefinition,
AlertDefinitionEvent.ENABLED);
}
}
@@ -395,7 +396,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
// alertTemplates and groupAlertDefinitions do not need to update the cache
isResourceLevel = (null != alertDefinition.getResource());
if (isResourceLevel) {
- notifyAlertConditionCacheManager("disableAlertDefinitions", alertDefinition,
+ notifyAlertConditionCacheManager(subject, "disableAlertDefinitions", alertDefinition,
AlertDefinitionEvent.DISABLED);
}
}
@@ -423,7 +424,8 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
entityManager.persist(newAlertDefinition);
- notifyAlertConditionCacheManager("copyAlertDefinitions", alertDefinition, AlertDefinitionEvent.CREATED);
+ notifyAlertConditionCacheManager(subject, "copyAlertDefinitions", alertDefinition,
+ AlertDefinitionEvent.CREATED);
}
}
}
@@ -499,7 +501,8 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
for (AlertCondition nextCondition : oldAlertDefinition.getConditions()) {
LOG.debug("OldAlertCondition[ id=" + nextCondition.getId() + " ]");
}
- notifyAlertConditionCacheManager("updateAlertDefinition", oldAlertDefinition, AlertDefinitionEvent.DELETED);
+ notifyAlertConditionCacheManager(subject, "updateAlertDefinition", oldAlertDefinition,
+ AlertDefinitionEvent.DELETED);
}
/*
@@ -540,8 +543,8 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
// if this was a recovery alert, or was recently turned into one
if (newAlertDefinition.getRecoveryId() != 0) {
// only add to the cache if the to-be-recovered definition is disabled, and thus needs recovering
- AlertDefinition toBeRecoveredDefinition = getAlertDefinitionById(subject,
- newAlertDefinition.getRecoveryId());
+ AlertDefinition toBeRecoveredDefinition = getAlertDefinitionById(subject, newAlertDefinition
+ .getRecoveryId());
if (toBeRecoveredDefinition.getEnabled() == false) {
addToCache = true;
}
@@ -555,7 +558,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
for (AlertCondition nextCondition : newAlertDefinition.getConditions()) {
LOG.debug("NewAlertCondition[ id=" + nextCondition.getId() + " ]");
}
- notifyAlertConditionCacheManager("updateAlertDefinition", newAlertDefinition,
+ notifyAlertConditionCacheManager(subject, "updateAlertDefinition", newAlertDefinition,
AlertDefinitionEvent.CREATED);
}
}
@@ -613,7 +616,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
return;
}
- private void notifyAlertConditionCacheManager(String methodName, AlertDefinition alertDefinition,
+ private void notifyAlertConditionCacheManager(Subject subject, String methodName, AlertDefinition alertDefinition,
AlertDefinitionEvent alertDefinitionEvent) {
if (LOG.isDebugEnabled()) {
LOG.debug("Invoking... " + methodName + " with AlertDefinitionEvent[" + alertDefinitionEvent + "]");
@@ -624,7 +627,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
if (LOG.isDebugEnabled()) {
LOG.debug("Invoking... agentStatusManager.updateByResource(" + resourceId + ")");
}
- agentStatusManager.updateByResource(resourceId);
+ agentStatusManager.updateByResource(subject, resourceId);
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("notifyAlertConditionCacheManager skipping alert template or group alert definition");
@@ -634,7 +637,7 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
if (LOG.isDebugEnabled()) {
LOG.debug("Invoking... agentStatusManager.updateByAlertDefinition(" + alertDefinition.getId() + ")");
}
- agentStatusManager.updateByAlertDefinition(alertDefinition.getId());
+ agentStatusManager.updateByAlertDefinition(subject, alertDefinition.getId());
}
}
@@ -696,8 +699,8 @@ public class AlertDefinitionManagerBean implements AlertDefinitionManagerLocal,
public PageList<AlertDefinition> findAlertDefinitionsByCriteria(Subject subject, AlertDefinitionCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
if (authorizationManager.isInventoryManager(subject) == false) {
- generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.RESOURCE,
- subject.getId());
+ generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.RESOURCE, subject
+ .getId());
}
CriteriaQueryRunner<AlertDefinition> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index e6fc90c..00fe978 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -862,7 +862,7 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
Resource platform, boolean isCleanDeployment, boolean isRevert) throws Exception {
int platformId = platform.getId();
- AgentClient agentClient = agentManager.getAgentClient(platformId);
+ AgentClient agentClient = agentManager.getAgentClient(subject, platformId);
BundleAgentService bundleAgentService = agentClient.getBundleAgentService();
// The BundleResourceDeployment record must exist in the db before the agent request because the agent may try
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
index 61655c9..737e378 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
@@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory;
import org.jboss.annotation.IgnoreDependency;
import org.rhq.core.domain.alert.AlertDefinition;
+import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.measurement.MeasurementBaseline;
import org.rhq.core.domain.resource.Agent;
@@ -106,7 +107,7 @@ public class StatusManagerBean implements StatusManagerLocal {
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
- public void updateByResource(int resourceId) {
+ public void updateByResource(Subject subject, int resourceId) {
log.debug("About to mark status by resource");
/*
@@ -125,7 +126,7 @@ public class StatusManagerBean implements StatusManagerLocal {
* this is informational debugging only - do NOT change the status bits here
*/
if (log.isDebugEnabled()) {
- Agent agent = agentManager.getAgentByResourceId(resourceId);
+ Agent agent = agentManager.getAgentByResourceId(subject, resourceId);
log.debug("Marking status, agent[id=" + agent.getId() + ", status=" + agent.getStatus()
+ "] for resource[id=" + resourceId + "]");
@@ -134,7 +135,7 @@ public class StatusManagerBean implements StatusManagerLocal {
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
- public void updateByAlertDefinition(int alertDefinitionId) {
+ public void updateByAlertDefinition(Subject subject, int alertDefinitionId) {
log.debug("About to mark status by alert definition");
// alert templates and group alert definitions do not represent cache-ready entries
@@ -159,7 +160,7 @@ public class StatusManagerBean implements StatusManagerLocal {
*/
if (log.isDebugEnabled()) {
AlertDefinition definition = entityManager.find(AlertDefinition.class, alertDefinitionId);
- Agent agent = agentManager.getAgentByResourceId(definition.getResource().getId());
+ Agent agent = agentManager.getAgentByResourceId(subject, definition.getResource().getId());
log.debug("Marking status, agent[id=" + agent.getId() + ", status=" + agent.getStatus()
+ "] for alertDefinition[id=" + alertDefinitionId + "]");
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerLocal.java
index 26322d2..95f11b6 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerLocal.java
@@ -22,6 +22,8 @@ import java.util.List;
import javax.ejb.Local;
+import org.rhq.core.domain.auth.Subject;
+
/**
* @author Joseph Marques
*/
@@ -32,9 +34,9 @@ public interface StatusManagerLocal {
void markGlobalCache();
- void updateByResource(int resourceId);
+ void updateByResource(Subject subject, int resourceId);
- void updateByAlertDefinition(int alertDefinitionId);
+ void updateByAlertDefinition(Subject subject, int alertDefinitionId);
void updateByMeasurementBaseline(int baselineId);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
index 78a5aa4..201fccf 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
@@ -58,6 +58,8 @@ import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.agentclient.AgentClient;
+import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
+import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.cloud.FailoverListManagerLocal;
import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean;
@@ -96,6 +98,9 @@ public class AgentManagerBean implements AgentManagerLocal {
@EJB
private SystemManagerLocal systemManager;
+ @EJB
+ private AuthorizationManagerLocal authorizationManager;
+
// constants used for the agent update version file
private static final String RHQ_SERVER_VERSION = "rhq-server.version";
private static final String RHQ_SERVER_BUILD_NUMBER = "rhq-server.build-number";
@@ -153,8 +158,8 @@ public class AgentManagerBean implements AgentManagerLocal {
}
@ExcludeDefaultInterceptors
- public AgentClient getAgentClient(int resourceId) {
- Agent agent = getAgentByResourceId(resourceId);
+ public AgentClient getAgentClient(Subject subject, int resourceId) {
+ Agent agent = getAgentByResourceId(subject, resourceId);
if (agent == null) {
log.debug("Resource [" + resourceId + "] does not exist or has no agent assigned");
@@ -351,10 +356,17 @@ public class AgentManagerBean implements AgentManagerLocal {
}
@ExcludeDefaultInterceptors
- public Agent getAgentByResourceId(int resourceId) {
+ public Agent getAgentByResourceId(Subject subject, int resourceId) {
Agent agent;
try {
+ //insert logged in check and view resources perm check as method calld from GWT*Service
+ if ((subject != null)
+ && (!authorizationManager.hasResourcePermission(subject, Permission.VIEW_RESOURCE, resourceId))) {
+ throw new PermissionException("Can not get agent details - " + subject + " lacks "
+ + Permission.VIEW_RESOURCE + " for resource[id=" + resourceId + "]");
+ }
+
Query query = entityManager.createNamedQuery(Agent.QUERY_FIND_BY_RESOURCE_ID);
query.setParameter("resourceId", resourceId);
agent = (Agent) query.getSingleResult();
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
index bc744f1..4821b91 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
@@ -82,7 +82,7 @@ public interface AgentManagerLocal {
* @return an agent client that can be used to send commands to the JON agent that manages the resource
*/
@NotNull
- AgentClient getAgentClient(int resourceId);
+ AgentClient getAgentClient(Subject subject, int resourceId);
/**
* Returns a collection of all agents currently in inventory.
@@ -151,12 +151,13 @@ public interface AgentManagerLocal {
/**
* Given a resource ID, this will return the agent responsible for servicing that resource.
+ * @param subject
*
* @param resourceId
*
* @return the agent that services the resource, or <code>null</code> if the resource ID was invalid
*/
- Agent getAgentByResourceId(int resourceId);
+ Agent getAgentByResourceId(Subject subject, int resourceId);
/**
* Given a resource ID, this will return the agent id responsible for servicing that resource.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
index 6a8b6a4..d9b5a3d 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
@@ -303,7 +303,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
public void disableDefaultCollectionForMeasurementDefinitions(Subject subject, int[] measurementDefinitionIds,
boolean updateSchedules) {
- modifyDefaultCollectionIntervalForMeasurementDefinitions(measurementDefinitionIds, -1, updateSchedules);
+ modifyDefaultCollectionIntervalForMeasurementDefinitions(subject, measurementDefinitionIds, -1, updateSchedules);
return;
}
@@ -338,7 +338,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
public void updateDefaultCollectionIntervalForMeasurementDefinitions(Subject subject,
int[] measurementDefinitionIds, long collectionInterval, boolean updateExistingSchedules) {
collectionInterval = verifyMinimumCollectionInterval(collectionInterval);
- modifyDefaultCollectionIntervalForMeasurementDefinitions(measurementDefinitionIds, collectionInterval,
+ modifyDefaultCollectionIntervalForMeasurementDefinitions(subject, measurementDefinitionIds, collectionInterval,
updateExistingSchedules);
}
@@ -347,6 +347,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
* definitions. If updateExistingSchedules is true, the schedules for the corresponding metrics or all inventoried
* Resources are also updated. Otherwise, the updated templates will only affect Resources that added to
* inventory in the future.
+ * @param subject
*
* @param measurementDefinitionIds the IDs of the metric defs whose default schedules should be updated
* @param collectionInterval if > 0, enable the metric with this value as the the new collection
@@ -356,7 +357,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
* interval allowed
* @param updateExistingSchedules if true, existing Resource schedules for metrics of this type should also be updated
*/
- private void modifyDefaultCollectionIntervalForMeasurementDefinitions(
+ private void modifyDefaultCollectionIntervalForMeasurementDefinitions(Subject subject,
int[] measurementDefinitionIds, long collectionInterval, boolean updateExistingSchedules) {
if (measurementDefinitionIds == null || measurementDefinitionIds.length == 0) {
@@ -370,8 +371,8 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
for (int batchIndex = 0; (batchIndex < measurementDefinitionIds.length); batchIndex += 1000) {
int[] batchIdArray = ArrayUtils.copyOfRange(measurementDefinitionIds, batchIndex, batchIndex + 1000);
- modifyDefaultCollectionIntervalForMeasurementDefinitions(batchIdArray, enable,
- collectionInterval, updateExistingSchedules);
+ modifyDefaultCollectionIntervalForMeasurementDefinitions(subject, batchIdArray, enable, collectionInterval,
+ updateExistingSchedules);
}
}
@@ -384,6 +385,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
* <strong>Only the 3-param modifyDefaultCollectionIntervalForMeasurementDefinitions method should call this method,
* since it will batch the metric defs specified by the user to ensure no more than 1000 metric defs are passed to
* this method.</strong>
+ * @param subject
*
* @param measurementDefinitionIds the IDs of the metric defs whose default schedules should be updated; the size of
* this array must be <= 1000
@@ -396,7 +398,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
* @param updateExistingSchedules if true, existing Resource schedules for metrics of this type should also be updated
*/
@SuppressWarnings("unchecked")
- private void modifyDefaultCollectionIntervalForMeasurementDefinitions(
+ private void modifyDefaultCollectionIntervalForMeasurementDefinitions(Subject subject,
int[] measurementDefinitionIds, boolean enable, long collectionInterval, boolean updateExistingSchedules) {
// this method has been rewritten to ensure that the Hibernate cache is not utilized in an
@@ -494,7 +496,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
// The number of Agents is manageable, so we can work with entities here
for (Integer resourceId : reqMap.keySet()) {
- Agent agent = agentManager.getAgentByResourceId(resourceId);
+ Agent agent = agentManager.getAgentByResourceId(subject, resourceId);
Set<ResourceMeasurementScheduleRequest> agentUpdate = agentUpdates.get(agent);
if (agentUpdate == null) {
@@ -1156,7 +1158,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
}
public void enableMeasurementTemplates(Subject subject, int[] measurementDefinitionIds) {
- modifyDefaultCollectionIntervalForMeasurementDefinitions(measurementDefinitionIds, 0, true);
+ modifyDefaultCollectionIntervalForMeasurementDefinitions(subject, measurementDefinitionIds, 0, true);
}
/**
@@ -1181,7 +1183,7 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
updateSchedulesForContext(subject, EntityContext.forResource(resourceId), measurementDefinitionIds,
collectionInterval);
}
-
+
public void updateSchedulesForCompatibleGroup(Subject subject, int groupId, int[] measurementDefinitionIds,
long collectionInterval) {
// don't verify minimum collection interval here, it will be caught by updateMeasurementSchedules callee
@@ -1201,29 +1203,27 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
// check authorization up front, so that criteria-based queries can run without authz checks
switch (context.type) {
- case Resource:
- if (authorizationManager.canViewResource(subject, context.resourceId) == false) {
- throw new PermissionException("User [" + subject.getName()
- + "] does not have permission to view measurement schedules for resource[id=" +
- context.resourceId
- + "]");
- }
- break;
- case ResourceGroup:
- if (authorizationManager.canViewGroup(subject, context.groupId) == false) {
- throw new PermissionException("User [" + subject.getName()
- + "] does not have permission to view measurement schedules for resourceGroup[id="
- + context.groupId + "]");
- }
- break;
- case AutoGroup:
- if (authorizationManager.canViewAutoGroup(subject, context.parentResourceId, context.resourceTypeId) ==
- false) {
- throw new PermissionException("User [" + subject.getName()
- + "] does not have permission to view measurement schedules for autoGroup[parentResourceId="
- + context.parentResourceId + ", resourceTypeId=" + context.resourceTypeId + "]");
- }
- break;
+ case Resource:
+ if (authorizationManager.canViewResource(subject, context.resourceId) == false) {
+ throw new PermissionException("User [" + subject.getName()
+ + "] does not have permission to view measurement schedules for resource[id=" + context.resourceId
+ + "]");
+ }
+ break;
+ case ResourceGroup:
+ if (authorizationManager.canViewGroup(subject, context.groupId) == false) {
+ throw new PermissionException("User [" + subject.getName()
+ + "] does not have permission to view measurement schedules for resourceGroup[id="
+ + context.groupId + "]");
+ }
+ break;
+ case AutoGroup:
+ if (authorizationManager.canViewAutoGroup(subject, context.parentResourceId, context.resourceTypeId) == false) {
+ throw new PermissionException("User [" + subject.getName()
+ + "] does not have permission to view measurement schedules for autoGroup[parentResourceId="
+ + context.parentResourceId + ", resourceTypeId=" + context.resourceTypeId + "]");
+ }
+ break;
}
PageList<MeasurementDefinition> definitions;
@@ -1246,16 +1246,16 @@ public class MeasurementScheduleManagerBean implements MeasurementScheduleManage
MeasurementScheduleCriteria criteria = new MeasurementScheduleCriteria();
//criteria.addFilterDefinitionIds(measurementDefinitionIds);
switch (context.type) {
- case Resource:
- criteria.addFilterResourceId(context.resourceId);
- break;
- case ResourceGroup:
- criteria.addFilterResourceGroupId(context.groupId);
- break;
- case AutoGroup:
- criteria.addFilterAutoGroupParentResourceId(context.parentResourceId);
- criteria.addFilterAutoGroupResourceTypeId(context.resourceTypeId);
- break;
+ case Resource:
+ criteria.addFilterResourceId(context.resourceId);
+ break;
+ case ResourceGroup:
+ criteria.addFilterResourceGroupId(context.groupId);
+ break;
+ case AutoGroup:
+ criteria.addFilterAutoGroupParentResourceId(context.parentResourceId);
+ criteria.addFilterAutoGroupResourceTypeId(context.resourceTypeId);
+ break;
}
criteria.setPageControl(pc); // for primary return list, use passed PageControl
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
index 022811b..21d0770 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
@@ -855,7 +855,7 @@ public class OperationManagerBean implements OperationManagerLocal, OperationMan
boolean canceled = false;
try {
- agent = agentManager.getAgentClient(resourceId);
+ agent = agentManager.getAgentClient(subject, resourceId);
// since this method is usually called by the UI, we want to quickly determine if we can even talk to the agent
if (agent.ping(5000L)) {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
index 725e074..2139ac7 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/ResourceOperationJob.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.server.operation;
+import javax.ejb.EJBException;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobDataMap;
@@ -37,8 +39,6 @@ import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceNotFoundException;
import org.rhq.enterprise.server.util.LookupUtil;
-import javax.ejb.EJBException;
-
/**
* A job that invokes an operation on a single resource.
*
@@ -105,8 +105,8 @@ public class ResourceOperationJob extends OperationJob {
if (isResourceUncommitted(context.getJobDetail())) {
int resourceId = getResourceId(context.getJobDetail());
- String msg = "The resource with id " + resourceId + " is not committed in inventory. It may have " +
- "been deleted from inventory. Canceling job.";
+ String msg = "The resource with id " + resourceId + " is not committed in inventory. It may have "
+ + "been deleted from inventory. Canceling job.";
log.warn(msg);
throw new CancelJobException(msg, e);
}
@@ -132,8 +132,7 @@ public class ResourceOperationJob extends OperationJob {
try {
Resource resource = resourceMgr.getResource(getOverlord(), resourceId);
return isResourceUncommitted(resource);
- }
- catch (EJBException e) {
+ } catch (EJBException e) {
if (e.getCausedByException() instanceof ResourceNotFoundException) {
return true;
}
@@ -145,7 +144,6 @@ public class ResourceOperationJob extends OperationJob {
return resource == null || resource.getInventoryStatus() != InventoryStatus.COMMITTED;
}
-
/**
* Actually invokes the operation by sending the command to the agent. This is package-scoped so the group job can
* call this for each member resource in the group. If groupHistory is not <code>null</code>, it means this resource
@@ -171,14 +169,14 @@ public class ResourceOperationJob extends OperationJob {
Resource resource = schedule.getResource();
if (isResourceUncommitted(resource)) {
- String msg = "The resource with id " + resource.getId() + " is not committed in inventory. It may " +
- "have been deleted from inventory. Canceling job.";
+ String msg = "The resource with id " + resource.getId() + " is not committed in inventory. It may "
+ + "have been deleted from inventory. Canceling job.";
log.warn(msg);
throw new CancelJobException(msg);
}
AgentManagerLocal agentManager = LookupUtil.getAgentManager();
- AgentClient agentClient = agentManager.getAgentClient(resource.getId());
+ AgentClient agentClient = agentManager.getAgentClient(schedule.getSubject(), resource.getId());
agentClient.getOperationAgentService().invokeOperation(resourceHistory.getJobId().toString(),
resource.getId(), schedule.getOperationName(), schedule.getParameters());
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index 0c7198a..7a6fea3 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -267,7 +267,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
if (resource.getParentResource() == null) {
try {
// note, this needs to be done before the marking because the agent reference is going to be set to null
- doomedAgent = agentManager.getAgentByResourceId(resourceId);
+ doomedAgent = agentManager.getAgentByResourceId(user, resourceId);
} catch (Exception e) {
doomedAgent = null;
log.warn("This warning should occur in TEST code only! " + e);
@@ -277,7 +277,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
AgentClient agentClient = null;
try {
// The test code does not always generate agents for the resources. Catch and log any problem but continue
- agentClient = agentManager.getAgentClient(resourceId);
+ agentClient = agentManager.getAgentClient(user, resourceId);
} catch (Throwable t) {
log.warn("No AgentClient found for resource [" + resource
+ "]. Unable to inform agent of inventory removal (this may be ok): " + t);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/support/SupportManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/support/SupportManagerBean.java
index 6cdb34a..b81b0a8 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/support/SupportManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/support/SupportManagerBean.java
@@ -64,7 +64,7 @@ public class SupportManagerBean implements SupportManagerLocal, SupportManagerRe
public InputStream getSnapshotReportStream(Subject subject, int resourceId, String name, String description)
throws Exception {
- AgentClient agentClient = this.agentManager.getAgentClient(resourceId);
+ AgentClient agentClient = this.agentManager.getAgentClient(subject, resourceId);
SupportAgentService supportService = agentClient.getSupportAgentService();
InputStream snapshotStream = supportService.getSnapshotReport(resourceId, name, description);
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/performance/test/AvailabilityInsertPurgeTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/performance/test/AvailabilityInsertPurgeTest.java
index eecf9a5..d6acd3b 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/performance/test/AvailabilityInsertPurgeTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/performance/test/AvailabilityInsertPurgeTest.java
@@ -25,6 +25,12 @@ import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
+import org.testng.ITestResult;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+
import org.rhq.core.domain.alert.AlertCondition;
import org.rhq.core.domain.alert.AlertConditionCategory;
import org.rhq.core.domain.alert.AlertDampening;
@@ -48,22 +54,16 @@ import org.rhq.helpers.perftest.support.testng.DatabaseSetupInterceptor;
import org.rhq.helpers.perftest.support.testng.DatabaseState;
import org.rhq.helpers.perftest.support.testng.PerformanceReporting;
-import org.testng.ITestResult;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Listeners;
-import org.testng.annotations.Test;
-
/**
* Performance test the availabilities subsystem
*
* @author Heiko W. Rupp
* @author Lukas Krejci
*/
-@Test(groups = "PERF" )
-@Listeners({ DatabaseSetupInterceptor.class })
-(a)PerformanceReporting(exporter=ExcelExporter.class)
-@DatabaseState(url = "perftest/AvailabilityInsertPurgeTest-testOne-data.xml.zip", dbVersion="2.101")
+@Test(groups = "PERF")
+@Listeners( { DatabaseSetupInterceptor.class })
+@PerformanceReporting(exporter = ExcelExporter.class)
+@DatabaseState(url = "perftest/AvailabilityInsertPurgeTest-testOne-data.xml.zip", dbVersion = "2.101")
public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
ResourceManagerLocal resourceManager;
@@ -74,8 +74,9 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
private static final int MILLIS_APART = 2000;
private static final String ROUND__FORMAT = "Round %6d";
private static final String PURGE__FORMAT = "Purge %6d";
- private static final int[] ROUNDS = new int[]{1000,2000,3000,5000,10000};
-// private static final int[] ROUNDS = new int[]{10,20};
+ private static final int[] ROUNDS = new int[] { 1000, 2000, 3000, 5000, 10000 };
+
+ // private static final int[] ROUNDS = new int[]{10,20};
@BeforeMethod
public void beforeMethod(Method method) {
@@ -103,10 +104,9 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
@AfterMethod
public void afterMethod(ITestResult result, Method meth) {
- super.reportTimings(result,meth);
+ super.reportTimings(result, meth);
}
-
/**
* Send availability reports to the server and measure timing.
* For each resource, availability alternates for each report.
@@ -123,15 +123,15 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
Query q = em.createQuery("SELECT r FROM Resource r");
List<Resource> resources = q.getResultList();
Resource res = resources.get(0);
- Agent agent = agentManager.getAgentByResourceId(res.getId());
+ Agent agent = agentManager.getAgentByResourceId(overlord, res.getId());
q = em.createQuery("SELECT COUNT(a) FROM Availability a ");
Object o = q.getSingleResult();
- Long l = (Long)o;
- if (l!=0) {
+ Long l = (Long) o;
+ if (l != 0) {
throw new IllegalStateException("Availabilities table is not empty");
}
- systemManager.vacuum(overlord,new String[]{"rhq_availability"});
+ systemManager.vacuum(overlord, new String[] { "rhq_availability" });
for (int MULTI : ROUNDS) {
String round = String.format(ROUND__FORMAT, MULTI);
@@ -151,38 +151,37 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
}
// merge is over. Now lets purge in two steps
- startTiming(String.format(PURGE__FORMAT,MULTI));
- availabilityManager.purgeAvailabilities(t1 + (MULTI/2)*MILLIS_APART);
- endTiming(String.format(PURGE__FORMAT,MULTI));
- startTiming(String.format(PURGE__FORMAT,MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
+ availabilityManager.purgeAvailabilities(t1 + (MULTI / 2) * MILLIS_APART);
+ endTiming(String.format(PURGE__FORMAT, MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
availabilityManager.purgeAvailabilities(t1);
- endTiming(String.format(PURGE__FORMAT,MULTI));
+ endTiming(String.format(PURGE__FORMAT, MULTI));
// Vacuum the db
overlord = LookupUtil.getSubjectManager().getOverlord();
- systemManager.vacuum(overlord,new String[]{"rhq_availability"});
+ systemManager.vacuum(overlord, new String[] { "rhq_availability" });
}
+ long timing1000 = getTiming(String.format(ROUND__FORMAT, 1000));
+ long timing2000 = getTiming(String.format(ROUND__FORMAT, 2000));
+ long timing3000 = getTiming(String.format(ROUND__FORMAT, 3000));
+ long timing5000 = getTiming(String.format(ROUND__FORMAT, 5000));
+ long timing10000 = getTiming(String.format(ROUND__FORMAT, 10000));
- long timing1000 = getTiming(String.format(ROUND__FORMAT,1000));
- long timing2000 = getTiming(String.format(ROUND__FORMAT,2000));
- long timing3000 = getTiming(String.format(ROUND__FORMAT,3000));
- long timing5000 = getTiming(String.format(ROUND__FORMAT,5000));
- long timing10000 = getTiming(String.format(ROUND__FORMAT,10000));
+ assertLinear(timing1000, timing2000, 2, "Merge2");
+ assertLinear(timing1000, timing3000, 3, "Merge3");
+ assertLinear(timing1000, timing5000, 5, "Merge5");
+ assertLinear(timing1000, timing10000, 10, "Merge10");
- assertLinear(timing1000,timing2000,2,"Merge2");
- assertLinear(timing1000,timing3000,3,"Merge3");
- assertLinear(timing1000,timing5000,5,"Merge5");
- assertLinear(timing1000,timing10000,10,"Merge10");
+ long purge1000 = getTiming(String.format(PURGE__FORMAT, 1000));
+ long purge2000 = getTiming(String.format(PURGE__FORMAT, 2000));
+ long purge3000 = getTiming(String.format(PURGE__FORMAT, 3000));
+ long purge5000 = getTiming(String.format(PURGE__FORMAT, 5000));
- long purge1000 = getTiming(String.format(PURGE__FORMAT,1000));
- long purge2000 = getTiming(String.format(PURGE__FORMAT,2000));
- long purge3000 = getTiming(String.format(PURGE__FORMAT,3000));
- long purge5000 = getTiming(String.format(PURGE__FORMAT,5000));
-
- assertLinear(purge1000,purge2000,2,"Purge2");
- assertLinear(purge1000,purge3000,3,"Purge3");
- assertLinear(purge1000,purge5000,5,"Purge3");
+ assertLinear(purge1000, purge2000, 2, "Purge2");
+ assertLinear(purge1000, purge3000, 3, "Purge3");
+ assertLinear(purge1000, purge5000, 5, "Purge3");
}
@@ -194,12 +193,11 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
public void testRandom() throws Exception {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
-
EntityManager em = getEntityManager();
Query q = em.createQuery("SELECT r FROM Resource r");
List<Resource> resources = q.getResultList();
Resource res = resources.get(0);
- Agent agent = agentManager.getAgentByResourceId(res.getId());
+ Agent agent = agentManager.getAgentByResourceId(overlord, res.getId());
for (int MULTI : ROUNDS) {
String round = String.format(ROUND__FORMAT, MULTI);
@@ -209,7 +207,7 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
AvailabilityReport report = new AvailabilityReport(agent.getName());
for (Resource r : resources) {
- int rand = (int) (Math.random()*2);
+ int rand = (int) (Math.random() * 2);
AvailabilityType at = (rand == 1) ? AvailabilityType.UP : AvailabilityType.DOWN;
Availability a = new Availability(r, new Date(t1 + i * MILLIS_APART), at);
report.addAvailability(a);
@@ -220,39 +218,37 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
}
// merge is over. Now lets purge in two steps
- startTiming(String.format(PURGE__FORMAT,MULTI));
- availabilityManager.purgeAvailabilities(t1 + (MULTI/2)*MILLIS_APART);
- endTiming(String.format(PURGE__FORMAT,MULTI));
- startTiming(String.format(PURGE__FORMAT,MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
+ availabilityManager.purgeAvailabilities(t1 + (MULTI / 2) * MILLIS_APART);
+ endTiming(String.format(PURGE__FORMAT, MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
availabilityManager.purgeAvailabilities(t1);
- endTiming(String.format(PURGE__FORMAT,MULTI));
+ endTiming(String.format(PURGE__FORMAT, MULTI));
// Vacuum the db
overlord = LookupUtil.getSubjectManager().getOverlord();
- systemManager.vacuum(overlord,new String[]{"rhq_availability"});
+ systemManager.vacuum(overlord, new String[] { "rhq_availability" });
}
- long timing1000 = getTiming(String.format(ROUND__FORMAT,1000));
- long timing2000 = getTiming(String.format(ROUND__FORMAT,2000));
- long timing3000 = getTiming(String.format(ROUND__FORMAT,3000));
- long timing5000 = getTiming(String.format(ROUND__FORMAT,5000));
- long timing10000 = getTiming(String.format(ROUND__FORMAT,10000));
-
-
- assertLinear(timing1000,timing2000,2,"Merge2");
- assertLinear(timing1000,timing3000,3,"Merge3");
- assertLinear(timing1000,timing5000,5,"Merge5");
- assertLinear(timing1000,timing10000,10,"Merge10");
+ long timing1000 = getTiming(String.format(ROUND__FORMAT, 1000));
+ long timing2000 = getTiming(String.format(ROUND__FORMAT, 2000));
+ long timing3000 = getTiming(String.format(ROUND__FORMAT, 3000));
+ long timing5000 = getTiming(String.format(ROUND__FORMAT, 5000));
+ long timing10000 = getTiming(String.format(ROUND__FORMAT, 10000));
+ assertLinear(timing1000, timing2000, 2, "Merge2");
+ assertLinear(timing1000, timing3000, 3, "Merge3");
+ assertLinear(timing1000, timing5000, 5, "Merge5");
+ assertLinear(timing1000, timing10000, 10, "Merge10");
- long purge1000 = getTiming(String.format(PURGE__FORMAT,1000));
- long purge2000 = getTiming(String.format(PURGE__FORMAT,2000));
- long purge3000 = getTiming(String.format(PURGE__FORMAT,3000));
- long purge5000 = getTiming(String.format(PURGE__FORMAT,5000));
+ long purge1000 = getTiming(String.format(PURGE__FORMAT, 1000));
+ long purge2000 = getTiming(String.format(PURGE__FORMAT, 2000));
+ long purge3000 = getTiming(String.format(PURGE__FORMAT, 3000));
+ long purge5000 = getTiming(String.format(PURGE__FORMAT, 5000));
- assertLinear(purge1000,purge2000,2,"Purge2");
- assertLinear(purge1000,purge3000,3,"Purge3");
- assertLinear(purge1000,purge5000,5,"Purge3");
+ assertLinear(purge1000, purge2000, 2, "Purge2");
+ assertLinear(purge1000, purge3000, 3, "Purge3");
+ assertLinear(purge1000, purge5000, 5, "Purge3");
}
@@ -264,12 +260,11 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
public void testAlwaysUp() throws Exception {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
-
EntityManager em = getEntityManager();
Query q = em.createQuery("SELECT r FROM Resource r");
List<Resource> resources = q.getResultList();
Resource res = resources.get(0);
- Agent agent = agentManager.getAgentByResourceId(res.getId());
+ Agent agent = agentManager.getAgentByResourceId(overlord, res.getId());
for (int MULTI : ROUNDS) {
String round = String.format(ROUND__FORMAT, MULTI);
@@ -279,7 +274,7 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
AvailabilityReport report = new AvailabilityReport(agent.getName());
for (Resource r : resources) {
- AvailabilityType at = AvailabilityType.UP;
+ AvailabilityType at = AvailabilityType.UP;
Availability a = new Availability(r, new Date(t1 + i * MILLIS_APART), at);
report.addAvailability(a);
}
@@ -289,40 +284,37 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
}
// merge is over. Now lets purge in two steps
- startTiming(String.format(PURGE__FORMAT,MULTI));
- availabilityManager.purgeAvailabilities(t1 + (MULTI/2)*MILLIS_APART);
- endTiming(String.format(PURGE__FORMAT,MULTI));
- startTiming(String.format(PURGE__FORMAT,MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
+ availabilityManager.purgeAvailabilities(t1 + (MULTI / 2) * MILLIS_APART);
+ endTiming(String.format(PURGE__FORMAT, MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
availabilityManager.purgeAvailabilities(t1);
- endTiming(String.format(PURGE__FORMAT,MULTI));
+ endTiming(String.format(PURGE__FORMAT, MULTI));
// Vacuum the db
overlord = LookupUtil.getSubjectManager().getOverlord();
- systemManager.vacuum(overlord,new String[]{"rhq_availability"});
+ systemManager.vacuum(overlord, new String[] { "rhq_availability" });
}
+ long timing1000 = getTiming(String.format(ROUND__FORMAT, 1000));
+ long timing2000 = getTiming(String.format(ROUND__FORMAT, 2000));
+ long timing3000 = getTiming(String.format(ROUND__FORMAT, 3000));
+ long timing5000 = getTiming(String.format(ROUND__FORMAT, 5000));
+ long timing10000 = getTiming(String.format(ROUND__FORMAT, 10000));
- long timing1000 = getTiming(String.format(ROUND__FORMAT,1000));
- long timing2000 = getTiming(String.format(ROUND__FORMAT,2000));
- long timing3000 = getTiming(String.format(ROUND__FORMAT,3000));
- long timing5000 = getTiming(String.format(ROUND__FORMAT,5000));
- long timing10000 = getTiming(String.format(ROUND__FORMAT,10000));
-
-
- assertLinear(timing1000,timing2000,2,"Merge2");
- assertLinear(timing1000,timing3000,3,"Merge3");
- assertLinear(timing1000,timing5000,5,"Merge5");
- assertLinear(timing1000,timing10000,10,"Merge10");
+ assertLinear(timing1000, timing2000, 2, "Merge2");
+ assertLinear(timing1000, timing3000, 3, "Merge3");
+ assertLinear(timing1000, timing5000, 5, "Merge5");
+ assertLinear(timing1000, timing10000, 10, "Merge10");
+ long purge1000 = getTiming(String.format(PURGE__FORMAT, 1000));
+ long purge2000 = getTiming(String.format(PURGE__FORMAT, 2000));
+ long purge3000 = getTiming(String.format(PURGE__FORMAT, 3000));
+ long purge5000 = getTiming(String.format(PURGE__FORMAT, 5000));
- long purge1000 = getTiming(String.format(PURGE__FORMAT,1000));
- long purge2000 = getTiming(String.format(PURGE__FORMAT,2000));
- long purge3000 = getTiming(String.format(PURGE__FORMAT,3000));
- long purge5000 = getTiming(String.format(PURGE__FORMAT,5000));
-
- assertLinear(purge1000,purge2000,2,"Purge2");
- assertLinear(purge1000,purge3000,3,"Purge3");
- assertLinear(purge1000,purge5000,5,"Purge3");
+ assertLinear(purge1000, purge2000, 2, "Purge2");
+ assertLinear(purge1000, purge3000, 3, "Purge3");
+ assertLinear(purge1000, purge5000, 5, "Purge3");
}
@@ -337,20 +329,19 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
public void testAlternatingWithAlert() throws Exception {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
-
EntityManager em = getEntityManager();
Query q = em.createQuery("SELECT r FROM Resource r");
List<Resource> resources = q.getResultList();
Resource res = resources.get(0);
- Agent agent = agentManager.getAgentByResourceId(res.getId());
+ Agent agent = agentManager.getAgentByResourceId(overlord, res.getId());
q = em.createQuery("SELECT COUNT(a) FROM Availability a ");
Object o = q.getSingleResult();
- Long l = (Long)o;
- if (l!=0) {
+ Long l = (Long) o;
+ if (l != 0) {
throw new IllegalStateException("Availabilities table is not empty");
}
- systemManager.vacuum(overlord,new String[]{"rhq_availability"});
+ systemManager.vacuum(overlord, new String[] { "rhq_availability" });
// Set up an alert definition on one resource
AlertCondition goingDown = new AlertCondition();
@@ -364,7 +355,7 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
def.setPriority(AlertPriority.MEDIUM);
def.setAlertDampening(new AlertDampening(AlertDampening.Category.NONE));
def.setRecoveryId(0);
- alertDefinitionManager.createAlertDefinition(overlord,def,res.getId());
+ alertDefinitionManager.createAlertDefinition(overlord, def, res.getId());
for (int MULTI : ROUNDS) {
String round = String.format(ROUND__FORMAT, MULTI);
@@ -384,38 +375,37 @@ public class AvailabilityInsertPurgeTest extends AbstractEJB3PerformanceTest {
}
// merge is over. Now lets purge in two steps
- startTiming(String.format(PURGE__FORMAT,MULTI));
- availabilityManager.purgeAvailabilities(t1 + (MULTI/2)*MILLIS_APART);
- endTiming(String.format(PURGE__FORMAT,MULTI));
- startTiming(String.format(PURGE__FORMAT,MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
+ availabilityManager.purgeAvailabilities(t1 + (MULTI / 2) * MILLIS_APART);
+ endTiming(String.format(PURGE__FORMAT, MULTI));
+ startTiming(String.format(PURGE__FORMAT, MULTI));
availabilityManager.purgeAvailabilities(t1);
- endTiming(String.format(PURGE__FORMAT,MULTI));
+ endTiming(String.format(PURGE__FORMAT, MULTI));
// Vacuum the db
overlord = LookupUtil.getSubjectManager().getOverlord();
- systemManager.vacuum(overlord,new String[]{"rhq_availability"});
+ systemManager.vacuum(overlord, new String[] { "rhq_availability" });
}
-
- long timing1000 = getTiming(String.format(ROUND__FORMAT,1000));
- long timing2000 = getTiming(String.format(ROUND__FORMAT,2000));
- long timing3000 = getTiming(String.format(ROUND__FORMAT,3000));
- long timing5000 = getTiming(String.format(ROUND__FORMAT,5000));
- long timing10000 = getTiming(String.format(ROUND__FORMAT,10000));
-
- assertLinear(timing1000,timing2000,2,"Merge2");
- assertLinear(timing1000,timing3000,3,"Merge3");
- assertLinear(timing1000,timing5000,5,"Merge5");
- assertLinear(timing1000,timing10000,10,"Merge10");
-
- long purge1000 = getTiming(String.format(PURGE__FORMAT,1000));
- long purge2000 = getTiming(String.format(PURGE__FORMAT,2000));
- long purge3000 = getTiming(String.format(PURGE__FORMAT,3000));
- long purge5000 = getTiming(String.format(PURGE__FORMAT,5000));
-
- assertLinear(purge1000,purge2000,2,"Purge2");
- assertLinear(purge1000,purge3000,3,"Purge3");
- assertLinear(purge1000,purge5000,5,"Purge3");
+ long timing1000 = getTiming(String.format(ROUND__FORMAT, 1000));
+ long timing2000 = getTiming(String.format(ROUND__FORMAT, 2000));
+ long timing3000 = getTiming(String.format(ROUND__FORMAT, 3000));
+ long timing5000 = getTiming(String.format(ROUND__FORMAT, 5000));
+ long timing10000 = getTiming(String.format(ROUND__FORMAT, 10000));
+
+ assertLinear(timing1000, timing2000, 2, "Merge2");
+ assertLinear(timing1000, timing3000, 3, "Merge3");
+ assertLinear(timing1000, timing5000, 5, "Merge5");
+ assertLinear(timing1000, timing10000, 10, "Merge10");
+
+ long purge1000 = getTiming(String.format(PURGE__FORMAT, 1000));
+ long purge2000 = getTiming(String.format(PURGE__FORMAT, 2000));
+ long purge3000 = getTiming(String.format(PURGE__FORMAT, 3000));
+ long purge5000 = getTiming(String.format(PURGE__FORMAT, 5000));
+
+ assertLinear(purge1000, purge2000, 2, "Purge2");
+ assertLinear(purge1000, purge3000, 3, "Purge3");
+ assertLinear(purge1000, purge5000, 5, "Purge3");
}
}
commit 24a70403e58b7a4050b28887a8bbef662197a33e
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Sun Nov 14 21:11:57 2010 -0500
i)LoginView listen for tab ii)conditionally show details at resource level iii)commented impl of double click for Table
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
index 841d8e0..b894bb6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@ -138,11 +138,13 @@ public class LoginView extends Canvas {
user.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
- if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) {
+ if ((event.getCharacterValue() != null)
+ && (((event.getCharacterValue() == KeyCodes.KEY_ENTER)) || (event.getCharacterValue() == KeyCodes.KEY_TAB))) {
password.focusInItem(); // Work around the form not getting auto-fill values until the field is focused
}
}
});
+
password.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) {
@@ -309,7 +311,8 @@ public class LoginView extends Canvas {
public void onFailure(Throwable caught) {
form.setFieldErrors(FIRST,
"Note: Optional retrieval of ldap details unsuccessful. Manual entry required.", true);
- Log.debug("Optional LDAP detail retrieval did not succeed. Registration prepopulation will not occur.");
+ Log
+ .debug("Optional LDAP detail retrieval did not succeed. Registration prepopulation will not occur.");
}
});
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 3f66a80..6ee4da6 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
@@ -160,6 +160,9 @@ public class ResourceSearchView extends Table {
}
});
+ // //load double click handler for this table
+ // configureDoubleClickHandler();
+
/*searchBox.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) {
@@ -180,6 +183,20 @@ public class ResourceSearchView extends Table {
});*/
}
+ // /** Defines the double click handler action for ResourceSearch. This means that on double
+ // * click a (Resource-relative) url, specifically Summary/Overview is what will happen
+ // * with this action. Override in subclasses to define alternate behavior.
+ // */
+ // protected void configureDoubleClickHandler() {
+ // //adding cell double click handler
+ // getListGrid().addCellDoubleClickHandler(new CellDoubleClickHandler() {
+ // @Override
+ // public void onCellDoubleClick(CellDoubleClickEvent event) {
+ // CoreGUI.goToView("Resource/" + event.getRecord().getAttribute("id") + "/Summary/Overview");
+ // }
+ // });
+ // }
+
public int getMatches() {
return this.getListGrid().getTotalRows();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index 0e65cf3..28e152c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -200,7 +200,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
this.resourceComposite = resourceComposite;
Resource resource = this.resourceComposite.getResource();
- getTitleBar().setResource(resource);
+ getTitleBar().setResource(this.resourceComposite);
for (Tab top : this.getTabSet().getTabs()) {
((TwoLevelTab) top).getLayout().destroyViews();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
index bc1e0b7..2e4e942 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
@@ -23,16 +23,23 @@ import java.util.LinkedHashSet;
import java.util.Set;
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.HTMLFlow;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.CheckboxItem;
+import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.tagging.Tag;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
@@ -40,35 +47,59 @@ import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.tagging.TagEditorView;
import org.rhq.enterprise.gui.coregui.client.components.tagging.TagsChangedCallback;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.OverviewForm;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+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.LocatableImg;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* @author Greg Hinkle
* @author Ian Springer
*/
-public class ResourceTitleBar extends LocatableHLayout {
+public class ResourceTitleBar extends LocatableVLayout {
+
+ //represents row of Resource title details[icon,title,show-details,tags,availability,favorites]
+ private LocatableHLayout top;
+ //represents normally closed region of Resource details[to verbosely describe resource across all tabs]
+ private LocatableHLayout details;
private static final String FAV_ICON = "Favorite_24_Selected.png";
private static final String NOT_FAV_ICON = "Favorite_24.png";
private Resource resource;
+ private ResourceComposite resourceComposite;
private Img badge;
private Img favoriteButton;
private HTMLFlow title;
private Img availabilityImage;
private boolean favorite;
+ private LocatableHLayout detailsForm;
+ private OverviewForm detailsFormSummary;
public ResourceTitleBar(String locatorId) {
super(locatorId);
+ //define two rows of content
+ top = new LocatableHLayout(locatorId + "_Top");
+ top.setPadding(5);
+ top.setMembersMargin(5);
+ top.setHeight(30);
+
+ details = new LocatableHLayout(locatorId + "_Details");
+ details.setWidth100();
+ details.setHeight(10);//initialize to small amount of pixels
+
+ //modify VLayout settings
setWidth100();
setHeight(30);
- setPadding(5);
- setMembersMargin(5);
+ setPadding(0);
+ setMembersMargin(0);
+ setLayoutMargin(0);
}
public void update() {
+ //clean up old widgets
for (Canvas child : getChildren()) {
child.destroy();
}
@@ -110,11 +141,59 @@ public class ResourceTitleBar extends LocatableHLayout {
loadTags(tagEditorView);
- addMember(badge);
- addMember(title);
- addMember(tagEditorView);
- addMember(availabilityImage);
- addMember(favoriteButton);
+ //top information
+ top.addMember(badge);
+ top.addMember(title);
+ top.addMember(tagEditorView);
+ top.addMember(availabilityImage);
+ top.addMember(favoriteButton);
+
+ //detail information
+ //checkbox
+ final CheckboxItem displayMore = new CheckboxItem();
+ final String moreDetails = "Show more...";
+ displayMore.setName("resourceDetails");
+ displayMore.setTitle(moreDetails);
+ displayMore.setWidth(120);
+ displayMore.addChangeHandler(new ChangeHandler() {
+ public void onChange(ChangeEvent event) {
+ Boolean displayMoreDetails = (Boolean) event.getValue();
+ if (displayMoreDetails) {
+ detailsFormSummary.show();
+ } else {
+ detailsFormSummary.hide();
+ }
+ markForRedraw();
+ }
+ });
+
+ LocatableDynamicForm wrappedCheckbox = new LocatableDynamicForm(extendLocatorId("Title_Bar_Checkbox"));
+ wrappedCheckbox.setFields(displayMore);
+ detailsForm = new LocatableHLayout(extendLocatorId("_Resource_Details"));
+ detailsForm.setWidth100();
+ detailsForm.setHeight(10);
+ detailsForm.setAlign(Alignment.LEFT);
+ detailsForm.addMember(wrappedCheckbox);
+ detailsFormSummary = new OverviewForm(extendLocatorId("Title_Optional_Summary"), resourceComposite);
+ detailsFormSummary.setWidth100();
+ detailsFormSummary.setPadding(0);
+ detailsFormSummary.setMargin(0);
+ detailsFormSummary.setLayoutAlign(Alignment.LEFT);
+ //condense details for display
+ detailsFormSummary.setHeaderEnabled(false);
+ detailsFormSummary.setDisplayCondensed(true);
+ detailsFormSummary.hide();
+ detailsForm.addMember(detailsFormSummary);
+ SpacerItem widthSpace = new SpacerItem();
+ widthSpace.setWidth(40);
+ DynamicForm wrappedSpacer = new DynamicForm();
+ wrappedSpacer.setFields(widthSpace);
+ detailsForm.addMember(wrappedSpacer);
+ details.addChild(detailsForm);
+
+ //order the components
+ addMember(top);
+ addMember(details);
}
private void loadTags(final TagEditorView tagEditorView) {
@@ -135,9 +214,10 @@ public class ResourceTitleBar extends LocatableHLayout {
});
}
- public void setResource(Resource resource) {
+ public void setResource(ResourceComposite resourceComposite) {
if (this.resource == null || this.resource.getId() != resource.getId()) {
- this.resource = resource;
+ this.resource = resourceComposite.getResource();
+ this.resourceComposite = resourceComposite;
update();
this.title.setContents("<span class=\"SectionHeader\">" + resource.getName()
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
index 2479c87..e5e65dc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/OverviewForm.java
@@ -25,6 +25,13 @@ import java.util.Comparator;
import java.util.EnumSet;
import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.HeaderItem;
+import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.DisplayType;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
@@ -41,13 +48,6 @@ import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.form.fields.FormItem;
-import com.smartgwt.client.widgets.form.fields.HeaderItem;
-import com.smartgwt.client.widgets.form.fields.SpacerItem;
-import com.smartgwt.client.widgets.form.fields.StaticTextItem;
-
/**
* The Resource Summary>Overview tab, the form with resource data.
*
@@ -58,6 +58,8 @@ public class OverviewForm extends EnhancedDynamicForm {
private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
private ResourceComposite resourceComposite;
+ private boolean headerEnabled = true;
+ private boolean displayCondensed = false;
public OverviewForm(String locatorId, ResourceComposite resourceComposite) {
super(locatorId);
@@ -70,6 +72,11 @@ public class OverviewForm extends EnhancedDynamicForm {
setLeft("10%");
setWidth("80%");
+ if (isDisplayCondensed()) {
+ setPadding(5);
+ setColWidths(150, 220, 150, 220);
+ setWidth("45%");
+ }
if (this.resourceComposite != null) {
setResource(this.resourceComposite);
@@ -99,29 +106,25 @@ public class OverviewForm extends EnhancedDynamicForm {
private void loadTraitValues() {
final Resource resource = resourceComposite.getResource();
- GWTServiceLookup.getMeasurementDataService().findCurrentTraitsForResource(
- resource.getId(),
- DisplayType.SUMMARY,
- new AsyncCallback<List<MeasurementDataTrait>>() {
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to load traits for " + resource + ".",
- caught);
- }
+ GWTServiceLookup.getMeasurementDataService().findCurrentTraitsForResource(resource.getId(),
+ DisplayType.SUMMARY, new AsyncCallback<List<MeasurementDataTrait>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load traits for " + resource + ".", caught);
+ }
- public void onSuccess(List<MeasurementDataTrait> result) {
- // TODO: Implement this method.
- for (MeasurementDataTrait trait : result) {
- String formId = trait.getName().replaceAll("\\.", "_").replaceAll(" ", "__");
- FormItem item = getItem(formId);
+ public void onSuccess(List<MeasurementDataTrait> result) {
+ // TODO: Implement this method.
+ for (MeasurementDataTrait trait : result) {
+ String formId = trait.getName().replaceAll("\\.", "_").replaceAll(" ", "__");
+ FormItem item = getItem(formId);
- if (item != null) {
- setValue(formId, trait.getValue());
- }
+ if (item != null) {
+ setValue(formId, trait.getValue());
}
- markForRedraw();
}
+ markForRedraw();
}
- );
+ });
}
@@ -142,9 +145,11 @@ public class OverviewForm extends EnhancedDynamicForm {
List<FormItem> formItems = new ArrayList<FormItem>();
- HeaderItem headerItem = new HeaderItem("header", "Summary");
- headerItem.setValue("Summary");
- formItems.add(headerItem);
+ if (isHeaderEnabled()) {//conditionally display header
+ HeaderItem headerItem = new HeaderItem("header", "Summary");
+ headerItem.setValue("Summary");
+ formItems.add(headerItem);
+ }
StaticTextItem typeItem = new StaticTextItem("type", "Type");
typeItem.setTooltip("Plugin: " + type.getPlugin() + "\n<br>" + "Type: " + type.getName());
@@ -169,9 +174,9 @@ public class OverviewForm extends EnhancedDynamicForm {
resource.setName(newName);
OverviewForm.this.resourceService.updateResource(resource, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to change name of Resource with id "
- + resource.getId()
- + " from \"" + oldName + "\" to \"" + newName + "\".", caught);
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to change name of Resource with id " + resource.getId() + " from \"" + oldName
+ + "\" to \"" + newName + "\".", caught);
// We failed to update it on the Server, so change back the Resource and the form item to
// the original value.
resource.setName(oldName);
@@ -179,9 +184,9 @@ public class OverviewForm extends EnhancedDynamicForm {
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(new Message("Name of Resource with id "
- + resource.getId() + " was changed from \""
- + oldName + "\" to \"" + newName + "\".", Message.Severity.Info));
+ CoreGUI.getMessageCenter().notify(
+ new Message("Name of Resource with id " + resource.getId() + " was changed from \""
+ + oldName + "\" to \"" + newName + "\".", Message.Severity.Info));
}
});
}
@@ -204,9 +209,9 @@ public class OverviewForm extends EnhancedDynamicForm {
resource.setDescription(newDescription);
OverviewForm.this.resourceService.updateResource(resource, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to change description of Resource with id "
- + resource.getId()
- + " from \"" + oldDescription + "\" to \"" + newDescription + "\".", caught);
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to change description of Resource with id " + resource.getId() + " from \""
+ + oldDescription + "\" to \"" + newDescription + "\".", caught);
// We failed to update it on the Server, so change back the Resource and the form item to
// the original value.
resource.setDescription(oldDescription);
@@ -214,9 +219,10 @@ public class OverviewForm extends EnhancedDynamicForm {
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(new Message("Description of Resource with id "
- + resource.getId() + " was changed from \""
- + oldDescription + "\" to \"" + newDescription + "\".", Message.Severity.Info));
+ CoreGUI.getMessageCenter().notify(
+ new Message("Description of Resource with id " + resource.getId()
+ + " was changed from \"" + oldDescription + "\" to \"" + newDescription + "\".",
+ Message.Severity.Info));
}
});
}
@@ -239,9 +245,9 @@ public class OverviewForm extends EnhancedDynamicForm {
resource.setLocation(newLocation);
OverviewForm.this.resourceService.updateResource(resource, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to change location of Resource with id "
- + resource.getId()
- + " from \"" + oldLocation + "\" to \"" + newLocation + "\".", caught);
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to change location of Resource with id " + resource.getId() + " from \""
+ + oldLocation + "\" to \"" + newLocation + "\".", caught);
// We failed to update it on the Server, so change back the Resource and the form item to
// the original value.
resource.setLocation(oldLocation);
@@ -249,9 +255,9 @@ public class OverviewForm extends EnhancedDynamicForm {
}
public void onSuccess(Void result) {
- CoreGUI.getMessageCenter().notify(new Message("Location of Resource with id "
- + resource.getId() + " was changed from \""
- + oldLocation + "\" to \"" + newLocation + "\".", Message.Severity.Info));
+ CoreGUI.getMessageCenter().notify(
+ new Message("Location of Resource with id " + resource.getId() + " was changed from \""
+ + oldLocation + "\" to \"" + newLocation + "\".", Message.Severity.Info));
}
});
}
@@ -259,7 +265,6 @@ public class OverviewForm extends EnhancedDynamicForm {
}
formItems.add(locationItem);
-
StaticTextItem versionItem = new StaticTextItem("version", "Version");
formItems.add(versionItem);
@@ -272,18 +277,19 @@ public class OverviewForm extends EnhancedDynamicForm {
StaticTextItem item = new StaticTextItem(id, trait.getDisplayName());
item.setTooltip(trait.getDescription());
formItems.add(item);
-// item.setValue("?");
+ // item.setValue("?");
}
-// SectionItem section = new SectionItem("Summary", "Summary");
-// section.setTitle("Summary");
-// section.setDefaultValue("Summary");
-// section.setCanCollapse(true);
-// section.setCellStyle("HidablePlainSectionHeader");
-// section.setItemIds(itemIds.toArray(new String[itemIds.size()]));
-// formItems.add(0, section);
-
- formItems.add(new SpacerItem());
+ // SectionItem section = new SectionItem("Summary", "Summary");
+ // section.setTitle("Summary");
+ // section.setDefaultValue("Summary");
+ // section.setCanCollapse(true);
+ // section.setCellStyle("HidablePlainSectionHeader");
+ // section.setItemIds(itemIds.toArray(new String[itemIds.size()]));
+ // formItems.add(0, section);
+ if (!isDisplayCondensed()) {
+ formItems.add(new SpacerItem());
+ }
setItems(formItems.toArray(new FormItem[formItems.size()]));
setValue("type", type.getName() + " (" + type.getPlugin() + ")");
@@ -292,8 +298,23 @@ public class OverviewForm extends EnhancedDynamicForm {
setValue("location", resource.getLocation());
setValue("version", (resource.getVersion() != null) ? resource.getVersion() : "<i>none</i>");
Resource parentResource = resource.getParentResource();
- setValue("parent", parentResource != null ?
- ("<a href=\"#Resource/" + parentResource.getId() + "\">" +
- parentResource.getName() + "</a>") : "<i>none</i>");
+ setValue("parent", parentResource != null ? ("<a href=\"#Resource/" + parentResource.getId() + "\">"
+ + parentResource.getName() + "</a>") : "<i>none</i>");
+ }
+
+ public boolean isHeaderEnabled() {
+ return headerEnabled;
+ }
+
+ public void setHeaderEnabled(boolean headerEnabled) {
+ this.headerEnabled = headerEnabled;
+ }
+
+ public boolean isDisplayCondensed() {
+ return displayCondensed;
+ }
+
+ public void setDisplayCondensed(boolean displayCondensed) {
+ this.displayCondensed = displayCondensed;
}
}