modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java | 16 modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/ServerWithAgentCountComposite.java | 14 modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java | 113 +++ modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java | 87 ++ modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java | 131 ++++ modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java | 5 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java | 178 ++--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java | 37 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java | 253 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java | 213 ++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java | 258 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java | 255 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java | 180 +++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java | 182 +++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java | 86 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java | 215 ++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java | 151 ++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java | 149 ++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java | 161 +++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java | 76 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java | 235 +++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java | 258 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java | 208 ++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java | 87 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java | 272 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java | 263 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java | 123 +++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java | 10 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/gwt/TopologyGWTService.java | 237 +++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 9 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java | 35 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java | 272 ++++++++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 87 ++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties | 89 ++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties | 85 ++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties | 85 ++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties | 85 ++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties | 85 ++ modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties | 85 ++ modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml | 8 modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java | 10 modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java | 7 modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java | 8 modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java | 2 modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java | 9 modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java | 5 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java | 28 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java | 75 ++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java | 295 --------- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java | 43 - modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java | 92 -- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java | 6 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java | 27 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java | 45 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java | 2 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java | 316 ++++++++++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java | 43 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java | 155 ++++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java | 10 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java | 10 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java | 18 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java | 6 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java | 9 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java | 2 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java | 2 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java | 8 modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml | 4 modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java | 6 71 files changed, 6028 insertions(+), 603 deletions(-)
New commits: commit 454f7e7a3818472c25148f537b6840fc65f664df Merge: 57fd95f 73c363d Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 22:28:02 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 57fd95fca7c516481c31666324ea50257a21afa5 Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 20:46:32 2012 +0100
Adding renamed servlet (TopologyGWTService) to the web.xml
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 124c979..a17f947 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 @@ -198,8 +198,8 @@ <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.PlatformUtilizationGWTServiceImpl</servlet-class> </servlet> <servlet> - <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name> - <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.CloudGWTServiceImpl</servlet-class> + <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI TopologyGWTService</servlet-name> + <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.TopologyGWTServiceImpl</servlet-class> </servlet>
<servlet> @@ -374,8 +374,8 @@ <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/PlatformUtilizationGWTService</url-pattern> </servlet-mapping> <servlet-mapping> - <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name> - <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/CloudGWTService</url-pattern> + <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI TopologyGWTService</servlet-name> + <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/TopologyGWTService</url-pattern> </servlet-mapping>
<servlet-mapping>
commit 87fb0278c16f47d5597e02685d7693d12b9b6b21 Merge: 2d5ccbf 1769169 Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 20:39:59 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 2d5ccbf8e6756ccc444b540420938071c4842fa2 Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 20:28:24 2012 +0100
Refactoring: renaming "CloudManager" to "TopologyManager".
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java index f7c8083..3be1d58 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -94,7 +94,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr private void prepareMembers(final AffinityGroupAgentsSelector selector) { AgentCriteria criteria = new AgentCriteria(); criteria.addFilterAffinityGroupId(affinityGroupId); - GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { + GWTServiceLookup.getTopologyService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { public void onSuccess(PageList<Agent> result) { ListGridRecord[] records = getDataSource().buildRecords(result); originallyAssignedIds = getIdList(records); @@ -179,7 +179,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr shouldBeClosed = true; if (!originallySelected.isEmpty()) { shouldBeClosed = false; - GWTServiceLookup.getCloudService().removeAgentsFromGroup( + GWTServiceLookup.getTopologyService().removeAgentsFromGroup( originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { public void onSuccess(Void result) { closeAndRefresh(parrent, true); @@ -194,7 +194,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr } if (!actuallySelected.isEmpty()) { shouldBeClosed = false; - GWTServiceLookup.getCloudService().addAgentsToGroup(selector.getAffinityGroupId(), + GWTServiceLookup.getTopologyService().addAgentsToGroup(selector.getAffinityGroupId(), actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() { public void onSuccess(Void result) { closeAndRefresh(parrent, true); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 669ea22..03711a4 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -79,7 +79,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar @Override protected void onInit() { super.onInit(); - GWTServiceLookup.getCloudService().getAffinityGroupById(affinityGroupId, new AsyncCallback<AffinityGroup>() { + GWTServiceLookup.getTopologyService().getAffinityGroupById(affinityGroupId, new AsyncCallback<AffinityGroup>() { public void onSuccess(final AffinityGroup affinityGroup) { prepareDetailsSection(sectionStack, affinityGroup); } @@ -180,7 +180,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { affinityGroup.setName(nameItem.getValueAsString()); - GWTServiceLookup.getCloudService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() { + GWTServiceLookup.getTopologyService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() { public void onSuccess(Void result) { Message msg = new Message(MSG.view_adminTopology_message_agroupRenamed( String.valueOf(affinityGroupId), affinityGroup.getName(), nameItem.getValueAsString()), diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index d1d97d4..0f64fd7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -98,7 +98,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve private void prepareMembers(final AffinityGroupServersSelector selector) { ServerCriteria criteria = new ServerCriteria(); criteria.addFilterAffinityGroupId(affinityGroupId); - GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { + GWTServiceLookup.getTopologyService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { public void onSuccess(PageList<Server> result) { ListGridRecord[] records = getDataSource().buildRecords(result); originallyAssignedIds = getIdList(records); @@ -184,7 +184,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve shouldBeClosed = true; if (!originallySelected.isEmpty()) { shouldBeClosed = false; - GWTServiceLookup.getCloudService().removeServersFromGroup( + GWTServiceLookup.getTopologyService().removeServersFromGroup( originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { public void onSuccess(Void result) { closeAndRefresh(parrent, true); @@ -199,7 +199,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve } if (!actuallySelected.isEmpty()) { shouldBeClosed = false; - GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(), + GWTServiceLookup.getTopologyService().addServersToGroup(selector.getAffinityGroupId(), actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() { public void onSuccess(Void result) { closeAndRefresh(parrent, true); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index ef271dc..90b0dc3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -110,7 +110,7 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); - GWTServiceLookup.getCloudService().deleteAffinityGroups(selectedIds, + GWTServiceLookup.getTopologyService().deleteAffinityGroups(selectedIds, new AsyncCallback<Integer>() { public void onSuccess(Integer count) { Message msg = new Message(MSG @@ -232,7 +232,7 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts if (form.validate()) { String name = form.getValueAsString(FIELD_NAME); AffinityGroup affinityGroup = new AffinityGroup(name); - GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() { + GWTServiceLookup.getTopologyService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() { public void onSuccess(Integer affinityGroupId) { modalWindow.destroy(); CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java index bd8b6b3..33a0e5f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java @@ -116,7 +116,7 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getAffinityGroupCountComposites(pc, + GWTServiceLookup.getTopologyService().getAffinityGroupCountComposites(pc, new AsyncCallback<PageList<AffinityGroupCountComposite>>() { public void onSuccess(PageList<AffinityGroupCountComposite> result) { response.setData(buildRecords(result)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java index f35aaee..ac33e74 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java @@ -122,7 +122,7 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> { criteria.addFilterServerId(id); }
- GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { + GWTServiceLookup.getTopologyService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { public void onSuccess(PageList<Agent> result) { response.setData(buildRecords(result)); response.setTotalRows(result.size()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 255a571..92ee011 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -84,7 +84,7 @@ public class AgentDetailView extends LocatableVLayout { super.onInit(); AgentCriteria criteria = new AgentCriteria(); criteria.addFilterId(agentId); - GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { + GWTServiceLookup.getTopologyService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { public void onSuccess(final PageList<Agent> agents) { if (agents == null || agents.isEmpty() || agents.size() != 1) { CoreGUI.getErrorHandler().handleError( diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index c21d086..8146a42 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -103,7 +103,7 @@ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<Fai final PageControl pc = getPageControl(request);
// if agentId == null all FailoverListDetails are returned - GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc, + GWTServiceLookup.getTopologyService().getFailoverListDetailsByAgentId(agentId, pc, new AsyncCallback<List<FailoverListDetails>>() { public void onSuccess(List<FailoverListDetails> result) { response.setData(buildRecords(result)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 39bd457..9042b6b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -100,7 +100,7 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part processResponse(request.getRequestId(), response); return; } - GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, + GWTServiceLookup.getTopologyService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { public void onSuccess(PageList<PartitionEvent> result) { response.setData(buildRecords(result)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java index 43ac373..d9103eb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java @@ -46,7 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.BookmarkableView; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; -import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTServiceAsync; +import org.rhq.enterprise.gui.coregui.client.gwt.TopologyGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; @@ -89,7 +89,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma super.onInit(); PartitionEventCriteria criteria = new PartitionEventCriteria(); criteria.addFilterId(partitionEventId); - final CloudGWTServiceAsync service = GWTServiceLookup.getCloudService(); + final TopologyGWTServiceAsync service = GWTServiceLookup.getTopologyService(); service.findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { public void onSuccess(final PageList<PartitionEvent> events) { if (events == null || events.size() != 1) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index 3cbfdb1..dc7e545 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -209,13 +209,13 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour }; switch (action) { case REMOVE_SELECTED: - GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds, callback); + GWTServiceLookup.getTopologyService().deletePartitionEvents(selectedIds, callback); break; case PURGE_ALL: - GWTServiceLookup.getCloudService().purgeAllEvents(callback); + GWTServiceLookup.getTopologyService().purgeAllEvents(callback); break; case FORCE_REPARTITION: - GWTServiceLookup.getCloudService().cloudPartitionEventRequest(callback); + GWTServiceLookup.getTopologyService().cloudPartitionEventRequest(callback); }
} else { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 09ea8c3..76ba87c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -119,7 +119,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve if (affinityGroupId != null) { criteria.addFilterAffinityGroupId(affinityGroupId); } - GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { + GWTServiceLookup.getTopologyService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { public void onSuccess(PageList<Server> result) { response.setData(buildRecords(result)); response.setTotalRows(result.size()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index ccc11aa..1e15208 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -97,7 +97,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi super.onInit(); ServerCriteria criteria = new ServerCriteria(); criteria.addFilterId(serverId); - GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { + GWTServiceLookup.getTopologyService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { public void onSuccess(final PageList<Server> servers) { if (servers == null || servers.isEmpty() || servers.size() != 1) { CoreGUI.getErrorHandler().handleError( @@ -229,7 +229,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi server.setPort(Integer.parseInt(portItem.getValueAsString())); server.setSecurePort(Integer.parseInt(securePortItem.getValueAsString())); server.setOperationMode(OperationMode.valueOf(operationModeItem.getValueAsString())); - GWTServiceLookup.getCloudService().updateServer(server, new AsyncCallback<Void>() { + GWTServiceLookup.getTopologyService().updateServer(server, new AsyncCallback<Void>() { public void onSuccess(Void result) { Message msg = new Message(MSG.view_adminTopology_message_serverUpdated(server.getName()), Message.Severity.Info); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 6cae592..1c6e6d5 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -157,7 +157,7 @@ public class ServerTableView extends public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); - GWTServiceLookup.getCloudService().deleteServers(selectedIds, + GWTServiceLookup.getTopologyService().deleteServers(selectedIds, new AsyncCallback<Void>() { public void onSuccess(Void arg0) { Message msg = new Message(MSG @@ -192,7 +192,7 @@ public class ServerTableView extends public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, mode, + GWTServiceLookup.getTopologyService().updateServerMode(selectedIds, mode, new AsyncCallback<Void>() { public void onSuccess(Void result) { Message msg = new Message(MSG.view_adminTopology_message_setMode( diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index d686395..91f5f53 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -78,7 +78,7 @@ public class ServerWithAgentCountDatasource extends protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() { + GWTServiceLookup.getTopologyService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() { public void onSuccess(List<ServerWithAgentCountComposite> result) { response.setData(buildRecords(result)); response.setTotalRows(result.size()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java deleted file mode 100644 index 4b92d6f..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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, version 2, as - * published by the Free Software Foundation, and/or the GNU Lesser - * General Public License, version 2.1, also as published by the Free - * Software Foundation. - * - * 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 and the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License - * and the GNU Lesser General Public License along with this program; - * if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.rhq.enterprise.gui.coregui.client.gwt; - -import java.util.List; - -import com.google.gwt.user.client.rpc.RemoteService; - -import org.rhq.core.domain.cloud.AffinityGroup; -import org.rhq.core.domain.cloud.FailoverListDetails; -import org.rhq.core.domain.cloud.PartitionEvent; -import org.rhq.core.domain.cloud.PartitionEventDetails; -import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; -import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; -import org.rhq.core.domain.criteria.AgentCriteria; -import org.rhq.core.domain.criteria.PartitionEventCriteria; -import org.rhq.core.domain.criteria.ServerCriteria; -import org.rhq.core.domain.resource.Agent; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageList; - -/** - * API for HAAC console, mostly CRUD operations for entities <code>Server</code>, <code>Agent</code>, - * <code>PartitionEvent</code> and <code>AffinityGroup</code>. - * - * @author Jiri Kremser - */ -public interface CloudGWTService extends RemoteService { - - /** - * Returns all the servers with agent count. - * - * @param pageControl the page control instance - * @return a list of all available servers (the servers in <code>MAINTENANCE</code> or <code>DOWN</code> mode are included as well) - * @throws RuntimeException - */ - List<ServerWithAgentCountComposite> getServers(PageControl pageControl) throws RuntimeException; - - /** - * Deletes the servers with provided ids. - * - * @param serverIds array of server ids - * @throws RuntimeException - */ - void deleteServers(int[] serverIds) throws RuntimeException; - - /** - * Updates the server mode to particular servers. - * - * @param serverIds the array of ids of the servers whose modes are object of update - * @param mode the new operation mode - * @throws RuntimeException - */ - void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException; - - /** - * Updates the server. - * - * @param server instance of Server - * @throws RuntimeException - */ - void updateServer(Server server) throws RuntimeException; - - /** - * Returns the list of <code>FailoverListDetails</code> for a particular agent. - * - * @param agentId the id the agent - * @param pageControl the page control instance - * @return a list of <code>FailoverListDetails</code> instances - * @throws RuntimeException - */ - List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pageControl) throws RuntimeException;; - - /** - * Finder for <code>PartitionEvent</code> instances - * - * @param criteria the criteria for finding partition events - * @return a list of <code>codePartitionEvent</code> instances - * @throws RuntimeException - */ - PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException; - - /** - * Finder for <code>Server</code> instances - * - * @param criteria the criteria for finding servers - * @return a list of <code>Server</code> instances - * @throws RuntimeException - */ - PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException; - - /** - * Finder for <code>Agent</code> instances - * - * @param criteria the criteria for finding agents - * @return a list of <code>Agent</code> instances - * @throws RuntimeException - */ - PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException; - - /** - * Request forcing the repartition of the cluster. All agents should eventually reconnects to its most preferred server - * (The first one in their failover list.) - * - * @throws RuntimeException - */ - void cloudPartitionEventRequest() throws RuntimeException; - - /** - * Deletes all the partition events. - * - * @throws RuntimeException - */ - void purgeAllEvents() throws RuntimeException; - - /** - * Deletes some partition events. - * - * @param eventIds the list of ids of partition events to delete - * @throws RuntimeException - */ - void deletePartitionEvents(int[] eventIds) throws RuntimeException; - - /** - * Returns the list of <code>PartitionEventDetails</code> instances. - * - * @param partitionEventId - * @param pageControl the page control instance - * @return list of <code>PartitionEventDetails</code> instances - * @throws RuntimeException - */ - PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) - throws RuntimeException; - - /** - * Returns the list with <code>AffinityGroupCountComposite</code> instances, i.e. affinity groups with agent and server - * counts. - * - * @param pageControl the page control instance - * @return list with <code>AffinityGroupCountComposite</code> instances - * @throws RuntimeException - */ - PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) - throws RuntimeException; - - /** - * Deletes some affinity groups. - * - * @param affinityGroupIds array of ids of affinity group to delete - * @return the number of deleted affinity groups - * @throws RuntimeException - */ - int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException; - - /** - * Creates new affinity group. - * - * @param affinityGroup instance of <code>AffinityGroup</code> to create - * @return the new id of the affinity group - * @throws RuntimeException - */ - int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; - - /** - * Updates existing affinity group. - * - * @param affinityGroup instance of <code>AffinityGroup</code> - * @throws RuntimeException - */ - void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; - - /** - * Returns the affinity group based on the provided id. - * - * @param affinityGroupId the id of an affinity group - * @return the instance of <code>AffinityGroup</code> - * @throws RuntimeException - */ - AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException; - - /** - * Add servers to an existing affinity group. - * - * @param affinityGroupId id of the affinity group into which the servers should be added - * @param serverIds array of ids of servers to be added - * @throws RuntimeException - */ - void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException; - - /** - * Removes the servers from the affinity group. There is no need to provide the id of affinity group, - * because it is part of the server data. - * - * @param serverIds array of ids of servers to be removed - * @throws RuntimeException - */ - void removeServersFromGroup(Integer[] serverIds) throws RuntimeException; - - /** - * Add agents to an existing affinity group. - * - * @param affinityGroupId id of the affinity group into which the agents should be added - * @param agentIds array of ids of agents to be added - * @throws RuntimeException - */ - void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException; - - /** - * Removes the agents from the affinity group. There is no need to provide the id of affinity group, - * because it is part of the agent data. - * - * @param agentIds array of ids of agents to be removed - * @throws RuntimeException - */ - void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException; -} 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 d41b173..8e883af 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 @@ -202,8 +202,8 @@ public class GWTServiceLookup { return secure(PlatformUtilizationGWTServiceAsync.Util.getInstance()); }
- public static CloudGWTServiceAsync getCloudService() { - return secure(CloudGWTServiceAsync.Util.getInstance()); + public static TopologyGWTServiceAsync getTopologyService() { + return secure(TopologyGWTServiceAsync.Util.getInstance()); }
@SuppressWarnings("unchecked") diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java new file mode 100644 index 0000000..666fb3e --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java @@ -0,0 +1,237 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * 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 and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.rhq.enterprise.gui.coregui.client.gwt; + +import java.util.List; + +import com.google.gwt.user.client.rpc.RemoteService; + +import org.rhq.core.domain.cloud.AffinityGroup; +import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEventDetails; +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; +import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.AgentCriteria; +import org.rhq.core.domain.criteria.PartitionEventCriteria; +import org.rhq.core.domain.criteria.ServerCriteria; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; + +/** + * API for HAAC console, mostly CRUD operations for entities <code>Server</code>, <code>Agent</code>, + * <code>PartitionEvent</code> and <code>AffinityGroup</code>. + * + * @author Jiri Kremser + */ +public interface TopologyGWTService extends RemoteService { + + /** + * Returns all the servers with agent count. + * + * @param pageControl the page control instance + * @return a list of all available servers (the servers in <code>MAINTENANCE</code> or <code>DOWN</code> mode are included as well) + * @throws RuntimeException + */ + List<ServerWithAgentCountComposite> getServers(PageControl pageControl) throws RuntimeException; + + /** + * Deletes the servers with provided ids. + * + * @param serverIds array of server ids + * @throws RuntimeException + */ + void deleteServers(int[] serverIds) throws RuntimeException; + + /** + * Updates the server mode to particular servers. + * + * @param serverIds the array of ids of the servers whose modes are object of update + * @param mode the new operation mode + * @throws RuntimeException + */ + void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException; + + /** + * Updates the server. + * + * @param server instance of Server + * @throws RuntimeException + */ + void updateServer(Server server) throws RuntimeException; + + /** + * Returns the list of <code>FailoverListDetails</code> for a particular agent. + * + * @param agentId the id the agent + * @param pageControl the page control instance + * @return a list of <code>FailoverListDetails</code> instances + * @throws RuntimeException + */ + List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pageControl) throws RuntimeException;; + + /** + * Finder for <code>PartitionEvent</code> instances + * + * @param criteria the criteria for finding partition events + * @return a list of <code>codePartitionEvent</code> instances + * @throws RuntimeException + */ + PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException; + + /** + * Finder for <code>Server</code> instances + * + * @param criteria the criteria for finding servers + * @return a list of <code>Server</code> instances + * @throws RuntimeException + */ + PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException; + + /** + * Finder for <code>Agent</code> instances + * + * @param criteria the criteria for finding agents + * @return a list of <code>Agent</code> instances + * @throws RuntimeException + */ + PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException; + + /** + * Request forcing the repartition of the cluster. All agents should eventually reconnects to its most preferred server + * (The first one in their failover list.) + * + * @throws RuntimeException + */ + void cloudPartitionEventRequest() throws RuntimeException; + + /** + * Deletes all the partition events. + * + * @throws RuntimeException + */ + void purgeAllEvents() throws RuntimeException; + + /** + * Deletes some partition events. + * + * @param eventIds the list of ids of partition events to delete + * @throws RuntimeException + */ + void deletePartitionEvents(int[] eventIds) throws RuntimeException; + + /** + * Returns the list of <code>PartitionEventDetails</code> instances. + * + * @param partitionEventId + * @param pageControl the page control instance + * @return list of <code>PartitionEventDetails</code> instances + * @throws RuntimeException + */ + PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) + throws RuntimeException; + + /** + * Returns the list with <code>AffinityGroupCountComposite</code> instances, i.e. affinity groups with agent and server + * counts. + * + * @param pageControl the page control instance + * @return list with <code>AffinityGroupCountComposite</code> instances + * @throws RuntimeException + */ + PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) + throws RuntimeException; + + /** + * Deletes some affinity groups. + * + * @param affinityGroupIds array of ids of affinity group to delete + * @return the number of deleted affinity groups + * @throws RuntimeException + */ + int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException; + + /** + * Creates new affinity group. + * + * @param affinityGroup instance of <code>AffinityGroup</code> to create + * @return the new id of the affinity group + * @throws RuntimeException + */ + int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; + + /** + * Updates existing affinity group. + * + * @param affinityGroup instance of <code>AffinityGroup</code> + * @throws RuntimeException + */ + void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; + + /** + * Returns the affinity group based on the provided id. + * + * @param affinityGroupId the id of an affinity group + * @return the instance of <code>AffinityGroup</code> + * @throws RuntimeException + */ + AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException; + + /** + * Add servers to an existing affinity group. + * + * @param affinityGroupId id of the affinity group into which the servers should be added + * @param serverIds array of ids of servers to be added + * @throws RuntimeException + */ + void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException; + + /** + * Removes the servers from the affinity group. There is no need to provide the id of affinity group, + * because it is part of the server data. + * + * @param serverIds array of ids of servers to be removed + * @throws RuntimeException + */ + void removeServersFromGroup(Integer[] serverIds) throws RuntimeException; + + /** + * Add agents to an existing affinity group. + * + * @param affinityGroupId id of the affinity group into which the agents should be added + * @param agentIds array of ids of agents to be added + * @throws RuntimeException + */ + void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException; + + /** + * Removes the agents from the affinity group. There is no need to provide the id of affinity group, + * because it is part of the agent data. + * + * @param agentIds array of ids of agents to be removed + * @throws RuntimeException + */ + void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException; +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java deleted file mode 100644 index ab46527..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ /dev/null @@ -1,272 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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, version 2, as - * published by the Free Software Foundation, and/or the GNU Lesser - * General Public License, version 2.1, also as published by the Free - * Software Foundation. - * - * 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 and the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License - * and the GNU Lesser General Public License along with this program; - * if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.rhq.enterprise.gui.coregui.server.gwt; - -import java.util.List; - -import org.apache.commons.lang.ArrayUtils; - -import org.rhq.core.domain.cloud.AffinityGroup; -import org.rhq.core.domain.cloud.FailoverListDetails; -import org.rhq.core.domain.cloud.PartitionEvent; -import org.rhq.core.domain.cloud.PartitionEventDetails; -import org.rhq.core.domain.cloud.PartitionEventType; -import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.cloud.Server.OperationMode; -import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; -import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; -import org.rhq.core.domain.criteria.AgentCriteria; -import org.rhq.core.domain.criteria.PartitionEventCriteria; -import org.rhq.core.domain.criteria.ServerCriteria; -import org.rhq.core.domain.resource.Agent; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageList; -import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService; -import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; -import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; -import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal; -import org.rhq.enterprise.server.core.AgentManagerLocal; -import org.rhq.enterprise.server.util.LookupUtil; - -/** - * @author Jiri Kremser - */ -public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements CloudGWTService { - - private static final long serialVersionUID = 1L; - - private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); - - private AgentManagerLocal agentManager = LookupUtil.getAgentManager(); - - private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager(); - - private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager(); - - @Override - public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException { - try { - return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc), - "CloudGWTServiceImpl.getServers"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void deleteServers(int[] serverIds) throws RuntimeException { - try { - cloudManager.deleteServers(getSessionSubject(), ArrayUtils.toObject(serverIds)); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException { - try { - cloudManager.updateServerMode(getSessionSubject(), ArrayUtils.toObject(serverIds), mode); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) - throws RuntimeException { - try { - return SerialUtility.prepare( - cloudManager.getFailoverListDetailsByAgentId(getSessionSubject(), agentId, pc), - "CloudGWTServiceImpl.getFailoverListDetailsByAgentId"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) - throws RuntimeException { - try { - return SerialUtility.prepare( - partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria), - "CloudGWTServiceImpl.findPartitionEventsByCriteria"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException { - try { - return SerialUtility.prepare(cloudManager.findServersByCriteria(getSessionSubject(), criteria), - "CloudGWTServiceImpl.findServersByCriteria"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException { - try { - return SerialUtility.prepare(agentManager.findAgentsByCriteria(getSessionSubject(), criteria), - "CloudGWTServiceImpl.findAgentsByCriteria"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void cloudPartitionEventRequest() throws RuntimeException { - try { - partitionEventManager.cloudPartitionEventRequest(getSessionSubject(), - PartitionEventType.ADMIN_INITIATED_PARTITION, ""); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void purgeAllEvents() throws RuntimeException { - try { - partitionEventManager.purgeAllEvents(getSessionSubject()); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void deletePartitionEvents(int[] eventIds) throws RuntimeException { - try { - partitionEventManager.deletePartitionEvents(getSessionSubject(), ArrayUtils.toObject(eventIds)); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) - throws RuntimeException { - try { - return SerialUtility.prepare( - partitionEventManager.getPartitionEventDetails(getSessionSubject(), partitionEventId, pageControl), - "CloudGWTServiceImpl.getPartitionEventDetails"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) - throws RuntimeException { - try { - return SerialUtility.prepare(affinityGroupManager.getComposites(getSessionSubject(), pageControl), - "CloudGWTServiceImpl.getAffinityGroupCountComposites"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException { - try { - return affinityGroupManager.delete(getSessionSubject(), ArrayUtils.toObject(affinityGroupIds)); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { - try { - return affinityGroupManager.create(getSessionSubject(), affinityGroup); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException { - try { - return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId), - "CloudGWTServiceImpl.getAffinityGroupById"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException { - try { - affinityGroupManager.addServersToGroup(getSessionSubject(), affinityGroupId, serverIds); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void removeServersFromGroup(Integer[] serverIds) throws RuntimeException { - try { - affinityGroupManager.removeServersFromGroup(getSessionSubject(), serverIds); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException { - try { - affinityGroupManager.addAgentsToGroup(getSessionSubject(), affinityGroupId, agentIds); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException { - try { - affinityGroupManager.removeAgentsFromGroup(getSessionSubject(), agentIds); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void updateServer(Server server) throws RuntimeException { - try { - cloudManager.updateServer(getSessionSubject(), server); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { - try { - affinityGroupManager.update(getSessionSubject(), affinityGroup); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - -} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java new file mode 100644 index 0000000..4445368 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java @@ -0,0 +1,272 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * 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 and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.rhq.enterprise.gui.coregui.server.gwt; + +import java.util.List; + +import org.apache.commons.lang.ArrayUtils; + +import org.rhq.core.domain.cloud.AffinityGroup; +import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEventDetails; +import org.rhq.core.domain.cloud.PartitionEventType; +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.Server.OperationMode; +import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; +import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.AgentCriteria; +import org.rhq.core.domain.criteria.PartitionEventCriteria; +import org.rhq.core.domain.criteria.ServerCriteria; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.gwt.TopologyGWTService; +import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; +import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal; +import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; +import org.rhq.enterprise.server.core.AgentManagerLocal; +import org.rhq.enterprise.server.util.LookupUtil; + +/** + * @author Jiri Kremser + */ +public class TopologyGWTServiceImpl extends AbstractGWTServiceImpl implements TopologyGWTService { + + private static final long serialVersionUID = 1L; + + private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager(); + + private AgentManagerLocal agentManager = LookupUtil.getAgentManager(); + + private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager(); + + private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager(); + + @Override + public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException { + try { + return SerialUtility.prepare(topologyManager.getServerComposites(getSessionSubject(), pc), + "TopologyGWTServiceImpl.getServers"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void deleteServers(int[] serverIds) throws RuntimeException { + try { + topologyManager.deleteServers(getSessionSubject(), ArrayUtils.toObject(serverIds)); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException { + try { + topologyManager.updateServerMode(getSessionSubject(), ArrayUtils.toObject(serverIds), mode); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) + throws RuntimeException { + try { + return SerialUtility.prepare( + topologyManager.getFailoverListDetailsByAgentId(getSessionSubject(), agentId, pc), + "TopologyGWTServiceImpl.getFailoverListDetailsByAgentId"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) + throws RuntimeException { + try { + return SerialUtility.prepare( + partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria), + "TopologyGWTServiceImpl.findPartitionEventsByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException { + try { + return SerialUtility.prepare(topologyManager.findServersByCriteria(getSessionSubject(), criteria), + "TopologyGWTServiceImpl.findServersByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException { + try { + return SerialUtility.prepare(agentManager.findAgentsByCriteria(getSessionSubject(), criteria), + "TopologyGWTServiceImpl.findAgentsByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void cloudPartitionEventRequest() throws RuntimeException { + try { + partitionEventManager.cloudPartitionEventRequest(getSessionSubject(), + PartitionEventType.ADMIN_INITIATED_PARTITION, ""); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void purgeAllEvents() throws RuntimeException { + try { + partitionEventManager.purgeAllEvents(getSessionSubject()); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void deletePartitionEvents(int[] eventIds) throws RuntimeException { + try { + partitionEventManager.deletePartitionEvents(getSessionSubject(), ArrayUtils.toObject(eventIds)); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare( + partitionEventManager.getPartitionEventDetails(getSessionSubject(), partitionEventId, pageControl), + "TopologyGWTServiceImpl.getPartitionEventDetails"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare(affinityGroupManager.getComposites(getSessionSubject(), pageControl), + "TopologyGWTServiceImpl.getAffinityGroupCountComposites"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException { + try { + return affinityGroupManager.delete(getSessionSubject(), ArrayUtils.toObject(affinityGroupIds)); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { + try { + return affinityGroupManager.create(getSessionSubject(), affinityGroup); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException { + try { + return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId), + "TopologyGWTServiceImpl.getAffinityGroupById"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException { + try { + affinityGroupManager.addServersToGroup(getSessionSubject(), affinityGroupId, serverIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void removeServersFromGroup(Integer[] serverIds) throws RuntimeException { + try { + affinityGroupManager.removeServersFromGroup(getSessionSubject(), serverIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException { + try { + affinityGroupManager.addAgentsToGroup(getSessionSubject(), affinityGroupId, agentIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException { + try { + affinityGroupManager.removeAgentsFromGroup(getSessionSubject(), agentIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void updateServer(Server server) throws RuntimeException { + try { + topologyManager.updateServer(getSessionSubject(), server); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { + try { + affinityGroupManager.update(getSessionSubject(), affinityGroup); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + +} diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java index ef4b65a..cc85b4d 100644 --- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java +++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java @@ -31,13 +31,13 @@ import org.rhq.enterprise.gui.common.framework.PagedDataTableUIBean; import org.rhq.enterprise.gui.common.paging.PageControlView; import org.rhq.enterprise.gui.common.paging.PagedListDataModel; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
public class ListServersUIBean extends PagedDataTableUIBean { public static final String MANAGED_BEAN_NAME = "ListServersUIBean";
- private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); + private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
public ListServersUIBean() { } @@ -49,7 +49,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) { try { - cloudManager.deleteServers(subject, ids); + topologyManager.deleteServers(subject, ids);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Removed [" + ids.length + "] servers from the cloud."); @@ -70,7 +70,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) { try { - cloudManager.updateServerMode(EnterpriseFacesContextUtility.getSubject(), ids, mode); + topologyManager.updateServerMode(EnterpriseFacesContextUtility.getSubject(), ids, mode);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Set [" + ids.length + "] servers to mode " + mode); @@ -109,7 +109,7 @@ public class ListServersUIBean extends PagedDataTableUIBean { public PageList<ServerWithAgentCountComposite> fetchPage(PageControl pc) { Subject subject = EnterpriseFacesContextUtility.getSubject();
- PageList<ServerWithAgentCountComposite> results = cloudManager.getServerComposites(subject, pc); + PageList<ServerWithAgentCountComposite> results = topologyManager.getServerComposites(subject, pc); return results; } } diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java index 4ccba78..be91add 100644 --- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java +++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java @@ -32,7 +32,7 @@ import org.rhq.enterprise.gui.common.paging.PageControlView; import org.rhq.enterprise.gui.common.paging.PagedListDataModel; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; import org.rhq.enterprise.server.authz.PermissionException; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.core.AgentManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
@@ -47,7 +47,7 @@ public class ViewAgentUIBean extends PagedDataTableUIBean { public static final String MANAGED_BEAN_NAME = "ViewAgentUIBean";
private AgentManagerLocal agentManager = LookupUtil.getAgentManager(); - private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); + private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
private Agent agent;
@@ -81,7 +81,7 @@ public class ViewAgentUIBean extends PagedDataTableUIBean { @Override public PageList<FailoverListDetails> fetchPage(PageControl pc) { int agentId = getAgent().getId(); - PageList<FailoverListDetails> pageList = cloudManager.getFailoverListDetailsByAgentId( + PageList<FailoverListDetails> pageList = topologyManager.getFailoverListDetailsByAgentId( EnterpriseFacesContextUtility.getSubject(), agentId, pc);
return pageList; diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java index 7811b57..0674cf5 100644 --- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java +++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java @@ -33,7 +33,7 @@ import org.rhq.enterprise.gui.common.paging.PageControlView; import org.rhq.enterprise.gui.common.paging.PagedListDataModel; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; import org.rhq.enterprise.server.authz.PermissionException; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.core.AgentManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
@@ -41,13 +41,13 @@ public class ViewServerUIBean extends PagedDataTableUIBean { public static final String MANAGED_BEAN_NAME = "ViewServerUIBean";
private AgentManagerLocal agentManager = LookupUtil.getAgentManager(); - private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); + private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager(); private Server server;
public ViewServerUIBean() { hasPermission(); int serverId = FacesContextUtility.getRequiredRequestParameter("serverId", Integer.class); - server = cloudManager.getServerById(serverId); + server = topologyManager.getServerById(serverId); }
@Override @@ -69,7 +69,7 @@ public class ViewServerUIBean extends PagedDataTableUIBean {
public String save() { try { - cloudManager.updateServer(getSubject(), getServer()); + topologyManager.updateServer(getSubject(), getServer()); FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "This server's public address and ports have been updated."); } catch (Exception e) { diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java index a02d19f..1eaea93 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java @@ -685,7 +685,7 @@ public class AlertConditionTest extends UpdatePluginMetadataTestBase { private void deleteServerIdentity() throws Exception { if (server != null) { cleanupAgent(); // can't remove the server before we purge the agent - LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); + LookupUtil.getTopologyManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); server = null; } } diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java index 2494ece..8a95e80 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java @@ -55,7 +55,7 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test { private FailoverListManagerLocal failoverListManager; private AgentManagerLocal agentManager; private PartitionEventManagerLocal partitionEventManager; - private CloudManagerLocal cloudManager; + private TopologyManagerLocal topologyManager; private AffinityGroupManagerLocal affinityGroupManager; private Subject overlord;
@@ -70,7 +70,7 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test { agentManager = LookupUtil.getAgentManager(); failoverListManager = LookupUtil.getFailoverListManager(); partitionEventManager = LookupUtil.getPartitionEventManager(); - cloudManager = LookupUtil.getCloudManager(); + topologyManager = LookupUtil.getTopologyManager(); affinityGroupManager = LookupUtil.getAffinityGroupManager(); overlord = LookupUtil.getSubjectManager().getOverlord();
@@ -95,9 +95,9 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test { try { for (Server server : servers) { // must set to down to allow for a delete - cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), + topologyManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, Server.OperationMode.DOWN); - cloudManager.deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); + topologyManager.deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); }
for (Agent agent : agents) { diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java index 3857afc..b32ad30 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java @@ -178,9 +178,9 @@ public class CoreServerServiceImplTest extends AbstractEJB3Test { protected void afterMethod() throws Exception {
// cleanup our test server - LookupUtil.getCloudManager().updateServerMode(LookupUtil.getSubjectManager().getOverlord(), + LookupUtil.getTopologyManager().updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN); - LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); + LookupUtil.getTopologyManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
// shutdown our mock mbean server unprepareCustomServerService(CoreServerMBean.OBJECT_NAME); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java index 0466a7c..6e755ae 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java @@ -118,25 +118,25 @@ public interface AffinityGroupManagerLocal {
/** * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and - * <code>CloudManagerBean.findServersByCriteria()</code> instead) + * <code>TopologyManagerBean.findServersByCriteria()</code> instead) */ PageList<Server> getServerMembers(Subject subject, int affinityGroupId, PageControl pageControl);
/** * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and - * <code>CloudManagerBean.findServersByCriteria()</code> instead) + * <code>TopologyManagerBean.findServersByCriteria()</code> instead) */ PageList<Server> getServerNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
/** * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and - * <code>CloudManagerBean.findServersByCriteria()</code> instead) + * <code>TopologyManagerBean.findServersByCriteria()</code> instead) */ PageList<Agent> getAgentMembers(Subject subject, int affinityGroupId, PageControl pageControl);
/** * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and - * <code>CloudManagerBean.findServersByCriteria()</code> instead) + * <code>TopologyManagerBean.findServersByCriteria()</code> instead) */ PageList<Agent> getAgentNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java deleted file mode 100644 index 2c775d4..0000000 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java +++ /dev/null @@ -1,316 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2008 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.server.cloud; - -import java.util.List; - -import javax.ejb.EJB; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.NoResultException; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.rhq.core.domain.auth.Subject; -import org.rhq.core.domain.authz.Permission; -import org.rhq.core.domain.cloud.FailoverListDetails; -import org.rhq.core.domain.cloud.PartitionEventType; -import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; -import org.rhq.core.domain.criteria.ServerCriteria; -import org.rhq.core.domain.resource.Agent; -import org.rhq.core.domain.server.PersistenceUtility; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageList; -import org.rhq.enterprise.server.RHQConstants; -import org.rhq.enterprise.server.authz.AuthorizationManagerLocal; -import org.rhq.enterprise.server.authz.RequiredPermission; -import org.rhq.enterprise.server.authz.RequiredPermissions; -import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal; -import org.rhq.enterprise.server.util.CriteriaQueryGenerator; -import org.rhq.enterprise.server.util.CriteriaQueryRunner; -import org.rhq.enterprise.server.util.LookupUtil; - -/** - * This class manages and reports information about the RHQ Server Cloud as a whole. - * It does not discern which server is which, and can be called from any server in - * the cloud and will operate identically the same results. - * - * @author Joseph Marques - */ -@Stateless -public class CloudManagerBean implements CloudManagerLocal { - private final Log log = LogFactory.getLog(CloudManagerBean.class); - - // A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance - // job updating the server mtimes. See StartupServlet. - private static final long SERVER_DOWN_INTERVAL = 1000L * 2 * 60; - - @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME) - private EntityManager entityManager; - - @EJB - private CloudManagerLocal cloudManager; - - @EJB - private FailoverListManagerLocal failoverListManager; - - @EJB - private PartitionEventManagerLocal partitionEventManager; - - @EJB - private AuthorizationManagerLocal authorizationManager; - - @EJB - //@IgnoreDependency - private ServerManagerLocal serverManager; - - public List<Agent> getAgentsByServerName(String serverName) { - Server server = cloudManager.getServerByName(serverName); - List<Agent> agents = server.getAgents(); - agents.size(); // iterating over this collection out of a transactional boundaries will throw LazyInitExceptions - return agents; - } - - public Server getServerById(int serverId) { - Server server = entityManager.find(Server.class, serverId); - return server; - } - - public Server getServerByName(String serverName) { - Query query = entityManager.createNamedQuery(Server.QUERY_FIND_BY_NAME); - query.setParameter("name", serverName); - - try { - Server server = (Server) query.getSingleResult(); - return server; - } catch (NoResultException nre) { - log.info("Server[name=" + serverName + "] not found, returning null..."); - return null; - } - } - - @SuppressWarnings("unchecked") - public List<Server> getAllCloudServers() { - Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL_CLOUD_MEMBERS); - List<Server> results = query.getResultList(); - return results; - } - - @SuppressWarnings("unchecked") - public List<Server> getAllServers() { - Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL); - List<Server> results = query.getResultList(); - return results; - } - - @SuppressWarnings("unchecked") - @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), - @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc) { - pc.initDefaultOrderingField("s.name"); - - Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, Server.QUERY_FIND_ALL_COMPOSITES, pc); - - List<ServerWithAgentCountComposite> results = query.getResultList(); - int count = getServerCount(); - - return new PageList<ServerWithAgentCountComposite>(results, count, pc); - } - - public int getServerCount() { - Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL); - - try { - long serverCount = (Long) query.getSingleResult(); - return (int) serverCount; - } catch (NoResultException nre) { - log.debug("Could not get count of cloud instances, returning 0..."); - return 0; - } - } - - public int getNormalServerCount() { - Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL_NORMAL_CLOUD_MEMBERS); - - try { - long serverCount = (Long) query.getSingleResult(); - return (int) serverCount; - } catch (NoResultException nre) { - log.debug("Could not get count of normal cloud instances, returning 0..."); - return 0; - } - } - - @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), - @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException { - if (serverIds == null) { - return; - } - - for (Integer nextServerId : serverIds) { - cloudManager.deleteServer(subject, nextServerId); - } - } - - @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), - @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public void deleteServer(Subject subject, Integer serverId) throws CloudManagerException { - try { - Server server = entityManager.find(Server.class, serverId); - - if (Server.OperationMode.NORMAL == server.getOperationMode()) { - throw new CloudManagerException("Could not delete server " + server.getName() - + ". Server must be down or in maintenance mode. Current operating mode is: " - + server.getOperationMode().name()); - } - - // Delete any server list entries referencing this server - failoverListManager.deleteServerListDetailsForServer(serverId); - - // Delete any agent references to this server - Query query = entityManager.createNamedQuery(Agent.QUERY_REMOVE_SERVER_REFERENCE); - query.setParameter("serverId", serverId); - query.executeUpdate(); - - // Then, delete the server - query = entityManager.createNamedQuery(Server.QUERY_DELETE_BY_ID); - query.setParameter("serverId", serverId); - query.executeUpdate(); - - entityManager.flush(); - entityManager.clear(); - - log.info("Removed server " + server); - - // Now, request a cloud repartitioning due to the server removal - partitionEventManager.cloudPartitionEventRequest(LookupUtil.getSubjectManager().getOverlord(), - PartitionEventType.SERVER_DELETION, server.getName()); - - } catch (Exception e) { - throw new CloudManagerException("Could not delete server[id=" + serverId + "]: " + e.getMessage(), e); - } - } - - @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), - @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode) { - if (serverIds == null) { - return; - } - - if (mode == null) { - throw new IllegalArgumentException("mode can not be null"); - } - - if (serverIds.length > 0) { - try { - for (Integer id : serverIds) { - Server server = entityManager.find(Server.class, id); - - if (server.getOperationMode() == mode) { - // ignore if there is no change - continue; - } - - // Audit servers being set to DOWN since the state change can't be reported any other way. Servers - // be set to any other mode will be handled when the cloud job established the current operating mode. - if (Server.OperationMode.DOWN == mode) { - String audit = server.getName() + ": " + server.getOperationMode().name() + " --> " + mode; - - partitionEventManager.auditPartitionEvent(LookupUtil.getSubjectManager().getOverlord(), - PartitionEventType.OPERATION_MODE_CHANGE, audit); - } - server.setOperationMode(mode); - } - } catch (Exception e) { - log.debug("Failed to update HA server modes: " + e); - } - } - } - - @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), - @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public Server updateServer(Subject subject, Server server) { - return entityManager.merge(server); - } - - @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), - @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc) { - pc.initDefaultOrderingField("fld.ordinal"); - - Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, - FailoverListDetails.QUERY_GET_VIA_AGENT_ID_WITH_SERVERS, pc); - Query countQuery = PersistenceUtility.createCountQuery(entityManager, - FailoverListDetails.QUERY_GET_VIA_AGENT_ID); - - query.setParameter("agentId", agentId); - countQuery.setParameter("agentId", agentId); - - @SuppressWarnings("unchecked") - List<FailoverListDetails> list = query.getResultList(); - long count = (Long) countQuery.getSingleResult(); - - return new PageList<FailoverListDetails>(list, (int) count, pc); - } - - public void markStaleServersDown(Subject subject) { - if (!authorizationManager.isOverlord(subject)) { - throw new IllegalArgumentException("The markStaleServersDown method must be called by the overlord"); - } - - long staleTime = System.currentTimeMillis() - SERVER_DOWN_INTERVAL; - - String serverName = null; - try { - serverName = serverManager.getIdentity(); - if (log.isDebugEnabled()) { - log.debug(serverName + " is marking stale servers DOWN"); - } - } catch (Exception e) { - log.error("Could not determine which instance is marking stale servers DOWN"); - } - Query query = entityManager.createNamedQuery(Server.QUERY_UPDATE_SET_STALE_DOWN); - query.setParameter("downMode", Server.OperationMode.DOWN); - query.setParameter("normalMode", Server.OperationMode.NORMAL); - query.setParameter("staleTime", staleTime); - query.setParameter("thisServerName", serverName); // might be null - int resultCount = query.executeUpdate(); - - if (log.isDebugEnabled()) { - log.debug(String.valueOf(resultCount) + " stale servers were marked DOWN"); - } - - // Perform requested partition events. Note that we only need to execute one cloud partition - // regardless of the number of pending requests, as the work would be duplicated. - partitionEventManager.processRequestedPartitionEvents(); - } - - @RequiredPermission(Permission.MANAGE_SETTINGS) - public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) { - CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); - CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager); - return runner.execute(); - } -} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java deleted file mode 100644 index dce22cf..0000000 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2008 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.server.cloud; - -/** - * @author Joseph Marques - */ -public class CloudManagerException extends AffinityGroupException { - - private static final long serialVersionUID = 1L; - - public CloudManagerException() { - } - - public CloudManagerException(String message) { - super(message); - } - - public CloudManagerException(Throwable cause) { - super(cause); - } - - public CloudManagerException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java deleted file mode 100644 index 25a9145..0000000 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2008 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.server.cloud; - -import java.util.List; - -import javax.ejb.Local; - -import org.rhq.core.domain.auth.Subject; -import org.rhq.core.domain.cloud.FailoverListDetails; -import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; -import org.rhq.core.domain.criteria.ServerCriteria; -import org.rhq.core.domain.resource.Agent; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageList; - -/** - * @author Joseph Marques - */ -@Local -public interface CloudManagerLocal { - - void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException; - - void deleteServer(Subject subject, Integer serverId) throws CloudManagerException; - - List<Agent> getAgentsByServerName(String serverName); - - /** - * - * @param serverId - * @return the server - * @deprecated Use the <code>findServersByCriteria()</code> instead. - */ - Server getServerById(int serverId); - - /** - * - * @param serverName - * @return the server - * @deprecated Use the <code>findServersByCriteria()</code> instead. - */ - Server getServerByName(String serverName); - - /** - * Return every server registered in the database considered part of the active cloud. This will exclude, for example, - * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning. - * @return All servers available to the cloud. - * - */ - List<Server> getAllCloudServers(); - - /** - * Return every server registered in the database. - * @return All servers, regardless of operation mode. - * @deprecated Use the <code>findServersByCriteria()</code> instead. - */ - List<Server> getAllServers(); - - - /** - * Returns all servers with the agent counts - * - * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. - * - * @param subject the caller - * @param pc - * @return list of <code>ServerWithAgentCountComposite</code> - */ - PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc); - - /** - * Returns the number of servers that are part of the "server cloud", which excludes - * servers that have been installed but not associated with the cloud. - * The returned count will include those servers that are down or in maintenance mode, - * in addition to those servers that are currently running in a normal state. - * - * @return count of servers in the cloud - */ - int getServerCount(); - - /** - * Returns the number of servers that are part of the "server cloud" that are currently - * running in "normal" mode. - * - * This excludes all other servers such as those servers that have been installed but - * not associated with the cloud, servers that are down or in maintenance mode. - * - * @return count of servers in the cloud that are in a normal running state - */ - int getNormalServerCount(); - - /** - * Updates the server operation mode for multiple servers. - * - * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. - * - * @param subject the caller - * @param serverIds - * @param mode desired server operation mode - */ - void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode); - - /** - * Updates the server. - * - * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. - * - * @param subject the caller. - * @param server - * @return - */ - Server updateServer(Subject subject, Server server); - - /** - * - * the subject needs to have MANAGE_SETTINGS permissions. - * - * @param subject - * @param agentId - * @param pc - * @return - */ - PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc); - - void markStaleServersDown(Subject subject); - - /** - * Fetches the server based on provided criteria. - * - * the subject needs to have MANAGE_SETTINGS permissions. - * - * @param subject caller - * @param criteria the criteria - * @return list of servers - */ - PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria); -} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java index 56de2e5..7d5cc79 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java @@ -73,7 +73,7 @@ public class FailoverListManagerBean implements FailoverListManagerLocal {
@EJB //@IgnoreDependency - CloudManagerLocal cloudManager; + TopologyManagerLocal topologyManager;
@EJB AgentManagerLocal agentManager; @@ -131,7 +131,7 @@ public class FailoverListManagerBean implements FailoverListManagerLocal { }
private FailoverListComposite generateServerList(PartitionEvent event, Agent agent) { - List<Server> servers = cloudManager.getAllCloudServers(); + List<Server> servers = topologyManager.getAllCloudServers(); List<Agent> agents = new ArrayList<Agent>(1);
agents.add(agent); @@ -151,7 +151,7 @@ public class FailoverListManagerBean implements FailoverListManagerLocal { }
public Map<Agent, FailoverListComposite> refresh(PartitionEvent event) { - List<Server> servers = cloudManager.getAllCloudServers(); + List<Server> servers = topologyManager.getAllCloudServers(); List<Agent> agents = agentManager.getAllAgents();
// persist results immediate, which will be the only writes (as opposed to reads) in this transaction 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 38b8233..dc851da 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 @@ -79,7 +79,7 @@ public class StatusManagerBean implements StatusManagerLocal {
@EJB //@IgnoreDependency - CloudManagerLocal cloudManager; + TopologyManagerLocal topologyManager;
@EJB //@IgnoreDependency diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java new file mode 100644 index 0000000..7926504 --- /dev/null +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java @@ -0,0 +1,316 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2008 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.server.cloud; + +import java.util.List; + +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.rhq.core.domain.auth.Subject; +import org.rhq.core.domain.authz.Permission; +import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.PartitionEventType; +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.ServerCriteria; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.server.PersistenceUtility; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.server.RHQConstants; +import org.rhq.enterprise.server.authz.AuthorizationManagerLocal; +import org.rhq.enterprise.server.authz.RequiredPermission; +import org.rhq.enterprise.server.authz.RequiredPermissions; +import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal; +import org.rhq.enterprise.server.util.CriteriaQueryGenerator; +import org.rhq.enterprise.server.util.CriteriaQueryRunner; +import org.rhq.enterprise.server.util.LookupUtil; + +/** + * This class manages and reports information about the RHQ Server Cloud as a whole. + * It does not discern which server is which, and can be called from any server in + * the cloud and will operate identically the same results. + * + * @author Joseph Marques + */ +@Stateless +public class TopologyManagerBean implements TopologyManagerLocal { + private final Log log = LogFactory.getLog(TopologyManagerBean.class); + + // A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance + // job updating the server mtimes. See StartupServlet. + private static final long SERVER_DOWN_INTERVAL = 1000L * 2 * 60; + + @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME) + private EntityManager entityManager; + + @EJB + private TopologyManagerLocal topologyManager; + + @EJB + private FailoverListManagerLocal failoverListManager; + + @EJB + private PartitionEventManagerLocal partitionEventManager; + + @EJB + private AuthorizationManagerLocal authorizationManager; + + @EJB + //@IgnoreDependency + private ServerManagerLocal serverManager; + + public List<Agent> getAgentsByServerName(String serverName) { + Server server = topologyManager.getServerByName(serverName); + List<Agent> agents = server.getAgents(); + agents.size(); // iterating over this collection out of a transactional boundaries will throw LazyInitExceptions + return agents; + } + + public Server getServerById(int serverId) { + Server server = entityManager.find(Server.class, serverId); + return server; + } + + public Server getServerByName(String serverName) { + Query query = entityManager.createNamedQuery(Server.QUERY_FIND_BY_NAME); + query.setParameter("name", serverName); + + try { + Server server = (Server) query.getSingleResult(); + return server; + } catch (NoResultException nre) { + log.info("Server[name=" + serverName + "] not found, returning null..."); + return null; + } + } + + @SuppressWarnings("unchecked") + public List<Server> getAllCloudServers() { + Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL_CLOUD_MEMBERS); + List<Server> results = query.getResultList(); + return results; + } + + @SuppressWarnings("unchecked") + public List<Server> getAllServers() { + Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL); + List<Server> results = query.getResultList(); + return results; + } + + @SuppressWarnings("unchecked") + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) + public PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc) { + pc.initDefaultOrderingField("s.name"); + + Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, Server.QUERY_FIND_ALL_COMPOSITES, pc); + + List<ServerWithAgentCountComposite> results = query.getResultList(); + int count = getServerCount(); + + return new PageList<ServerWithAgentCountComposite>(results, count, pc); + } + + public int getServerCount() { + Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL); + + try { + long serverCount = (Long) query.getSingleResult(); + return (int) serverCount; + } catch (NoResultException nre) { + log.debug("Could not get count of cloud instances, returning 0..."); + return 0; + } + } + + public int getNormalServerCount() { + Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL_NORMAL_CLOUD_MEMBERS); + + try { + long serverCount = (Long) query.getSingleResult(); + return (int) serverCount; + } catch (NoResultException nre) { + log.debug("Could not get count of normal cloud instances, returning 0..."); + return 0; + } + } + + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) + public void deleteServers(Subject subject, Integer[] serverIds) throws TopologyManagerException { + if (serverIds == null) { + return; + } + + for (Integer nextServerId : serverIds) { + topologyManager.deleteServer(subject, nextServerId); + } + } + + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) + public void deleteServer(Subject subject, Integer serverId) throws TopologyManagerException { + try { + Server server = entityManager.find(Server.class, serverId); + + if (Server.OperationMode.NORMAL == server.getOperationMode()) { + throw new TopologyManagerException("Could not delete server " + server.getName() + + ". Server must be down or in maintenance mode. Current operating mode is: " + + server.getOperationMode().name()); + } + + // Delete any server list entries referencing this server + failoverListManager.deleteServerListDetailsForServer(serverId); + + // Delete any agent references to this server + Query query = entityManager.createNamedQuery(Agent.QUERY_REMOVE_SERVER_REFERENCE); + query.setParameter("serverId", serverId); + query.executeUpdate(); + + // Then, delete the server + query = entityManager.createNamedQuery(Server.QUERY_DELETE_BY_ID); + query.setParameter("serverId", serverId); + query.executeUpdate(); + + entityManager.flush(); + entityManager.clear(); + + log.info("Removed server " + server); + + // Now, request a cloud repartitioning due to the server removal + partitionEventManager.cloudPartitionEventRequest(LookupUtil.getSubjectManager().getOverlord(), + PartitionEventType.SERVER_DELETION, server.getName()); + + } catch (Exception e) { + throw new TopologyManagerException("Could not delete server[id=" + serverId + "]: " + e.getMessage(), e); + } + } + + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) + public void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode) { + if (serverIds == null) { + return; + } + + if (mode == null) { + throw new IllegalArgumentException("mode can not be null"); + } + + if (serverIds.length > 0) { + try { + for (Integer id : serverIds) { + Server server = entityManager.find(Server.class, id); + + if (server.getOperationMode() == mode) { + // ignore if there is no change + continue; + } + + // Audit servers being set to DOWN since the state change can't be reported any other way. Servers + // be set to any other mode will be handled when the cloud job established the current operating mode. + if (Server.OperationMode.DOWN == mode) { + String audit = server.getName() + ": " + server.getOperationMode().name() + " --> " + mode; + + partitionEventManager.auditPartitionEvent(LookupUtil.getSubjectManager().getOverlord(), + PartitionEventType.OPERATION_MODE_CHANGE, audit); + } + server.setOperationMode(mode); + } + } catch (Exception e) { + log.debug("Failed to update HA server modes: " + e); + } + } + } + + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) + public Server updateServer(Subject subject, Server server) { + return entityManager.merge(server); + } + + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) + public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc) { + pc.initDefaultOrderingField("fld.ordinal"); + + Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, + FailoverListDetails.QUERY_GET_VIA_AGENT_ID_WITH_SERVERS, pc); + Query countQuery = PersistenceUtility.createCountQuery(entityManager, + FailoverListDetails.QUERY_GET_VIA_AGENT_ID); + + query.setParameter("agentId", agentId); + countQuery.setParameter("agentId", agentId); + + @SuppressWarnings("unchecked") + List<FailoverListDetails> list = query.getResultList(); + long count = (Long) countQuery.getSingleResult(); + + return new PageList<FailoverListDetails>(list, (int) count, pc); + } + + public void markStaleServersDown(Subject subject) { + if (!authorizationManager.isOverlord(subject)) { + throw new IllegalArgumentException("The markStaleServersDown method must be called by the overlord"); + } + + long staleTime = System.currentTimeMillis() - SERVER_DOWN_INTERVAL; + + String serverName = null; + try { + serverName = serverManager.getIdentity(); + if (log.isDebugEnabled()) { + log.debug(serverName + " is marking stale servers DOWN"); + } + } catch (Exception e) { + log.error("Could not determine which instance is marking stale servers DOWN"); + } + Query query = entityManager.createNamedQuery(Server.QUERY_UPDATE_SET_STALE_DOWN); + query.setParameter("downMode", Server.OperationMode.DOWN); + query.setParameter("normalMode", Server.OperationMode.NORMAL); + query.setParameter("staleTime", staleTime); + query.setParameter("thisServerName", serverName); // might be null + int resultCount = query.executeUpdate(); + + if (log.isDebugEnabled()) { + log.debug(String.valueOf(resultCount) + " stale servers were marked DOWN"); + } + + // Perform requested partition events. Note that we only need to execute one cloud partition + // regardless of the number of pending requests, as the work would be duplicated. + partitionEventManager.processRequestedPartitionEvents(); + } + + @RequiredPermission(Permission.MANAGE_SETTINGS) + public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) { + CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); + CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager); + return runner.execute(); + } +} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java new file mode 100644 index 0000000..22ba34a --- /dev/null +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java @@ -0,0 +1,43 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2008 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.server.cloud; + +/** + * @author Joseph Marques + */ +public class TopologyManagerException extends AffinityGroupException { + + private static final long serialVersionUID = 1L; + + public TopologyManagerException() { + } + + public TopologyManagerException(String message) { + super(message); + } + + public TopologyManagerException(Throwable cause) { + super(cause); + } + + public TopologyManagerException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java new file mode 100644 index 0000000..f098e54 --- /dev/null +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java @@ -0,0 +1,155 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2008 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.server.cloud; + +import java.util.List; + +import javax.ejb.Local; + +import org.rhq.core.domain.auth.Subject; +import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.ServerCriteria; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; + +/** + * @author Joseph Marques + */ +@Local +public interface TopologyManagerLocal { + + void deleteServers(Subject subject, Integer[] serverIds) throws TopologyManagerException; + + void deleteServer(Subject subject, Integer serverId) throws TopologyManagerException; + + List<Agent> getAgentsByServerName(String serverName); + + /** + * + * @param serverId + * @return the server + * @deprecated Use the <code>findServersByCriteria()</code> instead. + */ + Server getServerById(int serverId); + + /** + * + * @param serverName + * @return the server + * @deprecated Use the <code>findServersByCriteria()</code> instead. + */ + Server getServerByName(String serverName); + + /** + * Return every server registered in the database considered part of the active cloud. This will exclude, for example, + * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning. + * @return All servers available to the cloud. + * + */ + List<Server> getAllCloudServers(); + + /** + * Return every server registered in the database. + * @return All servers, regardless of operation mode. + * @deprecated Use the <code>findServersByCriteria()</code> instead. + */ + List<Server> getAllServers(); + + + /** + * Returns all servers with the agent counts + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller + * @param pc + * @return list of <code>ServerWithAgentCountComposite</code> + */ + PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc); + + /** + * Returns the number of servers that are part of the "server cloud", which excludes + * servers that have been installed but not associated with the cloud. + * The returned count will include those servers that are down or in maintenance mode, + * in addition to those servers that are currently running in a normal state. + * + * @return count of servers in the cloud + */ + int getServerCount(); + + /** + * Returns the number of servers that are part of the "server cloud" that are currently + * running in "normal" mode. + * + * This excludes all other servers such as those servers that have been installed but + * not associated with the cloud, servers that are down or in maintenance mode. + * + * @return count of servers in the cloud that are in a normal running state + */ + int getNormalServerCount(); + + /** + * Updates the server operation mode for multiple servers. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller + * @param serverIds + * @param mode desired server operation mode + */ + void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode); + + /** + * Updates the server. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller. + * @param server + * @return + */ + Server updateServer(Subject subject, Server server); + + /** + * + * the subject needs to have MANAGE_SETTINGS permissions. + * + * @param subject + * @param agentId + * @param pc + * @return + */ + PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc); + + void markStaleServersDown(Subject subject); + + /** + * Fetches the server based on provided criteria. + * + * the subject needs to have MANAGE_SETTINGS permissions. + * + * @param subject caller + * @param criteria the criteria + * @return list of servers + */ + PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria); +} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java index b74df73..4300313 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java @@ -46,9 +46,9 @@ import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.communications.GlobalSuspendCommandListener; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.auth.SubjectManagerLocal; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal; import org.rhq.enterprise.server.cloud.StatusManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceUtil;
/** @@ -79,7 +79,7 @@ public class ServerManagerBean implements ServerManagerLocal { private EntityManager entityManager;
@EJB - private CloudManagerLocal cloudManager; + private TopologyManagerLocal topologyManager;
@EJB private StatusManagerLocal agentStatusManager; @@ -141,7 +141,7 @@ public class ServerManagerBean implements ServerManagerLocal {
public List<Agent> getAgents() { String identity = getIdentity(); - List<Agent> results = cloudManager.getAgentsByServerName(identity); + List<Agent> results = topologyManager.getAgentsByServerName(identity); return results; }
@@ -152,7 +152,7 @@ public class ServerManagerBean implements ServerManagerLocal {
public boolean getAndClearServerStatus() { String identity = getIdentity(); - Server server = cloudManager.getServerByName(identity); + Server server = topologyManager.getServerByName(identity); if (server == null) { return false; // don't reload caches if we don't know who we are } @@ -163,7 +163,7 @@ public class ServerManagerBean implements ServerManagerLocal {
public Server getServer() throws ServerNotFoundException { String identity = getIdentity(); - Server result = cloudManager.getServerByName(identity); + Server result = topologyManager.getServerByName(identity); if (result == null) { throw new ServerNotFoundException("Could not find server; is the " + RHQ_SERVER_NAME_PROPERTY + " property set in rhq-server.properties?"); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java index 0749543..dd2e244 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java @@ -41,7 +41,7 @@ import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.util.file.FileUtil; import org.rhq.core.util.jdbc.JDBCUtil; import org.rhq.enterprise.server.RHQConstants; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal; import org.rhq.enterprise.server.scheduler.SchedulerLocal; import org.rhq.enterprise.server.util.LookupUtil; @@ -70,7 +70,7 @@ public class ShutdownListener { private ServerManagerLocal serverManager;
@EJB - private CloudManagerLocal cloudManager; + private TopologyManagerLocal topologyManager;
@Resource(name = "RHQ_DS", mappedName = RHQConstants.DATASOURCE_JNDI_NAME) private DataSource dataSource; @@ -169,7 +169,7 @@ public class ShutdownListener { // Set the server operation mode to DOWN unless in MM Server server = serverManager.getServer(); if (Server.OperationMode.MAINTENANCE != server.getOperationMode()) { - cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN); + topologyManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN); } } catch (Throwable t) { // only show ugly stack traces if the user runs the server in debug mode diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java index 3240c1e..aa153d5 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java @@ -63,7 +63,7 @@ import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.alert.engine.internal.AlertConditionCacheCoordinator; import org.rhq.enterprise.server.auth.SessionManager; import org.rhq.enterprise.server.auth.SubjectManagerLocal; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.cloud.instance.CacheConsistencyManagerLocal; import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal; import org.rhq.enterprise.server.cloud.instance.SyncEndpointAddressException; @@ -112,7 +112,7 @@ public class StartupBean { private CacheConsistencyManagerLocal cacheConsistencyManager;
@EJB - private CloudManagerLocal cloudManager; + private TopologyManagerLocal topologyManager;
@EJB private ResourceTypeManagerLocal resourceTypeManager; @@ -258,7 +258,7 @@ public class StartupBean { log.info("Server is configured to start up in MAINTENANCE mode."); Server server = serverManager.getServer(); Integer[] serverId = new Integer[] { server.getId() }; - cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), serverId, + topologyManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), serverId, OperationMode.MAINTENANCE); }
@@ -284,7 +284,7 @@ public class StartupBean { */ private void createDefaultServerIfNecessary() { String identity = serverManager.getIdentity(); - Server server = cloudManager.getServerByName(identity); + Server server = topologyManager.getServerByName(identity); if (server == null) { server = new Server(); server.setName(identity); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java index da89754..e2e5338 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java @@ -178,7 +178,7 @@ abstract class AbstractJobWrapper implements Job {
// we only refire immediately if we are in an HA environment- which means another server might // be able to take over - and that other server might have its master PC running for us to execute in. - boolean isHA = LookupUtil.getCloudManager().getNormalServerCount() > 1; + boolean isHA = LookupUtil.getTopologyManager().getNormalServerCount() > 1; exception.setRefireImmediately(isHA);
// abort this invocation now - we can't run without the plugin containers diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java index 7540d7e..4922ffd 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java @@ -35,7 +35,7 @@ public class CloudManagerJob extends AbstractStatefulJob { Subject overlord = LookupUtil.getSubjectManager().getOverlord(); log.debug("Begin scanning for servers that missed their heartbeat"); try { - LookupUtil.getCloudManager().markStaleServersDown(overlord); + LookupUtil.getTopologyManager().markStaleServersDown(overlord); } finally { log.debug("Finished scanning for servers that missed their heartbeat"); } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java index f1b685a..b6ed2b2 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java @@ -62,8 +62,8 @@ import org.rhq.enterprise.server.bundle.BundleManagerBean; import org.rhq.enterprise.server.bundle.BundleManagerLocal; import org.rhq.enterprise.server.cloud.AffinityGroupManagerBean; import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal; -import org.rhq.enterprise.server.cloud.CloudManagerBean; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerBean; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.cloud.FailoverListManagerBean; import org.rhq.enterprise.server.cloud.FailoverListManagerLocal; import org.rhq.enterprise.server.cloud.PartitionEventManagerBean; @@ -469,8 +469,8 @@ public final class LookupUtil { return lookupLocal(AffinityGroupManagerBean.class); }
- public static CloudManagerLocal getCloudManager() { - return lookupLocal(CloudManagerBean.class); + public static TopologyManagerLocal getTopologyManager() { + return lookupLocal(TopologyManagerBean.class); }
public static ClusterManagerLocal getClusterManager() { diff --git a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml index b7c5c66..6ce7bb2 100644 --- a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml +++ b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml @@ -102,7 +102,7 @@
<!-- - The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean, StatusManagerBean, and SystemManagerBean + The CacheConsistencyManagerBean, TopologyManagerBean, ServerManagerBean, StatusManagerBean, and SystemManagerBean SLSB's are all invoked, either directly or indirectly, by EJB timers. Since EJB timer invocations are always done in new threads, using the default SLSB pool impl (ThreadlocalPool) would cause a new instance of this SLSB to be created every time it was invoked by an EJB timer. This would be bad if only because an existing @@ -128,7 +128,7 @@ </session>
<session> - <ejb-name>CloudManagerBean</ejb-name> + <ejb-name>TopologyManagerBean</ejb-name> <pool-config> <pool-class>org.jboss.ejb3.StrictMaxPool</pool-class> <pool-max-size>30</pool-max-size> diff --git a/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java b/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java index 88eb3ba..2dfc404 100644 --- a/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java +++ b/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java @@ -20,7 +20,7 @@ import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.resource.Resource; import org.rhq.enterprise.server.auth.SubjectManagerLocal; -import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.TopologyManagerLocal; import org.rhq.enterprise.server.operation.OperationManagerLocal; import org.rhq.enterprise.server.operation.ResourceOperationSchedule; import org.rhq.enterprise.server.plugin.pc.ControlFacet; @@ -57,7 +57,7 @@ public class CloudServerPluginComponent implements ServerPluginComponent, Contro
ControlResults results = new ControlResults();
- CloudManagerLocal cloudMgr = LookupUtil.getCloudManager(); + TopologyManagerLocal cloudMgr = LookupUtil.getTopologyManager(); Server server = cloudMgr.getServerByName(serverName);
if (server == null) { @@ -91,7 +91,7 @@ public class CloudServerPluginComponent implements ServerPluginComponent, Contro public void syncServerEndpoints(ScheduledJobInvocationContext context) { log.debug("Preparing to sync server endpoints.");
- CloudManagerLocal cloudMgr = LookupUtil.getCloudManager(); + TopologyManagerLocal cloudMgr = LookupUtil.getTopologyManager(); List<Server> servers = cloudMgr.getAllServers();
purgeStaleServers(context, servers);
commit 17527ede423834ae3aef36021f3b8d162240cfea Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 19:47:11 2012 +0100
ServerCriteria now allows filtering by multiple operation modes, AgentCriteria allows filtering by agenttoken
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java index ba1a470..b535141 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java @@ -46,6 +46,7 @@ public class AgentCriteria extends Criteria { private String filterName; private String filterAddress; private Integer filterPort; + private String filterAgenttoken; private Integer filterServerId; // requires override private Integer filterAffinityGroupId; // requires override
@@ -56,8 +57,8 @@ public class AgentCriteria extends Criteria { private PageOrdering sortName;
public AgentCriteria() { - filterOverrides.put("serverId", "server.id = ?"); - filterOverrides.put("affinityGroupId", "affinityGroup.id = ?"); + filterOverrides.put("serverId", "server.id = ?"); + filterOverrides.put("affinityGroupId", "affinityGroup.id = ?"); }
public Class<?> getPersistentClass() { @@ -71,7 +72,7 @@ public class AgentCriteria extends Criteria { public void addFilterName(String filterName) { this.filterName = filterName; } - + public void addFilterAffinityGroupId(Integer filterAffinityGroupId) { this.filterAffinityGroupId = filterAffinityGroupId; } @@ -84,14 +85,18 @@ public class AgentCriteria extends Criteria { this.filterPort = filterPort; }
+ public void addFilterAgenttoken(String filterAgenttoken) { + this.filterAgenttoken = filterAgenttoken; + } + public void addFilterServerId(Integer filterServerId) { this.filterServerId = filterServerId; } - + public void fetchAffinityGroup(boolean fetchAffinityGroup) { this.fetchAffinityGroup = fetchAffinityGroup; } - + public void fetchServer(boolean fetchServer) { this.fetchServer = fetchServer; } diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java index b00b3d7..ebbdbc6 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java @@ -19,6 +19,9 @@
package org.rhq.core.domain.criteria;
+import java.util.Arrays; +import java.util.List; + import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType;
@@ -28,6 +31,7 @@ import org.rhq.core.domain.util.PageOrdering;
/** * Criteria object for querying {@link Server}s. + * Only subject with MANAGE_SETTINGS can fetch these instances. * * @author Jiri Kremser */ @@ -48,7 +52,7 @@ public class ServerCriteria extends Criteria { private String filterAddress; private Integer filterPort; private Integer filterSecurePort; - private OperationMode filterOperationMode; // requires override + private List<OperationMode> filterOperationMode; // requires override private Integer filterComputePower; private Integer filterAffinityGroupId; // requires override
@@ -60,8 +64,8 @@ public class ServerCriteria extends Criteria { private PageOrdering sortComputePower;
public ServerCriteria() { - // filterOverrides.put("operationMode", "operationMode IN ( ? )"); - filterOverrides.put("affinityGroupId", "affinityGroup.id = ?"); + filterOverrides.put("operationMode", "operationMode IN ( ? )"); + filterOverrides.put("affinityGroupId", "affinityGroup.id = ?"); }
public Class<?> getPersistentClass() { @@ -88,8 +92,10 @@ public class ServerCriteria extends Criteria { this.filterSecurePort = filterSecurePort; }
- public void addFilterOperationMode(OperationMode operationMode) { - this.filterOperationMode = operationMode; + public void addFilterOperationMode(OperationMode... operationMode) { + if (operationMode != null && operationMode.length > 0) { + this.filterOperationMode = Arrays.asList(operationMode); + } }
public void addFilterComputePower(Integer filterComputePower) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java index 04949ef..f7c8083 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -126,12 +126,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
@Override protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { - String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName()); - Criteria criteria = new Criteria(); - if (null != search) { - criteria.addCriteria(FIELD_NAME.propertyName(), search); - } - return criteria; + return availableFilterForm.getValuesAsCriteria(); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index fcfe892..d1d97d4 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -37,7 +37,6 @@ import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.CloseClickEvent; import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; -import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.VLayout; @@ -49,7 +48,7 @@ import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; -import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem; +import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem; import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; @@ -89,25 +88,13 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve availableFilterForm.setNumCols(4); availableFilterForm.setWidth("75%"); final TextItem search = new TextItem(FIELD_NAME.propertyName(), MSG.common_title_search()); - final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE, - MSG.view_adminTopology_serverDetail_operationMode()); - operationModeSelect.setValueMap(buildOperationModeOptions()); - operationModeSelect.setValue("ALL"); + final EnumSelectItem operationModeSelect = new EnumSelectItem(ServerDatasource.FILTER_OPERATION_MODE, + MSG.view_adminTopology_serverDetail_operationMode(), OperationMode.class, null, null); availableFilterForm.setItems(search, operationModeSelect); } return availableFilterForm; }
- private String[] buildOperationModeOptions() { - OperationMode[] modes = OperationMode.values(); - String[] options = new String[modes.length + 1]; - for (int i = 0; i < modes.length; i++) { - options[i] = modes[i].toString(); - } - options[modes.length] = "ALL"; - return options; - } - private void prepareMembers(final AffinityGroupServersSelector selector) { ServerCriteria criteria = new ServerCriteria(); criteria.addFilterAffinityGroupId(affinityGroupId); @@ -144,16 +131,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
@Override protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { - String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName()); - String operationMode = (String) availableFilterForm.getValue(ServerDatasource.FILTER_OPERATION_MODE); - Criteria criteria = new Criteria(); - if (null != search) { - criteria.addCriteria(FIELD_NAME.propertyName(), search); - } - if (operationMode != null && !"ALL".equals(operationMode)) { - criteria.addCriteria(ServerDatasource.FILTER_OPERATION_MODE, operationMode); - } - return criteria; + return availableFilterForm.getValuesAsCriteria(); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java index 31dd28b..f35aaee 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java @@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ADDRESS; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AGENTTOKEN; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME; @@ -59,6 +60,7 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> { // filters public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName(); public static final String FILTER_PORT = FIELD_PORT.propertyName(); + public static final String FILTER_AGENTTOKEN = FIELD_AGENTTOKEN.propertyName(); public static final String FILTER_SERVER_ID = "serverId"; public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
@@ -167,6 +169,7 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> { criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class)); criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class)); criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class)); + criteria.addFilterAgenttoken(getFilter(request, FILTER_AGENTTOKEN, String.class)); criteria.addFilterServerId(getFilter(request, FILTER_SERVER_ID, Integer.class)); criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java index 7935446..71d9d5a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java @@ -39,6 +39,8 @@ public enum AgentDatasourceField { FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()), + + FIELD_AGENTTOKEN("agenttoken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages() .view_adminTopology_agent_lastAvailabilityReport()), diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 2eb0d87..39bd457 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -95,6 +95,11 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) { + if (criteria == null) { + response.setTotalRows(0); + processResponse(request.getRequestId(), response); + return; + } GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { public void onSuccess(PageList<PartitionEvent> result) { @@ -134,12 +139,18 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override protected PartitionEventCriteria getFetchCriteria(DSRequest request) { + ExecutionStatus[] statusesFilter = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class); + PartitionEventType[] typesFilter = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class); + if (statusesFilter == null || statusesFilter.length == 0 || typesFilter == null || typesFilter.length == 0) { + return null; // user didn't select any ex. status or event type - return null to indicate no data should + // be displayed + } PartitionEventCriteria criteria = new PartitionEventCriteria(); // printRequestCriteria(request); criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); criteria.addFilterEventDetail(getFilter(request, FIELD_EVENT_DETAIL.propertyName(), String.class)); - criteria.addFilterExecutionStatus(getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class)); - criteria.addFilterEventType(getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class)); + criteria.addFilterExecutionStatus(statusesFilter); + criteria.addFilterEventType(typesFilter);
//@todo: Remove me when finished debugging search expression Log.debug(" *** PartitionEventCriteria Search String: " + getFilter(request, "search", String.class)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 736e5b6..09ea8c3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -111,6 +111,11 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override protected void executeFetch(final DSRequest request, final DSResponse response, ServerCriteria criteria) { + if (criteria == null) { + response.setTotalRows(0); + processResponse(request.getRequestId(), response); + return; + } if (affinityGroupId != null) { criteria.addFilterAffinityGroupId(affinityGroupId); } @@ -179,6 +184,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override protected ServerCriteria getFetchCriteria(DSRequest request) { + OperationMode[] modesFilter = getArrayFilter(request, FILTER_OPERATION_MODE, OperationMode.class); + if (modesFilter == null || modesFilter.length == 0) { + return null; // user didn't select any modes - return null to indicate no data should be displayed + } ServerCriteria criteria = new ServerCriteria(); // printRequestCriteria(request); criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); @@ -186,7 +195,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class)); criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class)); criteria.addFilterSecurePort(getFilter(request, FILTER_SECURE_PORT, Integer.class)); - criteria.addFilterOperationMode(getFilter(request, FILTER_OPERATION_MODE, OperationMode.class)); + criteria.addFilterOperationMode(modesFilter); criteria.addFilterComputePower(getFilter(request, FILTER_COMPUTE_POWER, Integer.class)); criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java index bf6d10a..c4222fc 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java @@ -51,6 +51,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.alert.AlertPriority; import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; import org.rhq.core.domain.cloud.PartitionEventType; +import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.criteria.BaseCriteria; import org.rhq.core.domain.drift.DriftCategory; import org.rhq.core.domain.event.EventSeverity; @@ -605,6 +606,8 @@ public abstract class RPCDataSource<T, C extends BaseCriteria> extends DataSourc return (S[]) new ExecutionStatus[size]; } else if (genericEnumType == PartitionEventType.class) { return (S[]) new PartitionEventType[size]; + } else if (genericEnumType == OperationMode.class) { + return (S[]) new OperationMode[size]; } else { throw new IllegalArgumentException(MSG.dataSource_rpc_error_unsupportedEnumType(genericEnumType.getName())); }
commit 84a7565038764cea982692bd25e5060c28fa7d3c Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 17:29:01 2012 +0100
JavaDoc for SLSBs (describing needed permissions)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java index b18b5d6..ba1a470 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java @@ -28,6 +28,7 @@ import org.rhq.core.domain.util.PageOrdering;
/** * Criteria object for querying {@link Server}s. + * Only subject with MANAGE_SETTINGS can fetch these instances. * * @author Jiri Kremser */ diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java index 13ad211..975d425 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java @@ -32,6 +32,7 @@ import org.rhq.core.domain.util.PageOrdering;
/** * Criteria object for querying {@link PartitionEvent}s. + * Only subject with MANAGE_SETTINGS can fetch these instances. * * @author Jiri Kremser */ diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java index 37029b4..0466a7c 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java @@ -35,28 +35,81 @@ import org.rhq.core.domain.util.PageList; public interface AffinityGroupManagerLocal { AffinityGroup getById(Subject subject, int affinityGroupId);
+ /** + * Creates a new affinity group. + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance + * @param affinityGroup @see AffinityGroup + * @return new id of the group + * @throws AffinityGroupException + */ int create(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException;
+ /** + * Deletes the affinity groups. + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance + * @param affinityGroupIds + * @return + */ int delete(Subject subject, Integer[] affinityGroupIds);
+ /** + * Updates the affinity group. + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance + * @param affinityGroup @see AffinityGroup + * @return + * @throws AffinityGroupException + */ AffinityGroup update(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException;
+ /** + * Adds agents to the affinity group. + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance + * @param affinityGroupId + * @param agentIds + */ void addAgentsToGroup(Subject subject, int affinityGroupId, Integer[] agentIds);
/** * This should only be called if the agent is currently assigned to an affinity group and that group - * is being removed, setting the agent to no affinity. Otherwise, unnecessary partition events can be generated. - * @param subject + * is being removed, setting the agent to no affinity. Otherwise, unnecessary partition events can be generated. + * + * Subjects needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance * @param agentIds */ void removeAgentsFromGroup(Subject subject, Integer[] agentIds);
+ /** + * Adds servers to the affinity group. + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance + * @param affinityGroupId + * @param serverIds + */ void addServersToGroup(Subject subject, int affinityGroupId, Integer[] serverIds);
/** * This should only be called if the server is currently assigned to an affinity group and that group * is being removed, setting the server to no affinity. Otherwise, unnecessary partition events can be generated. - * @param subject + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject the Subject instance * @param agentIds */ void removeServersFromGroup(Subject subject, Integer[] serverIds); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java index 8ba595a..25a9145 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java @@ -43,23 +43,47 @@ public interface CloudManagerLocal {
List<Agent> getAgentsByServerName(String serverName);
+ /** + * + * @param serverId + * @return the server + * @deprecated Use the <code>findServersByCriteria()</code> instead. + */ Server getServerById(int serverId);
+ /** + * + * @param serverName + * @return the server + * @deprecated Use the <code>findServersByCriteria()</code> instead. + */ Server getServerByName(String serverName);
/** * Return every server registered in the database considered part of the active cloud. This will exclude, for example, * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning. * @return All servers available to the cloud. + * */ List<Server> getAllCloudServers();
/** * Return every server registered in the database. * @return All servers, regardless of operation mode. + * @deprecated Use the <code>findServersByCriteria()</code> instead. */ List<Server> getAllServers();
+ + /** + * Returns all servers with the agent counts + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller + * @param pc + * @return list of <code>ServerWithAgentCountComposite</code> + */ PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc);
/** @@ -83,10 +107,37 @@ public interface CloudManagerLocal { */ int getNormalServerCount();
+ /** + * Updates the server operation mode for multiple servers. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller + * @param serverIds + * @param mode desired server operation mode + */ void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode);
+ /** + * Updates the server. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller. + * @param server + * @return + */ Server updateServer(Subject subject, Server server);
+ /** + * + * the subject needs to have MANAGE_SETTINGS permissions. + * + * @param subject + * @param agentId + * @param pc + * @return + */ PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc);
void markStaleServersDown(Subject subject); @@ -94,9 +145,11 @@ public interface CloudManagerLocal { /** * Fetches the server based on provided criteria. * + * the subject needs to have MANAGE_SETTINGS permissions. + * * @param subject caller * @param criteria the criteria - * @return + * @return list of servers */ PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria); } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java index 961af25..4618fda 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java @@ -254,7 +254,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { return new PageList<PartitionEventDetails>(detailsList, (int) count, pageControl); }
- @RequiredPermission(Permission.MANAGE_SETTINGS) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria) { CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator, diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java index f0a1bf2..4a4805e9 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java @@ -56,8 +56,11 @@ public interface PartitionEventManagerLocal { String eventDetail);
/** - * This call requests full repartitioning of the agent population by the recurring cluster manager job. - * @param subject + * This call requests full repartitioning of the agent population by the recurring cluster manager job. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller * @param eventType * @param eventDetail Any useful information regarding the event generation. Should be suitable for display. * Typically a relevant server name. @@ -82,10 +85,22 @@ public interface PartitionEventManagerLocal {
/** * This is primarily a test entry point. - * @param event + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject + * @param partitionEventIds */ void deletePartitionEvents(Subject subject, Integer[] partitionEventIds);
+ /** + * Deletes all the partition events. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject + * @return count of deleted events + */ int purgeAllEvents(Subject subject);
PartitionEvent getPartitionEvent(Subject subject, int partitionEventId); @@ -93,14 +108,26 @@ public interface PartitionEventManagerLocal { PageList<PartitionEvent> getPartitionEvents(Subject subject, PartitionEventType type, ExecutionStatus status, String details, PageControl pageControl);
+ /** + * Returns the partition event details. + * + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller + * @param partitionEventId + * @param pageControl + * @return list with partition event details + */ PageList<PartitionEventDetails> getPartitionEventDetails(Subject subject, int partitionEventId, PageControl pageControl);
/** - * the subject needs to have MANAGE_INVENTORY permission. + * Fetches the partition events based on provided criteria. * - * @param subject - * @param criteria + * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions. + * + * @param subject the caller + * @param criteria the criteria * @return list with partition events */ PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria); 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 5494e4d..7c003ac 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 @@ -102,6 +102,7 @@ public interface AgentManagerLocal { * Returns a collection of all agents currently in inventory. * * @return list of all known agents in inventory + * @deprecated Use <code>findAgentsByCriteria()</code> instead */ List<Agent> getAllAgents();
@@ -110,6 +111,7 @@ public interface AgentManagerLocal { * * @param serverId the server to filter the agent list by. pass null to view unfiltered results. * @return list of all known agents in inventory + * @deprecated Use <code>findAgentsByCriteria()</code> instead */ PageList<Agent> getAgentsByServer(Subject subject, Integer serverId, PageControl pageControl);
@@ -127,6 +129,7 @@ public interface AgentManagerLocal { * @param agentName * * @return the agent whose name matches the given name; <code>null</code> if there is no agent with the given name + * @deprecated Use <code>findAgentsByCriteria()</code> instead */ Agent getAgentByName(String agentName);
@@ -137,6 +140,7 @@ public interface AgentManagerLocal { * @param agentId * * @return the agent whose id matches the given id; <code>null</code> if there is no agent with the given id + * @deprecated Use <code>findAgentsByCriteria()</code> instead */ Agent getAgentByID(int agentId);
@@ -148,6 +152,7 @@ public interface AgentManagerLocal { * * @return the agent whose agent token matches the given token; <code>null</code> if there is no agent with the * given token + * @deprecated Use <code>findAgentsByCriteria()</code> instead */ Agent getAgentByAgentToken(String token);
@@ -160,6 +165,7 @@ public interface AgentManagerLocal { * * @return the agent to be known at the given address and port; <code>null</code> if there is no agent with the * given token + * @deprecated Use <code>findAgentsByCriteria()</code> instead */ Agent getAgentByAddressAndPort(String address, int port);
@@ -310,5 +316,14 @@ public interface AgentManagerLocal { */ public PingRequest handlePingRequest(PingRequest request);
+ /** + * Fetches the agents based on provided criteria. + * + * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions. + * + * @param subject caller + * @param criteria the criteria + * @return list of agents + */ PageList<Agent> findAgentsByCriteria(Subject subject, AgentCriteria criteria); } \ No newline at end of file
commit e12e4d9e200288cb65be0c15e3bf175b1c0a8b3f Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 20 14:42:00 2012 +0100
Overriding getBasePath() methods for allowing double clicking on table record for detail views & some JavaDoc
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java index 65efb7c..04949ef 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -55,6 +55,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/** + * Component for assigning the agents into affinity group. + * * @author Jirka Kremser */ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCriteria> { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 8a8d81b..669ea22 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -45,7 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/** - * Shows details of a server. + * Shows details of a affinity group. * * @author Jirka Kremser */ diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index fe4db20..fcfe892 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -58,6 +58,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/** + * Component for assigning the servers into affinity group. + * * @author Jirka Kremser */ public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index 87afd6d..ef271dc 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -60,8 +60,9 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/** + * Shows the table of all affinity groups. + * * @author Jirka Kremser - * */ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java index dd596e9..31dd28b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java @@ -50,8 +50,9 @@ import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/** + * Datasource for @see FailoverListDetails. + * * @author Jirka Kremser - * */ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 7e5c3ac..255a571 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -49,7 +49,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** - * Shows details of a server. + * Shows details of an agent. * * @author Jirka Kremser */ diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index 8f2a658..dbc5bb2 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -44,6 +44,8 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** + * Shows the table of all agents. + * * @author Jirka Kremser */ public class AgentTableView extends TableSection<AgentDatasource> implements HasViewName { @@ -141,5 +143,9 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has public ViewName getViewName() { return VIEW_ID; } - + + @Override + protected String getBasePath() { + return VIEW_PATH; + } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index 6bfa378..c21d086 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -48,8 +48,9 @@ import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellForma import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/** + * Datasource for @see FailoverListDetails. + * * @author Jirka Kremser - * */ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index c3d103b..2eb0d87 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -49,8 +49,9 @@ import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/** + * Datasource for @see PartitionEvent. + * * @author Jirka Kremser - * */ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, PartitionEventCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java index 4210202..43ac373 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java @@ -114,7 +114,6 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma return; } }); - }
public void onFailure(Throwable caught) { @@ -167,7 +166,9 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma MSG.view_adminTopology_partitionEventsDetail_agentAssignments()); section.setExpanded(true); if (eventDetails == null || eventDetails.size() == 0) { - section.setItems(new Label(MSG.view_adminTopology_partitionEventsDetail_agentAssignments_nothing())); + Label nothing = new Label(MSG.view_adminTopology_partitionEventsDetail_agentAssignments_nothing()); + nothing.setMargin(10); + section.setItems(nothing); } else { // there is no need for datasource, it is a simple table with two columns ListGrid assignments = new ListGrid(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index 599b2c2..3cbfdb1 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -53,8 +53,9 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** - * @author Jirka Kremser + * Shows the table of all partition events. * + * @author Jirka Kremser */ public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 0e7fd48..736e5b6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -52,8 +52,9 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log;
/** + * Datasource for @see Server. + * * @author Jirka Kremser - * */ public class ServerDatasource extends AbstractServerNodeDatasource<Server, ServerCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 2374685..6cae592 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -53,8 +53,9 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** - * @author Jirka Kremser + * Shows the table of all servers. * + * @author Jirka Kremser */ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName { @@ -137,6 +138,11 @@ public class ServerTableView extends public Canvas getDetailsView(Integer id) { return new ServerDetailView(extendLocatorId("detailsView"), id); } + +// @Override +// public abstract void showDetails(ID id) { +// +// }
private void showCommonActions() { addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setNormal()); @@ -249,5 +255,9 @@ public class ServerTableView extends public ViewName getViewName() { return VIEW_ID; } - + + @Override + protected String getBasePath() { + return VIEW_PATH; + } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index addd59d..d686395 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -38,8 +38,9 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/** + * Datasource for @see ServerWithAgentCountComposite. + * * @author Jirka Kremser - * */ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
commit 8aa16ccbb947f95aee01f25a1c4d8c800c133a8c Merge: 764fb31 17d9ac9 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 23:50:44 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 764fb31756c961b5f5a31df71a8b04def6fce249 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 23:47:56 2012 +0100
AuthZ for CloudManagerBean (adding Subject param to methods)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index 3659082..addd59d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -64,9 +64,8 @@ public class ServerWithAgentCountDatasource extends ListGridField agentCountField = FIELD_AGENT_COUNT.getListGridField("75"); agentCountField.setHoverCustomizer(new HoverCustomizer() { public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) { - return MSG.view_adminTopology_message_agentsCount(FIELD_AGENT_COUNT.propertyName()); - // "There are " + record.getAttributeAsInt(FIELD_AGENT_COUNT.propertyName()) - // + " agents registered to this server."; + return MSG.view_adminTopology_message_agentsCount(record.getAttributeAsString(FIELD_AGENT_COUNT + .propertyName())); } }); agentCountField.setShowHover(true); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index dd63fa0..ab46527 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -77,7 +77,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud @Override public void deleteServers(int[] serverIds) throws RuntimeException { try { - cloudManager.deleteServers(ArrayUtils.toObject(serverIds)); + cloudManager.deleteServers(getSessionSubject(), ArrayUtils.toObject(serverIds)); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } @@ -86,7 +86,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud @Override public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException { try { - cloudManager.updateServerMode(ArrayUtils.toObject(serverIds), mode); + cloudManager.updateServerMode(getSessionSubject(), ArrayUtils.toObject(serverIds), mode); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } @@ -96,7 +96,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException { try { - return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc), + return SerialUtility.prepare( + cloudManager.getFailoverListDetailsByAgentId(getSessionSubject(), agentId, pc), "CloudGWTServiceImpl.getFailoverListDetailsByAgentId"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java index 49dee0d..ef4b65a 100644 --- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java +++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java @@ -49,7 +49,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) { try { - cloudManager.deleteServers(ids); + cloudManager.deleteServers(subject, ids);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Removed [" + ids.length + "] servers from the cloud."); @@ -70,7 +70,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) { try { - cloudManager.updateServerMode(ids, mode); + cloudManager.updateServerMode(EnterpriseFacesContextUtility.getSubject(), ids, mode);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Set [" + ids.length + "] servers to mode " + mode); diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java index 90d7042..4ccba78 100644 --- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java +++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java @@ -81,7 +81,8 @@ public class ViewAgentUIBean extends PagedDataTableUIBean { @Override public PageList<FailoverListDetails> fetchPage(PageControl pc) { int agentId = getAgent().getId(); - PageList<FailoverListDetails> pageList = cloudManager.getFailoverListDetailsByAgentId(agentId, pc); + PageList<FailoverListDetails> pageList = cloudManager.getFailoverListDetailsByAgentId( + EnterpriseFacesContextUtility.getSubject(), agentId, pc);
return pageList; } diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java index a74550d..a33d77c 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java @@ -683,7 +683,7 @@ public class AlertConditionTest extends UpdatePluginMetadataTestBase { private void deleteServerIdentity() throws Exception { if (server != null) { cleanupAgent(); // can't remove the server before we purge the agent - LookupUtil.getCloudManager().deleteServer(server.getId()); + LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); server = null; } } diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java index 26a6254..2494ece 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java @@ -95,8 +95,9 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test { try { for (Server server : servers) { // must set to down to allow for a delete - cloudManager.updateServerMode(new Integer[] { server.getId() }, Server.OperationMode.DOWN); - cloudManager.deleteServer(server.getId()); + cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), + new Integer[] { server.getId() }, Server.OperationMode.DOWN); + cloudManager.deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId()); }
for (Agent agent : agents) { diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java index 0e25ee4..3857afc 100644 --- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java +++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java @@ -178,8 +178,9 @@ public class CoreServerServiceImplTest extends AbstractEJB3Test { protected void afterMethod() throws Exception {
// cleanup our test server - LookupUtil.getCloudManager().updateServerMode(new Integer[] { server.getId() }, OperationMode.DOWN); - LookupUtil.getCloudManager().deleteServer(server.getId()); + LookupUtil.getCloudManager().updateServerMode(LookupUtil.getSubjectManager().getOverlord(), + new Integer[] { server.getId() }, OperationMode.DOWN); + LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
// shutdown our mock mbean server unprepareCustomServerService(CoreServerMBean.OBJECT_NAME); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java index 455e375..37029b4 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java @@ -87,9 +87,5 @@ public interface AffinityGroupManagerLocal { */ PageList<Agent> getAgentNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
- /** - * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and - * <code>CloudManagerBean.findServersByCriteria()</code> instead) - */ PageList<AffinityGroupCountComposite> getComposites(Subject subject, PageControl pageControl); } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java index d1ffb1b..2c775d4 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java @@ -163,19 +163,19 @@ public class CloudManagerBean implements CloudManagerLocal {
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public void deleteServers(Integer[] serverIds) throws CloudManagerException { + public void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException { if (serverIds == null) { return; }
for (Integer nextServerId : serverIds) { - cloudManager.deleteServer(nextServerId); + cloudManager.deleteServer(subject, nextServerId); } }
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public void deleteServer(Integer serverId) throws CloudManagerException { + public void deleteServer(Subject subject, Integer serverId) throws CloudManagerException { try { Server server = entityManager.find(Server.class, serverId);
@@ -214,7 +214,7 @@ public class CloudManagerBean implements CloudManagerLocal {
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public void updateServerMode(Integer[] serverIds, Server.OperationMode mode) { + public void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode) { if (serverIds == null) { return; } @@ -249,14 +249,15 @@ public class CloudManagerBean implements CloudManagerLocal { } }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public Server updateServer(Subject subject, Server server) { return entityManager.merge(server); }
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), @RequiredPermission(Permission.MANAGE_INVENTORY) }) - public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) { + public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc) { pc.initDefaultOrderingField("fld.ordinal");
Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java index 595ca8f..8ba595a 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java @@ -37,9 +37,9 @@ import org.rhq.core.domain.util.PageList; @Local public interface CloudManagerLocal {
- void deleteServers(Integer[] serverIds) throws CloudManagerException; + void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException;
- void deleteServer(Integer serverId) throws CloudManagerException; + void deleteServer(Subject subject, Integer serverId) throws CloudManagerException;
List<Agent> getAgentsByServerName(String serverName);
@@ -83,11 +83,11 @@ public interface CloudManagerLocal { */ int getNormalServerCount();
- void updateServerMode(Integer[] serverIds, Server.OperationMode mode); + void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode);
Server updateServer(Subject subject, Server server);
- PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc); + PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc);
void markStaleServersDown(Subject subject);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java index 3490df6..0749543 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java @@ -169,7 +169,7 @@ public class ShutdownListener { // Set the server operation mode to DOWN unless in MM Server server = serverManager.getServer(); if (Server.OperationMode.MAINTENANCE != server.getOperationMode()) { - cloudManager.updateServerMode(new Integer[] { server.getId() }, OperationMode.DOWN); + cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN); } } catch (Throwable t) { // only show ugly stack traces if the user runs the server in debug mode diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java index f7e0606..3240c1e 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java @@ -258,7 +258,8 @@ public class StartupBean { log.info("Server is configured to start up in MAINTENANCE mode."); Server server = serverManager.getServer(); Integer[] serverId = new Integer[] { server.getId() }; - cloudManager.updateServerMode(serverId, OperationMode.MAINTENANCE); + cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), serverId, + OperationMode.MAINTENANCE); }
// Establish the current server mode for the server. This will move the server to NORMAL
commit 5a78346ff88d4b2694a68b6c519c01d52da12df6 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 22:46:03 2012 +0100
Old JSF views are not accessible from UI anymore, instead the new GWT views are on their place (without the "GWT" suffix)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index 6afe5e4..652299d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -144,69 +144,40 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { ProductInfo productInfo = CoreGUI.get().getProductInfo(); boolean isRHQ = (productInfo != null) && "RHQ".equals(productInfo.getShortName());
- NavigationItem serversItem = new NavigationItem(PAGE_SERVERS_VIEW_ID, new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_SERVERS_VIEW_ID.getName()), - "/rhq/ha/listServers-plain.xhtml?nomenu=true"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - - NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_AGENTS_VIEW_ID.getName()), - "/rhq/ha/listAgents-plain.xhtml?nomenu=true"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - - NavigationItem affinityGroupsItem = new NavigationItem(PAGE_AFFINITY_GROUPS_VIEW_ID, new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_AFFINITY_GROUPS_VIEW_ID.getName()), - "/rhq/ha/listAffinityGroups-plain.xhtml?nomenu=true"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - - NavigationItem partitionEventsItem = new NavigationItem(PAGE_PARTITION_EVENTS_VIEW_ID, new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_PARTITION_EVENTS_VIEW_ID.getName()), - "/rhq/ha/listPartitionEvents-plain.xhtml?nomenu=true"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - NavigationItem remoteAgentInstallItem = new NavigationItem(RemoteAgentInstallView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall")); } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { + NavigationItem serversItem = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null, false); } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() { + NavigationItem agentsItem = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, false); } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem affinityGroupsItemGwt = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() { + NavigationItem affinityGroupsItem = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName())); } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() { + NavigationItem partitionEventsItem = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()), PartitionEventTableView.VIEW_ID.getTitle()); } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
// Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem, agentsItem, - affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt, - partitionEventsGwt)); + affinityGroupsItem, partitionEventsItem)); if (isRHQ) { navigationItems.add(remoteAgentInstallItem); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java index 528ab8e..ac4c736 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java @@ -22,10 +22,14 @@ import java.util.List;
import com.smartgwt.client.widgets.grid.ListGridField;
+import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.BaseCriteria; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/** + * Base class for all Server derivatives like {@link ServerWithAgentCountComposite} and {@link FailoverListDetails} + * * @author Jirka Kremser */ public abstract class AbstractServerNodeDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java index 6786a89..65efb7c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -60,9 +60,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCriteria> {
private final Integer affinityGroupId; - private static RPCDataSource<Agent, AgentCriteria> datasource = null; - private static final int MAX_AVAIL_AGENTS = 3000; private static Window modalWindow; private static boolean shouldBeClosed; @@ -104,7 +102,6 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr selector.reset(); }
- @Override public void onFailure(Throwable t) { CoreGUI.getErrorHandler().handleError( MSG.view_adminTopology_message_fetchAgentsFail(String.valueOf(affinityGroupId)), t); @@ -187,7 +184,6 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr shouldBeClosed = false; GWTServiceLookup.getCloudService().removeAgentsFromGroup( originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { - public void onSuccess(Void result) { closeAndRefresh(parrent, true); } @@ -203,7 +199,6 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr shouldBeClosed = false; GWTServiceLookup.getCloudService().addAgentsToGroup(selector.getAffinityGroupId(), actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() { - public void onSuccess(Void result) { closeAndRefresh(parrent, true); } @@ -258,5 +253,4 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr public Integer getAffinityGroupId() { return affinityGroupId; } - } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index fbd832e..8a8d81b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -199,7 +199,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar footer.addMember(saveButton); form.setItems(nameItem); SectionStackSection section = new SectionStackSection(MSG.common_title_details()); - section.setExpanded(true); + section.setExpanded(false); section.setItems(form, footer);
detailsSection = section; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index b21b2a6..fe4db20 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -63,9 +63,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
private final Integer affinityGroupId; - private static RPCDataSource<Server, ServerCriteria> datasource = null; - private static Window modalWindow; private static boolean shouldBeClosed; private static VLayout layout; @@ -93,7 +91,6 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve MSG.view_adminTopology_serverDetail_operationMode()); operationModeSelect.setValueMap(buildOperationModeOptions()); operationModeSelect.setValue("ALL"); - availableFilterForm.setItems(search, operationModeSelect); } return availableFilterForm; @@ -122,7 +119,6 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve selector.reset(); }
- @Override public void onFailure(Throwable t) { CoreGUI.getErrorHandler().handleError( MSG.view_adminTopology_message_fetchServersFail(String.valueOf(affinityGroupId)), t); @@ -279,5 +275,4 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve public Integer getAffinityGroupId() { return affinityGroupId; } - } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index dbe8d0f..87afd6d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -65,8 +65,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; */ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("AffinityGroups(GWT)", MSG.view_adminTopology_affinityGroups() - + "(GWT)", IconEnum.ALL_GROUPS); + public static final ViewName VIEW_ID = new ViewName("AffinityGroups", MSG.view_adminTopology_affinityGroups(), + IconEnum.ALL_GROUPS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index 8c47813..8f2a658 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -48,14 +48,12 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; */ public class AgentTableView extends TableSection<AgentDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)", - IconEnum.AGENT); + public static final ViewName VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(), IconEnum.AGENT);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean isAffinityGroupId; - private final Integer id;
public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index 7fa9a7c..599b2c2 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -58,8 +58,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; */ public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", - MSG.view_adminTopology_partitionEvents() + "(GWT)", IconEnum.EVENTS); + public static final ViewName VIEW_ID = new ViewName("PartitionEvents", MSG.view_adminTopology_partitionEvents(), + IconEnum.EVENTS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index d38d95d..2374685 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -18,8 +18,8 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
import java.io.Serializable; @@ -59,16 +59,13 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)", - IconEnum.SERVERS); + public static final ViewName VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean showActions; - private final boolean isAffinityGroupId; - private final Integer id;
public ServerTableView(String locatorId, Integer id, boolean isAffinityGroupId) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index 1b6609b..3659082 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -44,6 +44,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
+ // server datasource delegate private final ServerDatasource serverDatasource;
public ServerWithAgentCountDatasource() {
commit dfa080a3388830a3c948b64090af7f586b97bbe8 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 21:56:55 2012 +0100
Deprecation of newly unused methods (were used from portal war before), checking the rights
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java index 2ebbdab..fb37d77 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java @@ -43,6 +43,7 @@ import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.authz.RequiredPermission; +import org.rhq.enterprise.server.authz.RequiredPermissions;
/** * Manages CRUD operations for {@link AffinityGroup}s @@ -60,7 +61,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { @EJB private PartitionEventManagerLocal partitionEventManager;
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public AffinityGroup getById(Subject subject, int affinityGroupId) { AffinityGroup affinityGroup = entityManager.find(AffinityGroup.class, affinityGroupId); return affinityGroup; @@ -132,14 +134,16 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { return new PageList<Server>(results, (int) count, pageControl); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public AffinityGroup update(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException { validate(affinityGroup, true); return entityManager.merge(affinityGroup); }
@SuppressWarnings("unchecked") - @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public PageList<AffinityGroupCountComposite> getComposites(Subject subject, PageControl pageControl) { pageControl.initDefaultOrderingField("ag.name");
@@ -164,7 +168,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { } }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public int create(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException { validate(affinityGroup, false); entityManager.persist(affinityGroup); @@ -198,7 +203,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { } }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public int delete(Subject subject, Integer[] affinityGroupIds) {
// A deleted affinity group forces a cloud repartitioning. Note, it is ok to request multiple @@ -229,7 +235,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { return removedAffinityGroups; }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void addAgentsToGroup(Subject subject, int affinityGroupId, Integer[] agentIds) { List<Integer> agentIdsList = Arrays.asList(agentIds);
@@ -254,7 +261,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { .getName()); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void removeAgentsFromGroup(Subject subject, Integer[] agentIds) { List<Integer> agentIdsList = Arrays.asList(agentIds);
@@ -275,7 +283,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { PartitionEventType.AGENT_AFFINITY_GROUP_REMOVE.name()); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void addServersToGroup(Subject subject, int affinityGroupId, Integer[] serverIds) { List<Integer> serverIdsList = Arrays.asList(serverIds);
@@ -300,7 +309,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal { .getName()); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void removeServersFromGroup(Subject subject, Integer[] serverIds) { List<Integer> serverIdsList = Arrays.asList(serverIds);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java index 115d0a4..455e375 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java @@ -63,13 +63,33 @@ public interface AffinityGroupManagerLocal {
int getAffinityGroupCount();
+ /** + * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and + * <code>CloudManagerBean.findServersByCriteria()</code> instead) + */ PageList<Server> getServerMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /** + * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and + * <code>CloudManagerBean.findServersByCriteria()</code> instead) + */ PageList<Server> getServerNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /** + * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and + * <code>CloudManagerBean.findServersByCriteria()</code> instead) + */ PageList<Agent> getAgentMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /** + * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and + * <code>CloudManagerBean.findServersByCriteria()</code> instead) + */ PageList<Agent> getAgentNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /** + * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and + * <code>CloudManagerBean.findServersByCriteria()</code> instead) + */ PageList<AffinityGroupCountComposite> getComposites(Subject subject, PageControl pageControl); } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java index f51b246..d1ffb1b 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java @@ -44,6 +44,7 @@ import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.authz.AuthorizationManagerLocal; import org.rhq.enterprise.server.authz.RequiredPermission; +import org.rhq.enterprise.server.authz.RequiredPermissions; import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal; import org.rhq.enterprise.server.util.CriteriaQueryGenerator; import org.rhq.enterprise.server.util.CriteriaQueryRunner; @@ -123,7 +124,8 @@ public class CloudManagerBean implements CloudManagerLocal { }
@SuppressWarnings("unchecked") - @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc) { pc.initDefaultOrderingField("s.name");
@@ -159,6 +161,8 @@ public class CloudManagerBean implements CloudManagerLocal { } }
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void deleteServers(Integer[] serverIds) throws CloudManagerException { if (serverIds == null) { return; @@ -169,6 +173,8 @@ public class CloudManagerBean implements CloudManagerLocal { } }
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void deleteServer(Integer serverId) throws CloudManagerException { try { Server server = entityManager.find(Server.class, serverId); @@ -206,6 +212,8 @@ public class CloudManagerBean implements CloudManagerLocal { } }
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void updateServerMode(Integer[] serverIds, Server.OperationMode mode) { if (serverIds == null) { return; @@ -246,6 +254,8 @@ public class CloudManagerBean implements CloudManagerLocal { return entityManager.merge(server); }
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) { pc.initDefaultOrderingField("fld.ordinal");
@@ -295,7 +305,7 @@ public class CloudManagerBean implements CloudManagerLocal { // regardless of the number of pending requests, as the work would be duplicated. partitionEventManager.processRequestedPartitionEvents(); } - + @RequiredPermission(Permission.MANAGE_SETTINGS) public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) { CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java index 0b82063..961af25 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java @@ -48,6 +48,7 @@ import org.rhq.core.domain.util.PageList; import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.authz.RequiredPermission; +import org.rhq.enterprise.server.authz.RequiredPermissions; import org.rhq.enterprise.server.core.AgentManagerLocal; import org.rhq.enterprise.server.util.CriteriaQueryGenerator; import org.rhq.enterprise.server.util.CriteriaQueryRunner; @@ -125,7 +126,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { return failoverListManager.refresh(partitionEvent); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void cloudPartitionEventRequest(Subject subject, PartitionEventType eventType, String eventDetail) { if (!eventType.isCloudPartitionEvent()) { throw new IllegalArgumentException("Invalid cloud partition event type: " + eventType); @@ -143,7 +145,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { entityManager.persist(partitionEvent); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public void deletePartitionEvents(Subject subject, Integer[] partitionEventIds) { for (int partitionEventId : partitionEventIds) { PartitionEvent doomedEvent = entityManager.find(PartitionEvent.class, partitionEventId); @@ -151,7 +154,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { } }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public int purgeAllEvents(Subject subject) { List<PartitionEvent> events = getPartitionEvents(subject, null, null, null, PageControl.getUnlimitedInstance());
@@ -221,7 +225,7 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { query.setParameter("details", details); countQuery.setParameter("details", details); query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); - countQuery.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + countQuery.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
List<PartitionEvent> results = query.getResultList(); long count = (Long) countQuery.getSingleResult(); @@ -230,7 +234,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { }
@SuppressWarnings("unchecked") - @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS), + @RequiredPermission(Permission.MANAGE_INVENTORY) }) public PageList<PartitionEventDetails> getPartitionEventDetails(Subject subject, int partitionEventId, PageControl pageControl) { pageControl.initDefaultOrderingField("ped.id", PageOrdering.ASC); @@ -248,11 +253,12 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
return new PageList<PartitionEventDetails>(detailsList, (int) count, pageControl); } - - @RequiredPermission(Permission.MANAGE_INVENTORY) + + @RequiredPermission(Permission.MANAGE_SETTINGS) public PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria) { CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); - CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator, entityManager); + CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator, + entityManager); return runner.execute(); } }
commit 2d4217f767b2e2d7860edf153ea4bb714e0cfc6f Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 21:55:50 2012 +0100
Modal window for assigning the servers/agents into affinity group has now the buttons in the ToolStrip
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java index b1a1a6c..6786a89 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -29,7 +29,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; -import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Window; @@ -40,8 +39,8 @@ import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.grid.ListGridRecord; -import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.resource.Agent; @@ -165,10 +164,9 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr layout = new VLayout(); layout.setWidth100(); layout.setHeight100(); - layout.setPadding(10); - layout.setLayoutMargin(10);
final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("assignAgents", affinityGroupId); + selector.setMargin(10); layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); @@ -222,14 +220,13 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr } } }); - - HLayout buttons = new HLayout(10); - buttons.setHeight(20); - buttons.setLayoutAlign(Alignment.CENTER); - buttons.setLayoutBottomMargin(0); - buttons.addMember(save); - buttons.addMember(cancel); - layout.addMember(buttons); + ToolStrip buttonBar = new ToolStrip(); + buttonBar.setPadding(5); + buttonBar.setWidth100(); + buttonBar.setMembersMargin(15); + buttonBar.addMember(save); + buttonBar.addMember(cancel); + layout.addMember(buttonBar); }
private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index 803214c..b21b2a6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -29,7 +29,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; -import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Window; @@ -41,8 +40,8 @@ import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.grid.ListGridRecord; -import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; @@ -188,10 +187,9 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve layout = new VLayout(); layout.setWidth100(); layout.setHeight100(); - layout.setPadding(10); - layout.setLayoutMargin(10);
final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("assignServers", affinityGroupId); + selector.setMargin(10); layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); @@ -243,14 +241,13 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve } } }); - - HLayout buttons = new HLayout(10); - buttons.setHeight(20); - buttons.setLayoutAlign(Alignment.CENTER); - buttons.setLayoutBottomMargin(0); - buttons.addMember(save); - buttons.addMember(cancel); - layout.addMember(buttons); + ToolStrip buttonBar = new ToolStrip(); + buttonBar.setPadding(5); + buttonBar.setWidth100(); + buttonBar.setMembersMargin(15); + buttonBar.addMember(save); + buttonBar.addMember(cancel); + layout.addMember(buttonBar); }
private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) {
commit 49c19bafe83b2b2f55f514c51d34eb88fe960304 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 21:10:31 2012 +0100
the rest of l10n for error and other messages, some javadoc
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java index 5515e18..b1a1a6c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -22,7 +22,7 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME;
import java.util.ArrayList; import java.util.List; @@ -31,7 +31,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; @@ -47,6 +46,7 @@ import com.smartgwt.client.widgets.layout.VLayout; import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; @@ -64,6 +64,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
private static RPCDataSource<Agent, AgentCriteria> datasource = null;
+ private static final int MAX_AVAIL_AGENTS = 3000; private static Window modalWindow; private static boolean shouldBeClosed; private static VLayout layout; @@ -79,13 +80,13 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr this.affinityGroupId = affinityGroupId; prepareMembers(this); } - + @Override protected DynamicForm getAvailableFilterForm() { if (availableFilterForm == null) { - availableFilterForm = new LocatableDynamicForm(extendLocatorId("AgeSelectAvailFilterForm")); + availableFilterForm = new LocatableDynamicForm(extendLocatorId("AgentSelectAvailFilterForm")); availableFilterForm.setWidth("75%"); - final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search()); + final TextItem search = new TextItem(FIELD_NAME.propertyName(), MSG.common_title_search()); availableFilterForm.setItems(search); } return availableFilterForm; @@ -95,21 +96,21 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr AgentCriteria criteria = new AgentCriteria(); criteria.addFilterAffinityGroupId(affinityGroupId); GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { - public void onSuccess(PageList<Agent> result) { - ListGridRecord[] records = getDataSource().buildRecords(result); - originallyAssignedIds = getIdList(records); - setAssigned(records); - modalWindow.addItem(layout); - modalWindow.show(); - selector.reset(); - } - - @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - } - }); + public void onSuccess(PageList<Agent> result) { + ListGridRecord[] records = getDataSource().buildRecords(result); + originallyAssignedIds = getIdList(records); + setAssigned(records); + modalWindow.addItem(layout); + modalWindow.show(); + selector.reset(); + }
+ @Override + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchAgentsFail(String.valueOf(affinityGroupId)), t); + } + }); }
@Override @@ -122,15 +123,15 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
@Override protected int getMaxAvailableRecords() { - return 3000; + return MAX_AVAIL_AGENTS; }
@Override protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { - String search = (String) availableFilterForm.getValue(NAME.propertyName()); + String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName()); Criteria criteria = new Criteria(); if (null != search) { - criteria.addCriteria(NAME.propertyName(), search); + criteria.addCriteria(FIELD_NAME.propertyName(), search); } return criteria; } @@ -145,15 +146,15 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr return IconEnum.AGENT.getIcon16x16Path(); }
- public static void show(Integer affinityGroupId, final TableSection parrent) { + public static void show(final Integer affinityGroupId, final TableSection<?> parrent) { modalWindow = new Window(); modalWindow.addCloseClickHandler(new CloseClickHandler() { public void onCloseClick(CloseClickEvent event) { closeAndRefresh(parrent, false); } }); - modalWindow.setTitle(MSG.view_adminTopology_agents() + ": " - + MSG.view_adminTopology_affinityGroups_createNew()); + modalWindow + .setTitle(MSG.view_adminTopology_agents() + ": " + MSG.view_adminTopology_affinityGroups_createNew()); modalWindow.setOverflow(Overflow.VISIBLE); modalWindow.setWidth(800); modalWindow.setHeight(400); @@ -167,7 +168,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr layout.setPadding(10); layout.setLayoutMargin(10);
- final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("foo", affinityGroupId); + final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("assignAgents", affinityGroupId); layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); @@ -193,9 +194,10 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr closeAndRefresh(parrent, true); }
- public void onFailure(Throwable caught) { - //todo: error handling - SC.say("errX"); + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_agroupAssingAgentsFail(String + .valueOf(affinityGroupId)), t); } }); } @@ -208,17 +210,16 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr closeAndRefresh(parrent, true); }
- public void onFailure(Throwable caught) { - //todo: error handling - SC.say("errX"); + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_agroupRemovingAgentsFail(String + .valueOf(affinityGroupId)), t); } }); } if (shouldBeClosed) { closeAndRefresh(parrent, false); } - // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected); - } });
@@ -231,7 +232,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr layout.addMember(buttons); }
- private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) { + private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) { if (modalWindow != null) { modalWindow.destroy(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 4355814..fbd832e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -25,7 +25,6 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; @@ -35,9 +34,11 @@ import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; +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.LocatableSectionStack; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip; @@ -50,7 +51,6 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; */ public class AffinityGroupDetailView extends LocatableVLayout implements BookmarkableView {
- // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); private final int affinityGroupId;
private static final int SECTION_COUNT = 3; @@ -79,28 +79,18 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar @Override protected void onInit() { super.onInit(); - GWTServiceLookup.getCloudService().getAffinityGroupById(this.affinityGroupId, - new AsyncCallback<AffinityGroup>() { - public void onSuccess(final AffinityGroup affinityGroup) { - prepareDetailsSection(sectionStack, affinityGroup); - - // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), - // new AsyncCallback<List<Agent>>() { - // public void onSuccess(List<Agent> agents) { - // prepareAgentSection(sectionStack, server, agents); - // }; - // - // public void onFailure(Throwable caught) { - // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); - // } - // }); - } + GWTServiceLookup.getCloudService().getAffinityGroupById(affinityGroupId, new AsyncCallback<AffinityGroup>() { + public void onSuccess(final AffinityGroup affinityGroup) { + prepareDetailsSection(sectionStack, affinityGroup); + }
- public void onFailure(Throwable caught) { - SC.say("er1:" + caught); - //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); - } - }); + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchAgroupFail(String.valueOf(affinityGroupId)), caught); + initSectionCount = SECTION_COUNT; + return; + } + }); prepareAgentSection(sectionStack); prepareServerSection(sectionStack); } @@ -178,7 +168,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
final TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); nameItem.setValue(affinityGroup.getName()); - + LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter")); footer.setPadding(5); footer.setWidth100(); @@ -187,25 +177,27 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar IButton saveButton = new IButton(); saveButton.setOverflow(Overflow.VISIBLE); saveButton.setTitle(MSG.common_button_save()); -// saveButton.setWidth(70); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { affinityGroup.setName(nameItem.getValueAsString()); GWTServiceLookup.getCloudService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() { public void onSuccess(Void result) { - // todo: notify + Message msg = new Message(MSG.view_adminTopology_message_agroupRenamed( + String.valueOf(affinityGroupId), affinityGroup.getName(), nameItem.getValueAsString()), + Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); }
public void onFailure(Throwable caught) { - // todo: handle + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_agroupRenamingFail(String.valueOf(affinityGroupId), + affinityGroup.getName()) + " " + caught.getMessage(), caught); } }); } }); footer.addMember(saveButton); - form.setItems(nameItem); - SectionStackSection section = new SectionStackSection(MSG.common_title_details()); section.setExpanded(true); section.setItems(form, footer); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index 13b1559..803214c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -22,7 +22,7 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME;
import java.util.ArrayList; import java.util.List; @@ -31,7 +31,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; @@ -49,6 +48,7 @@ import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem; import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; @@ -82,27 +82,24 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve this.affinityGroupId = affinityGroupId; prepareMembers(this); } - + @Override protected DynamicForm getAvailableFilterForm() { if (availableFilterForm == null) { availableFilterForm = new LocatableDynamicForm(extendLocatorId("SerSelectAvailFilterForm")); availableFilterForm.setNumCols(4); availableFilterForm.setWidth("75%"); - final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search()); - final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE, MSG.view_adminTopology_serverDetail_operationMode()); + final TextItem search = new TextItem(FIELD_NAME.propertyName(), MSG.common_title_search()); + final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE, + MSG.view_adminTopology_serverDetail_operationMode()); operationModeSelect.setValueMap(buildOperationModeOptions()); operationModeSelect.setValue("ALL"); -// -// final EnumSelectItem operationModeFilter = new EnumSelectItem(ServerDatasource.FILTER_OPERATION_MODE, -// MSG.view_adminTopology_serverDetail_operationMode(), OperationMode.class, null, null); -
availableFilterForm.setItems(search, operationModeSelect); } return availableFilterForm; } - + private String[] buildOperationModeOptions() { OperationMode[] modes = OperationMode.values(); String[] options = new String[modes.length + 1]; @@ -117,27 +114,28 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve ServerCriteria criteria = new ServerCriteria(); criteria.addFilterAffinityGroupId(affinityGroupId); GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { - public void onSuccess(PageList<Server> result) { - ListGridRecord[] records = getDataSource().buildRecords(result); - originallyAssignedIds = getIdList(records); - setAssigned(records); - modalWindow.addItem(layout); - modalWindow.show(); - selector.reset(); - } + public void onSuccess(PageList<Server> result) { + ListGridRecord[] records = getDataSource().buildRecords(result); + originallyAssignedIds = getIdList(records); + setAssigned(records); + modalWindow.addItem(layout); + modalWindow.show(); + selector.reset(); + }
- @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - } - }); + @Override + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchServersFail(String.valueOf(affinityGroupId)), t); + } + });
}
@Override protected RPCDataSource<Server, ServerCriteria> getDataSource() { if (datasource == null) { - datasource = new ServerDatasource(affinityGroupId, false); + datasource = new ServerDatasource(null); } return datasource; } @@ -149,11 +147,11 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
@Override protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { - String search = (String) availableFilterForm.getValue(NAME.propertyName()); + String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName()); String operationMode = (String) availableFilterForm.getValue(ServerDatasource.FILTER_OPERATION_MODE); Criteria criteria = new Criteria(); if (null != search) { - criteria.addCriteria(NAME.propertyName(), search); + criteria.addCriteria(FIELD_NAME.propertyName(), search); } if (operationMode != null && !"ALL".equals(operationMode)) { criteria.addCriteria(ServerDatasource.FILTER_OPERATION_MODE, operationMode); @@ -171,7 +169,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve return IconEnum.SERVERS.getIcon16x16Path(); }
- public static void show(Integer affinityGroupId, final TableSection parrent) { + public static void show(final Integer affinityGroupId, final TableSection<?> parrent) { modalWindow = new Window(); modalWindow.addCloseClickHandler(new CloseClickHandler() { public void onCloseClick(CloseClickEvent event) { @@ -193,7 +191,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve layout.setPadding(10); layout.setLayoutMargin(10);
- final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId); + final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("assignServers", affinityGroupId); layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); @@ -214,14 +212,14 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve shouldBeClosed = false; GWTServiceLookup.getCloudService().removeServersFromGroup( originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { - public void onSuccess(Void result) { closeAndRefresh(parrent, true); }
- public void onFailure(Throwable caught) { - //todo: error handling - SC.say("errX"); + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_agroupAssingServersFail(String + .valueOf(affinityGroupId)), t); } }); } @@ -229,22 +227,20 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve shouldBeClosed = false; GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(), actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() { - public void onSuccess(Void result) { closeAndRefresh(parrent, true); }
- public void onFailure(Throwable caught) { - //todo: error handling - SC.say("errX"); + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_agroupRemovingServersFail(String + .valueOf(affinityGroupId)), t); } }); } if (shouldBeClosed) { closeAndRefresh(parrent, false); } - // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected); - } });
@@ -257,7 +253,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve layout.addMember(buttons); }
- private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) { + private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) { if (modalWindow != null) { modalWindow.destroy(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index ac44d44..dbe8d0f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -36,6 +36,8 @@ 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.TextItem; +import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; +import com.smartgwt.client.widgets.form.fields.events.KeyUpHandler; import com.smartgwt.client.widgets.form.validator.LengthRangeValidator; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; @@ -98,32 +100,29 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts } });
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, - Permission.MANAGE_SETTINGS) { + addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), null, + new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { - List<String> selectedNames = getSelectedNames(selections); - String message = "Really? Delete? For all I've done for you? " + selectedNames; + final List<String> selectedNames = getSelectedNames(selections); + String message = MSG.view_adminTopology_message_removeAGroupsConfirm(selectedNames.toString()); SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); GWTServiceLookup.getCloudService().deleteAffinityGroups(selectedIds, new AsyncCallback<Integer>() { public void onSuccess(Integer count) { - // TODO: msg with count Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); + .view_adminTopology_message_removedAGroups(String.valueOf(count)), + Message.Severity.Info); CoreGUI.getMessageCenter().notify(msg); refresh(); }
public void onFailure(Throwable caught) { - // TODO: msg CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); + MSG.view_adminTopology_message_removeAGroupsFail(selectedNames + .toString()) + " " + caught.getMessage(), caught); refreshTableInfo(); }
@@ -190,9 +189,16 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts nameLengthValidator.setMin(3); nameLengthValidator.setMax(100); name.setValidators(nameLengthValidator); + name.addKeyUpHandler(new KeyUpHandler() { + public void onKeyUp(KeyUpEvent event) { + if ("Enter".equals(event.getKeyName())) { + createNewGroup(modalWindow, form); + } + } + }); + form.setFields(name); layout.addMember(form); - VLayout spacer = new VLayout(); spacer.setHeight(10); layout.addMember(spacer); @@ -203,32 +209,17 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts modalWindow.destroy(); } }); - IButton save = new LocatableIButton(this.extendLocatorId("Create"), + final IButton create = new LocatableIButton(this.extendLocatorId("Create"), MSG.view_adminTopology_affinityGroups_createNew()); - save.addClickHandler(new ClickHandler() { + create.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { - if (form.validate()) { - String name = form.getValueAsString(FIELD_NAME); - AffinityGroup affinityGroup = new AffinityGroup(name); - GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() { - public void onSuccess(Integer affinityGroupId) { - modalWindow.destroy(); - CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId); - } - - public void onFailure(Throwable caught) { - Map<String, String> errors = new HashMap<String, String>(); - errors.put(FIELD_NAME, caught.getMessage()); - form.setErrors(errors, true); - } - }); - } + createNewGroup(modalWindow, form); } });
HLayout buttons = new HLayout(10); buttons.setLayoutAlign(Alignment.CENTER); - buttons.addMember(save); + buttons.addMember(create); buttons.addMember(cancel); layout.addMember(buttons); modalWindow.addItem(layout); @@ -236,6 +227,25 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts name.focusInItem(); }
+ private void createNewGroup(final Window modalWindow, final DynamicForm form) { + if (form.validate()) { + String name = form.getValueAsString(FIELD_NAME); + AffinityGroup affinityGroup = new AffinityGroup(name); + GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() { + public void onSuccess(Integer affinityGroupId) { + modalWindow.destroy(); + CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId); + } + + public void onFailure(Throwable caught) { + Map<String, String> errors = new HashMap<String, String>(); + errors.put(FIELD_NAME, caught.getMessage()); + form.setErrors(errors, true); + } + }); + } + } + @Override public ViewName getViewName() { return VIEW_ID; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java index e08a88e..bd8b6b3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java @@ -55,14 +55,7 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro
FIELD_SERVER_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_serverCount());
- /** - * Corresponds to a property name of Server (e.g. operationMode). - */ private String propertyName; - - /** - * The table header for the field or property (e.g. Mode). - */ private String title;
private Fields(String propertyName, String title) { @@ -131,8 +124,8 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro processResponse(request.getRequestId(), response); }
- public void onFailure(Throwable caught) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + public void onFailure(Throwable t) { + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchAgroupsFail(), t); response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java index ac1d26b..dd596e9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java @@ -42,9 +42,8 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.resource.Agent; -import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; -import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; @@ -61,7 +60,6 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> { public static final String FILTER_PORT = FIELD_PORT.propertyName(); public static final String FILTER_SERVER_ID = "serverId"; public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId"; -
private final Integer id; private final boolean isAffinityGroupId; @@ -115,31 +113,10 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
@Override protected void executeFetch(final DSRequest request, final DSResponse response, AgentCriteria criteria) { -// final PageControl pc = getPageControl(request); - -// AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() { -// public void onSuccess(PageList<Agent> result) { -// response.setData(buildRecords(result)); -// response.setTotalRows(result.size()); -// processResponse(request.getRequestId(), response); -// } -// -// @Override -// public void onFailure(Throwable t) { -// //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); -// response.setStatus(DSResponse.STATUS_FAILURE); -// processResponse(request.getRequestId(), response); -// } -// }; -// -// if (isAffinityGroupId) { -// GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback); criteria.addFilterAffinityGroupId(id); - } else if (id != null) { - // if id == null all agent are returned + } else { criteria.addFilterServerId(id); -// GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback); }
GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { @@ -151,38 +128,13 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
@Override public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchAgents2Fail(), t); response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } }); }
- /** - * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, - * pagination, but *not* filter fields. - * - * @param request the request to turn into a page control - * @return the page control for passing to criteria and other queries - */ - protected PageControl getPageControl(DSRequest request) { - // Initialize paging. - PageControl pageControl = new PageControl(0, getDataPageSize()); - - // Initialize sorting. - String sortBy = request.getAttribute("sortBy"); - if (sortBy != null) { - String[] sorts = sortBy.split(","); - for (String sort : sorts) { - PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; - String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; - pageControl.addDefaultOrderingField(columnName, ordering); - } - } - - return pageControl; - } - @Override public Agent copyValues(Record from) { throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)"); @@ -216,7 +168,6 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> { criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class)); criteria.addFilterServerId(getFilter(request, FILTER_SERVER_ID, Integer.class)); criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class)); -
//@todo: Remove me when finished debugging search expression Log.debug(" *** AgentCriteria Search String: " + getFilter(request, "search", String.class)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java index 26792d4..7935446 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java @@ -33,19 +33,20 @@ public enum AgentDatasourceField { FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()), - + FIELD_SERVER_ID("serverId", "serverId"),
FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()),
- FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()), + FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages() + .view_adminTopology_agent_lastAvailabilityReport()),
FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), - + FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId");
/** diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index f48e7b7..7e5c3ac 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -31,7 +31,6 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index dc34602..8c47813 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -55,7 +55,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean isAffinityGroupId; - + private final Integer id;
public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) { @@ -91,7 +91,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has } }); } else if (field.getName() == FIELD_SERVER.propertyName()) { - // adding the cell formatter for server field (clickable link) + // adding the cell formatter for server field (clickable link) field.setCellFormatter(new CellFormatter() { @Override public String format(Object value, ListGridRecord record, int rowNum, int colNum) { @@ -105,7 +105,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has } }); } else if (field.getName() == FIELD_AFFINITY_GROUP.propertyName()) { - // adding the cell formatter for affinity group field (clickable link) + // adding the cell formatter for affinity group field (clickable link) field.setCellFormatter(new CellFormatter() { @Override public String format(Object value, ListGridRecord record, int rowNum, int colNum) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index 6dd2430..6bfa378 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -43,6 +43,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.criteria.Criteria; import org.rhq.core.domain.util.PageControl; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -53,14 +54,14 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
private final int agentId; - + // this delegate is there to not repeat the copyValues code private final ServerDatasource serverDatasource;
public FailoverListItemDatasource(int agentId) { super(); this.agentId = agentId; - this.serverDatasource = new ServerDatasource(null, false); + this.serverDatasource = new ServerDatasource(null); List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } @@ -111,13 +112,14 @@ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<Fai
@Override public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchFailOverLists(), t); response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } }); }
+ @Override protected PageControl getPageControl(DSRequest request) { return serverDatasource.getPageControl(request); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index f77a843..c3d103b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -27,7 +27,6 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEven
import java.util.ArrayList; import java.util.List; -import java.util.Map;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DSRequest; @@ -42,11 +41,11 @@ import org.rhq.core.domain.cloud.PartitionEvent; import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.criteria.PartitionEventCriteria; -import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; -import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/** @@ -95,8 +94,6 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) { - // final PageControl pc = getPageControl(request); - GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { public void onSuccess(PageList<PartitionEvent> result) { @@ -107,38 +104,13 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchPEventFail(), t); response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } }); }
- /** - * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, - * pagination, but *not* filter fields. - * - * @param request the request to turn into a page control - * @return the page control for passing to criteria and other queries - */ - protected PageControl getPageControl(DSRequest request) { - // Initialize paging. - PageControl pageControl = new PageControl(0, getDataPageSize()); - - // Initialize sorting. - String sortBy = request.getAttribute("sortBy"); - if (sortBy != null) { - String[] sorts = sortBy.split(","); - for (String sort : sorts) { - PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; - String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; - pageControl.addDefaultOrderingField(columnName, ordering); - } - } - - return pageControl; - } - @Override public PartitionEvent copyValues(Record from) { throw new UnsupportedOperationException("PartitionEventDatasource.copyValues(Record from)"); @@ -150,46 +122,27 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part record.setAttribute(FIELD_ID.propertyName(), from.getId()); record.setAttribute(FIELD_CTIME.propertyName(), from.getCtime()); record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType() == null ? "" : from.getEventType()); - record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail() == null ? "" : from.getEventDetail()); - record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName() == null ? "" : from.getSubjectName()); - record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus() == null ? "" : from.getExecutionStatus()); + record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), + from.getEventDetail() == null ? "" : from.getEventDetail()); + record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), + from.getSubjectName() == null ? "" : from.getSubjectName()); + record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), + from.getExecutionStatus() == null ? "" : from.getExecutionStatus()); return record; }
@Override protected PartitionEventCriteria getFetchCriteria(DSRequest request) { - //todo: do it like in ResourceDatasource.class - - - ExecutionStatus[] statuses = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class); - PartitionEventType[] types = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class); - if (types == null || types.length == 0 || statuses == null || statuses.length == 0) { - return null; // user didn't select any type or status - return null to indicate no data should be displayed - } - PartitionEventCriteria criteria = new PartitionEventCriteria(); - // This code is unlikely to be necessary as the encompassing view should be using an initial - // sort specifier. But just in case, make sure we set the initial sort. Note that we have to - // manipulate the PageControl directly as per the restrictions on getFetchCriteria() (see jdoc). - PageControl pageControl = getPageControl(request); - if (pageControl.getOrderingFields().isEmpty()) { - pageControl.initDefaultOrderingField(FIELD_CTIME.propertyName(), PageOrdering.DESC); - } - - // TODO: This call is broken in 2.2, http://code.google.com/p/smartgwt/issues/detail?id=490 - // when using AdvancedCriteria - Map<String, Object> criteriaMap = request.getCriteria().getValues(); - criteria.addFilterEventDetail((String) criteriaMap.get(FILTER_EVENT_DETAIL)); - - // There's no need to add a exec. status filter to the criteria if the user specified all exec. statuses. - if (statuses.length != ExecutionStatus.values().length) { - criteria.addFilterExecutionStatus(statuses); - } - - // There's no need to add a event type filter to the criteria if the user specified all event types. - if (types.length != PartitionEventType.values().length) { - criteria.addFilterEventType(types); - } + // printRequestCriteria(request); + criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); + criteria.addFilterEventDetail(getFilter(request, FIELD_EVENT_DETAIL.propertyName(), String.class)); + criteria.addFilterExecutionStatus(getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class)); + criteria.addFilterEventType(getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class)); + + //@todo: Remove me when finished debugging search expression + Log.debug(" *** PartitionEventCriteria Search String: " + getFilter(request, "search", String.class)); + criteria.setSearchExpression(getFilter(request, "search", String.class));
return criteria; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java index dc96374..4210202 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java @@ -29,7 +29,6 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.grid.ListGrid; @@ -44,6 +43,7 @@ import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTServiceAsync; @@ -90,32 +90,39 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma PartitionEventCriteria criteria = new PartitionEventCriteria(); criteria.addFilterId(partitionEventId); final CloudGWTServiceAsync service = GWTServiceLookup.getCloudService(); - service.findPartitionEventsByCriteria(criteria, - new AsyncCallback<PageList<PartitionEvent>>() { - public void onSuccess(final PageList<PartitionEvent> events) { - if (events == null || events.size() != 1) { - //TODO: notify user in msg center - return; - } - prepareDetailsSection(sectionStack, events.get(0)); - service.getPartitionEventDetails(partitionEventId, - PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<PartitionEventDetails>>() { - public void onSuccess(PageList<PartitionEventDetails> result) { - prepareAssignmentsSection(sectionStack, result); - } - public void onFailure(Throwable caught) { - SC.say("er2:" + caught); - //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); - } - }); - + service.findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { + public void onSuccess(final PageList<PartitionEvent> events) { + if (events == null || events.size() != 1) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchPEventDetailsFail(String.valueOf(partitionEventId))); + initSectionCount = SECTION_COUNT; + return; } + prepareDetailsSection(sectionStack, events.get(0)); + service.getPartitionEventDetails(partitionEventId, PageControl.getUnlimitedInstance(), + new AsyncCallback<PageList<PartitionEventDetails>>() { + public void onSuccess(PageList<PartitionEventDetails> result) { + prepareAssignmentsSection(sectionStack, result); + } + + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler() + .handleError( + MSG.view_adminTopology_message_fetchPEventDetailsFail(String + .valueOf(partitionEventId))); + initSectionCount = SECTION_COUNT; + return; + } + });
- public void onFailure(Throwable caught) { - SC.say("er1:" + caught); - //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); - } - }); + } + + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchPEventDetailsFail(String.valueOf(partitionEventId))); + initSectionCount = SECTION_COUNT; + } + }); }
public boolean isInitialized() { @@ -165,7 +172,8 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma // there is no need for datasource, it is a simple table with two columns ListGrid assignments = new ListGrid(); ListGridField agentName = new ListGridField("agentName", MSG.view_adminTopology_agent_agentName()); - ListGridField serverName = new ListGridField("serverName", MSG.view_admin_systemSettings_serverDetails_serverName()); + ListGridField serverName = new ListGridField("serverName", + MSG.view_admin_systemSettings_serverDetails_serverName()); assignments.setFields(agentName, serverName); ListGridRecord[] records = new ListGridRecord[eventDetails.size()]; for (int i = 0; i < eventDetails.size(); i++) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index b25a4d3..7fa9a7c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -18,6 +18,7 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import java.util.ArrayList; import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; @@ -63,18 +64,29 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- private static final Criteria INITIAL_CRITERIA = new Criteria();
- private static SortSpecifier DEFAULT_SORT_SPECIFIER = new SortSpecifier(PartitionEventCriteria.SORT_FIELD_CTIME, - SortDirection.DESCENDING); + private static final SortSpecifier DEFAULT_SORT_SPECIFIER = new SortSpecifier( + PartitionEventCriteria.SORT_FIELD_CTIME, SortDirection.DESCENDING); + + private enum TableAction { + REMOVE_SELECTED(MSG.view_adminTopology_server_removeSelected(), TableActionEnablement.ANY), PURGE_ALL(MSG + .view_adminTopology_partitionEvents_purgeAll(), TableActionEnablement.ALWAYS), FORCE_REPARTITION(MSG + .view_adminTopology_partitionEvents_forceRepartition(), TableActionEnablement.ALWAYS); + + private String title; + private TableActionEnablement enablement; + + private TableAction(String title, TableActionEnablement enablement) { + this.title = title; + this.enablement = enablement; + } + }
public PartitionEventTableView(String locatorId, String tableTitle) { super(locatorId, tableTitle, INITIAL_CRITERIA, new SortSpecifier[] { DEFAULT_SORT_SPECIFIER }); - setHeight100(); setWidth100(); - setInitialCriteriaFixed(false); setDataSource(new PartitionEventDatasource()); } @@ -89,22 +101,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL, MSG.view_adminTopology_partitionEvents_detailsFilter()); - // detail.setValue(""); - - // startDateFilter = new DateFilterItem(DateFilterItem.START_DATE_FILTER, MSG.filter_from_date()); - // endDateFilter = new DateFilterItem(DateFilterItem.END_DATE_FILTER, MSG.filter_to_date()); - -// SpacerItem spacerItem = new SpacerItem(); -// spacerItem.setColSpan(1); -// final ButtonItem showAll = new ButtonItem("showAll", "Show All"); -// showAll.addClickHandler(new ClickHandler() { -// public void onClick(ClickEvent event) { -// statusFilter.init(ExecutionStatus.class, null, null); -// typeFilter.init(PartitionEventType.class, null, null); -// detail.setValue(""); -// refresh(); -// } -// });
if (isShowFilterForm()) { setFilterFormItems(statusFilter, detail, typeFilter); @@ -118,7 +114,7 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); showActions(); - + for (ListGridField field : fields) { // adding the cell formatter for name field (clickable link) if (field.getName() == PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()) { @@ -137,140 +133,97 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour } }
- // @Override - // protected String getDetailsLinkColumnName() { - // return PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName(); - // } - // - // @Override - // protected CellFormatter getDetailsLinkColumnCellFormatter() { - // return new CellFormatter() { - // public String format(Object value, ListGridRecord record, int rowNum, int colNum) { - // Integer recordId = getId(record); - // String detailsUrl = "#" + VIEW_PATH + "/" + recordId; - // return SeleniumUtility.getLocatableHref(detailsUrl, detailsUrl, null); - // } - // }; - // } - @Override public Canvas getDetailsView(Integer id) { return new PartitionEventDetailView(extendLocatorId("detailsView"), id); }
private void showActions() { - addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, - Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - String message = "Really? Delete? For all I've done for you? "; - SC.ask(message, new BooleanCallback() { - public void execute(Boolean confirmed) { - if (confirmed) { - int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds, - new AsyncCallback<Void>() { - public void onSuccess(Void arg0) { - // TODO: msg - Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); - CoreGUI.getMessageCenter().notify(msg); - refresh(); - } - - public void onFailure(Throwable caught) { - // TODO: msg - CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); - refreshTableInfo(); - } + addTableAction(TableAction.REMOVE_SELECTED); + addTableAction(TableAction.PURGE_ALL); + addTableAction(TableAction.FORCE_REPARTITION); + }
- }); - } else { - refreshTableInfo(); - } - } - }); + private void addTableAction(final TableAction action) { + addTableAction(extendLocatorId(action.toString()), action.title, null, new AuthorizedTableAction(this, + action.enablement, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + String eventTypes = getSelectedEventTypes(selections).toString(); + String message = null; + switch (action) { + case REMOVE_SELECTED: + message = MSG.view_adminTopology_message_removePEventConfirm(eventTypes); + break; + case PURGE_ALL: + message = MSG.view_adminTopology_message_removeAllPEventConfirm(); + break; + case FORCE_REPARTITION: + message = MSG.view_adminTopology_message_forceRepartition(); + break; + default: + throw new IllegalArgumentException("unknown table action type"); } - }); - - addTableAction(extendLocatorId("purgeAll"), MSG.view_adminTopology_partitionEvents_purgeAll(), - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, - Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - // TODO: msg - // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Normal? For all I've done for you? "; - SC.ask(message, new BooleanCallback() { - public void execute(Boolean confirmed) { - if (confirmed) { - int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().purgeAllEvents(new AsyncCallback<Void>() { - public void onSuccess(Void arg0) { - // TODO: msg - Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins("sdf"), - Message.Severity.Info); - CoreGUI.getMessageCenter().notify(msg); - refresh(); + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + int[] selectedIds = getSelectedIds(selections); + + AsyncCallback<Void> callback = new AsyncCallback<Void>() { + public void onSuccess(Void arg0) { + String msgString = null; + switch (action) { + case REMOVE_SELECTED: + msgString = MSG.view_adminTopology_message_removedPEvent(String + .valueOf(selections.length)); + break; + case PURGE_ALL: + msgString = MSG.view_adminTopology_message_removedAllPEvent(); + break; + case FORCE_REPARTITION: + msgString = MSG.view_adminTopology_message_repartitioned(); } - - public void onFailure(Throwable caught) { - // TODO: msg - CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); - refreshTableInfo(); + Message msg = new Message(msgString, Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + String msgString = null; + switch (action) { + case REMOVE_SELECTED: + msgString = MSG.view_adminTopology_message_removePEventFail(String + .valueOf(selections.length)); + break; + case PURGE_ALL: + msgString = MSG.view_adminTopology_message_removedAllPEventFail(); + break; + case FORCE_REPARTITION: + msgString = MSG.view_adminTopology_message_forceRepartitionFail(); } - - }); - } else { - refreshTableInfo(); + CoreGUI.getErrorHandler() + .handleError(msgString + " " + caught.getMessage(), caught); + refreshTableInfo(); + } + + }; + switch (action) { + case REMOVE_SELECTED: + GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds, callback); + break; + case PURGE_ALL: + GWTServiceLookup.getCloudService().purgeAllEvents(callback); + break; + case FORCE_REPARTITION: + GWTServiceLookup.getCloudService().cloudPartitionEventRequest(callback); } - } - }); - } - }); - - addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_partitionEvents_forceRepartition(), - new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - // List<String> selectedNames = getSelectedNames(selections); - // TODO: msg - // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Repartition? For all I've done for you? ";// + selectedNames; - SC.ask(message, new BooleanCallback() { - public void execute(Boolean confirmed) { - if (confirmed) { - SC.say("repartition is now forced"); - GWTServiceLookup.getCloudService().cloudPartitionEventRequest( - new AsyncCallback<Void>() { - public void onSuccess(Void arg0) { - // TODO: msg - Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); - CoreGUI.getMessageCenter().notify(msg); - refresh(); - }
- public void onFailure(Throwable caught) { - // TODO: msg - CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); - refreshTableInfo(); - } - - }); - } else { - refreshTableInfo(); - } + } else { + refreshTableInfo(); } - }); - } - }); + } + }); + } + }); }
private int[] getSelectedIds(ListGridRecord[] selections) { @@ -285,16 +238,16 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour return ids; }
- // private List<String> getSelectedNames(ListGridRecord[] selections) { - // if (selections == null) { - // return new ArrayList<String>(0); - // } - // List<String> ids = new ArrayList<String>(selections.length); - // for (ListGridRecord selection : selections) { - // ids.add(selection.getAttributeAsString(FIELD_NAME)); - // } - // return ids; - // } + private List<String> getSelectedEventTypes(ListGridRecord[] selections) { + if (selections == null) { + return new ArrayList<String>(0); + } + List<String> ids = new ArrayList<String>(selections.length); + for (ListGridRecord selection : selections) { + ids.add(selection.getAttributeAsString(PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName())); + } + return ids; + }
@Override public ViewName getViewName() { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 2d1a75e..0e7fd48 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -21,7 +21,6 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AGENT_COUNT; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME; @@ -47,6 +46,7 @@ import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; @@ -56,7 +56,7 @@ import org.rhq.enterprise.gui.coregui.client.util.Log; * */ public class ServerDatasource extends AbstractServerNodeDatasource<Server, ServerCriteria> { - + // filters public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName(); public static final String FILTER_PORT = FIELD_PORT.propertyName(); @@ -66,13 +66,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
private final Integer affinityGroupId; - - private final boolean fetchMembers;
- public ServerDatasource(Integer affinityGroupId, boolean fetchMembers) { + public ServerDatasource(Integer affinityGroupId) { super(); this.affinityGroupId = affinityGroupId; - this.fetchMembers = fetchMembers; List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } @@ -107,36 +104,28 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField(); affinityGroupIdField.setHidden(true); fields.add(affinityGroupIdField); - fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
return fields; }
@Override protected void executeFetch(final DSRequest request, final DSResponse response, ServerCriteria criteria) { - if (affinityGroupId == null) { - return; + if (affinityGroupId != null) { + criteria.addFilterAffinityGroupId(affinityGroupId); } - final PageControl pc = getPageControl(request); - AsyncCallback<PageList<Server>> callback = new AsyncCallback<PageList<Server>>() { + GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { public void onSuccess(PageList<Server> result) { response.setData(buildRecords(result)); response.setTotalRows(result.size()); processResponse(request.getRequestId(), response); }
- @Override public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchServers2Fail(), t); response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } - }; - - if(fetchMembers) { - criteria.addFilterAffinityGroupId(affinityGroupId); - } - GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback); + }); }
/** @@ -146,6 +135,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve * @param request the request to turn into a page control * @return the page control for passing to criteria and other queries */ + @Override protected PageControl getPageControl(DSRequest request) { // Initialize paging. PageControl pageControl = new PageControl(0, getDataPageSize()); @@ -167,10 +157,6 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve @Override public Server copyValues(Record from) { throw new UnsupportedOperationException("ServerDatasource.copyValues(Record from)"); -// Server server = new Server(); -// server.setId(from.getAttributeAsInt(FIELD_ID.propertyName())); -// server.setName(from.getAttributeAsString(FIELD_NAME.propertyName())); -// return server; }
@Override @@ -193,7 +179,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve @Override protected ServerCriteria getFetchCriteria(DSRequest request) { ServerCriteria criteria = new ServerCriteria(); -// printRequestCriteria(request); + // printRequestCriteria(request); criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class)); criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class)); @@ -202,7 +188,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve criteria.addFilterOperationMode(getFilter(request, FILTER_OPERATION_MODE, OperationMode.class)); criteria.addFilterComputePower(getFilter(request, FILTER_COMPUTE_POWER, Integer.class)); criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class)); - + //@todo: Remove me when finished debugging search expression Log.debug(" *** ServerCriteria Search String: " + getFilter(request, "search", String.class)); criteria.setSearchExpression(getFilter(request, "search", String.class)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java index 09577d8..6dbcee3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java @@ -29,9 +29,8 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI; public enum ServerDatasourceField {
FIELD_ID("id", CoreGUI.getMessages().common_title_id()), - - // todo: i18n - FIELD_ORDINAL("ordinal", "Order"), + + FIELD_ORDINAL("ordinal", CoreGUI.getMessages().view_adminTopology_message_order()),
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
@@ -42,13 +41,13 @@ public enum ServerDatasourceField { FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), - + FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), - + FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId"),
FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index b50e18c..d38d95d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -79,7 +79,7 @@ public class ServerTableView extends setHeight100(); setWidth100(); if (isAffinityGroupId) { - setDataSource(new ServerDatasource(id, true)); + setDataSource(new ServerDatasource(id)); } else { setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(id)); } @@ -96,6 +96,7 @@ public class ServerTableView extends listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); showCommonActions(); } else if (isAffinityGroupId) { + listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); // displayed from AffinityGroupDetailView showUpdateMembersAction(); } else { @@ -141,7 +142,7 @@ public class ServerTableView extends }
private void showCommonActions() { - addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setMaintenance()); + addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setNormal()); addChangeOperationModeAction(OperationMode.MAINTENANCE, MSG.view_adminTopology_server_setMaintenance());
addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), null, diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index af52e7a..1b6609b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -27,25 +27,28 @@ import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.Record; +import com.smartgwt.client.widgets.grid.HoverCustomizer; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.Criteria; import org.rhq.core.domain.util.PageControl; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/** * @author Jirka Kremser * */ -public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> { - +public class ServerWithAgentCountDatasource extends + AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> { + private final ServerDatasource serverDatasource;
public ServerWithAgentCountDatasource() { super(); - serverDatasource = new ServerDatasource(null, false); + serverDatasource = new ServerDatasource(null); List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } @@ -56,7 +59,18 @@ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource }
public List<ListGridField> getListGridFields() { - return serverDatasource.getListGridFields(); + List<ListGridField> fields = serverDatasource.getListGridFields(); + ListGridField agentCountField = FIELD_AGENT_COUNT.getListGridField("75"); + agentCountField.setHoverCustomizer(new HoverCustomizer() { + public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) { + return MSG.view_adminTopology_message_agentsCount(FIELD_AGENT_COUNT.propertyName()); + // "There are " + record.getAttributeAsInt(FIELD_AGENT_COUNT.propertyName()) + // + " agents registered to this server."; + } + }); + agentCountField.setShowHover(true); + fields.add(agentCountField); + return fields; }
@Override @@ -72,20 +86,14 @@ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource
@Override public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchServers2Fail(), t); response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } }); }
- /** - * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, - * pagination, but *not* filter fields. - * - * @param request the request to turn into a page control - * @return the page control for passing to criteria and other queries - */ + @Override protected PageControl getPageControl(DSRequest request) { return serverDatasource.getPageControl(request); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index df83ba8..4b92d6f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -41,72 +41,197 @@ import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList;
/** + * API for HAAC console, mostly CRUD operations for entities <code>Server</code>, <code>Agent</code>, + * <code>PartitionEvent</code> and <code>AffinityGroup</code>. + * * @author Jiri Kremser */ public interface CloudGWTService extends RemoteService {
/** + * Returns all the servers with agent count. * - * @return a list of all available servers (the servers in MAINTENANCE mode are included as well) + * @param pageControl the page control instance + * @return a list of all available servers (the servers in <code>MAINTENANCE</code> or <code>DOWN</code> mode are included as well) * @throws RuntimeException */ - List<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException; - - Server getServerById(int serverId) throws RuntimeException; - - List<Agent> getAgentsByServerName(String serverName) throws RuntimeException; + List<ServerWithAgentCountComposite> getServers(PageControl pageControl) throws RuntimeException;
+ /** + * Deletes the servers with provided ids. + * + * @param serverIds array of server ids + * @throws RuntimeException + */ void deleteServers(int[] serverIds) throws RuntimeException;
+ /** + * Updates the server mode to particular servers. + * + * @param serverIds the array of ids of the servers whose modes are object of update + * @param mode the new operation mode + * @throws RuntimeException + */ void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
+ /** + * Updates the server. + * + * @param server instance of Server + * @throws RuntimeException + */ void updateServer(Server server) throws RuntimeException;
- List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;; + /** + * Returns the list of <code>FailoverListDetails</code> for a particular agent. + * + * @param agentId the id the agent + * @param pageControl the page control instance + * @return a list of <code>FailoverListDetails</code> instances + * @throws RuntimeException + */ + List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pageControl) throws RuntimeException;;
+ /** + * Finder for <code>PartitionEvent</code> instances + * + * @param criteria the criteria for finding partition events + * @return a list of <code>codePartitionEvent</code> instances + * @throws RuntimeException + */ PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
+ /** + * Finder for <code>Server</code> instances + * + * @param criteria the criteria for finding servers + * @return a list of <code>Server</code> instances + * @throws RuntimeException + */ PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
+ /** + * Finder for <code>Agent</code> instances + * + * @param criteria the criteria for finding agents + * @return a list of <code>Agent</code> instances + * @throws RuntimeException + */ PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException;
+ /** + * Request forcing the repartition of the cluster. All agents should eventually reconnects to its most preferred server + * (The first one in their failover list.) + * + * @throws RuntimeException + */ void cloudPartitionEventRequest() throws RuntimeException;
+ /** + * Deletes all the partition events. + * + * @throws RuntimeException + */ void purgeAllEvents() throws RuntimeException;
+ /** + * Deletes some partition events. + * + * @param eventIds the list of ids of partition events to delete + * @throws RuntimeException + */ void deletePartitionEvents(int[] eventIds) throws RuntimeException;
+ /** + * Returns the list of <code>PartitionEventDetails</code> instances. + * + * @param partitionEventId + * @param pageControl the page control instance + * @return list of <code>PartitionEventDetails</code> instances + * @throws RuntimeException + */ PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) throws RuntimeException;
+ /** + * Returns the list with <code>AffinityGroupCountComposite</code> instances, i.e. affinity groups with agent and server + * counts. + * + * @param pageControl the page control instance + * @return list with <code>AffinityGroupCountComposite</code> instances + * @throws RuntimeException + */ PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) throws RuntimeException;
+ /** + * Deletes some affinity groups. + * + * @param affinityGroupIds array of ids of affinity group to delete + * @return the number of deleted affinity groups + * @throws RuntimeException + */ int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
+ /** + * Creates new affinity group. + * + * @param affinityGroup instance of <code>AffinityGroup</code> to create + * @return the new id of the affinity group + * @throws RuntimeException + */ int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+ /** + * Updates existing affinity group. + * + * @param affinityGroup instance of <code>AffinityGroup</code> + * @throws RuntimeException + */ void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
- PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException; - - PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException; - - PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException; - - PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException; - + /** + * Returns the affinity group based on the provided id. + * + * @param affinityGroupId the id of an affinity group + * @return the instance of <code>AffinityGroup</code> + * @throws RuntimeException + */ AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
+ /** + * Add servers to an existing affinity group. + * + * @param affinityGroupId id of the affinity group into which the servers should be added + * @param serverIds array of ids of servers to be added + * @throws RuntimeException + */ void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException;
+ /** + * Removes the servers from the affinity group. There is no need to provide the id of affinity group, + * because it is part of the server data. + * + * @param serverIds array of ids of servers to be removed + * @throws RuntimeException + */ void removeServersFromGroup(Integer[] serverIds) throws RuntimeException;
+ /** + * Add agents to an existing affinity group. + * + * @param affinityGroupId id of the affinity group into which the agents should be added + * @param agentIds array of ids of agents to be added + * @throws RuntimeException + */ void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException;
+ /** + * Removes the agents from the affinity group. There is no need to provide the id of affinity group, + * because it is part of the agent data. + * + * @param agentIds array of ids of agents to be removed + * @throws RuntimeException + */ void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index db7ec3c..dd63fa0 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -22,7 +22,6 @@ */ package org.rhq.enterprise.gui.coregui.server.gwt;
-import java.util.ArrayList; import java.util.List;
import org.apache.commons.lang.ArrayUtils; @@ -58,7 +57,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); - + private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager(); @@ -76,26 +75,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud }
@Override - public Server getServerById(int serverId) throws RuntimeException { - try { - return SerialUtility.prepare(cloudManager.getServerById(serverId), "CloudGWTServiceImpl.getServerById"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public List<Agent> getAgentsByServerName(String serverName) throws RuntimeException { - try { - List<Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), - "CloudGWTServiceImpl.getAgentsByServerName"); - return new ArrayList<Agent>(persistentBag); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override public void deleteServers(int[] serverIds) throws RuntimeException { try { cloudManager.deleteServers(ArrayUtils.toObject(serverIds)); @@ -135,24 +114,21 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud throw getExceptionToThrowToClient(t); } } - + @Override - public PageList<Server> findServersByCriteria(ServerCriteria criteria) - throws RuntimeException { + public PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException { try { - return SerialUtility.prepare( - cloudManager.findServersByCriteria(getSessionSubject(), criteria), + return SerialUtility.prepare(cloudManager.findServersByCriteria(getSessionSubject(), criteria), "CloudGWTServiceImpl.findServersByCriteria"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } - + @Override public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException { try { - return SerialUtility.prepare( - agentManager.findAgentsByCriteria(getSessionSubject(), criteria), + return SerialUtility.prepare(agentManager.findAgentsByCriteria(getSessionSubject(), criteria), "CloudGWTServiceImpl.findAgentsByCriteria"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); @@ -229,54 +205,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud }
@Override - public PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException { - try { - return SerialUtility.prepare( - affinityGroupManager.getServerMembers(getSessionSubject(), affinityGroupId, pageControl), - "CloudGWTServiceImpl.getServerMembersByAffinityGroupId"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException { - try { - return SerialUtility.prepare( - affinityGroupManager.getServerNonMembers(getSessionSubject(), affinityGroupId, pageControl), - "CloudGWTServiceImpl.getServerNonMembersByAffinityGroupId"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException { - try { - return SerialUtility.prepare( - affinityGroupManager.getAgentMembers(getSessionSubject(), affinityGroupId, pageControl), - "CloudGWTServiceImpl.getAgentMembersByAffinityGroupId"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override - public PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) - throws RuntimeException { - try { - return SerialUtility.prepare( - affinityGroupManager.getAgentNonMembers(getSessionSubject(), affinityGroupId, pageControl), - "CloudGWTServiceImpl.getAgentNonMembersByAffinityGroupId"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); - } - } - - @Override public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException { try { return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId), @@ -322,7 +250,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
- @Override public void updateServer(Server server) throws RuntimeException { try { @@ -332,7 +259,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
- @Override public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { try { diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties index ceaad0d..56ed2ac 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties @@ -552,16 +552,45 @@ view_adminTopology_agentDetail_address = Address view_adminTopology_agentDetail_agentFailoverList = Agent Failover List view_adminTopology_agentDetail_currentServer = Current Server view_adminTopology_agentDetail_token = Token -view_adminTopology_message_fetchServerFail=Unable to fetch server details for server with id {0}. -view_adminTopology_message_fetchAgentFail=Unable to fetch agent details for agent with id {0}. -view_adminTopology_message_removeServerConfirm=Do you really want to remove servers [{0}]? -view_adminTopology_message_removeServerFail=Unable to remove {0} server(s). -view_adminTopology_message_removedServer=Removed {0} server(s). -view_adminTopology_message_serverUpdated=The server {0} was successfully updated. -view_adminTopology_message_serverUpdateFail=Unable to update server {0}. -view_adminTopology_message_setMode=Set {0} server(s) to {1} mode. -view_adminTopology_message_setModeConfirm=Do you really want to set servers [{0}] to {1} mode? -view_adminTopology_message_setModeFail=Unable to set {0} server(s) to {1} mode. +view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number does not correspond to the number of currently connected agents. +view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}. +view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}. +view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}. +view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}. +view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}. +view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}. +view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}. +view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}. +view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents. +view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}. +view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s). +view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details. +view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}. +view_adminTopology_message_fetchPEventFail = Unable to fetch partition events. +view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}. +view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}. +view_adminTopology_message_fetchServers2Fail = Unable to fetch servers. +view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server. +view_adminTopology_message_forceRepartitionFail = Unable to run repartition. +view_adminTopology_message_order = Order +view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}. +view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}? +view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events? +view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}? +view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s). +view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}? +view_adminTopology_message_removeServerFail = Unable to remove {0} server(s). +view_adminTopology_message_removedAGroups = Removed {0} affinity group(s). +view_adminTopology_message_removedAllPEvent = All partition events have been purged. +view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events. +view_adminTopology_message_removedPEvent = Removed {0} partition events(s). +view_adminTopology_message_removedServer = Removed {0} server(s). +view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked. +view_adminTopology_message_serverUpdated = The server {0} was successfully updated. +view_adminTopology_message_serverUpdateFail = Unable to update server {0}. +view_adminTopology_message_setMode = Set {0} server(s) to {1} mode. +view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode? +view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode. view_adminTopology_partitionEvents = Partition Events view_adminTopology_partitionEvents_details = Details view_adminTopology_partitionEvents_detailsFilter = Details Filter diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties index 35b7b46..0775491 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties @@ -571,6 +571,45 @@ view_adminTopology_agentDetail_address = Adresa view_adminTopology_agentDetail_agentFailoverList = Agentův failover list view_adminTopology_agentDetail_currentServer = Současný server view_adminTopology_agentDetail_token = Token +view_adminTopology_message_agentsCount = K serveru je zaregistrováno {0} agentů. Toto číslo neznamená počet aktuálně připojených agentů. +view_adminTopology_message_agroupAssingAgentsFail = Nepodařilo se přiřadit agenty do afinitní skupiny s id {0}. +view_adminTopology_message_agroupAssingServersFail = Nepodařilo se přiřadit servery do afinitní skupiny s id {0}. +view_adminTopology_message_agroupRemovingAgentsFail = Nepodařilo se odstranit agenty z afinitní skupiny s id {0}. +view_adminTopology_message_agroupRemovingServersFail = Nepodařilo se odstranit servery z afinitní skupiny s id {0}. +view_adminTopology_message_agroupRenamed = Afinitní skupina s id {0} a jménem {1} byla přejmenována na {2}. +view_adminTopology_message_agroupRenamingFail = Nepodařilo se přejmenovat afinitní skupinu s id {0} a jménem {1}. +view_adminTopology_message_fetchAgentFail = Nepodařilo se získat detaily o agentovi s id {0}. +view_adminTopology_message_fetchAgentsFail = Nepodařilo se agenty pro afinitní skupinu s id {0}. +view_adminTopology_message_fetchAgents2Fail = Nepodařilo se získat agenty. +view_adminTopology_message_fetchAgroupFail = Nepodařilo se získat detaily o afinitní skupině s id {0}. +view_adminTopology_message_fetchAgroupsFail = Nepodařilo se získat afinitní skupiny. +view_adminTopology_message_fetchFailOverLists = Nepodařilo se získat dataily failover listu. +view_adminTopology_message_fetchPEventDetailsFail = Nepodařilo se získat detaily události clusteru s id {0}. +view_adminTopology_message_fetchPEventFail = Nepodařilo se získat události clusteru. +view_adminTopology_message_fetchServerFail = Nepodařilo se získat detaily o serveru s id {0}. +view_adminTopology_message_fetchServersFail = Nepodařilo se získat servery pro afinitní skupinu s id {0}. +view_adminTopology_message_fetchServers2Fail = Nepodařilo se získat servery. +view_adminTopology_message_forceRepartition = Přejete si opravdu vynutit přerozdělení celého clusteru? Přiměje to každého z agentů připojit se na svůj preferovaný server tzn. první ve failover listu. +view_adminTopology_message_forceRepartitionFail = Nepodařilo se spustit přerozdělení. +view_adminTopology_message_order = Pořadí +view_adminTopology_message_removeAGroupsFail = Nepodařilo se odstranit následující afinitní skupiny {0}. +view_adminTopology_message_removeAGroupsConfirm = Přejete si opravdu odstanit následující afinitní skupiny {0}? +view_adminTopology_message_removeAllPEventConfirm = Přejete si opravdu odstranit všechny události clusteru? +view_adminTopology_message_removePEventConfirm = Chcete opravdu odstranit následující události clusteru {0}? +view_adminTopology_message_removePEventFail = Nepodařilo se odstranit {0} události clusteru. +view_adminTopology_message_removeServerConfirm = Chcete opravdu odstranit následující servery {0}? +view_adminTopology_message_removeServerFail = Nepodařilo se odstranit {0} serverů. +view_adminTopology_message_removedAGroups = Odstraněno {0} afinitních skupin. +view_adminTopology_message_removedAllPEvent = Všechnz události clusteru byly smazány. +view_adminTopology_message_removedAllPEventFail = Nepodařilo se odstranit všechny události clusteru. +view_adminTopology_message_removedPEvent = Odstraněno {0} událostí clusteru. +view_adminTopology_message_removedServer =Odstraněno {0} serverů. +view_adminTopology_message_repartitioned = Operace přerozdělení clusteru byla úspěšně spuštěna. +view_adminTopology_message_serverUpdated = Server {0} byl úspěšně změněn. +view_adminTopology_message_serverUpdateFail = Nepodařilo se změnit server {0}. +view_adminTopology_message_setMode =Nastaveno {0} serverů do {1} módu. +view_adminTopology_message_setModeConfirm = Přejete si opravdu nastavit servery {0} do {1} módu? +view_adminTopology_message_setModeFail = Nepodařilo se nastavit {0} serverů do {1} módu. view_adminTopology_partitionEvents = Události o clusteru view_adminTopology_partitionEvents_details = Detaily view_adminTopology_partitionEvents_detailsFilter = Filtrovat podle detailu diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties index 6c2cc91..f9876c3 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties @@ -519,6 +519,45 @@ view_adminTopology_agents = Agenten ##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token +##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents. +##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}. +##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}. +##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}. +##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}. +##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}. +##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}. +##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents. +##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}. +##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s). +##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details. +##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}. +##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events. +##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}. +##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}. +##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers. +##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server. +##view_adminTopology_message_forceRepartitionFail = Unable to run repartition. +##view_adminTopology_message_order = Order +##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}. +##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}? +##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events? +##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}? +##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s). +##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}? +##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s). +##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s). +##view_adminTopology_message_removedAllPEvent = All partition events have been purged. +##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events. +##view_adminTopology_message_removedPEvent = Removed {0} partition events(s). +##view_adminTopology_message_removedServer = Removed {0} server(s). +##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked. +##view_adminTopology_message_serverUpdated = The server {0} was successfully updated. +##view_adminTopology_message_serverUpdateFail = Unable to update server {0}. +##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode. +##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode? +##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode. view_adminTopology_partitionEvents = Partitionierungs-Ereignisse ##view_adminTopology_partitionEvents_details = Details ##view_adminTopology_partitionEvents_detailsFilter = Details Filter diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties index 2b74e1b..83b705b 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties @@ -550,6 +550,45 @@ view_adminTopology_agents = エージェント ##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token +##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents. +##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}. +##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}. +##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}. +##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}. +##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}. +##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}. +##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents. +##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}. +##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s). +##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details. +##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}. +##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events. +##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}. +##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}. +##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers. +##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server. +##view_adminTopology_message_forceRepartitionFail = Unable to run repartition. +##view_adminTopology_message_order = Order +##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}. +##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}? +##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events? +##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}? +##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s). +##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}? +##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s). +##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s). +##view_adminTopology_message_removedAllPEvent = All partition events have been purged. +##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events. +##view_adminTopology_message_removedPEvent = Removed {0} partition events(s). +##view_adminTopology_message_removedServer = Removed {0} server(s). +##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked. +##view_adminTopology_message_serverUpdated = The server {0} was successfully updated. +##view_adminTopology_message_serverUpdateFail = Unable to update server {0}. +##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode. +##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode? +##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode. view_adminTopology_partitionEvents = イベントの分類 ##view_adminTopology_partitionEvents_details = Details ##view_adminTopology_partitionEvents_detailsFilter = Details Filter diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties index ceb89bd..9f545fb 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties @@ -555,6 +555,45 @@ view_adminTopology_agents = Agentes ##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token +##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents. +##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}. +##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}. +##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}. +##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}. +##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}. +##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}. +##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents. +##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}. +##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s). +##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details. +##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}. +##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events. +##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}. +##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}. +##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers. +##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server. +##view_adminTopology_message_forceRepartitionFail = Unable to run repartition. +##view_adminTopology_message_order = Order +##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}. +##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}? +##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events? +##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}? +##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s). +##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}? +##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s). +##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s). +##view_adminTopology_message_removedAllPEvent = All partition events have been purged. +##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events. +##view_adminTopology_message_removedPEvent = Removed {0} partition events(s). +##view_adminTopology_message_removedServer = Removed {0} server(s). +##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked. +##view_adminTopology_message_serverUpdated = The server {0} was successfully updated. +##view_adminTopology_message_serverUpdateFail = Unable to update server {0}. +##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode. +##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode? +##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode. view_adminTopology_partitionEvents = Eventos na Parti\u00E7\u00E3o ##view_adminTopology_partitionEvents_details = Details ##view_adminTopology_partitionEvents_detailsFilter = Details Filter diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties index 86c16cb..47025b7 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties @@ -542,6 +542,45 @@ #view_adminTopology_agentDetail_agentFailoverList = Agent Failover List #view_adminTopology_agentDetail_currentServer = Current Server #view_adminTopology_agentDetail_token = Token +##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents. +##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}. +##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}. +##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}. +##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}. +##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}. +##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}. +##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents. +##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}. +##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s). +##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details. +##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}. +##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events. +##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}. +##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}. +##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers. +##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server. +##view_adminTopology_message_forceRepartitionFail = Unable to run repartition. +##view_adminTopology_message_order = Order +##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}. +##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}? +##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events? +##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}? +##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s). +##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}? +##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s). +##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s). +##view_adminTopology_message_removedAllPEvent = All partition events have been purged. +##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events. +##view_adminTopology_message_removedPEvent = Removed {0} partition events(s). +##view_adminTopology_message_removedServer = Removed {0} server(s). +##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked. +##view_adminTopology_message_serverUpdated = The server {0} was successfully updated. +##view_adminTopology_message_serverUpdateFail = Unable to update server {0}. +##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode. +##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode? +##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode. #view_adminTopology_partitionEvents = Partition Events ##view_adminTopology_partitionEvents_details = Details ##view_adminTopology_partitionEvents_detailsFilter = Details Filter diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties index 2c649de..b9941fc 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties @@ -542,6 +542,45 @@ view_adminTopology_agents = \u4ee3\u7406 ##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token +##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents. +##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}. +##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}. +##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}. +##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}. +##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}. +##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}. +##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}. +##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents. +##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}. +##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s). +##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details. +##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}. +##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events. +##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}. +##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}. +##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers. +##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server. +##view_adminTopology_message_forceRepartitionFail = Unable to run repartition. +##view_adminTopology_message_order = Order +##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}. +##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}? +##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events? +##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}? +##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s). +##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}? +##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s). +##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s). +##view_adminTopology_message_removedAllPEvent = All partition events have been purged. +##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events. +##view_adminTopology_message_removedPEvent = Removed {0} partition events(s). +##view_adminTopology_message_removedServer = Removed {0} server(s). +##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked. +##view_adminTopology_message_serverUpdated = The server {0} was successfully updated. +##view_adminTopology_message_serverUpdateFail = Unable to update server {0}. +##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode. +##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode? +##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode. view_adminTopology_partitionEvents = Partition\u4e8b\u4ef6 ##view_adminTopology_partitionEvents_details = Details ##view_adminTopology_partitionEvents_detailsFilter = Details Filter diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java index 92b59d3..595ca8f 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java @@ -90,6 +90,13 @@ public interface CloudManagerLocal { PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
void markStaleServersDown(Subject subject); - + + /** + * Fetches the server based on provided criteria. + * + * @param subject caller + * @param criteria the criteria + * @return + */ PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria); }
commit caa81f6bf0a2e126896b8d40e5f066f39e88e013 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 19 13:01:23 2012 +0100
i18n for error messages, exception handling for agent and server views
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 3005f7d..4355814 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -53,6 +53,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); private final int affinityGroupId;
+ private static final int SECTION_COUNT = 3; private final LocatableSectionStack sectionStack; private SectionStackSection detailsSection = null; private SectionStackSection agentSection = null; @@ -105,7 +106,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar }
public boolean isInitialized() { - return initSectionCount >= 3; + return initSectionCount >= SECTION_COUNT; }
@Override @@ -136,7 +137,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar // don't wait forever, give up after 20s and show what we have long elapsedMillis = System.currentTimeMillis() - startTime; if (elapsedMillis > 20000) { - initSectionCount = 3; + initSectionCount = SECTION_COUNT; } schedule(100); // Reschedule the timer. } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 026a846..f48e7b7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -37,7 +37,10 @@ import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup; +import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.StringUtility; @@ -53,9 +56,9 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; */ public class AgentDetailView extends LocatableVLayout {
- // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); private final int agentId;
+ private static final int SECTION_COUNT = 2; private final LocatableSectionStack sectionStack; private SectionStackSection detailsSection = null; private SectionStackSection failoverListSection = null; @@ -80,21 +83,31 @@ public class AgentDetailView extends LocatableVLayout { @Override protected void onInit() { super.onInit(); - GWTServiceLookup.getAgentService().getAgentByID(this.agentId, new AsyncCallback<Agent>() { - public void onSuccess(final Agent agent) { - prepareDetailsSection(sectionStack, agent); - prepareFailoverListSection(sectionStack, agent); + AgentCriteria criteria = new AgentCriteria(); + criteria.addFilterId(agentId); + GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { + public void onSuccess(final PageList<Agent> agents) { + if (agents == null || agents.isEmpty() || agents.size() != 1) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchAgentFail(String.valueOf(agentId))); + initSectionCount = SECTION_COUNT; + return; + } + prepareDetailsSection(sectionStack, agents.get(0)); + prepareFailoverListSection(sectionStack, agents.get(0)); }
public void onFailure(Throwable caught) { - SC.say("er1:" + caught); - //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchAgentFail(String.valueOf(agentId)) + " " + caught.getMessage(), + caught); + initSectionCount = SECTION_COUNT; } }); }
public boolean isInitialized() { - return initSectionCount >= 2; + return initSectionCount >= SECTION_COUNT; }
@Override @@ -122,7 +135,7 @@ public class AgentDetailView extends LocatableVLayout { // don't wait forever, give up after 20s and show what we have long elapsedMillis = System.currentTimeMillis() - startTime; if (elapsedMillis > 20000) { - initSectionCount = 2; + initSectionCount = SECTION_COUNT; } schedule(100); // Reschedule the timer. } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index b50d852..dc34602 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -124,7 +124,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has showUpdateMembersAction(); } } - + private void showUpdateMembersAction() { addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java index f09a707..dc96374 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java @@ -62,6 +62,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
private final int partitionEventId;
+ private static final int SECTION_COUNT = 2; private final LocatableSectionStack sectionStack; private SectionStackSection detailsSection = null; private SectionStackSection agentSection = null; @@ -118,7 +119,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma }
public boolean isInitialized() { - return initSectionCount >= 2; + return initSectionCount >= SECTION_COUNT; }
@Override @@ -146,7 +147,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma // don't wait forever, give up after 20s and show what we have long elapsedMillis = System.currentTimeMillis() - startTime; if (elapsedMillis > 20000) { - initSectionCount = 2; + initSectionCount = SECTION_COUNT; } schedule(100); // Reschedule the timer. } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index f3dbd4d..ccc11aa 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -32,7 +32,6 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; @@ -46,12 +45,16 @@ import com.smartgwt.client.widgets.layout.SectionStackSection; import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; +import org.rhq.core.domain.criteria.ServerCriteria; +import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.StringUtility; +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.LocatableSectionStack; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip; @@ -65,9 +68,9 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; */ public class ServerDetailView extends LocatableVLayout implements BookmarkableView {
- // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); private final int serverId;
+ private static final int SECTION_COUNT = 2; private final LocatableSectionStack sectionStack; private SectionStackSection detailsSection = null; private SectionStackSection agentSection = null; @@ -92,31 +95,31 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi @Override protected void onInit() { super.onInit(); - GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() { - public void onSuccess(final Server server) { - prepareDetailsSection(sectionStack, server); - prepareAgentSection(sectionStack, server); - // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), - // new AsyncCallback<List<Agent>>() { - // public void onSuccess(List<Agent> agents) { - // prepareAgentSection(sectionStack, server, agents); - // }; - // - // public void onFailure(Throwable caught) { - // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); - // } - // }); + ServerCriteria criteria = new ServerCriteria(); + criteria.addFilterId(serverId); + GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { + public void onSuccess(final PageList<Server> servers) { + if (servers == null || servers.isEmpty() || servers.size() != 1) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchServerFail(String.valueOf(serverId))); + initSectionCount = SECTION_COUNT; + return; + } + prepareDetailsSection(sectionStack, servers.get(0)); + prepareAgentSection(sectionStack, servers.get(0)); }
public void onFailure(Throwable caught) { - SC.say("er1:" + caught); - //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_fetchServerFail(String.valueOf(serverId)) + " " + + caught.getMessage(), caught); + initSectionCount = SECTION_COUNT; } }); }
public boolean isInitialized() { - return initSectionCount >= 2; + return initSectionCount >= SECTION_COUNT; }
@Override @@ -144,7 +147,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi // don't wait forever, give up after 20s and show what we have long elapsedMillis = System.currentTimeMillis() - startTime; if (elapsedMillis > 20000) { - initSectionCount = 2; + initSectionCount = SECTION_COUNT; } schedule(100); // Reschedule the timer. } @@ -228,20 +231,25 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi server.setOperationMode(OperationMode.valueOf(operationModeItem.getValueAsString())); GWTServiceLookup.getCloudService().updateServer(server, new AsyncCallback<Void>() { public void onSuccess(Void result) { - // todo: notify + Message msg = new Message(MSG.view_adminTopology_message_serverUpdated(server.getName()), + Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + }
public void onFailure(Throwable caught) { - // todo: handle + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_serverUpdateFail(server.getName()) + " " + + caught.getMessage(), caught); } }); } } }); - + form.setItems(nameItem, addressItem, portItem, securePortItem, operationModeItem, affinityGroupItem, installationDateItem, lastUpdatetem); - + LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter")); footer.setPadding(5); footer.setWidth100(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 3c08618..b50e18c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -37,7 +37,7 @@ import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission; -import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.criteria.BaseCriteria; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; @@ -56,8 +56,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; * @author Jirka Kremser * */ -public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> - implements HasViewName { +public class ServerTableView extends + TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)", IconEnum.SERVERS); @@ -141,117 +141,36 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? }
private void showCommonActions() { - addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, - Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - List<String> selectedNames = getSelectedNames(selections); - // TODO: msg - // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Normal? For all I've done for you? " + selectedNames; - SC.ask(message, new BooleanCallback() { - public void execute(Boolean confirmed) { - if (confirmed) { - int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, - Server.OperationMode.NORMAL, new AsyncCallback<Void>() { - public void onSuccess(Void arg0) { - // TODO: msg - Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); - CoreGUI.getMessageCenter().notify(msg); - refresh(); - } + addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setMaintenance()); + addChangeOperationModeAction(OperationMode.MAINTENANCE, MSG.view_adminTopology_server_setMaintenance());
- public void onFailure(Throwable caught) { - // TODO: msg - CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); - refreshTableInfo(); - } - - }); - } else { - refreshTableInfo(); - } - } - }); - } - }); - - addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), + addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), null, new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { List<String> selectedNames = getSelectedNames(selections); - // TODO: msg - // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Maitenance? For all I've done for you? " + selectedNames; + String message = MSG.view_adminTopology_message_removeServerConfirm(selectedNames.toString()); SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, - Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() { - public void onSuccess(Void arg0) { - // TODO: msg - Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); - CoreGUI.getMessageCenter().notify(msg); - refresh(); - } - - public void onFailure(Throwable caught) { - // TODO: msg - CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); - refreshTableInfo(); - } - - }); - } else { - refreshTableInfo(); - } - } - }); - } - }); - - addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, - Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - List<String> selectedNames = getSelectedNames(selections); - String message = "Really? Delete? For all I've done for you? " + selectedNames; - SC.ask(message, new BooleanCallback() { - public void execute(Boolean confirmed) { - if (confirmed) { - int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); GWTServiceLookup.getCloudService().deleteServers(selectedIds, new AsyncCallback<Void>() { public void onSuccess(Void arg0) { - // TODO: msg Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); + .view_adminTopology_message_removedServer(String + .valueOf(selections.length)), Message.Severity.Info); CoreGUI.getMessageCenter().notify(msg); refresh(); }
public void onFailure(Throwable caught) { - // TODO: msg CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); + MSG.view_adminTopology_message_removeServerFail(String + .valueOf(selections.length)) + " " + caught.getMessage(), caught); refreshTableInfo(); }
}); - } else { - refreshTableInfo(); } } }); @@ -259,6 +178,43 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? }); }
+ private void addChangeOperationModeAction(final OperationMode mode, String label) { + addTableAction(extendLocatorId("set" + mode), label, null, new AuthorizedTableAction(this, + TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + List<String> selectedNames = getSelectedNames(selections); + String message = MSG.view_adminTopology_message_setModeConfirm(selectedNames.toString(), mode.name()); + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + int[] selectedIds = getSelectedIds(selections); + GWTServiceLookup.getCloudService().updateServerMode(selectedIds, mode, + new AsyncCallback<Void>() { + public void onSuccess(Void result) { + Message msg = new Message(MSG.view_adminTopology_message_setMode( + String.valueOf(selections.length), mode.name()), Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError( + MSG.view_adminTopology_message_setModeFail( + String.valueOf(selections.length), mode.name()) + + " " + caught.getMessage(), caught); + refreshTableInfo(); + } + + }); + } else { + refreshTableInfo(); + } + } + }); + } + }); + } + private void showUpdateMembersAction() { addTableAction(extendLocatorId("editGroupServers"), MSG.view_groupInventoryMembers_button_updateMembership(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties index 47611e8..ceaad0d 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties @@ -552,6 +552,16 @@ view_adminTopology_agentDetail_address = Address view_adminTopology_agentDetail_agentFailoverList = Agent Failover List view_adminTopology_agentDetail_currentServer = Current Server view_adminTopology_agentDetail_token = Token +view_adminTopology_message_fetchServerFail=Unable to fetch server details for server with id {0}. +view_adminTopology_message_fetchAgentFail=Unable to fetch agent details for agent with id {0}. +view_adminTopology_message_removeServerConfirm=Do you really want to remove servers [{0}]? +view_adminTopology_message_removeServerFail=Unable to remove {0} server(s). +view_adminTopology_message_removedServer=Removed {0} server(s). +view_adminTopology_message_serverUpdated=The server {0} was successfully updated. +view_adminTopology_message_serverUpdateFail=Unable to update server {0}. +view_adminTopology_message_setMode=Set {0} server(s) to {1} mode. +view_adminTopology_message_setModeConfirm=Do you really want to set servers [{0}] to {1} mode? +view_adminTopology_message_setModeFail=Unable to set {0} server(s) to {1} mode. view_adminTopology_partitionEvents = Partition Events view_adminTopology_partitionEvents_details = Details view_adminTopology_partitionEvents_detailsFilter = Details Filter
commit e3c531c1f52ef4298b0e5d29a044765cc97c8ac7 Author: Jirka Kremser jkremser@redhat.com Date: Tue Dec 18 17:12:46 2012 +0100
Assigning the agent to the affinity group; some refactoring (renaming AgentNodeDatasource -> AgentDatasource, AgentNodeDatasourceField -> AgentDatasourceField)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java index 870cc8f..5948a7e 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java @@ -172,6 +172,9 @@ public class Agent implements Serializable { public static final String QUERY_UPDATE_STATUS_BY_MEASUREMENT_BASELINE = "Agent.updateStatusByMeasurementBasleine"; public static final String QUERY_UPDATE_STATUS_BY_AGENT = "Agent.updateStatusByAgent"; public static final String QUERY_UPDATE_STATUS_FOR_ALL = "Agent.updateStatusForAll"; + + // this value is set, when authorized user wants to reset the token + public static final String SECURITY_TOKEN_RESET = "@#$reset$#@";
@Column(name = "ID", nullable = false) @GeneratedValue(strategy = GenerationType.AUTO, generator = "id") diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java new file mode 100644 index 0000000..5515e18 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java @@ -0,0 +1,264 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * 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 and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.rhq.enterprise.gui.coregui.client.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.Criteria; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.IButton; +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.CloseClickEvent; +import com.smartgwt.client.widgets.events.CloseClickHandler; +import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; + +import org.rhq.core.domain.criteria.AgentCriteria; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.IconEnum; +import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; +import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; + +/** + * @author Jirka Kremser + */ +public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCriteria> { + + private final Integer affinityGroupId; + + private static RPCDataSource<Agent, AgentCriteria> datasource = null; + + private static Window modalWindow; + private static boolean shouldBeClosed; + private static VLayout layout; + private List<Integer> originallyAssignedIds; + + private AffinityGroupAgentsSelector() { + super(""); + affinityGroupId = -1; + } + + private AffinityGroupAgentsSelector(String id, Integer affinityGroupId) { + super(id, false); + this.affinityGroupId = affinityGroupId; + prepareMembers(this); + } + + @Override + protected DynamicForm getAvailableFilterForm() { + if (availableFilterForm == null) { + availableFilterForm = new LocatableDynamicForm(extendLocatorId("AgeSelectAvailFilterForm")); + availableFilterForm.setWidth("75%"); + final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search()); + availableFilterForm.setItems(search); + } + return availableFilterForm; + } + + private void prepareMembers(final AffinityGroupAgentsSelector selector) { + AgentCriteria criteria = new AgentCriteria(); + criteria.addFilterAffinityGroupId(affinityGroupId); + GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { + public void onSuccess(PageList<Agent> result) { + ListGridRecord[] records = getDataSource().buildRecords(result); + originallyAssignedIds = getIdList(records); + setAssigned(records); + modalWindow.addItem(layout); + modalWindow.show(); + selector.reset(); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + } + }); + + } + + @Override + protected RPCDataSource<Agent, AgentCriteria> getDataSource() { + if (datasource == null) { + datasource = new AgentDatasource(affinityGroupId, false); + } + return datasource; + } + + @Override + protected int getMaxAvailableRecords() { + return 3000; + } + + @Override + protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { + String search = (String) availableFilterForm.getValue(NAME.propertyName()); + Criteria criteria = new Criteria(); + if (null != search) { + criteria.addCriteria(NAME.propertyName(), search); + } + return criteria; + } + + @Override + protected String getItemTitle() { + return MSG.view_adminTopology_agents(); + } + + @Override + protected String getItemIcon() { + return IconEnum.AGENT.getIcon16x16Path(); + } + + public static void show(Integer affinityGroupId, final TableSection parrent) { + modalWindow = new Window(); + modalWindow.addCloseClickHandler(new CloseClickHandler() { + public void onCloseClick(CloseClickEvent event) { + closeAndRefresh(parrent, false); + } + }); + modalWindow.setTitle(MSG.view_adminTopology_agents() + ": " + + MSG.view_adminTopology_affinityGroups_createNew()); + modalWindow.setOverflow(Overflow.VISIBLE); + modalWindow.setWidth(800); + modalWindow.setHeight(400); + modalWindow.setAutoCenter(true); + modalWindow.setCanDragResize(true); + modalWindow.setCanDragReposition(true); + + layout = new VLayout(); + layout.setWidth100(); + layout.setHeight100(); + layout.setPadding(10); + layout.setLayoutMargin(10); + + final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("foo", affinityGroupId); + layout.addMember(selector); + + IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); + cancel.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + closeAndRefresh(parrent, false); + } + }); + IButton save = new LocatableIButton(selector.extendLocatorId("Save"), MSG.common_button_save()); + save.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + List<Integer> actuallySelected = getIdList(selector.getSelectedRecords()); + List<Integer> originallySelected = selector.getOriginallyAssignedIds(); + originallySelected.removeAll(actuallySelected); + actuallySelected.removeAll(selector.getOriginallyAssignedIds()); + shouldBeClosed = true; + if (!originallySelected.isEmpty()) { + shouldBeClosed = false; + GWTServiceLookup.getCloudService().removeAgentsFromGroup( + originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { + + public void onSuccess(Void result) { + closeAndRefresh(parrent, true); + } + + public void onFailure(Throwable caught) { + //todo: error handling + SC.say("errX"); + } + }); + } + if (!actuallySelected.isEmpty()) { + shouldBeClosed = false; + GWTServiceLookup.getCloudService().addAgentsToGroup(selector.getAffinityGroupId(), + actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() { + + public void onSuccess(Void result) { + closeAndRefresh(parrent, true); + } + + public void onFailure(Throwable caught) { + //todo: error handling + SC.say("errX"); + } + }); + } + if (shouldBeClosed) { + closeAndRefresh(parrent, false); + } + // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected); + + } + }); + + HLayout buttons = new HLayout(10); + buttons.setHeight(20); + buttons.setLayoutAlign(Alignment.CENTER); + buttons.setLayoutBottomMargin(0); + buttons.addMember(save); + buttons.addMember(cancel); + layout.addMember(buttons); + } + + private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) { + if (modalWindow != null) { + modalWindow.destroy(); + } + if (fullRefresh) { + parrent.refresh(); + } else { + parrent.refreshTableInfo(); + } + } + + private static List<Integer> getIdList(ListGridRecord[] records) { + if (records == null) { + return null; + } + List<Integer> ids = new ArrayList<Integer>(records.length); + for (ListGridRecord record : records) { + ids.add(record.getAttributeAsInt(AgentDatasourceField.FIELD_ID.propertyName())); + } + return ids; + } + + public List<Integer> getOriginallyAssignedIds() { + return new ArrayList<Integer>(originallyAssignedIds); + } + + public Integer getAffinityGroupId() { + return affinityGroupId; + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index f104d6c..13b1559 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -22,6 +22,8 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME; + import java.util.ArrayList; import java.util.List;
@@ -37,18 +39,23 @@ import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.CloseClickEvent; import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.SelectItem; +import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.criteria.ServerCriteria; -import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.IconEnum; +import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem; import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/** @@ -56,8 +63,6 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; */ public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
- private static final String ITEM_ICON = "types/Server_up_16.png"; - private final Integer affinityGroupId;
private static RPCDataSource<Server, ServerCriteria> datasource = null; @@ -77,10 +82,41 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve this.affinityGroupId = affinityGroupId; prepareMembers(this); } + + @Override + protected DynamicForm getAvailableFilterForm() { + if (availableFilterForm == null) { + availableFilterForm = new LocatableDynamicForm(extendLocatorId("SerSelectAvailFilterForm")); + availableFilterForm.setNumCols(4); + availableFilterForm.setWidth("75%"); + final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search()); + final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE, MSG.view_adminTopology_serverDetail_operationMode()); + operationModeSelect.setValueMap(buildOperationModeOptions()); + operationModeSelect.setValue("ALL"); +// +// final EnumSelectItem operationModeFilter = new EnumSelectItem(ServerDatasource.FILTER_OPERATION_MODE, +// MSG.view_adminTopology_serverDetail_operationMode(), OperationMode.class, null, null); + + + availableFilterForm.setItems(search, operationModeSelect); + } + return availableFilterForm; + } + + private String[] buildOperationModeOptions() { + OperationMode[] modes = OperationMode.values(); + String[] options = new String[modes.length + 1]; + for (int i = 0; i < modes.length; i++) { + options[i] = modes[i].toString(); + } + options[modes.length] = "ALL"; + return options; + }
private void prepareMembers(final AffinityGroupServersSelector selector) { - GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, - PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() { + ServerCriteria criteria = new ServerCriteria(); + criteria.addFilterAffinityGroupId(affinityGroupId); + GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() { public void onSuccess(PageList<Server> result) { ListGridRecord[] records = getDataSource().buildRecords(result); originallyAssignedIds = getIdList(records); @@ -107,28 +143,32 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve }
@Override - protected DynamicForm getAvailableFilterForm() { - return null; // No Filters Currently - } - - @Override protected int getMaxAvailableRecords() { return 500; }
@Override protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { - return null; // No Filters Currently + String search = (String) availableFilterForm.getValue(NAME.propertyName()); + String operationMode = (String) availableFilterForm.getValue(ServerDatasource.FILTER_OPERATION_MODE); + Criteria criteria = new Criteria(); + if (null != search) { + criteria.addCriteria(NAME.propertyName(), search); + } + if (operationMode != null && !"ALL".equals(operationMode)) { + criteria.addCriteria(ServerDatasource.FILTER_OPERATION_MODE, operationMode); + } + return criteria; }
@Override protected String getItemTitle() { - return MSG.view_adminTopology_affinityGroups(); + return MSG.view_adminTopology_servers(); }
@Override protected String getItemIcon() { - return ITEM_ICON; + return IconEnum.SERVERS.getIcon16x16Path(); }
public static void show(Integer affinityGroupId, final TableSection parrent) { @@ -138,7 +178,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve closeAndRefresh(parrent, false); } }); - modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": " + modalWindow.setTitle(MSG.view_adminTopology_servers() + ": " + MSG.view_adminTopology_affinityGroups_createNew()); modalWindow.setOverflow(Overflow.VISIBLE); modalWindow.setWidth(800); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java new file mode 100644 index 0000000..ac1d26b --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java @@ -0,0 +1,227 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER_ID; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.DSRequest; +import com.smartgwt.client.data.DSResponse; +import com.smartgwt.client.data.DataSourceField; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.data.fields.DataSourceIntegerField; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; + +import org.rhq.core.domain.criteria.AgentCriteria; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.Log; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; + +/** + * @author Jirka Kremser + * + */ +public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> { + + // filters + public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName(); + public static final String FILTER_PORT = FIELD_PORT.propertyName(); + public static final String FILTER_SERVER_ID = "serverId"; + public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId"; + + + private final Integer id; + private final boolean isAffinityGroupId; + + public AgentDatasource(Integer id, boolean isAffinityGroupId) { + super(); + this.id = id; + this.isAffinityGroupId = isAffinityGroupId; + List<DataSourceField> fields = addDataSourceFields(); + addFields(fields); + } + + @Override + protected List<DataSourceField> addDataSourceFields() { + List<DataSourceField> fields = super.addDataSourceFields(); + DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); + idField.setPrimaryKey(true); + idField.setHidden(true); + fields.add(idField); + return fields; + } + + public List<ListGridField> getListGridFields() { + List<ListGridField> fields = new ArrayList<ListGridField>(); + + ListGridField idField = FIELD_ID.getListGridField(); + idField.setHidden(true); + fields.add(idField); + fields.add(FIELD_NAME.getListGridField("*")); + fields.add(FIELD_SERVER.getListGridField("120")); + fields.add(FIELD_ADDRESS.getListGridField("110")); + + ListGridField serverIdField = FIELD_SERVER_ID.getListGridField(); + serverIdField.setHidden(true); + fields.add(serverIdField); + + fields.add(FIELD_PORT.getListGridField("90")); + ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120"); + TimestampCellFormatter.prepareDateField(lastAvailabilityReportField); + fields.add(lastAvailabilityReportField); + + if (!isAffinityGroupId) { + fields.add(FIELD_AFFINITY_GROUP.getListGridField("100")); + ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField(); + affinityGroupIdField.setHidden(true); + fields.add(affinityGroupIdField); + } + + return fields; + } + + @Override + protected void executeFetch(final DSRequest request, final DSResponse response, AgentCriteria criteria) { +// final PageControl pc = getPageControl(request); + +// AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() { +// public void onSuccess(PageList<Agent> result) { +// response.setData(buildRecords(result)); +// response.setTotalRows(result.size()); +// processResponse(request.getRequestId(), response); +// } +// +// @Override +// public void onFailure(Throwable t) { +// //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); +// response.setStatus(DSResponse.STATUS_FAILURE); +// processResponse(request.getRequestId(), response); +// } +// }; +// +// + if (isAffinityGroupId) { +// GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback); + criteria.addFilterAffinityGroupId(id); + } else if (id != null) { + // if id == null all agent are returned + criteria.addFilterServerId(id); +// GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback); + } + + GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() { + public void onSuccess(PageList<Agent> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); + } + + /** + * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, + * pagination, but *not* filter fields. + * + * @param request the request to turn into a page control + * @return the page control for passing to criteria and other queries + */ + protected PageControl getPageControl(DSRequest request) { + // Initialize paging. + PageControl pageControl = new PageControl(0, getDataPageSize()); + + // Initialize sorting. + String sortBy = request.getAttribute("sortBy"); + if (sortBy != null) { + String[] sorts = sortBy.split(","); + for (String sort : sorts) { + PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; + String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; + pageControl.addDefaultOrderingField(columnName, ordering); + } + } + + return pageControl; + } + + @Override + public Agent copyValues(Record from) { + throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)"); + } + + @Override + public ListGridRecord copyValues(Agent from) { + ListGridRecord record = new ListGridRecord(); + record.setAttribute(FIELD_ID.propertyName(), from.getId()); + record.setAttribute(FIELD_NAME.propertyName(), from.getName()); + record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress()); + record.setAttribute(FIELD_PORT.propertyName(), from.getPort()); + record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "" : from.getServer().getName()); + record.setAttribute(FIELD_SERVER_ID.propertyName(), from.getServer() == null ? "" : from.getServer().getId()); + record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport()); + record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from + .getAffinityGroup().getName()); + record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from + .getAffinityGroup().getId()); + + return record; + } + + @Override + protected AgentCriteria getFetchCriteria(DSRequest request) { + AgentCriteria criteria = new AgentCriteria(); + // printRequestCriteria(request); + criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); + criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class)); + criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class)); + criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class)); + criteria.addFilterServerId(getFilter(request, FILTER_SERVER_ID, Integer.class)); + criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class)); + + + //@todo: Remove me when finished debugging search expression + Log.debug(" *** AgentCriteria Search String: " + getFilter(request, "search", String.class)); + criteria.setSearchExpression(getFilter(request, "search", String.class)); + + return criteria; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java new file mode 100644 index 0000000..26792d4 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java @@ -0,0 +1,83 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.enterprise.gui.coregui.client.CoreGUI; + +/** + * @author Jirka Kremser + * + */ +public enum AgentDatasourceField { + + FIELD_ID("id", CoreGUI.getMessages().common_title_id()), + + FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), + + FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()), + + FIELD_SERVER_ID("serverId", "serverId"), + + FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()), + + FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()), + + FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()), + + FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()), + + FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), + + FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId"); + + /** + * Corresponds to a property name of Server (e.g. operationMode). + */ + private String propertyName; + + /** + * The table header for the field or property (e.g. Mode). + */ + private String title; + + private AgentDatasourceField(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(String width) { + ListGridField field = new ListGridField(propertyName, title); + field.setWidth(width); + return field; + } +} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index b91f71d..026a846 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -19,13 +19,13 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AGENT_TOKEN; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AGENT_TOKEN; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER;
import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java deleted file mode 100644 index 8a9da96..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.admin.topology; - -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID; - -import java.util.ArrayList; -import java.util.List; - -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.smartgwt.client.data.DSRequest; -import com.smartgwt.client.data.DSResponse; -import com.smartgwt.client.data.DataSourceField; -import com.smartgwt.client.data.Record; -import com.smartgwt.client.data.fields.DataSourceIntegerField; -import com.smartgwt.client.widgets.grid.ListGridField; -import com.smartgwt.client.widgets.grid.ListGridRecord; - -import org.rhq.core.domain.criteria.Criteria; -import org.rhq.core.domain.resource.Agent; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageList; -import org.rhq.core.domain.util.PageOrdering; -import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; -import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; -import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; - -/** - * @author Jirka Kremser - * - */ -public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { - - private final Integer id; - private final boolean isAffinityGroupId; - - public AgentNodeDatasource(Integer id, boolean isAffinityGroupId) { - super(); - this.id = id; - this.isAffinityGroupId = isAffinityGroupId; - List<DataSourceField> fields = addDataSourceFields(); - addFields(fields); - } - - @Override - protected List<DataSourceField> addDataSourceFields() { - List<DataSourceField> fields = super.addDataSourceFields(); - DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); - idField.setPrimaryKey(true); - idField.setHidden(true); - fields.add(idField); - return fields; - } - - public List<ListGridField> getListGridFields() { - List<ListGridField> fields = new ArrayList<ListGridField>(); - - ListGridField idField = FIELD_ID.getListGridField(); - idField.setHidden(true); - fields.add(idField); - fields.add(FIELD_NAME.getListGridField("*")); - fields.add(FIELD_SERVER.getListGridField("120")); - fields.add(FIELD_ADDRESS.getListGridField("110")); - - ListGridField serverIdField = FIELD_SERVER_ID.getListGridField(); - serverIdField.setHidden(true); - fields.add(serverIdField); - - fields.add(FIELD_PORT.getListGridField("90")); - ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120"); - TimestampCellFormatter.prepareDateField(lastAvailabilityReportField); - fields.add(lastAvailabilityReportField); - - if (!isAffinityGroupId) { - fields.add(FIELD_AFFINITY_GROUP.getListGridField("100")); - ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField(); - affinityGroupIdField.setHidden(true); - fields.add(affinityGroupIdField); - } - - return fields; - } - - @Override - protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { - final PageControl pc = getPageControl(request); - - AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() { - public void onSuccess(PageList<Agent> result) { - response.setData(buildRecords(result)); - response.setTotalRows(result.size()); - processResponse(request.getRequestId(), response); - } - - @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - response.setStatus(DSResponse.STATUS_FAILURE); - processResponse(request.getRequestId(), response); - } - }; - - if (isAffinityGroupId) { - GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback); - } else { - // if id == null all agent are returned - GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback); - } - } - - /** - * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, - * pagination, but *not* filter fields. - * - * @param request the request to turn into a page control - * @return the page control for passing to criteria and other queries - */ - protected PageControl getPageControl(DSRequest request) { - // Initialize paging. - PageControl pageControl = new PageControl(0, getDataPageSize()); - - // Initialize sorting. - String sortBy = request.getAttribute("sortBy"); - if (sortBy != null) { - String[] sorts = sortBy.split(","); - for (String sort : sorts) { - PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; - String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; - pageControl.addDefaultOrderingField(columnName, ordering); - } - } - - return pageControl; - } - - @Override - public Agent copyValues(Record from) { - throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)"); - } - - @Override - public ListGridRecord copyValues(Agent from) { - ListGridRecord record = new ListGridRecord(); - record.setAttribute(FIELD_ID.propertyName(), from.getId()); - record.setAttribute(FIELD_NAME.propertyName(), from.getName()); - record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress()); - record.setAttribute(FIELD_PORT.propertyName(), from.getPort()); - record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "" : from.getServer().getName()); - record.setAttribute(FIELD_SERVER_ID.propertyName(), from.getServer() == null ? "" : from.getServer().getId()); - record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport()); - record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from - .getAffinityGroup().getName()); - record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from - .getAffinityGroup().getId()); - - return record; - } - - @Override - protected Criteria getFetchCriteria(DSRequest request) { - // we don't use criteria for this datasource, just return null - return null; - } -} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java deleted file mode 100644 index dc82130..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.admin.topology; - -import com.smartgwt.client.widgets.grid.ListGridField; - -import org.rhq.enterprise.gui.coregui.client.CoreGUI; - -/** - * @author Jirka Kremser - * - */ -public enum AgentNodeDatasourceField { - - FIELD_ID("id", CoreGUI.getMessages().common_title_id()), - - FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), - - FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()), - - FIELD_SERVER_ID("serverId", "serverId"), - - FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()), - - FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()), - - FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()), - - FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()), - - FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), - - FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId"); - - /** - * Corresponds to a property name of Server (e.g. operationMode). - */ - private String propertyName; - - /** - * The table header for the field or property (e.g. Mode). - */ - private String title; - - private AgentNodeDatasourceField(String propertyName, String title) { - this.propertyName = propertyName; - this.title = title; - } - - public String propertyName() { - return propertyName; - } - - public String title() { - return title; - } - - public ListGridField getListGridField() { - return new ListGridField(propertyName, title); - } - - public ListGridField getListGridField(String width) { - ListGridField field = new ListGridField(propertyName, title); - field.setWidth(width); - return field; - } -} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index d3b8761..b50d852 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -18,15 +18,14 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER_ID;
import java.util.List;
import com.smartgwt.client.types.SortDirection; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; @@ -47,7 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; /** * @author Jirka Kremser */ -public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName { +public class AgentTableView extends TableSection<AgentDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)", IconEnum.AGENT); @@ -56,13 +55,16 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean isAffinityGroupId; + + private final Integer id;
public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) { super(locatorId, null); this.isAffinityGroupId = isAffinityGroupId; + this.id = id; setHeight100(); setWidth100(); - setDataSource(new AgentNodeDatasource(id, isAffinityGroupId)); + setDataSource(new AgentDatasource(id, isAffinityGroupId)); }
@Override @@ -118,15 +120,18 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements }); } } - - if (isAffinityGroupId) - addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(), - new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - SC.say("working.."); - // todo: open editor for agent members - } - }); + if (isAffinityGroupId) { + showUpdateMembersAction(); + } + } + + private void showUpdateMembersAction() { + addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(), + new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + AffinityGroupAgentsSelector.show(id, AgentTableView.this); + } + }); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 0f76f74..2d1a75e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -135,10 +135,8 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
if(fetchMembers) { criteria.addFilterAffinityGroupId(affinityGroupId); - GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback); - } else { - GWTServiceLookup.getCloudService().getServerNonMembersByAffinityGroupId(affinityGroupId, pc, callback); } + GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback); }
/** @@ -195,7 +193,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve @Override protected ServerCriteria getFetchCriteria(DSRequest request) { ServerCriteria criteria = new ServerCriteria(); - printRequestCriteria(request); +// printRequestCriteria(request); criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class)); criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class)); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 7165390..f3dbd4d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -19,7 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_CTIME; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 79be297..3c08618 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -18,8 +18,8 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
import java.io.Serializable; diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java index bd9e88b..f51b246 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java @@ -296,7 +296,7 @@ public class CloudManagerBean implements CloudManagerLocal { partitionEventManager.processRequestedPartitionEvents(); }
- @RequiredPermission(Permission.MANAGE_INVENTORY) + @RequiredPermission(Permission.MANAGE_SETTINGS) public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) { CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager);
commit 9c52b1e5e5e75f65acad0fcd250da92914d7435c Author: Jirka Kremser jkremser@redhat.com Date: Tue Dec 18 17:10:43 2012 +0100
AgentCriteria and Agent finder have been added
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java new file mode 100644 index 0000000..b18b5d6 --- /dev/null +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java @@ -0,0 +1,107 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.core.domain.criteria; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.resource.Agent; +import org.rhq.core.domain.util.PageOrdering; + +/** + * Criteria object for querying {@link Server}s. + * + * @author Jiri Kremser + */ +@XmlAccessorType(XmlAccessType.FIELD) +@SuppressWarnings("unused") +public class AgentCriteria extends Criteria { + + private static final long serialVersionUID = 1L; + + public static final String SORT_FIELD_CTIME = "ctime"; + + public static final String SORT_FIELD_NAME = "name"; + + private Integer filterId; + private String filterName; + private String filterAddress; + private Integer filterPort; + private Integer filterServerId; // requires override + private Integer filterAffinityGroupId; // requires override + + private boolean fetchServer; + private boolean fetchAffinityGroup; + + private PageOrdering sortCtime; + private PageOrdering sortName; + + public AgentCriteria() { + filterOverrides.put("serverId", "server.id = ?"); + filterOverrides.put("affinityGroupId", "affinityGroup.id = ?"); + } + + public Class<?> getPersistentClass() { + return Agent.class; + } + + public void addFilterId(Integer filterId) { + this.filterId = filterId; + } + + public void addFilterName(String filterName) { + this.filterName = filterName; + } + + public void addFilterAffinityGroupId(Integer filterAffinityGroupId) { + this.filterAffinityGroupId = filterAffinityGroupId; + } + + public void addFilterAddress(String filterAddress) { + this.filterAddress = filterAddress; + } + + public void addFilterPort(Integer filterPort) { + this.filterPort = filterPort; + } + + public void addFilterServerId(Integer filterServerId) { + this.filterServerId = filterServerId; + } + + public void fetchAffinityGroup(boolean fetchAffinityGroup) { + this.fetchAffinityGroup = fetchAffinityGroup; + } + + public void fetchServer(boolean fetchServer) { + this.fetchServer = fetchServer; + } + + public void addSortCtime(PageOrdering sort) { + addSortField(SORT_FIELD_CTIME); + this.sortCtime = sort; + } + + public void addSortName(PageOrdering sort) { + addSortField(SORT_FIELD_NAME); + this.sortName = sort; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index 3e64318..df83ba8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -33,6 +33,7 @@ import org.rhq.core.domain.cloud.PartitionEventDetails; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.resource.Agent; @@ -58,47 +59,54 @@ public interface CloudGWTService extends RemoteService { void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException; - + void updateServer(Server server) throws RuntimeException;
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException; - + PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
+ PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException; + void cloudPartitionEventRequest() throws RuntimeException;
void purgeAllEvents() throws RuntimeException;
void deletePartitionEvents(int[] eventIds) throws RuntimeException;
- PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, - PageControl pageControl) throws RuntimeException; - - PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) throws RuntimeException; - + PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) + throws RuntimeException; + + PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) + throws RuntimeException; + int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException; - + int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; - + void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; - - PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; - - PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; - - PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; - - PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; - + + PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException; + + PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException; + + PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException; + + PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException; + AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException; - + void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException; - + void removeServersFromGroup(Integer[] serverIds) throws RuntimeException; - + void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException; - + void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 1daa1df..db7ec3c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -36,6 +36,7 @@ import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.resource.Agent; @@ -46,6 +47,7 @@ import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal; import org.rhq.enterprise.server.cloud.CloudManagerLocal; import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal; +import org.rhq.enterprise.server.core.AgentManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
/** @@ -56,6 +58,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); + + private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@@ -143,6 +147,17 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud throw getExceptionToThrowToClient(t); } } + + @Override + public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException { + try { + return SerialUtility.prepare( + agentManager.findAgentsByCriteria(getSessionSubject(), criteria), + "CloudGWTServiceImpl.findAgentsByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + }
@Override public void cloudPartitionEventRequest() throws RuntimeException { 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 9cced72..42adb10 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 @@ -48,6 +48,7 @@ import org.rhq.core.clientapi.server.core.PingRequest; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.common.composite.SystemSetting; +import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.resource.composite.AgentLastAvailabilityPingComposite; @@ -67,6 +68,8 @@ import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean; import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceUtil; import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal; import org.rhq.enterprise.server.system.SystemManagerLocal; +import org.rhq.enterprise.server.util.CriteriaQueryGenerator; +import org.rhq.enterprise.server.util.CriteriaQueryRunner; import org.rhq.enterprise.server.util.LookupUtil; import org.rhq.enterprise.server.util.concurrent.AvailabilityReportSerializer;
@@ -654,5 +657,12 @@ public class AgentManagerBean implements AgentManagerLocal {
return pingResults; } + + @RequiredPermission(Permission.MANAGE_SETTINGS) + public PageList<Agent> findAgentsByCriteria(Subject subject, AgentCriteria criteria) { + CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); + CriteriaQueryRunner<Agent> runner = new CriteriaQueryRunner<Agent>(criteria, generator, entityManager); + return runner.execute(); + }
} \ 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 e09cfaa..5494e4d 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 @@ -30,6 +30,7 @@ import org.rhq.core.clientapi.server.core.AgentVersion; import org.rhq.core.clientapi.server.core.CoreServerService; import org.rhq.core.clientapi.server.core.PingRequest; import org.rhq.core.domain.auth.Subject; +import org.rhq.core.domain.criteria.AgentCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; @@ -308,4 +309,6 @@ public interface AgentManagerLocal { * @return The updated request object. */ public PingRequest handlePingRequest(PingRequest request); + + PageList<Agent> findAgentsByCriteria(Subject subject, AgentCriteria criteria); } \ No newline at end of file
commit 6ad56994db007039324ad2d6462636546e4e1ce1 Author: Jirka Kremser jkremser@redhat.com Date: Fri Dec 14 19:35:46 2012 +0100
ServerCriteria and Server finder have been added
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java new file mode 100644 index 0000000..b00b3d7 --- /dev/null +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java @@ -0,0 +1,125 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.core.domain.criteria; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.Server.OperationMode; +import org.rhq.core.domain.util.PageOrdering; + +/** + * Criteria object for querying {@link Server}s. + * + * @author Jiri Kremser + */ +@XmlAccessorType(XmlAccessType.FIELD) +@SuppressWarnings("unused") +public class ServerCriteria extends Criteria { + + private static final long serialVersionUID = 1L; + + public static final String SORT_FIELD_CTIME = "ctime"; + + public static final String SORT_FIELD_NAME = "name"; + + public static final String SORT_FIELD_COMPUTE_POWER = "computePower"; + + private Integer filterId; + private String filterName; + private String filterAddress; + private Integer filterPort; + private Integer filterSecurePort; + private OperationMode filterOperationMode; // requires override + private Integer filterComputePower; + private Integer filterAffinityGroupId; // requires override + + private boolean fetchAgents; + private boolean fetchAffinityGroup; + + private PageOrdering sortCtime; + private PageOrdering sortName; + private PageOrdering sortComputePower; + + public ServerCriteria() { + // filterOverrides.put("operationMode", "operationMode IN ( ? )"); + filterOverrides.put("affinityGroupId", "affinityGroup.id = ?"); + } + + public Class<?> getPersistentClass() { + return Server.class; + } + + public void addFilterId(Integer filterId) { + this.filterId = filterId; + } + + public void addFilterName(String filterName) { + this.filterName = filterName; + } + + public void addFilterAddress(String filterAddress) { + this.filterAddress = filterAddress; + } + + public void addFilterPort(Integer filterPort) { + this.filterPort = filterPort; + } + + public void addFilterSecurePort(Integer filterSecurePort) { + this.filterSecurePort = filterSecurePort; + } + + public void addFilterOperationMode(OperationMode operationMode) { + this.filterOperationMode = operationMode; + } + + public void addFilterComputePower(Integer filterComputePower) { + this.filterComputePower = filterComputePower; + } + + public void addFilterAffinityGroupId(Integer filterAffinityGroupId) { + this.filterAffinityGroupId = filterAffinityGroupId; + } + + public void fetchAgents(boolean fetchAgents) { + this.fetchAgents = fetchAgents; + } + + public void fetchAffinityGroup(boolean fetchAffinityGroup) { + this.fetchAffinityGroup = fetchAffinityGroup; + } + + public void addSortCtime(PageOrdering sort) { + addSortField(SORT_FIELD_CTIME); + this.sortCtime = sort; + } + + public void addSortName(PageOrdering sort) { + addSortField(SORT_FIELD_NAME); + this.sortName = sort; + } + + public void addSortComputePower(PageOrdering sortComputePower) { + addSortField(SORT_FIELD_COMPUTE_POWER); + this.sortComputePower = sortComputePower; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index a1f5507..f104d6c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -42,6 +42,7 @@ import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; @@ -53,13 +54,13 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; /** * @author Jirka Kremser */ -public class AffinityGroupServersSelector extends AbstractSelector<Server, org.rhq.core.domain.criteria.Criteria> { +public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
private static final String ITEM_ICON = "types/Server_up_16.png";
private final Integer affinityGroupId;
- private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null; + private static RPCDataSource<Server, ServerCriteria> datasource = null;
private static Window modalWindow; private static boolean shouldBeClosed; @@ -98,7 +99,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r }
@Override - protected RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> getDataSource() { + protected RPCDataSource<Server, ServerCriteria> getDataSource() { if (datasource == null) { datasource = new ServerDatasource(affinityGroupId, false); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 4a07853..f77a843 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -158,6 +158,9 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override protected PartitionEventCriteria getFetchCriteria(DSRequest request) { + //todo: do it like in ResourceDatasource.class + + ExecutionStatus[] statuses = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class); PartitionEventType[] types = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class); if (types == null || types.length == 0 || statuses == null || statuses.length == 0) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index d942c44..0f76f74 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -42,18 +42,28 @@ import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.criteria.Criteria; +import org.rhq.core.domain.cloud.Server.OperationMode; +import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.Log;
/** * @author Jirka Kremser * */ -public class ServerDatasource extends AbstractServerNodeDatasource<Server, Criteria> { +public class ServerDatasource extends AbstractServerNodeDatasource<Server, ServerCriteria> { + + // filters + public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName(); + public static final String FILTER_PORT = FIELD_PORT.propertyName(); + public static final String FILTER_SECURE_PORT = FIELD_SECURE_PORT.propertyName(); + public static final String FILTER_OPERATION_MODE = FIELD_OPERATION_MODE.propertyName(); + public static final String FILTER_COMPUTE_POWER = "computePower"; + public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
private final Integer affinityGroupId;
@@ -103,7 +113,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite }
@Override - protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { + protected void executeFetch(final DSRequest request, final DSResponse response, ServerCriteria criteria) { if (affinityGroupId == null) { return; } @@ -122,8 +132,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite processResponse(request.getRequestId(), response); } }; + if(fetchMembers) { - GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc, callback); + criteria.addFilterAffinityGroupId(affinityGroupId); + GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback); } else { GWTServiceLookup.getCloudService().getServerNonMembersByAffinityGroupId(affinityGroupId, pc, callback); } @@ -181,8 +193,22 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite }
@Override - protected Criteria getFetchCriteria(DSRequest request) { - // we don't use criteria for this datasource, just return null - return null; + protected ServerCriteria getFetchCriteria(DSRequest request) { + ServerCriteria criteria = new ServerCriteria(); + printRequestCriteria(request); + criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class)); + criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class)); + criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class)); + criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class)); + criteria.addFilterSecurePort(getFilter(request, FILTER_SECURE_PORT, Integer.class)); + criteria.addFilterOperationMode(getFilter(request, FILTER_OPERATION_MODE, OperationMode.class)); + criteria.addFilterComputePower(getFilter(request, FILTER_COMPUTE_POWER, Integer.class)); + criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class)); + + //@todo: Remove me when finished debugging search expression + Log.debug(" *** ServerCriteria Search String: " + getFilter(request, "search", String.class)); + criteria.setSearchExpression(getFilter(request, "search", String.class)); + + return criteria; } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 24e2d9c..79be297 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -38,7 +38,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.criteria.Criteria; +import org.rhq.core.domain.criteria.BaseCriteria; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; @@ -56,7 +56,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; * @author Jirka Kremser * */ -public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, Criteria>> +public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)", diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index afaacb8..3e64318 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -34,6 +34,7 @@ import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.PartitionEventCriteria; +import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; @@ -63,6 +64,8 @@ public interface CloudGWTService extends RemoteService { List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException; + + PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
void cloudPartitionEventRequest() throws RuntimeException;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 32fadde..1daa1df 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -37,6 +37,7 @@ import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.PartitionEventCriteria; +import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; @@ -130,6 +131,18 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud throw getExceptionToThrowToClient(t); } } + + @Override + public PageList<Server> findServersByCriteria(ServerCriteria criteria) + throws RuntimeException { + try { + return SerialUtility.prepare( + cloudManager.findServersByCriteria(getSessionSubject(), criteria), + "CloudGWTServiceImpl.findServersByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + }
@Override public void cloudPartitionEventRequest() throws RuntimeException { diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java index 4bfc1af..bd9e88b 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java @@ -36,6 +36,7 @@ import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.server.PersistenceUtility; import org.rhq.core.domain.util.PageControl; @@ -44,6 +45,8 @@ import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.authz.AuthorizationManagerLocal; import org.rhq.enterprise.server.authz.RequiredPermission; import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal; +import org.rhq.enterprise.server.util.CriteriaQueryGenerator; +import org.rhq.enterprise.server.util.CriteriaQueryRunner; import org.rhq.enterprise.server.util.LookupUtil;
/** @@ -292,4 +295,11 @@ public class CloudManagerBean implements CloudManagerLocal { // regardless of the number of pending requests, as the work would be duplicated. partitionEventManager.processRequestedPartitionEvents(); } + + @RequiredPermission(Permission.MANAGE_INVENTORY) + public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) { + CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); + CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager); + return runner.execute(); + } } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java index 212f835..92b59d3 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java @@ -26,6 +26,7 @@ import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.ServerCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; @@ -89,4 +90,6 @@ public interface CloudManagerLocal { PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
void markStaleServersDown(Subject subject); + + PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria); }
commit 134d6f6984e69dc06b105a3024f30f947c8f498a Author: Jirka Kremser jkremser@redhat.com Date: Fri Dec 14 15:21:53 2012 +0100
Revert "exposing the CloudManagerBean via CLI"
This reverts commit 60c1d42fa5750ef5d1829e97b6b15323501bc3f2.
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java index 151267f..d374324 100644 --- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java +++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java @@ -24,7 +24,6 @@ import org.rhq.enterprise.server.alert.AlertManagerRemote; import org.rhq.enterprise.server.auth.SubjectManagerRemote; import org.rhq.enterprise.server.authz.RoleManagerRemote; import org.rhq.enterprise.server.bundle.BundleManagerRemote; -import org.rhq.enterprise.server.cloud.CloudManagerRemote; import org.rhq.enterprise.server.configuration.ConfigurationManagerRemote; import org.rhq.enterprise.server.content.ContentManagerRemote; import org.rhq.enterprise.server.content.RepoManagerRemote; @@ -64,7 +63,6 @@ public enum RhqManager { BundleManager(BundleManagerRemote.class, "${BundleManager}"), // CallTimeDataManager(CallTimeDataManagerRemote.class, "${CallTimeDataManager}"), // RepoManager(RepoManagerRemote.class, "${RepoManager}"), // - CloudManager(CloudManagerRemote.class, "${CloudManager}"), // ConfigurationManager(ConfigurationManagerRemote.class, "${ConfigurationManager}"), // ContentManager(ContentManagerRemote.class, "${ContentManager}"), // DataAccessManager(DataAccessManagerRemote.class, "${DataAccessManager}"), // diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java index 391b9e4..4bfc1af 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java @@ -54,7 +54,7 @@ import org.rhq.enterprise.server.util.LookupUtil; * @author Joseph Marques */ @Stateless -public class CloudManagerBean implements CloudManagerLocal, CloudManagerRemote { +public class CloudManagerBean implements CloudManagerLocal { private final Log log = LogFactory.getLog(CloudManagerBean.class);
// A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java deleted file mode 100644 index 1f97b99..0000000 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.server.cloud; - -import java.util.List; - -import javax.ejb.Remote; - -import org.rhq.core.domain.auth.Subject; -import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageList; - -/** - * @author Jiri Kremser - */ -@Remote -public interface CloudManagerRemote { - -// void deleteServers(Integer[] serverIds) throws CloudManagerException; -// -// void deleteServer(Integer serverId) throws CloudManagerException; -// -// List<Agent> getAgentsByServerName(String serverName); -// -// Server getServerById(int serverId); -// -// Server getServerByName(String serverName); -// -// /** -// * Return every server registered in the database considered part of the active cloud. This will exclude, for example, -// * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning. -// * @return All servers available to the cloud. -// */ -// List<Server> getAllCloudServers(); -// - /** - * Return every server registered in the database. - * @return All servers, regardless of operation mode. - */ - List<Server> getAllServers(); - - PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc); -// -// /** -// * Returns the number of servers that are part of the "server cloud", which excludes -// * servers that have been installed but not associated with the cloud. -// * The returned count will include those servers that are down or in maintenance mode, -// * in addition to those servers that are currently running in a normal state. -// * -// * @return count of servers in the cloud -// */ -// int getServerCount(); -// -// /** -// * Returns the number of servers that are part of the "server cloud" that are currently -// * running in "normal" mode. -// * -// * This excludes all other servers such as those servers that have been installed but -// * not associated with the cloud, servers that are down or in maintenance mode. -// * -// * @return count of servers in the cloud that are in a normal running state -// */ -// int getNormalServerCount(); -// -// void updateServerMode(Integer[] serverIds, Server.OperationMode mode); -// -// Server updateServer(Subject subject, Server server); -// -// PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc); -// -// void markStaleServersDown(Subject subject); -} diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java index 453e0a5..fddc6c6 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java @@ -34,7 +34,6 @@ import org.rhq.enterprise.server.alert.AlertDefinitionManagerBean; import org.rhq.enterprise.server.alert.AlertManagerBean; import org.rhq.enterprise.server.auth.SubjectManagerBean; import org.rhq.enterprise.server.authz.RoleManagerBean; -import org.rhq.enterprise.server.cloud.CloudManagerBean; import org.rhq.enterprise.server.configuration.ConfigurationManagerBean; import org.rhq.enterprise.server.content.AdvisoryManagerBean; import org.rhq.enterprise.server.content.ContentManagerBean; @@ -69,7 +68,6 @@ public class RemoteAPIValidator { AvailabilityManagerBean.class,// CallTimeDataManagerBean.class, // RepoManagerBean.class,// - CloudManagerBean.class,// ConfigurationManagerBean.class, // ContentManagerBean.class, // //ContentSourceManagerBean.class, //
commit 756bac150c6f31e4dd5a60c9f519226fff7f28c1 Author: Jirka Kremser jkremser@redhat.com Date: Fri Dec 14 14:43:33 2012 +0100
adding comment
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index edce33a..6dd2430 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -53,6 +53,8 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
private final int agentId; + + // this delegate is there to not repeat the copyValues code private final ServerDatasource serverDatasource;
public FailoverListItemDatasource(int agentId) {
commit 2ecf112a35453de2ab40aa4c091aff039c73f26c Merge: 829bede e794a37 Author: Jirka Kremser jkremser@redhat.com Date: Fri Dec 14 13:30:23 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 829bedef03364ec7dcafdd64fef274fe52a951e4 Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 13 18:37:27 2012 +0100
Buttons were moved to tool strips; button enablement is now refreshing properly even after the modal window is closed by "X" button
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index e749f61..6afe5e4 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -151,57 +151,51 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() { + NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() { public Canvas createView() { return new FullHTMLPane(extendLocatorId(PAGE_AGENTS_VIEW_ID.getName()), "/rhq/ha/listAgents-plain.xhtml?nomenu=true"); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem affinityGroupsItem = new NavigationItem(PAGE_AFFINITY_GROUPS_VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_AFFINITY_GROUPS_VIEW_ID.getName()), - "/rhq/ha/listAffinityGroups-plain.xhtml?nomenu=true"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + NavigationItem affinityGroupsItem = new NavigationItem(PAGE_AFFINITY_GROUPS_VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new FullHTMLPane(extendLocatorId(PAGE_AFFINITY_GROUPS_VIEW_ID.getName()), + "/rhq/ha/listAffinityGroups-plain.xhtml?nomenu=true"); + } + }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem partitionEventsItem = new NavigationItem(PAGE_PARTITION_EVENTS_VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_PARTITION_EVENTS_VIEW_ID.getName()), - "/rhq/ha/listPartitionEvents-plain.xhtml?nomenu=true"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + NavigationItem partitionEventsItem = new NavigationItem(PAGE_PARTITION_EVENTS_VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new FullHTMLPane(extendLocatorId(PAGE_PARTITION_EVENTS_VIEW_ID.getName()), + "/rhq/ha/listPartitionEvents-plain.xhtml?nomenu=true"); + } + }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem remoteAgentInstallItem = new NavigationItem(RemoteAgentInstallView.VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall")); - } - }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + NavigationItem remoteAgentInstallItem = new NavigationItem(RemoteAgentInstallView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall")); + } + }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { - return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), - ServerTableView.VIEW_ID.getTitle(), null); + return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null, false); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - + NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { - return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), - AgentTableView.VIEW_ID.getTitle(), null); + return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, false); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - + NavigationItem affinityGroupsItemGwt = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { - return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName()), - AffinityGroupTableView.VIEW_ID.getTitle()); + return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName())); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); - + NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()), @@ -211,11 +205,13 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
// Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem, agentsItem, - affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt, partitionEventsGwt)); + affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt, + partitionEventsGwt)); if (isRHQ) { navigationItems.add(remoteAgentInstallItem); } - NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, navigationItems.toArray(new NavigationItem[]{})); + NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, + navigationItems.toArray(new NavigationItem[] {})); return topologyRegion; }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 8dcd595..3005f7d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -26,10 +26,10 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.SC; -import com.smartgwt.client.widgets.form.fields.ButtonItem; +import com.smartgwt.client.widgets.IButton; +import com.smartgwt.client.widgets.events.ClickEvent; +import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.fields.TextItem; -import com.smartgwt.client.widgets.form.fields.events.ClickEvent; -import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
@@ -40,6 +40,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/** @@ -146,7 +147,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar private void prepareAgentSection(SectionStack stack) { SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_agetnMembers()); section.setExpanded(true); - AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, + AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), affinityGroupId, true); section.setItems(agentsTable);
@@ -158,7 +159,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar private void prepareServerSection(SectionStack stack) { SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_serverMembers()); section.setExpanded(true); - ServerTableView serverTable = new ServerTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, + ServerTableView serverTable = new ServerTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), affinityGroupId, true); section.setItems(serverTable);
@@ -176,10 +177,16 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
final TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); nameItem.setValue(affinityGroup.getName()); + + LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter")); + footer.setPadding(5); + footer.setWidth100(); + footer.setMembersMargin(15);
- ButtonItem saveButton = new ButtonItem(); + IButton saveButton = new IButton(); saveButton.setOverflow(Overflow.VISIBLE); saveButton.setTitle(MSG.common_button_save()); +// saveButton.setWidth(70); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { affinityGroup.setName(nameItem.getValueAsString()); @@ -194,12 +201,13 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar }); } }); + footer.addMember(saveButton);
- form.setItems(nameItem, saveButton); + form.setItems(nameItem);
SectionStackSection section = new SectionStackSection(MSG.common_title_details()); section.setExpanded(true); - section.setItems(form); + section.setItems(form, footer);
detailsSection = section; initSectionCount++; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index 9653ef2..a1f5507 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -25,17 +25,17 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology; import java.util.ArrayList; import java.util.List;
-import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.types.Alignment; -import com.smartgwt.client.types.LayoutPolicy; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; 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.CloseClickEvent; +import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; @@ -62,6 +62,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null;
private static Window modalWindow; + private static boolean shouldBeClosed; private static VLayout layout; private List<Integer> originallyAssignedIds;
@@ -83,15 +84,9 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r ListGridRecord[] records = getDataSource().buildRecords(result); originallyAssignedIds = getIdList(records); setAssigned(records); - new Timer() { - @Override - public void run() { - modalWindow.addItem(layout); - modalWindow.show(); - selector.reset(); - } - }.schedule(2000); - + modalWindow.addItem(layout); + modalWindow.show(); + selector.reset(); }
@Override @@ -137,14 +132,16 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
public static void show(Integer affinityGroupId, final TableSection parrent) { modalWindow = new Window(); + modalWindow.addCloseClickHandler(new CloseClickHandler() { + public void onCloseClick(CloseClickEvent event) { + closeAndRefresh(parrent, false); + } + }); modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": " + MSG.view_adminTopology_affinityGroups_createNew()); modalWindow.setOverflow(Overflow.VISIBLE); -// modalWindow.setMinWidth(800); -// modalWindow.setMinHeight(400); - modalWindow.setWidth(800); - modalWindow.setHeight(400); -// modalWindow.setAutoSize(true); + modalWindow.setWidth(800); + modalWindow.setHeight(400); modalWindow.setAutoCenter(true); modalWindow.setCanDragResize(true); modalWindow.setCanDragReposition(true); @@ -152,21 +149,16 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r layout = new VLayout(); layout.setWidth100(); layout.setHeight100(); - layout.setPadding(15); - layout.setLayoutMargin(20); - layout.setVPolicy(LayoutPolicy.FILL); + layout.setPadding(10); + layout.setLayoutMargin(10);
final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId); layout.addMember(selector);
- VLayout spacer = new VLayout(); - spacer.setHeight(10); - layout.addMember(spacer); - IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); cancel.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { - modalWindow.destroy(); + closeAndRefresh(parrent, false); } }); IButton save = new LocatableIButton(selector.extendLocatorId("Save"), MSG.common_button_save()); @@ -176,15 +168,14 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r List<Integer> originallySelected = selector.getOriginallyAssignedIds(); originallySelected.removeAll(actuallySelected); actuallySelected.removeAll(selector.getOriginallyAssignedIds()); + shouldBeClosed = true; if (!originallySelected.isEmpty()) { + shouldBeClosed = false; GWTServiceLookup.getCloudService().removeServersFromGroup( originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) { - if (modalWindow != null) { - modalWindow.destroy(); - } - parrent.refresh(); + closeAndRefresh(parrent, true); }
public void onFailure(Throwable caught) { @@ -194,14 +185,12 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r }); } if (!actuallySelected.isEmpty()) { + shouldBeClosed = false; GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(), - originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { + actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) { - if (modalWindow != null) { - modalWindow.destroy(); - } - parrent.refresh(); + closeAndRefresh(parrent, true); }
public void onFailure(Throwable caught) { @@ -210,18 +199,34 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r } }); } - SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected); + if (shouldBeClosed) { + closeAndRefresh(parrent, false); + } + // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
} });
HLayout buttons = new HLayout(10); + buttons.setHeight(20); buttons.setLayoutAlign(Alignment.CENTER); - buttons.addMember(cancel); + buttons.setLayoutBottomMargin(0); buttons.addMember(save); + buttons.addMember(cancel); layout.addMember(buttons); }
+ private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) { + if (modalWindow != null) { + modalWindow.destroy(); + } + if (fullRefresh) { + parrent.refresh(); + } else { + parrent.refreshTableInfo(); + } + } + private static List<Integer> getIdList(ListGridRecord[] records) { if (records == null) { return null; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index 0879f99..ac44d44 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -69,8 +69,8 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- public AffinityGroupTableView(String locatorId, String tableTitle) { - super(locatorId, tableTitle); + public AffinityGroupTableView(String locatorId) { + super(locatorId, null); setHeight100(); setWidth100(); setDataSource(new AffinityGroupWithCountsDatasource()); @@ -233,6 +233,7 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts layout.addMember(buttons); modalWindow.addItem(layout); modalWindow.show(); + name.focusInItem(); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 7baa1df..b91f71d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -133,8 +133,8 @@ public class AgentDetailView extends LocatableVLayout { private void prepareFailoverListSection(SectionStack stack, Agent agent) { SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_agentDetail_agentFailoverList()); section.setExpanded(true); - ServerTableView agentsTable = new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null, - agent.getId()); + ServerTableView agentsTable = new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), + agent.getId(), false); section.setItems(agentsTable);
failoverListSection = section; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index b66c817..d3b8761 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -57,18 +57,14 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
private final boolean isAffinityGroupId;
- public AgentTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) { - super(locatorId, tableTitle); + public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) { + super(locatorId, null); this.isAffinityGroupId = isAffinityGroupId; setHeight100(); setWidth100(); setDataSource(new AgentNodeDatasource(id, isAffinityGroupId)); }
- public AgentTableView(String locatorId, String tableTitle, Integer id) { - this(locatorId, tableTitle, id, false); - } - @Override protected void configureTable() { super.configureTable(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index be374b6..4a07853 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -82,13 +82,13 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part ListGridField idField = FIELD_ID.getListGridField(); idField.setHidden(true); fields.add(idField); - ListGridField executionTimeField = FIELD_CTIME.getListGridField("120"); + ListGridField executionTimeField = FIELD_CTIME.getListGridField("125"); TimestampCellFormatter.prepareDateField(executionTimeField); fields.add(executionTimeField); - fields.add(FIELD_EVENT_TYPE.getListGridField("190")); + fields.add(FIELD_EVENT_TYPE.getListGridField("215")); fields.add(FIELD_EVENT_DETAIL.getListGridField("*")); - fields.add(FIELD_SUBJECT_NAME.getListGridField("90")); - fields.add(FIELD_EXECUTION_STATUS.getListGridField("90")); + fields.add(FIELD_SUBJECT_NAME.getListGridField("100")); + fields.add(FIELD_EXECUTION_STATUS.getListGridField("100"));
return fields; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 2a1253a..d942c44 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -86,7 +86,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
fields.add(FIELD_NAME.getListGridField("*")); fields.add(FIELD_OPERATION_MODE.getListGridField("90")); - fields.add(FIELD_ADDRESS.getListGridField("110")); + fields.add(FIELD_ADDRESS.getListGridField("190")); fields.add(FIELD_PORT.getListGridField("90")); fields.add(FIELD_SECURE_PORT.getListGridField("75"));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java index 18754c5..09577d8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java @@ -30,7 +30,8 @@ public enum ServerDatasourceField {
FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
- FIELD_ORDINAL("ordinal", "poradi"), + // todo: i18n + FIELD_ORDINAL("ordinal", "Order"),
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 89c291d..7165390 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -33,12 +33,12 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.SC; -import com.smartgwt.client.widgets.form.fields.ButtonItem; +import com.smartgwt.client.widgets.IButton; +import com.smartgwt.client.widgets.events.ClickEvent; +import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.form.fields.TextItem; -import com.smartgwt.client.widgets.form.fields.events.ClickEvent; -import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection; @@ -54,6 +54,7 @@ import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -154,8 +155,8 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi private void prepareAgentSection(SectionStack stack, Server server) { SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents()); section.setExpanded(true); - AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, - serverId); + AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), serverId, + false); section.setItems(agentsTable);
agentSection = section; @@ -215,7 +216,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi lastUpdatetem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getMtime()), TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
- ButtonItem saveButton = new ButtonItem(); + IButton saveButton = new IButton(); saveButton.setOverflow(Overflow.VISIBLE); saveButton.setTitle(MSG.common_button_save()); saveButton.addClickHandler(new ClickHandler() { @@ -237,13 +238,19 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi } } }); - + form.setItems(nameItem, addressItem, portItem, securePortItem, operationModeItem, affinityGroupItem, - installationDateItem, lastUpdatetem, saveButton); + installationDateItem, lastUpdatetem); + + LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter")); + footer.setPadding(5); + footer.setWidth100(); + footer.setMembersMargin(15); + footer.addMember(saveButton);
SectionStackSection section = new SectionStackSection(MSG.common_title_details()); section.setExpanded(true); - section.setItems(form); + section.setItems(form, footer);
detailsSection = section; initSectionCount++; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index df1ac8d..24e2d9c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -71,8 +71,8 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
private final Integer id;
- public ServerTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) { - super(locatorId, tableTitle); + public ServerTableView(String locatorId, Integer id, boolean isAffinityGroupId) { + super(locatorId, null); this.showActions = id == null && !isAffinityGroupId; this.isAffinityGroupId = isAffinityGroupId; this.id = id; @@ -86,10 +86,6 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
}
- public ServerTableView(String locatorId, String tableTitle, Integer id) { - this(locatorId, tableTitle, id, false); - } - @Override protected void configureTable() { super.configureTable();
commit d48595c629722c936660d2ce611d527eab7808ee Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 12 13:47:42 2012 +0100
More work behind assigning the servers into groups; added logic for updating details of existing server and existing affinity group
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 9c006a5..8dcd595 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -23,7 +23,6 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.AffinityGroup
import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.smartgwt.client.data.RecordList; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.SC; @@ -168,14 +167,14 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar return; }
- private void prepareDetailsSection(SectionStack stack, AffinityGroup affinityGroup) { + private void prepareDetailsSection(SectionStack stack, final AffinityGroup affinityGroup) { final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm")); form.setMargin(10); form.setWidth100(); form.setWrapItemTitles(false); form.setNumCols(2);
- TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); + final TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); nameItem.setValue(affinityGroup.getName());
ButtonItem saveButton = new ButtonItem(); @@ -183,8 +182,16 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar saveButton.setTitle(MSG.common_button_save()); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { - RecordList list = form.getRecordList(); - SC.say("name is " + list.get(0).getAttribute("name")); + affinityGroup.setName(nameItem.getValueAsString()); + GWTServiceLookup.getCloudService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() { + public void onSuccess(Void result) { + // todo: notify + } + + public void onFailure(Throwable caught) { + // todo: handle + } + }); } });
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java index ebc7ae2..9653ef2 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -22,6 +22,9 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import java.util.ArrayList; +import java.util.List; + import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; @@ -42,6 +45,7 @@ import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; +import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; @@ -52,14 +56,15 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; public class AffinityGroupServersSelector extends AbstractSelector<Server, org.rhq.core.domain.criteria.Criteria> {
private static final String ITEM_ICON = "types/Server_up_16.png"; - + private final Integer affinityGroupId; - + private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null; - - private static Window modalWindow = null; - private static VLayout layout = null; - + + private static Window modalWindow; + private static VLayout layout; + private List<Integer> originallyAssignedIds; + private AffinityGroupServersSelector() { super(""); affinityGroupId = -1; @@ -68,31 +73,33 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r private AffinityGroupServersSelector(String id, Integer affinityGroupId) { super(id, false); this.affinityGroupId = affinityGroupId; - prepareMembers(); + prepareMembers(this); } - - private void prepareMembers() { - GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() { - public void onSuccess(PageList<Server> result) { - ListGridRecord[] records = getDataSource().buildRecords(result); - setAssigned(records); -// AffinityGroupServersSelector.super.onInit(); - new Timer(){ - @Override - public void run() { - modalWindow.addItem(layout); - modalWindow.show(); - } - }.schedule(2000); - - - }
- @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - } - }); + private void prepareMembers(final AffinityGroupServersSelector selector) { + GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, + PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() { + public void onSuccess(PageList<Server> result) { + ListGridRecord[] records = getDataSource().buildRecords(result); + originallyAssignedIds = getIdList(records); + setAssigned(records); + new Timer() { + @Override + public void run() { + modalWindow.addItem(layout); + modalWindow.show(); + selector.reset(); + } + }.schedule(2000); + + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + } + }); + }
@Override @@ -127,16 +134,16 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r protected String getItemIcon() { return ITEM_ICON; } - - public static void show(Integer affinityGroupId) { + + public static void show(Integer affinityGroupId, final TableSection parrent) { modalWindow = new Window(); modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": " + MSG.view_adminTopology_affinityGroups_createNew()); modalWindow.setOverflow(Overflow.VISIBLE); - modalWindow.setMinWidth(800); - modalWindow.setMinHeight(400); - modalWindow.setWidth(800); - modalWindow.setHeight(400); +// modalWindow.setMinWidth(800); +// modalWindow.setMinHeight(400); + modalWindow.setWidth(800); + modalWindow.setHeight(400); // modalWindow.setAutoSize(true); modalWindow.setAutoCenter(true); modalWindow.setCanDragResize(true); @@ -149,7 +156,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r layout.setLayoutMargin(20); layout.setVPolicy(LayoutPolicy.FILL);
- AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId); + final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId); layout.addMember(selector);
VLayout spacer = new VLayout(); @@ -162,11 +169,49 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r modalWindow.destroy(); } }); - IButton save = new LocatableIButton(selector.extendLocatorId("Save"), - MSG.common_button_save()); + IButton save = new LocatableIButton(selector.extendLocatorId("Save"), MSG.common_button_save()); save.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { - SC.say("asdf.."); + List<Integer> actuallySelected = getIdList(selector.getSelectedRecords()); + List<Integer> originallySelected = selector.getOriginallyAssignedIds(); + originallySelected.removeAll(actuallySelected); + actuallySelected.removeAll(selector.getOriginallyAssignedIds()); + if (!originallySelected.isEmpty()) { + GWTServiceLookup.getCloudService().removeServersFromGroup( + originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { + + public void onSuccess(Void result) { + if (modalWindow != null) { + modalWindow.destroy(); + } + parrent.refresh(); + } + + public void onFailure(Throwable caught) { + //todo: error handling + SC.say("errX"); + } + }); + } + if (!actuallySelected.isEmpty()) { + GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(), + originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() { + + public void onSuccess(Void result) { + if (modalWindow != null) { + modalWindow.destroy(); + } + parrent.refresh(); + } + + public void onFailure(Throwable caught) { + //todo: error handling + SC.say("errX"); + } + }); + } + SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected); + } });
@@ -177,4 +222,23 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r layout.addMember(buttons); }
+ private static List<Integer> getIdList(ListGridRecord[] records) { + if (records == null) { + return null; + } + List<Integer> ids = new ArrayList<Integer>(records.length); + for (ListGridRecord record : records) { + ids.add(record.getAttributeAsInt(ServerDatasourceField.FIELD_ID.propertyName())); + } + return ids; + } + + public List<Integer> getOriginallyAssignedIds() { + return new ArrayList<Integer>(originallyAssignedIds); + } + + public Integer getAffinityGroupId() { + return affinityGroupId; + } + } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index bc133b4..0879f99 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -211,11 +211,9 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts String name = form.getValueAsString(FIELD_NAME); AffinityGroup affinityGroup = new AffinityGroup(name); GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() { - public void onSuccess(Integer result) { - Map<String, String> errors = new HashMap<String, String>(); - errors.put(FIELD_NAME, result + ""); - form.setErrors(errors, true); - // todo: hide dialog and open the detail window + public void onSuccess(Integer affinityGroupId) { + modalWindow.destroy(); + CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId); }
public void onFailure(Throwable caught) { @@ -230,8 +228,8 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
HLayout buttons = new HLayout(10); buttons.setLayoutAlign(Alignment.CENTER); - buttons.addMember(cancel); buttons.addMember(save); + buttons.addMember(cancel); layout.addMember(buttons); modalWindow.addItem(layout); modalWindow.show(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 62218c1..7baa1df 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -190,16 +190,6 @@ public class AgentDetailView extends LocatableVLayout { } currentServerItem.setValue(serverValue);
- // ButtonItem saveButton = new ButtonItem(); - // saveButton.setOverflow(Overflow.VISIBLE); - // saveButton.setTitle(MSG.common_button_save()); - // saveButton.addClickHandler(new ClickHandler() { - // public void onClick(ClickEvent event) { - // RecordList list = form.getRecordList(); - // SC.say("name is " + list.get(0).getAttribute("name")); - // } - // }); - form.setItems(nameItem, addressItem, portItem, tokenItem, lastAvailabilityItem, affinityGroupItem, currentServerItem);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index 032f284..b66c817 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -124,7 +124,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements }
if (isAffinityGroupId) - addTableAction(extendLocatorId("editGroupAgents"), "i18nEditGroupAgents", + addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { SC.say("working.."); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 6f85f9e..2a1253a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -157,6 +157,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite @Override public Server copyValues(Record from) { throw new UnsupportedOperationException("ServerDatasource.copyValues(Record from)"); +// Server server = new Server(); +// server.setId(from.getAttributeAsInt(FIELD_ID.propertyName())); +// server.setName(from.getAttributeAsString(FIELD_NAME.propertyName())); +// return server; }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 087d841..89c291d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -30,7 +30,6 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasou
import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.smartgwt.client.data.RecordList; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.SC; @@ -40,11 +39,13 @@ import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler; +import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; @@ -162,7 +163,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi return; }
- private void prepareDetailsSection(SectionStack stack, Server server) { + private void prepareDetailsSection(SectionStack stack, final Server server) { final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm")); form.setMargin(10); form.setWidth100(); @@ -172,16 +173,24 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); nameItem.setValue("<b>" + server.getName() + "</b>");
- TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title()); + final TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title()); + addressItem.setRequired(true); addressItem.setValue(server.getAddress());
- TextItem portItem = new TextItem(FIELD_PORT.propertyName(), FIELD_PORT.title()); + IntegerRangeValidator portValidator = new IntegerRangeValidator(); + portValidator.setMin(0); + portValidator.setMax(65535); + final TextItem portItem = new TextItem(FIELD_PORT.propertyName(), FIELD_PORT.title()); + portItem.setRequired(true); + portItem.setValidators(portValidator); portItem.setValue(server.getPort());
- TextItem securePortItem = new TextItem(FIELD_SECURE_PORT.propertyName(), FIELD_SECURE_PORT.title()); + final TextItem securePortItem = new TextItem(FIELD_SECURE_PORT.propertyName(), FIELD_SECURE_PORT.title()); + securePortItem.setRequired(true); + securePortItem.setValidators(portValidator); securePortItem.setValue(server.getSecurePort());
- SelectItem operationModeItem = new SelectItem(FIELD_OPERATION_MODE.propertyName(), + final SelectItem operationModeItem = new SelectItem(FIELD_OPERATION_MODE.propertyName(), MSG.view_adminTopology_serverDetail_operationMode()); operationModeItem.setValueMap("NORMAL", "MAINTENANCE"); operationModeItem.setValue(server.getOperationMode()); @@ -211,8 +220,21 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi saveButton.setTitle(MSG.common_button_save()); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { - RecordList list = form.getRecordList(); - SC.say("name is " + list.get(0).getAttribute("name")); + if (form.validate()) { + server.setAddress(addressItem.getValueAsString()); + server.setPort(Integer.parseInt(portItem.getValueAsString())); + server.setSecurePort(Integer.parseInt(securePortItem.getValueAsString())); + server.setOperationMode(OperationMode.valueOf(operationModeItem.getValueAsString())); + GWTServiceLookup.getCloudService().updateServer(server, new AsyncCallback<Void>() { + public void onSuccess(Void result) { + // todo: notify + } + + public void onFailure(Throwable caught) { + // todo: handle + } + }); + } } });
@@ -231,4 +253,5 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi public void renderView(ViewPath viewPath) { Log.debug("ServerDetailView: " + viewPath); } + } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index f986dad..df1ac8d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -264,14 +264,12 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? }
private void showUpdateMembersAction() { - addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, - Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - // AffinityGroupServersSelector selector = new AffinityGroupServersSelector(extendLocatorId("foo"), id); - - AffinityGroupServersSelector.show(id); - } - }); + addTableAction(extendLocatorId("editGroupServers"), MSG.view_groupInventoryMembers_button_updateMembership(), + new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + AffinityGroupServersSelector.show(id, ServerTableView.this); + } + }); }
private int[] getSelectedIds(ListGridRecord[] selections) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index 8f79df4..afaacb8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -57,6 +57,8 @@ public interface CloudGWTService extends RemoteService { void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException; + + void updateServer(Server server) throws RuntimeException;
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
@@ -77,6 +79,8 @@ public interface CloudGWTService extends RemoteService {
int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+ void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; + PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; @@ -86,4 +90,12 @@ public interface CloudGWTService extends RemoteService { PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException; + + void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException; + + void removeServersFromGroup(Integer[] serverIds) throws RuntimeException; + + void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException; + + void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 8a2e806..32fadde 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -258,4 +258,60 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
+ @Override + public void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException { + try { + affinityGroupManager.addServersToGroup(getSessionSubject(), affinityGroupId, serverIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void removeServersFromGroup(Integer[] serverIds) throws RuntimeException { + try { + affinityGroupManager.removeServersFromGroup(getSessionSubject(), serverIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException { + try { + affinityGroupManager.addAgentsToGroup(getSessionSubject(), affinityGroupId, agentIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException { + try { + affinityGroupManager.removeAgentsFromGroup(getSessionSubject(), agentIds); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + + @Override + public void updateServer(Server server) throws RuntimeException { + try { + cloudManager.updateServer(getSessionSubject(), server); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + + @Override + public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { + try { + affinityGroupManager.update(getSessionSubject(), affinityGroup); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + }
commit 08712a0ad088dbf430fab1424ef1dd1bf564fa56 Author: Jirka Kremser jkremser@redhat.com Date: Tue Dec 11 11:23:29 2012 +0100
Assigning servers into affinity group + new methods in GWT service for this purpose
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java index 863dbb5..9c006a5 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -46,7 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; /** * Shows details of a server. * - * @author Jiri Kremser + * @author Jirka Kremser */ public class AffinityGroupDetailView extends LocatableVLayout implements BookmarkableView {
@@ -105,7 +105,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar }
public boolean isInitialized() { - return initSectionCount >= 2; + return initSectionCount >= 3; }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java new file mode 100644 index 0000000..ebc7ae2 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java @@ -0,0 +1,180 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * 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 and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.rhq.enterprise.gui.coregui.client.admin.topology; + +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.Criteria; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.LayoutPolicy; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.IButton; +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.DynamicForm; +import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; + +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; + +/** + * @author Jirka Kremser + */ +public class AffinityGroupServersSelector extends AbstractSelector<Server, org.rhq.core.domain.criteria.Criteria> { + + private static final String ITEM_ICON = "types/Server_up_16.png"; + + private final Integer affinityGroupId; + + private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null; + + private static Window modalWindow = null; + private static VLayout layout = null; + + private AffinityGroupServersSelector() { + super(""); + affinityGroupId = -1; + } + + private AffinityGroupServersSelector(String id, Integer affinityGroupId) { + super(id, false); + this.affinityGroupId = affinityGroupId; + prepareMembers(); + } + + private void prepareMembers() { + GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() { + public void onSuccess(PageList<Server> result) { + ListGridRecord[] records = getDataSource().buildRecords(result); + setAssigned(records); +// AffinityGroupServersSelector.super.onInit(); + new Timer(){ + @Override + public void run() { + modalWindow.addItem(layout); + modalWindow.show(); + } + }.schedule(2000); + + + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + } + }); + } + + @Override + protected RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> getDataSource() { + if (datasource == null) { + datasource = new ServerDatasource(affinityGroupId, false); + } + return datasource; + } + + @Override + protected DynamicForm getAvailableFilterForm() { + return null; // No Filters Currently + } + + @Override + protected int getMaxAvailableRecords() { + return 500; + } + + @Override + protected Criteria getLatestCriteria(DynamicForm availableFilterForm) { + return null; // No Filters Currently + } + + @Override + protected String getItemTitle() { + return MSG.view_adminTopology_affinityGroups(); + } + + @Override + protected String getItemIcon() { + return ITEM_ICON; + } + + public static void show(Integer affinityGroupId) { + modalWindow = new Window(); + modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": " + + MSG.view_adminTopology_affinityGroups_createNew()); + modalWindow.setOverflow(Overflow.VISIBLE); + modalWindow.setMinWidth(800); + modalWindow.setMinHeight(400); + modalWindow.setWidth(800); + modalWindow.setHeight(400); +// modalWindow.setAutoSize(true); + modalWindow.setAutoCenter(true); + modalWindow.setCanDragResize(true); + modalWindow.setCanDragReposition(true); + + layout = new VLayout(); + layout.setWidth100(); + layout.setHeight100(); + layout.setPadding(15); + layout.setLayoutMargin(20); + layout.setVPolicy(LayoutPolicy.FILL); + + AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId); + layout.addMember(selector); + + VLayout spacer = new VLayout(); + spacer.setHeight(10); + layout.addMember(spacer); + + IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel()); + cancel.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + modalWindow.destroy(); + } + }); + IButton save = new LocatableIButton(selector.extendLocatorId("Save"), + MSG.common_button_save()); + save.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + SC.say("asdf.."); + } + }); + + HLayout buttons = new HLayout(10); + buttons.setLayoutAlign(Alignment.CENTER); + buttons.addMember(cancel); + buttons.addMember(save); + layout.addMember(buttons); + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index 28fc8b1..bc133b4 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -58,7 +58,7 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/** - * @author Jiri Kremser + * @author Jirka Kremser * */ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 87e01a7..62218c1 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -49,7 +49,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; /** * Shows details of a server. * - * @author Jiri Kremser + * @author Jirka Kremser */ public class AgentDetailView extends LocatableVLayout {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index 6363511..032f284 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -45,7 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** - * @author Jiri Kremser + * @author Jirka Kremser */ public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index 4ca0c64..edce33a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -58,7 +58,7 @@ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<Fai public FailoverListItemDatasource(int agentId) { super(); this.agentId = agentId; - this.serverDatasource = new ServerDatasource(null); + this.serverDatasource = new ServerDatasource(null, false); List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java index b555f2d..f09a707 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java @@ -56,7 +56,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; /** * Shows details of a partition event. * - * @author Jiri Kremser + * @author Jirka Kremser */ public class PartitionEventDetailView extends LocatableVLayout implements BookmarkableView {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index 41d1b8a..b25a4d3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -52,7 +52,7 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** - * @author Jiri Kremser + * @author Jirka Kremser * */ public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 2413d41..6f85f9e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -56,10 +56,13 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; public class ServerDatasource extends AbstractServerNodeDatasource<Server, Criteria> {
private final Integer affinityGroupId; + + private final boolean fetchMembers;
- public ServerDatasource(Integer affinityGroupId) { + public ServerDatasource(Integer affinityGroupId, boolean fetchMembers) { super(); this.affinityGroupId = affinityGroupId; + this.fetchMembers = fetchMembers; List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } @@ -105,21 +108,25 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite return; } final PageControl pc = getPageControl(request); - GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc, - new AsyncCallback<PageList<Server>>() { - public void onSuccess(PageList<Server> result) { - response.setData(buildRecords(result)); - response.setTotalRows(result.size()); - processResponse(request.getRequestId(), response); - } - - @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - response.setStatus(DSResponse.STATUS_FAILURE); - processResponse(request.getRequestId(), response); - } - }); + AsyncCallback<PageList<Server>> callback = new AsyncCallback<PageList<Server>>() { + public void onSuccess(PageList<Server> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }; + if(fetchMembers) { + GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc, callback); + } else { + GWTServiceLookup.getCloudService().getServerNonMembersByAffinityGroupId(affinityGroupId, pc, callback); + } }
/** diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index efeb9b7..087d841 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -59,7 +59,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; /** * Shows details of a server. * - * @author Jiri Kremser + * @author Jirka Kremser */ public class ServerDetailView extends LocatableVLayout implements BookmarkableView {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index da44c9c..f986dad 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -53,7 +53,7 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** - * @author Jiri Kremser + * @author Jirka Kremser * */ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, Criteria>> @@ -69,14 +69,17 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
private final boolean isAffinityGroupId;
+ private final Integer id; + public ServerTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) { super(locatorId, tableTitle); this.showActions = id == null && !isAffinityGroupId; this.isAffinityGroupId = isAffinityGroupId; + this.id = id; setHeight100(); setWidth100(); if (isAffinityGroupId) { - setDataSource(new ServerDatasource(id)); + setDataSource(new ServerDatasource(id, true)); } else { setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(id)); } @@ -97,7 +100,7 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); showCommonActions(); } else if (isAffinityGroupId) { - // displayed from AffinityGroupDetailView + // displayed from AffinityGroupDetailView showUpdateMembersAction(); } else { // sorting by order field (displayed from AgentDetailView) @@ -259,14 +262,16 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? } }); } - + private void showUpdateMembersAction() { - addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ANY, - Permission.MANAGE_SETTINGS) { - public void executeAction(final ListGridRecord[] selections, Object actionValue) { - SC.say("fooparek"); - } - }); + addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, + Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + // AffinityGroupServersSelector selector = new AffinityGroupServersSelector(extendLocatorId("foo"), id); + + AffinityGroupServersSelector.show(id); + } + }); }
private int[] getSelectedIds(ListGridRecord[] selections) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index 5b9c314..af52e7a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -45,7 +45,7 @@ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource
public ServerWithAgentCountDatasource() { super(); - serverDatasource = new ServerDatasource(null); + serverDatasource = new ServerDatasource(null, false); List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java index 0d98e36..67fa2a7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java @@ -295,6 +295,8 @@ public abstract class AbstractSelector<T, C extends org.rhq.core.domain.criteria availableSection.setItems(this.availableGrid); availableSectionStack.addSection(availableSection);
+ this.datasource = getDataSource(); + this.datasource.setDataPageSize(getMaxAvailableRecords()); // Load data. if (this.availableFilterForm != null) { // this grabs any initial criteria prior to the first data fetch @@ -319,8 +321,6 @@ public abstract class AbstractSelector<T, C extends org.rhq.core.domain.criteria } }); } - this.datasource = getDataSource(); - this.datasource.setDataPageSize(getMaxAvailableRecords()); populateAvailableGrid((null == latestCriteria) ? new Criteria() : latestCriteria);
// Add event handlers.
commit 23cf57cba97af917f978aa86a64ec5169e565717 Author: Jirka Kremser jkremser@redhat.com Date: Thu Dec 6 16:15:14 2012 +0100
Affinity Group detail view added; refactor of data sources for entities derived from the Server class (various composites)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java new file mode 100644 index 0000000..528ab8e --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java @@ -0,0 +1,33 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import java.util.List; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.core.domain.criteria.BaseCriteria; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; + +/** + * @author Jirka Kremser + */ +public abstract class AbstractServerNodeDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> { + protected abstract List<ListGridField> getListGridFields(); +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java new file mode 100644 index 0000000..863dbb5 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java @@ -0,0 +1,205 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AffinityGroupWithCountsDatasource.Fields.FIELD_NAME; + +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.RecordList; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.types.VisibilityMode; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.form.fields.ButtonItem; +import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.form.fields.events.ClickEvent; +import com.smartgwt.client.widgets.form.fields.events.ClickHandler; +import com.smartgwt.client.widgets.layout.SectionStack; +import com.smartgwt.client.widgets.layout.SectionStackSection; + +import org.rhq.core.domain.cloud.AffinityGroup; +import org.rhq.enterprise.gui.coregui.client.BookmarkableView; +import org.rhq.enterprise.gui.coregui.client.ViewPath; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.Log; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; + +/** + * Shows details of a server. + * + * @author Jiri Kremser + */ +public class AffinityGroupDetailView extends LocatableVLayout implements BookmarkableView { + + // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); + private final int affinityGroupId; + + private final LocatableSectionStack sectionStack; + private SectionStackSection detailsSection = null; + private SectionStackSection agentSection = null; + private SectionStackSection serverSection = null; + + private volatile int initSectionCount = 0; + + public AffinityGroupDetailView(String locatorId, int affinityGroupId) { + super(locatorId); + this.affinityGroupId = affinityGroupId; + setHeight100(); + setWidth100(); + setOverflow(Overflow.AUTO); + + sectionStack = new LocatableSectionStack(extendLocatorId("stack")); + sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE); + sectionStack.setWidth100(); + sectionStack.setHeight100(); + sectionStack.setMargin(5); + sectionStack.setOverflow(Overflow.VISIBLE); + } + + @Override + protected void onInit() { + super.onInit(); + GWTServiceLookup.getCloudService().getAffinityGroupById(this.affinityGroupId, + new AsyncCallback<AffinityGroup>() { + public void onSuccess(final AffinityGroup affinityGroup) { + prepareDetailsSection(sectionStack, affinityGroup); + + // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), + // new AsyncCallback<List<Agent>>() { + // public void onSuccess(List<Agent> agents) { + // prepareAgentSection(sectionStack, server, agents); + // }; + // + // public void onFailure(Throwable caught) { + // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + // } + // }); + } + + public void onFailure(Throwable caught) { + SC.say("er1:" + caught); + //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + } + }); + prepareAgentSection(sectionStack); + prepareServerSection(sectionStack); + } + + public boolean isInitialized() { + return initSectionCount >= 2; + } + + @Override + protected void onDraw() { + super.onDraw(); + + // wait until we have all of the sections before we show them. We don't use InitializableView because, + // it seems they are not supported (in the applicable renderView()) at this level. + new Timer() { + final long startTime = System.currentTimeMillis(); + + public void run() { + if (isInitialized()) { + if (null != detailsSection) { + sectionStack.addSection(detailsSection); + } + if (null != agentSection) { + sectionStack.addSection(agentSection); + } + if (null != serverSection) { + sectionStack.addSection(serverSection); + } + + addMember(sectionStack); + markForRedraw(); + + } else { + // don't wait forever, give up after 20s and show what we have + long elapsedMillis = System.currentTimeMillis() - startTime; + if (elapsedMillis > 20000) { + initSectionCount = 3; + } + schedule(100); // Reschedule the timer. + } + } + }.run(); // fire the timer immediately + } + + private void prepareAgentSection(SectionStack stack) { + SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_agetnMembers()); + section.setExpanded(true); + AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, + affinityGroupId, true); + section.setItems(agentsTable); + + agentSection = section; + initSectionCount++; + return; + } + + private void prepareServerSection(SectionStack stack) { + SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_serverMembers()); + section.setExpanded(true); + ServerTableView serverTable = new ServerTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, + affinityGroupId, true); + section.setItems(serverTable); + + serverSection = section; + initSectionCount++; + return; + } + + private void prepareDetailsSection(SectionStack stack, AffinityGroup affinityGroup) { + final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm")); + form.setMargin(10); + form.setWidth100(); + form.setWrapItemTitles(false); + form.setNumCols(2); + + TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); + nameItem.setValue(affinityGroup.getName()); + + ButtonItem saveButton = new ButtonItem(); + saveButton.setOverflow(Overflow.VISIBLE); + saveButton.setTitle(MSG.common_button_save()); + saveButton.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + RecordList list = form.getRecordList(); + SC.say("name is " + list.get(0).getAttribute("name")); + } + }); + + form.setItems(nameItem, saveButton); + + SectionStackSection section = new SectionStackSection(MSG.common_title_details()); + section.setExpanded(true); + section.setItems(form); + + detailsSection = section; + initSectionCount++; + } + + @Override + public void renderView(ViewPath viewPath) { + Log.debug("AffinityGroupDetailView: " + viewPath); + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java index d14fe57..28fc8b1 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -83,30 +83,11 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); showActions(); super.configureTable(); - - // for (ListGridField field : fields) { - // // adding the cell formatter for name field (clickable link) - // if (field.getName() == FIELD_NAME) { - // field.setCellFormatter(new CellFormatter() { - // @Override - // public String format(Object value, ListGridRecord record, int rowNum, int colNum) { - // if (value == null) { - // return ""; - // } - // String detailsUrl = "#" + VIEW_PATH + "/" + getId(record); - // String formattedValue = StringUtility.escapeHtml(value.toString()); - // return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); - // - // } - // }); - // } - // // TODO: adding the cell formatter for affinity group (clickable link) - // } }
@Override public Canvas getDetailsView(Integer id) { - return new ServerDetailView(extendLocatorId("detailsView"), id); + return new AffinityGroupDetailView(extendLocatorId("detailsView"), id); }
private void showActions() { @@ -252,10 +233,8 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts buttons.addMember(cancel); buttons.addMember(save); layout.addMember(buttons); - modalWindow.addItem(layout); modalWindow.show(); - }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java index aa05e06..e08a88e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java @@ -51,7 +51,7 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
- FIELD_AGENT_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_agentCount()), + FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_agentCount()),
FIELD_SERVER_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_serverCount());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 9c32758..87e01a7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -36,6 +36,7 @@ import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
+import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.core.domain.resource.Agent; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; @@ -166,10 +167,17 @@ public class AgentDetailView extends LocatableVLayout { Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_LONG); lastAvailabilityItem.setValue(lastReport);
- // TODO: make clickable link + // make clickable link for affinity group StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(), FIELD_AFFINITY_GROUP.title()); - affinityGroupItem.setValue(agent.getAffinityGroup() == null ? "" : agent.getAffinityGroup().getName()); + String affinityGroupItemText = ""; + AffinityGroup ag = agent.getAffinityGroup(); + if (ag != null && ag.getName() != null && !ag.getName().isEmpty()) { + String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/" + ag.getId(); + String formattedValue = StringUtility.escapeHtml(ag.getName()); + affinityGroupItemText = SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + } + affinityGroupItem.setValue(affinityGroupItemText);
StaticTextItem currentServerItem = new StaticTextItem(FIELD_SERVER.propertyName(), FIELD_SERVER.title()); String serverValue = null; @@ -182,7 +190,6 @@ public class AgentDetailView extends LocatableVLayout { } currentServerItem.setValue(serverValue);
- // ButtonItem saveButton = new ButtonItem(); // saveButton.setOverflow(Overflow.VISIBLE); // saveButton.setTitle(MSG.common_button_save()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java index 96bce3c..8a9da96 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java @@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME; @@ -54,11 +55,13 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; */ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
- private final Integer serverId; + private final Integer id; + private final boolean isAffinityGroupId;
- public AgentNodeDatasource(Integer serverId) { + public AgentNodeDatasource(Integer id, boolean isAffinityGroupId) { super(); - this.serverId = serverId; + this.id = id; + this.isAffinityGroupId = isAffinityGroupId; List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } @@ -82,17 +85,22 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { fields.add(FIELD_NAME.getListGridField("*")); fields.add(FIELD_SERVER.getListGridField("120")); fields.add(FIELD_ADDRESS.getListGridField("110")); - + ListGridField serverIdField = FIELD_SERVER_ID.getListGridField(); serverIdField.setHidden(true); fields.add(serverIdField); - + fields.add(FIELD_PORT.getListGridField("90")); ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120"); TimestampCellFormatter.prepareDateField(lastAvailabilityReportField); fields.add(lastAvailabilityReportField); - - fields.add(FIELD_AFFINITY_GROUP.getListGridField("100")); + + if (!isAffinityGroupId) { + fields.add(FIELD_AFFINITY_GROUP.getListGridField("100")); + ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField(); + affinityGroupIdField.setHidden(true); + fields.add(affinityGroupIdField); + }
return fields; } @@ -101,7 +109,7 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { final PageControl pc = getPageControl(request);
- GWTServiceLookup.getAgentService().getAgentsByServer(serverId, pc, new AsyncCallback<PageList<Agent>>() { + AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() { public void onSuccess(PageList<Agent> result) { response.setData(buildRecords(result)); response.setTotalRows(result.size()); @@ -114,7 +122,14 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { response.setStatus(DSResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } - }); + }; + + if (isAffinityGroupId) { + GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback); + } else { + // if id == null all agent are returned + GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback); + } }
/** @@ -159,6 +174,9 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport()); record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from .getAffinityGroup().getName()); + record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from + .getAffinityGroup().getId()); + return record; }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java index 5873ab3..dc82130 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java @@ -44,7 +44,9 @@ public enum AgentNodeDatasourceField {
FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()); + FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), + + FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId");
/** * Corresponds to a property name of Server (e.g. operationMode). diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index fe06e65..6363511 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -18,20 +18,26 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
import java.util.List;
import com.smartgwt.client.types.SortDirection; +import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
+import org.rhq.core.domain.authz.Permission; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; +import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction; +import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; @@ -45,15 +51,22 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)", IconEnum.AGENT); - + public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- public AgentTableView(String locatorId, String tableTitle, Integer serverId) { + private final boolean isAffinityGroupId; + + public AgentTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) { super(locatorId, tableTitle); + this.isAffinityGroupId = isAffinityGroupId; setHeight100(); setWidth100(); - setDataSource(new AgentNodeDatasource(serverId)); + setDataSource(new AgentNodeDatasource(id, isAffinityGroupId)); + } + + public AgentTableView(String locatorId, String tableTitle, Integer id) { + this(locatorId, tableTitle, id, false); }
@Override @@ -63,7 +76,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); - + for (ListGridField field : fields) { // adding the cell formatter for name field (clickable link) if (field.getName() == FIELD_NAME) { @@ -80,6 +93,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements } }); } else if (field.getName() == FIELD_SERVER.propertyName()) { + // adding the cell formatter for server field (clickable link) field.setCellFormatter(new CellFormatter() { @Override public String format(Object value, ListGridRecord record, int rowNum, int colNum) { @@ -90,15 +104,33 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements + record.getAttributeAsString(FIELD_SERVER_ID.propertyName()); String formattedValue = StringUtility.escapeHtml(value.toString()); return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); - + } + }); + } else if (field.getName() == FIELD_AFFINITY_GROUP.propertyName()) { + // adding the cell formatter for affinity group field (clickable link) + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null || value.toString().isEmpty()) { + return ""; + } + String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/" + + record.getAttributeAsString(FIELD_AFFINITY_GROUP_ID.propertyName()); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); } }); } - // TODO: adding the cell formatter for affinity group (clickable link) - }
- + if (isAffinityGroupId) + addTableAction(extendLocatorId("editGroupAgents"), "i18nEditGroupAgents", + new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + SC.say("working.."); + // todo: open editor for agent members + } + }); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index fc5f3a5..4ca0c64 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -18,15 +18,16 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_MTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_OPERATION_MODE; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_SECURE_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_OPERATION_MODE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_SECURE_PORT;
import java.util.ArrayList; import java.util.List; @@ -36,14 +37,12 @@ import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.Record; -import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.criteria.Criteria; import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -51,25 +50,22 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; * @author Jirka Kremser * */ -public class FailoverListItemDatasource extends ServerDatasource<FailoverListDetails, Criteria> { - +public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> { + private final int agentId; + private final ServerDatasource serverDatasource;
public FailoverListItemDatasource(int agentId) { super(); this.agentId = agentId; + this.serverDatasource = new ServerDatasource(null); List<DataSourceField> fields = addDataSourceFields(); addFields(fields); }
@Override protected List<DataSourceField> addDataSourceFields() { - List<DataSourceField> fields = super.addDataSourceFields(); - DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); - idField.setPrimaryKey(true); - idField.setHidden(true); - fields.add(idField); - return fields; + return serverDatasource.addDataSourceFields(); }
@Override @@ -91,6 +87,9 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet fields.add(lastUpdateTimeField);
fields.add(FIELD_AFFINITY_GROUP.getListGridField("80")); + ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField(); + affinityGroupIdField.setHidden(true); + fields.add(affinityGroupIdField);
return fields; } @@ -99,45 +98,26 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc, new AsyncCallback<List<FailoverListDetails>>() { - public void onSuccess(List<FailoverListDetails> result) { - response.setData(buildRecords(result)); - response.setTotalRows(result.size()); - processResponse(request.getRequestId(), response); - } - - @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - response.setStatus(DSResponse.STATUS_FAILURE); - processResponse(request.getRequestId(), response); - } - }); + // if agentId == null all FailoverListDetails are returned + GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc, + new AsyncCallback<List<FailoverListDetails>>() { + public void onSuccess(List<FailoverListDetails> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); }
- /** - * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, - * pagination, but *not* filter fields. - * - * @param request the request to turn into a page control - * @return the page control for passing to criteria and other queries - */ protected PageControl getPageControl(DSRequest request) { - // Initialize paging. - PageControl pageControl = new PageControl(0, getDataPageSize()); - - // Initialize sorting. - String sortBy = request.getAttribute("sortBy"); - if (sortBy != null) { - String[] sorts = sortBy.split(","); - for (String sort : sorts) { - PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; - String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; - pageControl.addDefaultOrderingField(columnName, ordering); - } - } - - return pageControl; + return serverDatasource.getPageControl(request); }
@Override @@ -148,16 +128,11 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet @Override public ListGridRecord copyValues(FailoverListDetails from) { ListGridRecord record = new ListGridRecord(); - record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId()); + if (from == null || from.getServer() == null) { + return record; + } + record = serverDatasource.copyValues(from.getServer()); record.setAttribute(FIELD_ORDINAL.propertyName(), from.getOrdinal()); - record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName()); - record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode()); - record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress()); - record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort()); - record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort()); - record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime()); - record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? "" - : from.getServer().getAffinityGroup().getName()); return record; }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java deleted file mode 100644 index 4c380fd..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.admin.topology; - -import com.smartgwt.client.widgets.grid.ListGridField; - -import org.rhq.enterprise.gui.coregui.client.CoreGUI; - -/** - * @author Jirka Kremser - * - */ -public enum FailoverListItemDatasourceField { - - FIELD_ID("id", CoreGUI.getMessages().common_title_id()), - - FIELD_ORDINAL("ordinal", "poradi"), - - FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), - - FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()), - - FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()), - - FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()), - - FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), - - FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()), - - FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), - - FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); - - /** - * Corresponds to a property name of Server (e.g. operationMode). - */ - private String propertyName; - - /** - * The table header for the field or property (e.g. Mode). - */ - private String title; - - private FailoverListItemDatasourceField(String propertyName, String title) { - this.propertyName = propertyName; - this.title = title; - } - - public String propertyName() { - return propertyName; - } - - public String title() { - return title; - } - - public ListGridField getListGridField() { - return new ListGridField(propertyName, title); - } - - public ListGridField getListGridField(String width) { - ListGridField field = new ListGridField(propertyName, title); - field.setWidth(width); - return field; - } -} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java index 619821d..2413d41 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -18,16 +18,160 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AGENT_COUNT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_OPERATION_MODE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_SECURE_PORT; + +import java.util.ArrayList; import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.DSRequest; +import com.smartgwt.client.data.DSResponse; +import com.smartgwt.client.data.DataSourceField; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord;
-import org.rhq.core.domain.criteria.BaseCriteria; -import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; +import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.criteria.Criteria; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/** * @author Jirka Kremser + * */ -public abstract class ServerDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> { - protected abstract List<ListGridField> getListGridFields(); +public class ServerDatasource extends AbstractServerNodeDatasource<Server, Criteria> { + + private final Integer affinityGroupId; + + public ServerDatasource(Integer affinityGroupId) { + super(); + this.affinityGroupId = affinityGroupId; + List<DataSourceField> fields = addDataSourceFields(); + addFields(fields); + } + + @Override + protected List<DataSourceField> addDataSourceFields() { + List<DataSourceField> fields = super.addDataSourceFields(); + DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); + idField.setPrimaryKey(true); + idField.setHidden(true); + fields.add(idField); + return fields; + } + + public List<ListGridField> getListGridFields() { + List<ListGridField> fields = new ArrayList<ListGridField>(); + + ListGridField idField = FIELD_ID.getListGridField(); + idField.setHidden(true); + fields.add(idField); + + fields.add(FIELD_NAME.getListGridField("*")); + fields.add(FIELD_OPERATION_MODE.getListGridField("90")); + fields.add(FIELD_ADDRESS.getListGridField("110")); + fields.add(FIELD_PORT.getListGridField("90")); + fields.add(FIELD_SECURE_PORT.getListGridField("75")); + + ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("120"); + TimestampCellFormatter.prepareDateField(lastUpdateTimeField); + fields.add(lastUpdateTimeField); + + ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField(); + affinityGroupIdField.setHidden(true); + fields.add(affinityGroupIdField); + fields.add(FIELD_AGENT_COUNT.getListGridField("75")); + + return fields; + } + + @Override + protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { + if (affinityGroupId == null) { + return; + } + final PageControl pc = getPageControl(request); + GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc, + new AsyncCallback<PageList<Server>>() { + public void onSuccess(PageList<Server> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); + } + + /** + * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, + * pagination, but *not* filter fields. + * + * @param request the request to turn into a page control + * @return the page control for passing to criteria and other queries + */ + protected PageControl getPageControl(DSRequest request) { + // Initialize paging. + PageControl pageControl = new PageControl(0, getDataPageSize()); + + // Initialize sorting. + String sortBy = request.getAttribute("sortBy"); + if (sortBy != null) { + String[] sorts = sortBy.split(","); + for (String sort : sorts) { + PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; + String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; + pageControl.addDefaultOrderingField(columnName, ordering); + } + } + + return pageControl; + } + + @Override + public Server copyValues(Record from) { + throw new UnsupportedOperationException("ServerDatasource.copyValues(Record from)"); + } + + @Override + public ListGridRecord copyValues(Server from) { + ListGridRecord record = new ListGridRecord(); + record.setAttribute(FIELD_ID.propertyName(), from.getId()); + record.setAttribute(FIELD_NAME.propertyName(), from.getName()); + record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getOperationMode()); + record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress()); + record.setAttribute(FIELD_PORT.propertyName(), from.getPort()); + record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getSecurePort()); + record.setAttribute(FIELD_MTIME.propertyName(), from.getMtime()); + record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from + .getAffinityGroup().getName()); + record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from + .getAffinityGroup().getId()); + return record; + } + + @Override + protected Criteria getFetchCriteria(DSRequest request) { + // we don't use criteria for this datasource, just return null + return null; + } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java new file mode 100644 index 0000000..18754c5 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java @@ -0,0 +1,87 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.enterprise.gui.coregui.client.CoreGUI; + +/** + * @author Jirka Kremser + * + */ +public enum ServerDatasourceField { + + FIELD_ID("id", CoreGUI.getMessages().common_title_id()), + + FIELD_ORDINAL("ordinal", "poradi"), + + FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), + + FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()), + + FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()), + + FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()), + + FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), + + FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()), + + FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()), + + FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), + + FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId"), + + FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); + + /** + * Corresponds to a property name of Server (e.g. operationMode). + */ + private String propertyName; + + /** + * The table header for the field or property (e.g. Mode). + */ + private String title; + + private ServerDatasourceField(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(String width) { + ListGridField field = new ListGridField(propertyName, title); + field.setWidth(width); + return field; + } +} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 5f18d19..efeb9b7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -19,14 +19,14 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_CTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_CTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_OPERATION_MODE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_SECURE_PORT;
import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -43,15 +43,18 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
+import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.core.domain.cloud.Server; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * Shows details of a server. @@ -91,16 +94,16 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi public void onSuccess(final Server server) { prepareDetailsSection(sectionStack, server); prepareAgentSection(sectionStack, server); -// GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), -// new AsyncCallback<List<Agent>>() { -// public void onSuccess(List<Agent> agents) { -// prepareAgentSection(sectionStack, server, agents); -// }; -// -// public void onFailure(Throwable caught) { -// //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); -// } -// }); + // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), + // new AsyncCallback<List<Agent>>() { + // public void onSuccess(List<Agent> agents) { + // prepareAgentSection(sectionStack, server, agents); + // }; + // + // public void onFailure(Throwable caught) { + // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + // } + // }); }
public void onFailure(Throwable caught) { @@ -150,7 +153,8 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi private void prepareAgentSection(SectionStack stack, Server server) { SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents()); section.setExpanded(true); - AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, serverId); + AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, + serverId); section.setItems(agentsTable);
agentSection = section; @@ -182,10 +186,17 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi operationModeItem.setValueMap("NORMAL", "MAINTENANCE"); operationModeItem.setValue(server.getOperationMode());
- // TODO: make clickable link + // make clickable link for affinity group StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(), FIELD_AFFINITY_GROUP.title()); - affinityGroupItem.setValue(server.getAffinityGroup() == null ? "" : server.getAffinityGroup().getName()); + String affinityGroupItemText = ""; + AffinityGroup ag = server.getAffinityGroup(); + if (ag != null && ag.getName() != null && !ag.getName().isEmpty()) { + String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/" + ag.getId(); + String formattedValue = StringUtility.escapeHtml(ag.getName()); + affinityGroupItemText = SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + } + affinityGroupItem.setValue(affinityGroupItemText);
StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title()); installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()), diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 08a1c8f..da44c9c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -18,7 +18,9 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
import java.io.Serializable; import java.util.ArrayList; @@ -54,7 +56,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; * @author Jiri Kremser * */ -public class ServerTableView extends TableSection<ServerDatasource<? extends Serializable, Criteria>> implements HasViewName { +public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, Criteria>> + implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)", IconEnum.SERVERS); @@ -64,12 +67,24 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
private final boolean showActions;
- public ServerTableView(String locatorId, String tableTitle, Integer agentId) { + private final boolean isAffinityGroupId; + + public ServerTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) { super(locatorId, tableTitle); - this.showActions = agentId == null; + this.showActions = id == null && !isAffinityGroupId; + this.isAffinityGroupId = isAffinityGroupId; setHeight100(); setWidth100(); - setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(agentId)); + if (isAffinityGroupId) { + setDataSource(new ServerDatasource(id)); + } else { + setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(id)); + } + + } + + public ServerTableView(String locatorId, String tableTitle, Integer id) { + this(locatorId, tableTitle, id, false); }
@Override @@ -80,9 +95,12 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); if (showActions) { listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); - showActions(); + showCommonActions(); + } else if (isAffinityGroupId) { + // displayed from AffinityGroupDetailView + showUpdateMembersAction(); } else { - // sorting by order field + // sorting by order field (displayed from AgentDetailView) listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING); } for (ListGridField field : fields) { @@ -100,8 +118,21 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
} }); + } else if (field.getName() == FIELD_AFFINITY_GROUP.propertyName()) { + // adding the cell formatter for affinity group field (clickable link) + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null || value.toString().isEmpty()) { + return ""; + } + String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/" + + record.getAttributeAsString(FIELD_AFFINITY_GROUP_ID.propertyName()); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + } + }); } - // TODO: adding the cell formatter for affinity group (clickable link) } }
@@ -110,7 +141,7 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser return new ServerDetailView(extendLocatorId("detailsView"), id); }
- private void showActions() { + private void showCommonActions() { addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { @@ -228,6 +259,15 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser } }); } + + private void showUpdateMembersAction() { + addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ANY, + Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + SC.say("fooparek"); + } + }); + }
private int[] getSelectedIds(ListGridRecord[] selections) { if (selections == null) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index a9f9613..5b9c314 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -18,17 +18,8 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AGENT_COUNT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AGENT_COUNT;
-import java.util.ArrayList; import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; @@ -36,60 +27,36 @@ import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.Record; -import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.Criteria; import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageOrdering; -import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/** * @author Jirka Kremser * */ -public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithAgentCountComposite, Criteria> { +public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> { + + private final ServerDatasource serverDatasource;
public ServerWithAgentCountDatasource() { super(); + serverDatasource = new ServerDatasource(null); List<DataSourceField> fields = addDataSourceFields(); addFields(fields); }
@Override protected List<DataSourceField> addDataSourceFields() { - List<DataSourceField> fields = super.addDataSourceFields(); - DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); - idField.setPrimaryKey(true); - idField.setHidden(true); - fields.add(idField); - return fields; + return serverDatasource.addDataSourceFields(); }
public List<ListGridField> getListGridFields() { - List<ListGridField> fields = new ArrayList<ListGridField>(); - - ListGridField idField = FIELD_ID.getListGridField(); - idField.setHidden(true); - fields.add(idField); - - fields.add(FIELD_NAME.getListGridField("*")); - fields.add(FIELD_OPERATION_MODE.getListGridField("90")); - fields.add(FIELD_ADDRESS.getListGridField("110")); - fields.add(FIELD_PORT.getListGridField("90")); - fields.add(FIELD_SECURE_PORT.getListGridField("75")); - - ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("120"); - TimestampCellFormatter.prepareDateField(lastUpdateTimeField); - fields.add(lastUpdateTimeField); - - fields.add(FIELD_AFFINITY_GROUP.getListGridField("80")); - fields.add(FIELD_AGENT_COUNT.getListGridField("75")); - - return fields; + return serverDatasource.getListGridFields(); }
@Override @@ -120,21 +87,7 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA * @return the page control for passing to criteria and other queries */ protected PageControl getPageControl(DSRequest request) { - // Initialize paging. - PageControl pageControl = new PageControl(0, getDataPageSize()); - - // Initialize sorting. - String sortBy = request.getAttribute("sortBy"); - if (sortBy != null) { - String[] sorts = sortBy.split(","); - for (String sort : sorts) { - PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; - String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; - pageControl.addDefaultOrderingField(columnName, ordering); - } - } - - return pageControl; + return serverDatasource.getPageControl(request); }
@Override @@ -145,15 +98,10 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA @Override public ListGridRecord copyValues(ServerWithAgentCountComposite from) { ListGridRecord record = new ListGridRecord(); - record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId()); - record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName()); - record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode()); - record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress()); - record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort()); - record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort()); - record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime()); - record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? "" - : from.getServer().getAffinityGroup().getName()); + if (from == null || from.getServer() == null) { + return record; + } + record = serverDatasource.copyValues(from.getServer()); record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount()); return record; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java deleted file mode 100644 index f393288..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.admin.topology; - -import com.smartgwt.client.widgets.grid.ListGridField; - -import org.rhq.enterprise.gui.coregui.client.CoreGUI; - -/** - * @author Jirka Kremser - * - */ -public enum ServerWithAgentCountDatasourceField { - - FIELD_ID("id", CoreGUI.getMessages().common_title_id()), - - FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), - - FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()), - - FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()), - - FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()), - - FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), - - FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()), - - FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()), - - FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), - - FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); - - /** - * Corresponds to a property name of Server (e.g. operationMode). - */ - private String propertyName; - - /** - * The table header for the field or property (e.g. Mode). - */ - private String title; - - private ServerWithAgentCountDatasourceField(String propertyName, String title) { - this.propertyName = propertyName; - this.title = title; - } - - public String propertyName() { - return propertyName; - } - - public String title() { - return title; - } - - public ListGridField getListGridField() { - return new ListGridField(propertyName, title); - } - - public ListGridField getListGridField(String width) { - ListGridField field = new ListGridField(propertyName, title); - field.setWidth(width); - return field; - } -} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index 7f08b95..8f79df4 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -76,4 +76,14 @@ public interface CloudGWTService extends RemoteService { int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; + + PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; + + PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; + + PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; + + PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException; + + AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 44b2a44..8a2e806 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -200,4 +200,62 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
+ @Override + public PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare( + affinityGroupManager.getServerMembers(getSessionSubject(), affinityGroupId, pageControl), + "CloudGWTServiceImpl.getServerMembersByAffinityGroupId"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare( + affinityGroupManager.getServerNonMembers(getSessionSubject(), affinityGroupId, pageControl), + "CloudGWTServiceImpl.getServerNonMembersByAffinityGroupId"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare( + affinityGroupManager.getAgentMembers(getSessionSubject(), affinityGroupId, pageControl), + "CloudGWTServiceImpl.getAgentMembersByAffinityGroupId"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare( + affinityGroupManager.getAgentNonMembers(getSessionSubject(), affinityGroupId, pageControl), + "CloudGWTServiceImpl.getAgentNonMembersByAffinityGroupId"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException { + try { + return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId), + "CloudGWTServiceImpl.getAffinityGroupById"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + }
commit d53ba327f6a208601c86d0d7d233be48fba6e170 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 5 19:05:18 2012 +0100
Affinity Groups view has been added, creating and deleting the groups is working
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java index b0d557d..2936cac 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java @@ -22,15 +22,23 @@ */ package org.rhq.core.domain.cloud.composite;
+import java.io.Serializable; + import org.rhq.core.domain.cloud.AffinityGroup;
/** * @author Joseph Marques */ -public class AffinityGroupCountComposite { - private final AffinityGroup affinityGroup; - private final int agentCount; - private final int serverCount; +public class AffinityGroupCountComposite implements Serializable { + private static final long serialVersionUID = 282382551474550639L; + + private AffinityGroup affinityGroup; + private int agentCount; + private int serverCount; + + public AffinityGroupCountComposite() { + // GWT needs it + }
public AffinityGroupCountComposite(AffinityGroup affinityGroup, Number agentCount, Number serverCount) { super(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index 5c18d1f..e749f61 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -19,6 +19,7 @@ package org.rhq.enterprise.gui.coregui.client.admin;
import java.util.ArrayList; +import java.util.Arrays; import java.util.List;
import com.smartgwt.client.widgets.Canvas; @@ -34,6 +35,7 @@ import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesView; import org.rhq.enterprise.gui.coregui.client.admin.templates.AlertDefinitionTemplateTypeView; import org.rhq.enterprise.gui.coregui.client.admin.templates.DriftDefinitionTemplateTypeView; import org.rhq.enterprise.gui.coregui.client.admin.templates.MetricTemplateTypeView; +import org.rhq.enterprise.gui.coregui.client.admin.topology.AffinityGroupTableView; import org.rhq.enterprise.gui.coregui.client.admin.topology.AgentTableView; import org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventTableView; import org.rhq.enterprise.gui.coregui.client.admin.topology.ServerTableView; @@ -64,8 +66,10 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { public static final ViewName SECTION_CONTENT_VIEW_ID = new ViewName("Content", MSG.view_admin_content());
// TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available - private static final ViewName PAGE_SERVERS_VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS); - private static final ViewName PAGE_AGENTS_VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(),IconEnum.AGENT); + private static final ViewName PAGE_SERVERS_VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), + IconEnum.SERVERS); + private static final ViewName PAGE_AGENTS_VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(), + IconEnum.AGENT); private static final ViewName PAGE_AFFINITY_GROUPS_VIEW_ID = new ViewName("AffinityGroups", MSG.view_adminTopology_affinityGroups(), IconEnum.ALL_GROUPS); private static final ViewName PAGE_PARTITION_EVENTS_VIEW_ID = new ViewName("PartitionEvents", @@ -74,7 +78,8 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { // TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available private static final ViewName PAGE_CONTENT_SOURCES_VIEW_ID = new ViewName("ContentSources", MSG.view_adminContent_contentSources(), IconEnum.CONTENT); - private static final ViewName PAGE_REPOS_VIEW_ID = new ViewName("Repositories", MSG.common_title_repositories(), IconEnum.CONTENT); + private static final ViewName PAGE_REPOS_VIEW_ID = new ViewName("Repositories", MSG.common_title_repositories(), + IconEnum.CONTENT);
public AdministrationView() { // This is a top level view, so our locator id can simply be our view id. @@ -105,7 +110,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { vLayout.setWidth100();
// TODO: Admin icon. - TitleBar titleBar = new TitleBar (this, MSG.view_admin_administration(), IconEnum.ADMIN.getIcon24x24Path()); + TitleBar titleBar = new TitleBar(this, MSG.view_admin_administration(), IconEnum.ADMIN.getIcon24x24Path()); vLayout.addMember(titleBar);
ProductInfo productInfo = CoreGUI.get().getProductInfo(); @@ -118,17 +123,17 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { }
private NavigationSection buildSecuritySection() { - NavigationItem usersItem = new NavigationItem(UsersView.VIEW_ID, new ViewFactory() { + NavigationItem usersItem = new NavigationItem(UsersView.VIEW_ID, new ViewFactory() { public Canvas createView() { - return new UsersView(extendLocatorId("Users"), - getGlobalPermissions().contains(Permission.MANAGE_SECURITY)); + return new UsersView(extendLocatorId("Users"), getGlobalPermissions().contains( + Permission.MANAGE_SECURITY)); } });
NavigationItem rolesItem = new NavigationItem(RolesView.VIEW_ID, new ViewFactory() { public Canvas createView() { - return new RolesView(extendLocatorId("Roles"), - getGlobalPermissions().contains(Permission.MANAGE_SECURITY)); + return new RolesView(extendLocatorId("Roles"), getGlobalPermissions().contains( + Permission.MANAGE_SECURITY)); } });
@@ -179,46 +184,51 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), - MSG.view_adminTopology_servers() + " (GWT)", null); + ServerTableView.VIEW_ID.getTitle(), null); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), - MSG.view_adminTopology_agents() + " (GWT)", null); + AgentTableView.VIEW_ID.getTitle(), null); + } + }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + + NavigationItem affinityGroupsItemGwt = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName()), + AffinityGroupTableView.VIEW_ID.getTitle()); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()), - MSG.view_adminTopology_partitionEvents() + " (GWT)"); + PartitionEventTableView.VIEW_ID.getTitle()); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationSection topologyRegion = null; + // Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList + List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem, agentsItem, + affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt, partitionEventsGwt)); if (isRHQ) { - topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem, - affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, partitionEventsGwt, remoteAgentInstallItem); - } else { - topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, partitionEventsGwt, agentsItem, - affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt); + navigationItems.add(remoteAgentInstallItem); } + NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, navigationItems.toArray(new NavigationItem[]{})); return topologyRegion; }
private NavigationSection buildConfigurationSection() { - NavigationItem systemSettingsItem = new NavigationItem(SystemSettingsView.VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new SystemSettingsView(extendLocatorId(SystemSettingsView.VIEW_ID.getName())); - } - }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS)); + NavigationItem systemSettingsItem = new NavigationItem(SystemSettingsView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new SystemSettingsView(extendLocatorId(SystemSettingsView.VIEW_ID.getName())); + } + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS)); systemSettingsItem.setRefreshRequired(true); // refresh so it always reloads the latest settings
NavigationItem alertTemplatesItem = new NavigationItem(AlertDefinitionTemplateTypeView.VIEW_ID, - new ViewFactory() { + new ViewFactory() { public Canvas createView() { return new AlertDefinitionTemplateTypeView( extendLocatorId(AlertDefinitionTemplateTypeView.VIEW_ID.getName())); @@ -227,7 +237,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { alertTemplatesItem.setRefreshRequired(true); // we always need a new page
NavigationItem driftTemplatesItem = new NavigationItem(DriftDefinitionTemplateTypeView.VIEW_ID, - new ViewFactory() { + new ViewFactory() { public Canvas createView() { return new DriftDefinitionTemplateTypeView( extendLocatorId(DriftDefinitionTemplateTypeView.VIEW_ID.getName())); @@ -235,55 +245,49 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { }); driftTemplatesItem.setRefreshRequired(true); // we always need a new page
- NavigationItem metricTemplatesItem = new NavigationItem(MetricTemplateTypeView.VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new MetricTemplateTypeView(extendLocatorId(MetricTemplateTypeView.VIEW_ID.getName())); - } - }); + NavigationItem metricTemplatesItem = new NavigationItem(MetricTemplateTypeView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new MetricTemplateTypeView(extendLocatorId(MetricTemplateTypeView.VIEW_ID.getName())); + } + }); metricTemplatesItem.setRefreshRequired(true); // we always need a new page
- NavigationItem downloadsItem = new NavigationItem(DownloadsView.VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new DownloadsView(extendLocatorId(DownloadsView.VIEW_ID.getName())); - } - }); + NavigationItem downloadsItem = new NavigationItem(DownloadsView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new DownloadsView(extendLocatorId(DownloadsView.VIEW_ID.getName())); + } + });
- NavigationItem agentPluginsItem = new NavigationItem(AgentPluginTableView.VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new AgentPluginTableView(extendLocatorId(AgentPluginTableView.VIEW_ID.getName())); - } - }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS)); + NavigationItem agentPluginsItem = new NavigationItem(AgentPluginTableView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new AgentPluginTableView(extendLocatorId(AgentPluginTableView.VIEW_ID.getName())); + } + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem serverPluginsItem = new NavigationItem(ServerPluginTableView.VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new ServerPluginTableView(extendLocatorId(ServerPluginTableView.VIEW_ID.getName())); - } - }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS)); + NavigationItem serverPluginsItem = new NavigationItem(ServerPluginTableView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new ServerPluginTableView(extendLocatorId(ServerPluginTableView.VIEW_ID.getName())); + } + }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
return new NavigationSection(SECTION_CONFIGURATION_VIEW_ID, systemSettingsItem, alertTemplatesItem, driftTemplatesItem, metricTemplatesItem, downloadsItem, agentPluginsItem, serverPluginsItem); }
private NavigationSection buildContentSection() { - NavigationItem contentSourcesItem = new NavigationItem(PAGE_CONTENT_SOURCES_VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_CONTENT_SOURCES_VIEW_ID.getName()), - "/rhq/content/listContentProviders-plain.xhtml"); - } - }, getGlobalPermissions().contains(Permission.MANAGE_REPOSITORIES)); + NavigationItem contentSourcesItem = new NavigationItem(PAGE_CONTENT_SOURCES_VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new FullHTMLPane(extendLocatorId(PAGE_CONTENT_SOURCES_VIEW_ID.getName()), + "/rhq/content/listContentProviders-plain.xhtml"); + } + }, getGlobalPermissions().contains(Permission.MANAGE_REPOSITORIES));
- NavigationItem reposItem = new NavigationItem(PAGE_REPOS_VIEW_ID, - new ViewFactory() { - public Canvas createView() { - return new FullHTMLPane(extendLocatorId(PAGE_REPOS_VIEW_ID.getName()), - "/rhq/content/listRepos-plain.xhtml"); - } - }); + NavigationItem reposItem = new NavigationItem(PAGE_REPOS_VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new FullHTMLPane(extendLocatorId(PAGE_REPOS_VIEW_ID.getName()), + "/rhq/content/listRepos-plain.xhtml"); + } + });
return new NavigationSection(SECTION_CONTENT_VIEW_ID, contentSourcesItem, reposItem); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java new file mode 100644 index 0000000..d14fe57 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java @@ -0,0 +1,266 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.LayoutPolicy; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.util.BooleanCallback; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.IButton; +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.DynamicForm; +import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.form.validator.LengthRangeValidator; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; + +import org.rhq.core.domain.authz.Permission; +import org.rhq.core.domain.cloud.AffinityGroup; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.IconEnum; +import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; +import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction; +import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement; +import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; +import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; +import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.message.Message; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; + +/** + * @author Jiri Kremser + * + */ +public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName { + + public static final ViewName VIEW_ID = new ViewName("AffinityGroups(GWT)", MSG.view_adminTopology_affinityGroups() + + "(GWT)", IconEnum.ALL_GROUPS); + + public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; + + public AffinityGroupTableView(String locatorId, String tableTitle) { + super(locatorId, tableTitle); + setHeight100(); + setWidth100(); + setDataSource(new AffinityGroupWithCountsDatasource()); + } + + @Override + protected void configureTable() { + List<ListGridField> fields = getDataSource().getListGridFields(); + ListGrid listGrid = getListGrid(); + listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); + showActions(); + super.configureTable(); + + // for (ListGridField field : fields) { + // // adding the cell formatter for name field (clickable link) + // if (field.getName() == FIELD_NAME) { + // field.setCellFormatter(new CellFormatter() { + // @Override + // public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + // if (value == null) { + // return ""; + // } + // String detailsUrl = "#" + VIEW_PATH + "/" + getId(record); + // String formattedValue = StringUtility.escapeHtml(value.toString()); + // return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + // + // } + // }); + // } + // // TODO: adding the cell formatter for affinity group (clickable link) + // } + } + + @Override + public Canvas getDetailsView(Integer id) { + return new ServerDetailView(extendLocatorId("detailsView"), id); + } + + private void showActions() { + addTableAction(extendLocatorId("createNew"), MSG.view_adminTopology_affinityGroups_createNew(), + new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + showCreateAffinityGroupWindow(); + } + }); + + addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), + MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, + Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + List<String> selectedNames = getSelectedNames(selections); + String message = "Really? Delete? For all I've done for you? " + selectedNames; + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + int[] selectedIds = getSelectedIds(selections); + SC.say("setting servers to maintenance mode, ids: " + selectedIds); + GWTServiceLookup.getCloudService().deleteAffinityGroups(selectedIds, + new AsyncCallback<Integer>() { + public void onSuccess(Integer count) { + // TODO: msg with count + Message msg = new Message(MSG + .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + // TODO: msg + CoreGUI.getErrorHandler().handleError( + MSG.view_admin_plugins_disabledServerPluginsFailure() + " " + + caught.getMessage(), caught); + refreshTableInfo(); + } + + }); + } else { + refreshTableInfo(); + } + } + }); + } + }); + } + + private int[] getSelectedIds(ListGridRecord[] selections) { + if (selections == null) { + return new int[0]; + } + int[] ids = new int[selections.length]; + int i = 0; + for (ListGridRecord selection : selections) { + ids[i++] = selection.getAttributeAsInt(FIELD_ID); + } + return ids; + } + + private List<String> getSelectedNames(ListGridRecord[] selections) { + if (selections == null) { + return new ArrayList<String>(0); + } + List<String> ids = new ArrayList<String>(selections.length); + for (ListGridRecord selection : selections) { + ids.add(selection.getAttributeAsString(FIELD_NAME)); + } + return ids; + } + + private void showCreateAffinityGroupWindow() { + final Window modalWindow = new Window(); + modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": " + + MSG.view_adminTopology_affinityGroups_createNew()); + modalWindow.setOverflow(Overflow.VISIBLE); + modalWindow.setMinWidth(400); + modalWindow.setMinHeight(400); + modalWindow.setAutoSize(true); + modalWindow.setAutoCenter(true); + modalWindow.setCanDragResize(true); + modalWindow.setCanDragReposition(true); + + VLayout layout = new VLayout(); + layout.setWidth100(); + layout.setHeight100(); + layout.setPadding(15); + layout.setLayoutMargin(20); + layout.setVPolicy(LayoutPolicy.FILL); + + final DynamicForm form = new DynamicForm(); + form.setMargin(10); + form.setWidth100(); + form.setWrapItemTitles(false); + form.setNumCols(2); + final TextItem name = new TextItem(FIELD_NAME, MSG.common_title_name()); + name.setRequired(true); + LengthRangeValidator nameLengthValidator = new LengthRangeValidator(); + nameLengthValidator.setMin(3); + nameLengthValidator.setMax(100); + name.setValidators(nameLengthValidator); + form.setFields(name); + layout.addMember(form); + + VLayout spacer = new VLayout(); + spacer.setHeight(10); + layout.addMember(spacer); + + IButton cancel = new LocatableIButton(this.extendLocatorId("Cancel"), MSG.common_button_cancel()); + cancel.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + modalWindow.destroy(); + } + }); + IButton save = new LocatableIButton(this.extendLocatorId("Create"), + MSG.view_adminTopology_affinityGroups_createNew()); + save.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + if (form.validate()) { + String name = form.getValueAsString(FIELD_NAME); + AffinityGroup affinityGroup = new AffinityGroup(name); + GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() { + public void onSuccess(Integer result) { + Map<String, String> errors = new HashMap<String, String>(); + errors.put(FIELD_NAME, result + ""); + form.setErrors(errors, true); + // todo: hide dialog and open the detail window + } + + public void onFailure(Throwable caught) { + Map<String, String> errors = new HashMap<String, String>(); + errors.put(FIELD_NAME, caught.getMessage()); + form.setErrors(errors, true); + } + }); + } + } + }); + + HLayout buttons = new HLayout(10); + buttons.setLayoutAlign(Alignment.CENTER); + buttons.addMember(cancel); + buttons.addMember(save); + layout.addMember(buttons); + + modalWindow.addItem(layout); + modalWindow.show(); + + } + + @Override + public ViewName getViewName() { + return VIEW_ID; + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java new file mode 100644 index 0000000..aa05e06 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java @@ -0,0 +1,187 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.DSRequest; +import com.smartgwt.client.data.DSResponse; +import com.smartgwt.client.data.DataSourceField; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.data.fields.DataSourceIntegerField; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; + +import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; +import org.rhq.core.domain.criteria.Criteria; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; + +/** + * @author Jirka Kremser + * + */ +public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGroupCountComposite, Criteria> { + + public enum Fields { + + FIELD_ID("id", CoreGUI.getMessages().common_title_id()), + + FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), + + FIELD_AGENT_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_agentCount()), + + FIELD_SERVER_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_serverCount()); + + /** + * Corresponds to a property name of Server (e.g. operationMode). + */ + private String propertyName; + + /** + * The table header for the field or property (e.g. Mode). + */ + private String title; + + private Fields(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(String width) { + ListGridField field = new ListGridField(propertyName, title); + field.setWidth(width); + return field; + } + } + + public AffinityGroupWithCountsDatasource() { + super(); + List<DataSourceField> fields = addDataSourceFields(); + addFields(fields); + } + + @Override + protected List<DataSourceField> addDataSourceFields() { + List<DataSourceField> fields = super.addDataSourceFields(); + DataSourceField idField = new DataSourceIntegerField(Fields.FIELD_ID.propertyName(), Fields.FIELD_ID.title(), + 50); + idField.setPrimaryKey(true); + idField.setHidden(true); + fields.add(idField); + return fields; + } + + public List<ListGridField> getListGridFields() { + List<ListGridField> fields = new ArrayList<ListGridField>(); + + ListGridField idField = Fields.FIELD_ID.getListGridField(); + idField.setHidden(true); + fields.add(idField); + fields.add(Fields.FIELD_NAME.getListGridField("*")); + fields.add(Fields.FIELD_AGENT_COUNT.getListGridField("200")); + fields.add(Fields.FIELD_SERVER_COUNT.getListGridField("200")); + + return fields; + } + + @Override + protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { + final PageControl pc = getPageControl(request); + + GWTServiceLookup.getCloudService().getAffinityGroupCountComposites(pc, + new AsyncCallback<PageList<AffinityGroupCountComposite>>() { + public void onSuccess(PageList<AffinityGroupCountComposite> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + public void onFailure(Throwable caught) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); + } + + /** + * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, + * pagination, but *not* filter fields. + * + * @param request the request to turn into a page control + * @return the page control for passing to criteria and other queries + */ + protected PageControl getPageControl(DSRequest request) { + // Initialize paging. + PageControl pageControl = new PageControl(0, getDataPageSize()); + + // Initialize sorting. + String sortBy = request.getAttribute("sortBy"); + if (sortBy != null) { + String[] sorts = sortBy.split(","); + for (String sort : sorts) { + PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; + String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; + pageControl.addDefaultOrderingField(columnName, ordering); + } + } + + return pageControl; + } + + @Override + public AffinityGroupCountComposite copyValues(Record from) { + throw new UnsupportedOperationException("AffinityGroupWithCountsDatasource.copyValues(Record from)"); + } + + @Override + public ListGridRecord copyValues(AffinityGroupCountComposite from) { + ListGridRecord record = new ListGridRecord(); + record.setAttribute(Fields.FIELD_ID.propertyName(), from.getAffinityGroup().getId()); + record.setAttribute(Fields.FIELD_NAME.propertyName(), from.getAffinityGroup().getName()); + record.setAttribute(Fields.FIELD_AGENT_COUNT.propertyName(), from.getAgentCount()); + record.setAttribute(Fields.FIELD_SERVER_COUNT.propertyName(), from.getServerCount()); + return record; + } + + @Override + protected Criteria getFetchCriteria(DSRequest request) { + // we don't use criteria for this datasource, just return null + return null; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index f2ef76e..fe06e65 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -41,10 +41,10 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; /** * @author Jiri Kremser */ -public class AgentTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName { +public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)", - IconEnum.SERVERS); + IconEnum.AGENT);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; @@ -53,7 +53,7 @@ public class AgentTableView extends TableSection<AffinityGroupWithCountsDatasour super(locatorId, tableTitle); setHeight100(); setWidth100(); - setDataSource(new AffinityGroupWithCountsDatasource(serverId)); + setDataSource(new AgentNodeDatasource(serverId)); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 67a8ab9..be374b6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -86,7 +86,7 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part TimestampCellFormatter.prepareDateField(executionTimeField); fields.add(executionTimeField); fields.add(FIELD_EVENT_TYPE.getListGridField("190")); - fields.add(FIELD_EVENT_DETAIL.getListGridField("220")); + fields.add(FIELD_EVENT_DETAIL.getListGridField("*")); fields.add(FIELD_SUBJECT_NAME.getListGridField("90")); fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index f42ce80..7f08b95 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -26,6 +26,7 @@ import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
+import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.PartitionEvent; import org.rhq.core.domain.cloud.PartitionEventDetails; @@ -70,5 +71,9 @@ public interface CloudGWTService extends RemoteService { PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) throws RuntimeException;
- PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException; + PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) throws RuntimeException; + + int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException; + + int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index f71160a..44b2a44 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -27,6 +27,7 @@ import java.util.List;
import org.apache.commons.lang.ArrayUtils;
+import org.rhq.core.domain.cloud.AffinityGroup; import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.PartitionEvent; import org.rhq.core.domain.cloud.PartitionEventDetails; @@ -56,7 +57,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager(); - + private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager();
@Override @@ -171,11 +172,29 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud }
@Override - public PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException { + public PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) + throws RuntimeException { try { - return SerialUtility.prepare( - affinityGroupManager.getComposites(getSessionSubject(), pageControl), - "CloudGWTServiceImpl.getComposites"); + return SerialUtility.prepare(affinityGroupManager.getComposites(getSessionSubject(), pageControl), + "CloudGWTServiceImpl.getAffinityGroupCountComposites"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException { + try { + return affinityGroupManager.delete(getSessionSubject(), ArrayUtils.toObject(affinityGroupIds)); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException { + try { + return affinityGroupManager.create(getSessionSubject(), affinityGroup); } catch (Throwable t) { throw getExceptionToThrowToClient(t); }
commit c1ec009268ff9aa4257adbee22b6eff941b06d24 Author: Jirka Kremser jkremser@redhat.com Date: Wed Dec 5 15:00:26 2012 +0100
Partition Event detail view with the list of agent-server assignments has been added
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 1c0d1de..9c32758 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -163,7 +163,7 @@ public class AgentDetailView extends LocatableVLayout { StaticTextItem lastAvailabilityItem = new StaticTextItem(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), FIELD_LAST_AVAILABILITY_REPORT.title()); String lastReport = agent.getLastAvailabilityReport() == null ? "unknown" : TimestampCellFormatter.format( - Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM); + Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_LONG); lastAvailabilityItem.setValue(lastReport);
// TODO: make clickable link diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index b93303b..f2ef76e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -41,7 +41,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; /** * @author Jiri Kremser */ -public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName { +public class AgentTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)", IconEnum.SERVERS); @@ -53,7 +53,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements super(locatorId, tableTitle); setHeight100(); setWidth100(); - setDataSource(new AgentNodeDatasource(serverId)); + setDataSource(new AffinityGroupWithCountsDatasource(serverId)); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 357abd6..67a8ab9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -85,8 +85,8 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part ListGridField executionTimeField = FIELD_CTIME.getListGridField("120"); TimestampCellFormatter.prepareDateField(executionTimeField); fields.add(executionTimeField); - fields.add(FIELD_EVENT_TYPE.getListGridField("170")); - fields.add(FIELD_EVENT_DETAIL.getListGridField("200")); + fields.add(FIELD_EVENT_TYPE.getListGridField("190")); + fields.add(FIELD_EVENT_DETAIL.getListGridField("220")); fields.add(FIELD_SUBJECT_NAME.getListGridField("90")); fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
@@ -97,7 +97,6 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) { // final PageControl pc = getPageControl(request);
- // TODO: call find by criteria method on PartitionEventManagerBean GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { public void onSuccess(PageList<PartitionEvent> result) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java new file mode 100644 index 0000000..b555f2d --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java @@ -0,0 +1,225 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_CTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_DETAIL; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_TYPE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EXECUTION_STATUS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_SUBJECT_NAME; + +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.types.VisibilityMode; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.form.fields.StaticTextItem; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.layout.SectionStack; +import com.smartgwt.client.widgets.layout.SectionStackSection; + +import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEventDetails; +import org.rhq.core.domain.criteria.PartitionEventCriteria; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.enterprise.gui.coregui.client.BookmarkableView; +import org.rhq.enterprise.gui.coregui.client.ViewPath; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTServiceAsync; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.Log; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; + +/** + * Shows details of a partition event. + * + * @author Jiri Kremser + */ +public class PartitionEventDetailView extends LocatableVLayout implements BookmarkableView { + + private final int partitionEventId; + + private final LocatableSectionStack sectionStack; + private SectionStackSection detailsSection = null; + private SectionStackSection agentSection = null; + + private volatile int initSectionCount = 0; + + public PartitionEventDetailView(String locatorId, int partitionEventId) { + super(locatorId); + this.partitionEventId = partitionEventId; + setHeight100(); + setWidth100(); + setOverflow(Overflow.AUTO); + + sectionStack = new LocatableSectionStack(extendLocatorId("stack")); + sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE); + sectionStack.setWidth100(); + sectionStack.setHeight100(); + sectionStack.setMargin(5); + sectionStack.setOverflow(Overflow.VISIBLE); + } + + @Override + protected void onInit() { + super.onInit(); + PartitionEventCriteria criteria = new PartitionEventCriteria(); + criteria.addFilterId(partitionEventId); + final CloudGWTServiceAsync service = GWTServiceLookup.getCloudService(); + service.findPartitionEventsByCriteria(criteria, + new AsyncCallback<PageList<PartitionEvent>>() { + public void onSuccess(final PageList<PartitionEvent> events) { + if (events == null || events.size() != 1) { + //TODO: notify user in msg center + return; + } + prepareDetailsSection(sectionStack, events.get(0)); + service.getPartitionEventDetails(partitionEventId, + PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<PartitionEventDetails>>() { + public void onSuccess(PageList<PartitionEventDetails> result) { + prepareAssignmentsSection(sectionStack, result); + } + public void onFailure(Throwable caught) { + SC.say("er2:" + caught); + //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + } + }); + + } + + public void onFailure(Throwable caught) { + SC.say("er1:" + caught); + //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + } + }); + } + + public boolean isInitialized() { + return initSectionCount >= 2; + } + + @Override + protected void onDraw() { + super.onDraw(); + + // wait until we have all of the sections before we show them. We don't use InitializableView because, + // it seems they are not supported (in the applicable renderView()) at this level. + new Timer() { + final long startTime = System.currentTimeMillis(); + + public void run() { + if (isInitialized()) { + if (null != detailsSection) { + sectionStack.addSection(detailsSection); + } + if (null != agentSection) { + sectionStack.addSection(agentSection); + } + + addMember(sectionStack); + markForRedraw(); + + } else { + // don't wait forever, give up after 20s and show what we have + long elapsedMillis = System.currentTimeMillis() - startTime; + if (elapsedMillis > 20000) { + initSectionCount = 2; + } + schedule(100); // Reschedule the timer. + } + } + }.run(); // fire the timer immediately + } + + private void prepareAssignmentsSection(SectionStack stack, PageList<PartitionEventDetails> eventDetails) { + SectionStackSection section = new SectionStackSection( + MSG.view_adminTopology_partitionEventsDetail_agentAssignments()); + section.setExpanded(true); + if (eventDetails == null || eventDetails.size() == 0) { + section.setItems(new Label(MSG.view_adminTopology_partitionEventsDetail_agentAssignments_nothing())); + } else { + // there is no need for datasource, it is a simple table with two columns + ListGrid assignments = new ListGrid(); + ListGridField agentName = new ListGridField("agentName", MSG.view_adminTopology_agent_agentName()); + ListGridField serverName = new ListGridField("serverName", MSG.view_admin_systemSettings_serverDetails_serverName()); + assignments.setFields(agentName, serverName); + ListGridRecord[] records = new ListGridRecord[eventDetails.size()]; + for (int i = 0; i < eventDetails.size(); i++) { + records[i] = new ListGridRecord(); + records[i].setAttribute("agentName", eventDetails.get(i).getAgentName()); + records[i].setAttribute("serverName", eventDetails.get(i).getServerName()); + } + assignments.setData(records); + section.setItems(assignments); + } + + agentSection = section; + initSectionCount++; + } + + private void prepareDetailsSection(SectionStack stack, PartitionEvent partitionEvent) { + final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm")); + form.setMargin(10); + form.setWidth100(); + form.setWrapItemTitles(false); + form.setNumCols(2); + + StaticTextItem ctimeItem = new StaticTextItem(FIELD_CTIME.propertyName(), + MSG.view_adminTopology_partitionEventsDetail_eventExecutionTime()); + ctimeItem.setValue(TimestampCellFormatter.format(Long.valueOf(partitionEvent.getCtime()), + TimestampCellFormatter.DATE_TIME_FORMAT_LONG)); + + StaticTextItem addressItem = new StaticTextItem(FIELD_EVENT_TYPE.propertyName(), + MSG.view_adminTopology_partitionEventsDetail_eventType()); + addressItem.setValue(partitionEvent.getEventType()); + + StaticTextItem eventDetailItem = new StaticTextItem(FIELD_EVENT_DETAIL.propertyName(), + MSG.view_adminTopology_partitionEventsDetail_eventDetails()); + eventDetailItem.setValue(partitionEvent.getEventDetail()); + + StaticTextItem subjectPortItem = new StaticTextItem(FIELD_SUBJECT_NAME.propertyName(), + FIELD_SUBJECT_NAME.title()); + subjectPortItem.setValue(partitionEvent.getSubjectName()); + + StaticTextItem execStatusItem = new StaticTextItem(FIELD_EXECUTION_STATUS.propertyName(), + FIELD_EXECUTION_STATUS.title()); + execStatusItem.setValue(partitionEvent.getExecutionStatus()); + + form.setItems(ctimeItem, addressItem, eventDetailItem, subjectPortItem, execStatusItem); + + SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_partitionEvents_details()); + section.setExpanded(true); + section.setItems(form); + + detailsSection = section; + initSectionCount++; + } + + @Override + public void renderView(ViewPath viewPath) { + Log.debug("PartitionEventDetailView: " + viewPath); + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index e4d88ee..41d1b8a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -27,10 +27,7 @@ import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.form.fields.ButtonItem; import com.smartgwt.client.widgets.form.fields.TextItem; -import com.smartgwt.client.widgets.form.fields.events.ClickEvent; -import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; @@ -66,7 +63,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- private final boolean showActions = true;
private static final Criteria INITIAL_CRITERIA = new Criteria();
@@ -84,13 +80,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour }
@Override - protected void onInit() { - setFlexRowDisplay(false); - - super.onInit(); - } - - @Override protected void configureTableFilters() { final EnumSelectItem statusFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EXECUTION_STATUS, MSG.view_adminTopology_partitionEvents_execStatusFilter(), ExecutionStatus.class, null, null); @@ -107,17 +96,18 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
// SpacerItem spacerItem = new SpacerItem(); // spacerItem.setColSpan(1); - final ButtonItem showAll = new ButtonItem("showAll", "Show All"); - showAll.addClickHandler(new ClickHandler() { - public void onClick(ClickEvent event) { - statusFilter.init(ExecutionStatus.class, null, null); - typeFilter.init(PartitionEventType.class, null, null); - detail.setValue(""); - } - }); +// final ButtonItem showAll = new ButtonItem("showAll", "Show All"); +// showAll.addClickHandler(new ClickHandler() { +// public void onClick(ClickEvent event) { +// statusFilter.init(ExecutionStatus.class, null, null); +// typeFilter.init(PartitionEventType.class, null, null); +// detail.setValue(""); +// refresh(); +// } +// });
if (isShowFilterForm()) { - setFilterFormItems(statusFilter, detail, typeFilter, showAll); + setFilterFormItems(statusFilter, detail, typeFilter); } }
@@ -127,9 +117,8 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour List<ListGridField> fields = getDataSource().getListGridFields(); ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); - if (showActions) { - showActions(); - } + showActions(); + for (ListGridField field : fields) { // adding the cell formatter for name field (clickable link) if (field.getName() == PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()) { @@ -142,7 +131,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour String detailsUrl = "#" + VIEW_PATH + "/" + getId(record); String formattedValue = StringUtility.escapeHtml(value.toString()); return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); - } }); } @@ -167,11 +155,10 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
@Override public Canvas getDetailsView(Integer id) { - return new ServerDetailView(extendLocatorId("detailsView"), id); + return new PartitionEventDetailView(extendLocatorId("detailsView"), id); }
private void showActions() { - addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 95cb869..5f18d19 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -189,11 +189,11 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title()); installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()), - TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM)); + TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
StaticTextItem lastUpdatetem = new StaticTextItem(FIELD_MTIME.propertyName(), FIELD_MTIME.title()); lastUpdatetem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getMtime()), - TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM)); + TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
ButtonItem saveButton = new ButtonItem(); saveButton.setOverflow(Overflow.VISIBLE); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index 6ff748f..f42ce80 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -28,7 +28,9 @@ import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEventDetails; import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.resource.Agent; @@ -54,14 +56,19 @@ public interface CloudGWTService extends RemoteService { void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException; - + List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;; - + PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException; - + void cloudPartitionEventRequest() throws RuntimeException; - + void purgeAllEvents() throws RuntimeException; + + void deletePartitionEvents(int[] eventIds) throws RuntimeException; + + PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, + PageControl pageControl) throws RuntimeException;
- void deletePartitionEvents(int[] eventIds) throws RuntimeException; + PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index e3165ad..f71160a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -29,9 +29,11 @@ import org.apache.commons.lang.ArrayUtils;
import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEventDetails; import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; +import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.resource.Agent; @@ -39,6 +41,7 @@ import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; +import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal; import org.rhq.enterprise.server.cloud.CloudManagerLocal; import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; @@ -53,6 +56,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager(); + + private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager();
@Override public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException { @@ -153,4 +158,27 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
+ @Override + public PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl) + throws RuntimeException { + try { + return SerialUtility.prepare( + partitionEventManager.getPartitionEventDetails(getSessionSubject(), partitionEventId, pageControl), + "CloudGWTServiceImpl.getPartitionEventDetails"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException { + try { + return SerialUtility.prepare( + affinityGroupManager.getComposites(getSessionSubject(), pageControl), + "CloudGWTServiceImpl.getComposites"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + }
commit e310199bf4d266e34aac311648608ed142578dbb Author: Jirka Kremser jkremser@redhat.com Date: Tue Dec 4 18:59:19 2012 +0100
criteria based finding is now fully working for Partition Event entities
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java index 813d2b8..13ad211 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java @@ -19,10 +19,15 @@
package org.rhq.core.domain.criteria;
+import java.util.Arrays; +import java.util.List; + import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; +import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.util.PageOrdering;
/** @@ -39,17 +44,15 @@ public class PartitionEventCriteria extends Criteria { public static final String SORT_FIELD_CTIME = "ctime";
private Integer filterId; - private String filterEventType; - private String filterExecutionStatus; + private List<PartitionEventType> filterEventType; // requires override + private List<ExecutionStatus> filterExecutionStatus; // requires override private String filterEventDetail;
private PageOrdering sortCtime;
public PartitionEventCriteria() { - // filterOverrides.put("packageTypeId", "packageType.id = ? "); - // filterOverrides.put("repoId", "id IN (" + - // "SELECT rpv.packageVersion.generalPackage.id FROM RepoPackageVersion rpv WHERE rpv.repo.id = ?" + - // ")"); + filterOverrides.put("eventType", "eventType IN ( ? )"); + filterOverrides.put("executionStatus", "executionStatus IN ( ? )"); }
public Class<?> getPersistentClass() { @@ -60,12 +63,16 @@ public class PartitionEventCriteria extends Criteria { this.filterId = id; }
- public void addFilterEventType(String eventType) { - this.filterEventType = eventType; + public void addFilterEventType(PartitionEventType... filterEventType) { + if (filterEventType != null && filterEventType.length > 0) { + this.filterEventType = Arrays.asList(filterEventType); + } }
- public void addFilterExecutionStatus(String executionStatus) { - this.filterExecutionStatus = executionStatus; + public void addFilterExecutionStatus(ExecutionStatus... filterExecutionStatus) { + if (filterExecutionStatus != null && filterExecutionStatus.length > 0) { + this.filterExecutionStatus = Arrays.asList(filterExecutionStatus); + } }
public void addFilterEventDetail(String eventDetail) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index 41d32be..b93303b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -73,7 +73,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements if (value == null) { return ""; } - String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID); + String detailsUrl = "#" + VIEW_PATH + "/" + getId(record); String formattedValue = StringUtility.escapeHtml(value.toString()); return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 048f071..357abd6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -27,6 +27,7 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEven
import java.util.ArrayList; import java.util.List; +import java.util.Map;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DSRequest; @@ -38,6 +39,8 @@ import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; +import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; @@ -82,8 +85,8 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part ListGridField executionTimeField = FIELD_CTIME.getListGridField("120"); TimestampCellFormatter.prepareDateField(executionTimeField); fields.add(executionTimeField); - fields.add(FIELD_EVENT_TYPE.getListGridField("140")); - fields.add(FIELD_EVENT_DETAIL.getListGridField("165")); + fields.add(FIELD_EVENT_TYPE.getListGridField("170")); + fields.add(FIELD_EVENT_DETAIL.getListGridField("200")); fields.add(FIELD_SUBJECT_NAME.getListGridField("90")); fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
@@ -147,16 +150,45 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part ListGridRecord record = new ListGridRecord(); record.setAttribute(FIELD_ID.propertyName(), from.getId()); record.setAttribute(FIELD_CTIME.propertyName(), from.getCtime()); - record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType()); - record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail()); - record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName()); - record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus()); + record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType() == null ? "" : from.getEventType()); + record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail() == null ? "" : from.getEventDetail()); + record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName() == null ? "" : from.getSubjectName()); + record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus() == null ? "" : from.getExecutionStatus()); return record; }
@Override protected PartitionEventCriteria getFetchCriteria(DSRequest request) { - // we don't use criteria for this datasource, just return null - return new PartitionEventCriteria(); + ExecutionStatus[] statuses = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class); + PartitionEventType[] types = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class); + if (types == null || types.length == 0 || statuses == null || statuses.length == 0) { + return null; // user didn't select any type or status - return null to indicate no data should be displayed + } + + PartitionEventCriteria criteria = new PartitionEventCriteria(); + // This code is unlikely to be necessary as the encompassing view should be using an initial + // sort specifier. But just in case, make sure we set the initial sort. Note that we have to + // manipulate the PageControl directly as per the restrictions on getFetchCriteria() (see jdoc). + PageControl pageControl = getPageControl(request); + if (pageControl.getOrderingFields().isEmpty()) { + pageControl.initDefaultOrderingField(FIELD_CTIME.propertyName(), PageOrdering.DESC); + } + + // TODO: This call is broken in 2.2, http://code.google.com/p/smartgwt/issues/detail?id=490 + // when using AdvancedCriteria + Map<String, Object> criteriaMap = request.getCriteria().getValues(); + criteria.addFilterEventDetail((String) criteriaMap.get(FILTER_EVENT_DETAIL)); + + // There's no need to add a exec. status filter to the criteria if the user specified all exec. statuses. + if (statuses.length != ExecutionStatus.values().length) { + criteria.addFilterExecutionStatus(statuses); + } + + // There's no need to add a event type filter to the criteria if the user specified all event types. + if (types.length != PartitionEventType.values().length) { + criteria.addFilterEventType(types); + } + + return criteria; } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java index c8fc5c5..939478f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java @@ -30,15 +30,16 @@ public enum PartitionEventDatasourceField {
FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
- FIELD_CTIME("ctime", "i18n ex time"), - - FIELD_EVENT_TYPE("eventType", "i18n ev type"), + FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_partitionEvents_execTime()),
- FIELD_EVENT_DETAIL("eventDetail", "i18n ev detail"), + FIELD_EVENT_TYPE("eventType", CoreGUI.getMessages().view_adminTopology_partitionEvents_type()),
- FIELD_SUBJECT_NAME("subjectName", "i18n by"), + FIELD_EVENT_DETAIL("eventDetail", CoreGUI.getMessages().view_adminTopology_partitionEvents_details()),
- FIELD_EXECUTION_STATUS("executionStatus", "i18n ex status"); + FIELD_SUBJECT_NAME("subjectName", CoreGUI.getMessages().view_adminTopology_partitionEvents_initiatedBy()), + + FIELD_EXECUTION_STATUS("executionStatus", CoreGUI.getMessages() + .view_adminTopology_partitionEvents_executionStatus());
/** * Corresponds to a property name of Server (e.g. operationMode). diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index 0144603..e4d88ee 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -18,7 +18,6 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import java.util.ArrayList; import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; @@ -28,14 +27,18 @@ import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.form.fields.SpacerItem; +import com.smartgwt.client.widgets.form.fields.ButtonItem; import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.form.fields.events.ClickEvent; +import com.smartgwt.client.widgets.form.fields.events.ClickHandler; +import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission; -import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; +import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; @@ -47,7 +50,9 @@ import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.message.Message; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * @author Jiri Kremser @@ -55,8 +60,8 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; */ public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", "Partition Events(GWT)", - IconEnum.EVENTS); + public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", + MSG.view_adminTopology_partitionEvents() + "(GWT)", IconEnum.EVENTS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; @@ -70,6 +75,7 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
public PartitionEventTableView(String locatorId, String tableTitle) { super(locatorId, tableTitle, INITIAL_CRITERIA, new SortSpecifier[] { DEFAULT_SORT_SPECIFIER }); + setHeight100(); setWidth100();
@@ -78,23 +84,40 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour }
@Override + protected void onInit() { + setFlexRowDisplay(false); + + super.onInit(); + } + + @Override protected void configureTableFilters() { final EnumSelectItem statusFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EXECUTION_STATUS, - "i18n Execution Status", PartitionEvent.ExecutionStatus.class, null, null); + MSG.view_adminTopology_partitionEvents_execStatusFilter(), ExecutionStatus.class, null, null);
- final EnumSelectItem typeFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EVENT_TYPE, "i18n Type", - PartitionEvent.ExecutionStatus.class, null, null); + final EnumSelectItem typeFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EVENT_TYPE, + MSG.view_adminTopology_partitionEvents_typeFilter(), PartitionEventType.class, null, null);
- final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL, "i18n Details Filter"); + final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL, + MSG.view_adminTopology_partitionEvents_detailsFilter()); + // detail.setValue("");
// startDateFilter = new DateFilterItem(DateFilterItem.START_DATE_FILTER, MSG.filter_from_date()); // endDateFilter = new DateFilterItem(DateFilterItem.END_DATE_FILTER, MSG.filter_to_date());
- SpacerItem spacerItem = new SpacerItem(); - spacerItem.setColSpan(2); +// SpacerItem spacerItem = new SpacerItem(); +// spacerItem.setColSpan(1); + final ButtonItem showAll = new ButtonItem("showAll", "Show All"); + showAll.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + statusFilter.init(ExecutionStatus.class, null, null); + typeFilter.init(PartitionEventType.class, null, null); + detail.setValue(""); + } + });
if (isShowFilterForm()) { - setFilterFormItems(statusFilter, detail, typeFilter); + setFilterFormItems(statusFilter, detail, typeFilter, showAll); } }
@@ -105,11 +128,43 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); if (showActions) { - // listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); showActions(); } + for (ListGridField field : fields) { + // adding the cell formatter for name field (clickable link) + if (field.getName() == PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()) { + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null) { + return ""; + } + String detailsUrl = "#" + VIEW_PATH + "/" + getId(record); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + + } + }); + } + } }
+ // @Override + // protected String getDetailsLinkColumnName() { + // return PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName(); + // } + // + // @Override + // protected CellFormatter getDetailsLinkColumnCellFormatter() { + // return new CellFormatter() { + // public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + // Integer recordId = getId(record); + // String detailsUrl = "#" + VIEW_PATH + "/" + recordId; + // return SeleniumUtility.getLocatableHref(detailsUrl, detailsUrl, null); + // } + // }; + // } + @Override public Canvas getDetailsView(Integer id) { return new ServerDetailView(extendLocatorId("detailsView"), id); @@ -121,8 +176,7 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { - List<String> selectedNames = getSelectedNames(selections); - String message = "Really? Delete? For all I've done for you? " + selectedNames; + String message = "Really? Delete? For all I've done for you? "; SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { @@ -155,37 +209,36 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour } });
- addTableAction(extendLocatorId("purgeAll"), "i18n purge all", - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, + addTableAction(extendLocatorId("purgeAll"), MSG.view_adminTopology_partitionEvents_purgeAll(), + MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { - List<String> selectedNames = getSelectedNames(selections); // TODO: msg // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Normal? For all I've done for you? " + selectedNames; + String message = "Really? Normal? For all I've done for you? "; SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); SC.say("setting servers to maintenance mode, ids: " + selectedIds); GWTServiceLookup.getCloudService().purgeAllEvents(new AsyncCallback<Void>() { - public void onSuccess(Void arg0) { - // TODO: msg - Message msg = new Message(MSG - .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); - CoreGUI.getMessageCenter().notify(msg); - refresh(); - } - - public void onFailure(Throwable caught) { - // TODO: msg - CoreGUI.getErrorHandler().handleError( - MSG.view_admin_plugins_disabledServerPluginsFailure() + " " - + caught.getMessage(), caught); - refreshTableInfo(); - } - - }); + public void onSuccess(Void arg0) { + // TODO: msg + Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins("sdf"), + Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + // TODO: msg + CoreGUI.getErrorHandler().handleError( + MSG.view_admin_plugins_disabledServerPluginsFailure() + " " + + caught.getMessage(), caught); + refreshTableInfo(); + } + + }); } else { refreshTableInfo(); } @@ -194,18 +247,19 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour } });
- addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_server_setMaintenance(), - new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { + addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_partitionEvents_forceRepartition(), + new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { - List<String> selectedNames = getSelectedNames(selections); + // List<String> selectedNames = getSelectedNames(selections); // TODO: msg // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Repartition? For all I've done for you? " + selectedNames; + String message = "Really? Repartition? For all I've done for you? ";// + selectedNames; SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { SC.say("repartition is now forced"); - GWTServiceLookup.getCloudService().cloudPartitionEventRequest(new AsyncCallback<Void>() { + GWTServiceLookup.getCloudService().cloudPartitionEventRequest( + new AsyncCallback<Void>() { public void onSuccess(Void arg0) { // TODO: msg Message msg = new Message(MSG @@ -244,16 +298,16 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour return ids; }
- private List<String> getSelectedNames(ListGridRecord[] selections) { - if (selections == null) { - return new ArrayList<String>(0); - } - List<String> ids = new ArrayList<String>(selections.length); - for (ListGridRecord selection : selections) { - ids.add(selection.getAttributeAsString(FIELD_NAME)); - } - return ids; - } + // private List<String> getSelectedNames(ListGridRecord[] selections) { + // if (selections == null) { + // return new ArrayList<String>(0); + // } + // List<String> ids = new ArrayList<String>(selections.length); + // for (ListGridRecord selection : selections) { + // ids.add(selection.getAttributeAsString(FIELD_NAME)); + // } + // return ids; + // }
@Override public ViewName getViewName() { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index bcf2f49..08a1c8f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -94,7 +94,7 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser if (value == null) { return ""; } - String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID); + String detailsUrl = "#" + VIEW_PATH + "/" + getId(record); String formattedValue = StringUtility.escapeHtml(value.toString()); return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java index eb1fe76..114b323 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java @@ -73,7 +73,7 @@ public class EnumSelectItem extends SelectItem { for (Object o : EnumSet.allOf(e)) { Enum v = (Enum) o; String name = v.name(); - if (!valueMap.containsKey(name)) { + if (!map.containsKey(name)) { map.put(name, v.toString()); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java index 2f0ad01..bf6d10a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java @@ -49,6 +49,8 @@ import com.smartgwt.client.widgets.form.validator.LengthRangeValidator; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.alert.AlertPriority; +import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; +import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.criteria.BaseCriteria; import org.rhq.core.domain.drift.DriftCategory; import org.rhq.core.domain.event.EventSeverity; @@ -599,6 +601,10 @@ public abstract class RPCDataSource<T, C extends BaseCriteria> extends DataSourc return (S[]) new ResourceCategory[size]; } else if (genericEnumType == DriftCategory.class) { return (S[]) new DriftCategory[size]; + } else if (genericEnumType == ExecutionStatus.class) { + return (S[]) new ExecutionStatus[size]; + } else if (genericEnumType == PartitionEventType.class) { + return (S[]) new PartitionEventType[size]; } else { throw new IllegalArgumentException(MSG.dataSource_rpc_error_unsupportedEnumType(genericEnumType.getName())); }
commit ce71644a64af4a5d9aae5559e6975d8ad4dc5969 Author: Jirka Kremser jkremser@redhat.com Date: Tue Dec 4 14:28:09 2012 +0100
i18n for Partition Events
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties index a4157bc..47611e8 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties @@ -553,6 +553,21 @@ view_adminTopology_agentDetail_agentFailoverList = Agent Failover List view_adminTopology_agentDetail_currentServer = Current Server view_adminTopology_agentDetail_token = Token view_adminTopology_partitionEvents = Partition Events +view_adminTopology_partitionEvents_details = Details +view_adminTopology_partitionEvents_detailsFilter = Details Filter +view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter +view_adminTopology_partitionEvents_execTime = Execution Time +view_adminTopology_partitionEvents_executionStatus = Execution Status +view_adminTopology_partitionEvents_forceRepartition = Force Repartition +view_adminTopology_partitionEvents_initiatedBy = Initiated By +view_adminTopology_partitionEvents_purgeAll = Purge All +view_adminTopology_partitionEvents_type = Type +view_adminTopology_partitionEvents_typeFilter = Type Filter +view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments +view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event +view_adminTopology_partitionEventsDetail_eventDetails = Event Details +view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time +view_adminTopology_partitionEventsDetail_eventType = Event Type view_adminTopology_remoteAgentInstall = Remote Agent Install view_adminTopology_server_affinityGroup = Affinity Group view_adminTopology_server_agentCount = Agent Count diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties index 86c261b..35b7b46 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties @@ -572,6 +572,21 @@ view_adminTopology_agentDetail_agentFailoverList = Agentův failover list view_adminTopology_agentDetail_currentServer = Současný server view_adminTopology_agentDetail_token = Token view_adminTopology_partitionEvents = Události o clusteru +view_adminTopology_partitionEvents_details = Detaily +view_adminTopology_partitionEvents_detailsFilter = Filtrovat podle detailu +view_adminTopology_partitionEvents_execStatusFilter = Filtrovat podle stavu provedení +view_adminTopology_partitionEvents_execTime = Doba provedení +view_adminTopology_partitionEvents_executionStatus = Stav provedení +view_adminTopology_partitionEvents_forceRepartition = Vynutit přerozdělení (repartition) +view_adminTopology_partitionEvents_initiatedBy = Iniciováno kým +view_adminTopology_partitionEvents_purgeAll = Smazat všechny +view_adminTopology_partitionEvents_type = Typ +view_adminTopology_partitionEvents_typeFilter = Filtrovat podle typu +view_adminTopology_partitionEventsDetail_agentAssignments = Přiřazení agenta +view_adminTopology_partitionEventsDetail_agentAssignments_nothing = Tato událost nezpůsobila přiřazení žádného agenta +view_adminTopology_partitionEventsDetail_eventDetails = Detaily události +view_adminTopology_partitionEventsDetail_eventExecutionTime = Doba provedení události +view_adminTopology_partitionEventsDetail_eventType = Typ události view_adminTopology_remoteAgentInstall = Nainstalovat vzdáleně agenta view_adminTopology_server_affinityGroup = Afinitní skupina view_adminTopology_server_agentCount = Počet agentů diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties index 30a816c..6c2cc91 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties @@ -520,6 +520,21 @@ view_adminTopology_agents = Agenten ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token view_adminTopology_partitionEvents = Partitionierungs-Ereignisse +##view_adminTopology_partitionEvents_details = Details +##view_adminTopology_partitionEvents_detailsFilter = Details Filter +##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter +##view_adminTopology_partitionEvents_execTime = Execution Time +##view_adminTopology_partitionEvents_executionStatus = Execution Status +##view_adminTopology_partitionEvents_forceRepartition = Force Repartition +##view_adminTopology_partitionEvents_initiatedBy = Initiated By +##view_adminTopology_partitionEvents_purgeAll = Purge All +##view_adminTopology_partitionEvents_type = Type +##view_adminTopology_partitionEvents_typeFilter = Type Filter +##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments +##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event +##view_adminTopology_partitionEventsDetail_eventDetails = Event Details +##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time +##view_adminTopology_partitionEventsDetail_eventType = Event Type view_adminTopology_remoteAgentInstall = Installation entfernter Agenten ##view_adminTopology_server_affinityGroup = Affinity Group ##view_adminTopology_server_agentCount = Agent Count diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties index 657cb3c..2b74e1b 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties @@ -551,6 +551,21 @@ view_adminTopology_agents = エージェント ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token view_adminTopology_partitionEvents = イベントの分類 +##view_adminTopology_partitionEvents_details = Details +##view_adminTopology_partitionEvents_detailsFilter = Details Filter +##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter +##view_adminTopology_partitionEvents_execTime = Execution Time +##view_adminTopology_partitionEvents_executionStatus = Execution Status +##view_adminTopology_partitionEvents_forceRepartition = Force Repartition +##view_adminTopology_partitionEvents_initiatedBy = Initiated By +##view_adminTopology_partitionEvents_purgeAll = Purge All +##view_adminTopology_partitionEvents_type = Type +##view_adminTopology_partitionEvents_typeFilter = Type Filter +##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments +##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event +##view_adminTopology_partitionEventsDetail_eventDetails = Event Details +##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time +##view_adminTopology_partitionEventsDetail_eventType = Event Type view_adminTopology_remoteAgentInstall = リモートエージェントのインストール ##view_adminTopology_server_affinityGroup = Affinity Group ##view_adminTopology_server_agentCount = Agent Count diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties index 00efcf3..ceb89bd 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties @@ -556,6 +556,21 @@ view_adminTopology_agents = Agentes ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token view_adminTopology_partitionEvents = Eventos na Parti\u00E7\u00E3o +##view_adminTopology_partitionEvents_details = Details +##view_adminTopology_partitionEvents_detailsFilter = Details Filter +##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter +##view_adminTopology_partitionEvents_execTime = Execution Time +##view_adminTopology_partitionEvents_executionStatus = Execution Status +##view_adminTopology_partitionEvents_forceRepartition = Force Repartition +##view_adminTopology_partitionEvents_initiatedBy = Initiated By +##view_adminTopology_partitionEvents_purgeAll = Purge All +##view_adminTopology_partitionEvents_type = Type +##view_adminTopology_partitionEvents_typeFilter = Type Filter +##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments +##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event +##view_adminTopology_partitionEventsDetail_eventDetails = Event Details +##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time +##view_adminTopology_partitionEventsDetail_eventType = Event Type view_adminTopology_remoteAgentInstall = Instala\u00E7\u00E3o Remota de Agentes ##view_adminTopology_server_affinityGroup = Affinity Group ##view_adminTopology_server_agentCount = Agent Count diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties index 6fa67b0..86c16cb 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties @@ -543,6 +543,21 @@ #view_adminTopology_agentDetail_currentServer = Current Server #view_adminTopology_agentDetail_token = Token #view_adminTopology_partitionEvents = Partition Events +##view_adminTopology_partitionEvents_details = Details +##view_adminTopology_partitionEvents_detailsFilter = Details Filter +##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter +##view_adminTopology_partitionEvents_execTime = Execution Time +##view_adminTopology_partitionEvents_executionStatus = Execution Status +##view_adminTopology_partitionEvents_forceRepartition = Force Repartition +##view_adminTopology_partitionEvents_initiatedBy = Initiated By +##view_adminTopology_partitionEvents_purgeAll = Purge All +##view_adminTopology_partitionEvents_type = Type +##view_adminTopology_partitionEvents_typeFilter = Type Filter +##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments +##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event +##view_adminTopology_partitionEventsDetail_eventDetails = Event Details +##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time +##view_adminTopology_partitionEventsDetail_eventType = Event Type #view_adminTopology_remoteAgentInstall = Remote Agent Install #view_adminTopology_server_affinityGroup = Affinity Group #view_adminTopology_server_agentCount = Agent Count diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties index 29132f3..2c649de 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties @@ -543,6 +543,21 @@ view_adminTopology_agents = \u4ee3\u7406 ##view_adminTopology_agentDetail_currentServer = Current Server ##view_adminTopology_agentDetail_token = Token view_adminTopology_partitionEvents = Partition\u4e8b\u4ef6 +##view_adminTopology_partitionEvents_details = Details +##view_adminTopology_partitionEvents_detailsFilter = Details Filter +##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter +##view_adminTopology_partitionEvents_execTime = Execution Time +##view_adminTopology_partitionEvents_executionStatus = Execution Status +##view_adminTopology_partitionEvents_forceRepartition = Force Repartition +##view_adminTopology_partitionEvents_initiatedBy = Initiated By +##view_adminTopology_partitionEvents_purgeAll = Purge All +##view_adminTopology_partitionEvents_type = Type +##view_adminTopology_partitionEvents_typeFilter = Type Filter +##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments +##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event +##view_adminTopology_partitionEventsDetail_eventDetails = Event Details +##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time +##view_adminTopology_partitionEventsDetail_eventType = Event Type view_adminTopology_remoteAgentInstall = \u8fdc\u7a0b\u4ee3\u7406\u5b89\u88c5 ##view_adminTopology_server_affinityGroup = Affinity Group ##view_adminTopology_server_agentCount = Agent Count
commit a87579ed9c520b3661ac443a4efbc58c8d8da3ca Author: Jirka Kremser jkremser@redhat.com Date: Tue Dec 4 11:58:26 2012 +0100
new methods for EventPartition table, UI imporovements for event partition view
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java index dd9910e..813d2b8 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java @@ -23,7 +23,6 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.cloud.PartitionEvent; -import org.rhq.core.domain.content.Package; import org.rhq.core.domain.util.PageOrdering;
/** @@ -36,6 +35,8 @@ import org.rhq.core.domain.util.PageOrdering; public class PartitionEventCriteria extends Criteria {
private static final long serialVersionUID = 1L; + + public static final String SORT_FIELD_CTIME = "ctime";
private Integer filterId; private String filterEventType; @@ -52,7 +53,7 @@ public class PartitionEventCriteria extends Criteria { }
public Class<?> getPersistentClass() { - return Package.class; + return PartitionEvent.class; }
public void addFilterId(Integer id) { @@ -72,7 +73,7 @@ public class PartitionEventCriteria extends Criteria { }
public void addSortCtime(PageOrdering sort) { - addSortField("ctime"); + addSortField(SORT_FIELD_CTIME); this.sortCtime = sort; } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index e969a70..5c18d1f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -35,6 +35,7 @@ import org.rhq.enterprise.gui.coregui.client.admin.templates.AlertDefinitionTemp import org.rhq.enterprise.gui.coregui.client.admin.templates.DriftDefinitionTemplateTypeView; import org.rhq.enterprise.gui.coregui.client.admin.templates.MetricTemplateTypeView; import org.rhq.enterprise.gui.coregui.client.admin.topology.AgentTableView; +import org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventTableView; import org.rhq.enterprise.gui.coregui.client.admin.topology.ServerTableView; import org.rhq.enterprise.gui.coregui.client.admin.users.UsersView; import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane; @@ -189,10 +190,10 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem partitionEventsGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { + NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { - return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), - MSG.view_adminTopology_servers() + " (GWT)", null); + return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()), + MSG.view_adminTopology_partitionEvents() + " (GWT)"); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java index 96f06c6..048f071 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -52,6 +52,11 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; */ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, PartitionEventCriteria> {
+ // filters + public static final String FILTER_EVENT_DETAIL = "eventDetail"; + public static final String FILTER_EXECUTION_STATUS = "executionStatus"; + public static final String FILTER_EVENT_TYPE = "eventType"; + public PartitionEventDatasource() { super(); List<DataSourceField> fields = addDataSourceFields(); @@ -87,23 +92,24 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) { - final PageControl pc = getPageControl(request); + // final PageControl pc = getPageControl(request);
// TODO: call find by criteria method on PartitionEventManagerBean - GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { - public void onSuccess(PageList<PartitionEvent> result) { -// response.setData(buildRecords(result)); - response.setTotalRows(result.size()); - processResponse(request.getRequestId(), response); - } - - @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - response.setStatus(DSResponse.STATUS_FAILURE); - processResponse(request.getRequestId(), response); - } - }); + GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, + new AsyncCallback<PageList<PartitionEvent>>() { + public void onSuccess(PageList<PartitionEvent> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); }
/** diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java index 3e7a05d..0144603 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -18,35 +18,36 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL; - import java.util.ArrayList; import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.Criteria; +import com.smartgwt.client.data.SortSpecifier; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.grid.CellFormatter; +import com.smartgwt.client.widgets.form.fields.SpacerItem; +import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission; -import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; +import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem; import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction; import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; -import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.message.Message; -import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * @author Jiri Kremser @@ -55,50 +56,57 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", "Partition Events(GWT)", - IconEnum.SERVERS); + IconEnum.EVENTS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean showActions = true;
+ private static final Criteria INITIAL_CRITERIA = new Criteria(); + + private static SortSpecifier DEFAULT_SORT_SPECIFIER = new SortSpecifier(PartitionEventCriteria.SORT_FIELD_CTIME, + SortDirection.DESCENDING); + public PartitionEventTableView(String locatorId, String tableTitle) { - super(locatorId, tableTitle); + super(locatorId, tableTitle, INITIAL_CRITERIA, new SortSpecifier[] { DEFAULT_SORT_SPECIFIER }); setHeight100(); setWidth100(); + + setInitialCriteriaFixed(false); setDataSource(new PartitionEventDatasource()); }
@Override + protected void configureTableFilters() { + final EnumSelectItem statusFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EXECUTION_STATUS, + "i18n Execution Status", PartitionEvent.ExecutionStatus.class, null, null); + + final EnumSelectItem typeFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EVENT_TYPE, "i18n Type", + PartitionEvent.ExecutionStatus.class, null, null); + + final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL, "i18n Details Filter"); + + // startDateFilter = new DateFilterItem(DateFilterItem.START_DATE_FILTER, MSG.filter_from_date()); + // endDateFilter = new DateFilterItem(DateFilterItem.END_DATE_FILTER, MSG.filter_to_date()); + + SpacerItem spacerItem = new SpacerItem(); + spacerItem.setColSpan(2); + + if (isShowFilterForm()) { + setFilterFormItems(statusFilter, detail, typeFilter); + } + } + + @Override protected void configureTable() { super.configureTable(); List<ListGridField> fields = getDataSource().getListGridFields(); ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); if (showActions) { - listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); + // listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); showActions(); - } else { - // sorting by order field - listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING); - } - for (ListGridField field : fields) { - // adding the cell formatter for name field (clickable link) - if (field.getName() == FIELD_NAME) { - field.setCellFormatter(new CellFormatter() { - @Override - public String format(Object value, ListGridRecord record, int rowNum, int colNum) { - if (value == null) { - return ""; - } - String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID); - String formattedValue = StringUtility.escapeHtml(value.toString()); - return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); - - } - }); - } - // TODO: adding the cell formatter for affinity group (clickable link) } }
@@ -108,21 +116,20 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour }
private void showActions() { - addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), + + addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { List<String> selectedNames = getSelectedNames(selections); - // TODO: msg - // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Normal? For all I've done for you? " + selectedNames; + String message = "Really? Delete? For all I've done for you? " + selectedNames; SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, - Server.OperationMode.NORMAL, new AsyncCallback<Void>() { + GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds, + new AsyncCallback<Void>() { public void onSuccess(Void arg0) { // TODO: msg Message msg = new Message(MSG @@ -148,20 +155,20 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour } });
- addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), - new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { + addTableAction(extendLocatorId("purgeAll"), "i18n purge all", + MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, + Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { List<String> selectedNames = getSelectedNames(selections); // TODO: msg - // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); - String message = "Really? Maitenance? For all I've done for you? " + selectedNames; + // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); + String message = "Really? Normal? For all I've done for you? " + selectedNames; SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { int[] selectedIds = getSelectedIds(selections); SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, - Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() { + GWTServiceLookup.getCloudService().purgeAllEvents(new AsyncCallback<Void>() { public void onSuccess(Void arg0) { // TODO: msg Message msg = new Message(MSG @@ -187,19 +194,18 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour } });
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), - MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, - Permission.MANAGE_SETTINGS) { + addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_server_setMaintenance(), + new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { public void executeAction(final ListGridRecord[] selections, Object actionValue) { List<String> selectedNames = getSelectedNames(selections); - String message = "Really? Delete? For all I've done for you? " + selectedNames; + // TODO: msg + // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); + String message = "Really? Repartition? For all I've done for you? " + selectedNames; SC.ask(message, new BooleanCallback() { public void execute(Boolean confirmed) { if (confirmed) { - int[] selectedIds = getSelectedIds(selections); - SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().deleteServers(selectedIds, - new AsyncCallback<Void>() { + SC.say("repartition is now forced"); + GWTServiceLookup.getCloudService().cloudPartitionEventRequest(new AsyncCallback<Void>() { public void onSuccess(Void arg0) { // TODO: msg Message msg = new Message(MSG diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index dbfbfbf..6ff748f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -58,5 +58,10 @@ public interface CloudGWTService extends RemoteService { List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException; - + + void cloudPartitionEventRequest() throws RuntimeException; + + void purgeAllEvents() throws RuntimeException; + + void deletePartitionEvents(int[] eventIds) throws RuntimeException; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 84a87b8..e3165ad 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -29,6 +29,7 @@ import org.apache.commons.lang.ArrayUtils;
import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEventType; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; @@ -50,7 +51,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); - + private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@Override @@ -102,7 +103,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud }
@Override - public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException { + public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) + throws RuntimeException { try { return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc), "CloudGWTServiceImpl.getFailoverListDetailsByAgentId"); @@ -112,13 +114,43 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud }
@Override - public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException { - try { - return SerialUtility.prepare(partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria), - "CloudGWTServiceImpl.findPartitionEventsByCriteria"); - } catch (Throwable t) { - throw getExceptionToThrowToClient(t); + public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) + throws RuntimeException { + try { + return SerialUtility.prepare( + partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria), + "CloudGWTServiceImpl.findPartitionEventsByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void cloudPartitionEventRequest() throws RuntimeException { + try { + partitionEventManager.cloudPartitionEventRequest(getSessionSubject(), + PartitionEventType.ADMIN_INITIATED_PARTITION, ""); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public void purgeAllEvents() throws RuntimeException { + try { + partitionEventManager.purgeAllEvents(getSessionSubject()); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } } + + @Override + public void deletePartitionEvents(int[] eventIds) throws RuntimeException { + try { + partitionEventManager.deletePartitionEvents(getSessionSubject(), ArrayUtils.toObject(eventIds)); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } } - + }
commit b455504ebe90993681390a9109016c7811e88fa1 Merge: ac812c4 943cc78 Author: Jirka Kremser jkremser@redhat.com Date: Sat Dec 1 01:20:57 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
diff --cc modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml index b32c98c,b6c1909..124c979 --- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml +++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml @@@ -189,18 -197,6 +197,10 @@@ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI PlatformUtilizationGWTService</servlet-name> <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.PlatformUtilizationGWTServiceImpl</servlet-class> </servlet> + <servlet> + <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name> + <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.CloudGWTServiceImpl</servlet-class> + </servlet> - <servlet> - <servlet-name>ReportExporter</servlet-name> - <servlet-class>org.rhq.enterprise.gui.coregui.server.reports.ReportExportServlet</servlet-class> - </servlet>
<servlet> <servlet-name>Resteasy</servlet-name> @@@ -373,18 -369,6 +373,10 @@@ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI PlatformUtilizationGWTService</servlet-name> <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/PlatformUtilizationGWTService</url-pattern> </servlet-mapping> + <servlet-mapping> + <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name> + <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/CloudGWTService</url-pattern> + </servlet-mapping> - <servlet-mapping> - <servlet-name>ReportExporter</servlet-name> - <url-pattern>/ReportExporter</url-pattern> - </servlet-mapping>
<servlet-mapping> <servlet-name>Resteasy</servlet-name>
commit ac812c4cc41e7aa7f5e2882c853c2e77859054a5 Author: Jirka Kremser jkremser@redhat.com Date: Fri Nov 30 13:53:45 2012 +0100
partition event table, datasource and finder for PartitionEvent by criteria have been added
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java new file mode 100644 index 0000000..dd9910e --- /dev/null +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java @@ -0,0 +1,78 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.core.domain.criteria; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.content.Package; +import org.rhq.core.domain.util.PageOrdering; + +/** + * Criteria object for querying {@link PartitionEvent}s. + * + * @author Jiri Kremser + */ +@XmlAccessorType(XmlAccessType.FIELD) +@SuppressWarnings("unused") +public class PartitionEventCriteria extends Criteria { + + private static final long serialVersionUID = 1L; + + private Integer filterId; + private String filterEventType; + private String filterExecutionStatus; + private String filterEventDetail; + + private PageOrdering sortCtime; + + public PartitionEventCriteria() { + // filterOverrides.put("packageTypeId", "packageType.id = ? "); + // filterOverrides.put("repoId", "id IN (" + + // "SELECT rpv.packageVersion.generalPackage.id FROM RepoPackageVersion rpv WHERE rpv.repo.id = ?" + + // ")"); + } + + public Class<?> getPersistentClass() { + return Package.class; + } + + public void addFilterId(Integer id) { + this.filterId = id; + } + + public void addFilterEventType(String eventType) { + this.filterEventType = eventType; + } + + public void addFilterExecutionStatus(String executionStatus) { + this.filterExecutionStatus = executionStatus; + } + + public void addFilterEventDetail(String eventDetail) { + this.filterEventDetail = eventDetail; + } + + public void addSortCtime(PageOrdering sort) { + addSortField("ctime"); + this.sortCtime = sort; + } +} diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java index e96e1d3..1cf41b6 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java @@ -222,7 +222,7 @@ public class Agent implements Serializable { /** * Creates a new instance of Agent */ - protected Agent() { + public Agent() { }
/** diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index 189da3f..e969a70 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -188,13 +188,20 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { MSG.view_adminTopology_agents() + " (GWT)", null); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY)); + + NavigationItem partitionEventsGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { + public Canvas createView() { + return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), + MSG.view_adminTopology_servers() + " (GWT)", null); + } + }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationSection topologyRegion = null; if (isRHQ) { topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem, - affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, remoteAgentInstallItem); + affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, partitionEventsGwt, remoteAgentInstallItem); } else { - topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem, + topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, partitionEventsGwt, agentsItem, affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt); } return topologyRegion; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java index d4e758a..96bce3c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java @@ -144,7 +144,7 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
@Override public Agent copyValues(Record from) { - throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)"); + throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)"); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java index 0e21356..fc5f3a5 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -82,7 +82,7 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet fields.add(FIELD_ORDINAL.getListGridField("55")); fields.add(FIELD_NAME.getListGridField("*")); fields.add(FIELD_OPERATION_MODE.getListGridField("90")); - fields.add(FIELD_ADDRESS.getListGridField("110")); + fields.add(FIELD_ADDRESS.getListGridField("120")); fields.add(FIELD_PORT.getListGridField("90")); fields.add(FIELD_SECURE_PORT.getListGridField("75"));
@@ -142,7 +142,7 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet
@Override public FailoverListDetails copyValues(Record from) { - throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)"); + throw new UnsupportedOperationException("FailoverListItemDatasource.copyValues(Record from)"); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java new file mode 100644 index 0000000..96f06c6 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java @@ -0,0 +1,156 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_CTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_DETAIL; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_TYPE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EXECUTION_STATUS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_SUBJECT_NAME; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.DSRequest; +import com.smartgwt.client.data.DSResponse; +import com.smartgwt.client.data.DataSourceField; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.data.fields.DataSourceIntegerField; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; + +import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.criteria.PartitionEventCriteria; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; + +/** + * @author Jirka Kremser + * + */ +public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, PartitionEventCriteria> { + + public PartitionEventDatasource() { + super(); + List<DataSourceField> fields = addDataSourceFields(); + addFields(fields); + } + + @Override + protected List<DataSourceField> addDataSourceFields() { + List<DataSourceField> fields = super.addDataSourceFields(); + DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); + idField.setPrimaryKey(true); + idField.setHidden(true); + fields.add(idField); + return fields; + } + + public List<ListGridField> getListGridFields() { + List<ListGridField> fields = new ArrayList<ListGridField>(); + + ListGridField idField = FIELD_ID.getListGridField(); + idField.setHidden(true); + fields.add(idField); + ListGridField executionTimeField = FIELD_CTIME.getListGridField("120"); + TimestampCellFormatter.prepareDateField(executionTimeField); + fields.add(executionTimeField); + fields.add(FIELD_EVENT_TYPE.getListGridField("140")); + fields.add(FIELD_EVENT_DETAIL.getListGridField("165")); + fields.add(FIELD_SUBJECT_NAME.getListGridField("90")); + fields.add(FIELD_EXECUTION_STATUS.getListGridField("90")); + + return fields; + } + + @Override + protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) { + final PageControl pc = getPageControl(request); + + // TODO: call find by criteria method on PartitionEventManagerBean + GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() { + public void onSuccess(PageList<PartitionEvent> result) { +// response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); + } + + /** + * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, + * pagination, but *not* filter fields. + * + * @param request the request to turn into a page control + * @return the page control for passing to criteria and other queries + */ + protected PageControl getPageControl(DSRequest request) { + // Initialize paging. + PageControl pageControl = new PageControl(0, getDataPageSize()); + + // Initialize sorting. + String sortBy = request.getAttribute("sortBy"); + if (sortBy != null) { + String[] sorts = sortBy.split(","); + for (String sort : sorts) { + PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; + String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; + pageControl.addDefaultOrderingField(columnName, ordering); + } + } + + return pageControl; + } + + @Override + public PartitionEvent copyValues(Record from) { + throw new UnsupportedOperationException("PartitionEventDatasource.copyValues(Record from)"); + } + + @Override + public ListGridRecord copyValues(PartitionEvent from) { + ListGridRecord record = new ListGridRecord(); + record.setAttribute(FIELD_ID.propertyName(), from.getId()); + record.setAttribute(FIELD_CTIME.propertyName(), from.getCtime()); + record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType()); + record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail()); + record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName()); + record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus()); + return record; + } + + @Override + protected PartitionEventCriteria getFetchCriteria(DSRequest request) { + // we don't use criteria for this datasource, just return null + return new PartitionEventCriteria(); + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java new file mode 100644 index 0000000..c8fc5c5 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java @@ -0,0 +1,75 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.enterprise.gui.coregui.client.CoreGUI; + +/** + * @author Jirka Kremser + * + */ +public enum PartitionEventDatasourceField { + + FIELD_ID("id", CoreGUI.getMessages().common_title_id()), + + FIELD_CTIME("ctime", "i18n ex time"), + + FIELD_EVENT_TYPE("eventType", "i18n ev type"), + + FIELD_EVENT_DETAIL("eventDetail", "i18n ev detail"), + + FIELD_SUBJECT_NAME("subjectName", "i18n by"), + + FIELD_EXECUTION_STATUS("executionStatus", "i18n ex status"); + + /** + * Corresponds to a property name of Server (e.g. operationMode). + */ + private String propertyName; + + /** + * The table header for the field or property (e.g. Mode). + */ + private String title; + + private PartitionEventDatasourceField(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(String width) { + ListGridField field = new ListGridField(propertyName, title); + field.setWidth(width); + return field; + } +} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java new file mode 100644 index 0000000..3e7a05d --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java @@ -0,0 +1,257 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.types.SortDirection; +import com.smartgwt.client.util.BooleanCallback; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.grid.CellFormatter; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; + +import org.rhq.core.domain.authz.Permission; +import org.rhq.core.domain.cloud.Server; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.IconEnum; +import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; +import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction; +import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement; +import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; +import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; +import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; +import org.rhq.enterprise.gui.coregui.client.util.message.Message; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility; + +/** + * @author Jiri Kremser + * + */ +public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName { + + public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", "Partition Events(GWT)", + IconEnum.SERVERS); + + public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; + + private final boolean showActions = true; + + public PartitionEventTableView(String locatorId, String tableTitle) { + super(locatorId, tableTitle); + setHeight100(); + setWidth100(); + setDataSource(new PartitionEventDatasource()); + } + + @Override + protected void configureTable() { + super.configureTable(); + List<ListGridField> fields = getDataSource().getListGridFields(); + ListGrid listGrid = getListGrid(); + listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); + if (showActions) { + listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); + showActions(); + } else { + // sorting by order field + listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING); + } + for (ListGridField field : fields) { + // adding the cell formatter for name field (clickable link) + if (field.getName() == FIELD_NAME) { + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null) { + return ""; + } + String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + + } + }); + } + // TODO: adding the cell formatter for affinity group (clickable link) + } + } + + @Override + public Canvas getDetailsView(Integer id) { + return new ServerDetailView(extendLocatorId("detailsView"), id); + } + + private void showActions() { + addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), + MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, + Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + List<String> selectedNames = getSelectedNames(selections); + // TODO: msg + // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); + String message = "Really? Normal? For all I've done for you? " + selectedNames; + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + int[] selectedIds = getSelectedIds(selections); + SC.say("setting servers to maintenance mode, ids: " + selectedIds); + GWTServiceLookup.getCloudService().updateServerMode(selectedIds, + Server.OperationMode.NORMAL, new AsyncCallback<Void>() { + public void onSuccess(Void arg0) { + // TODO: msg + Message msg = new Message(MSG + .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + // TODO: msg + CoreGUI.getErrorHandler().handleError( + MSG.view_admin_plugins_disabledServerPluginsFailure() + " " + + caught.getMessage(), caught); + refreshTableInfo(); + } + + }); + } else { + refreshTableInfo(); + } + } + }); + } + }); + + addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), + new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + List<String> selectedNames = getSelectedNames(selections); + // TODO: msg + // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString()); + String message = "Really? Maitenance? For all I've done for you? " + selectedNames; + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + int[] selectedIds = getSelectedIds(selections); + SC.say("setting servers to maintenance mode, ids: " + selectedIds); + GWTServiceLookup.getCloudService().updateServerMode(selectedIds, + Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() { + public void onSuccess(Void arg0) { + // TODO: msg + Message msg = new Message(MSG + .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + // TODO: msg + CoreGUI.getErrorHandler().handleError( + MSG.view_admin_plugins_disabledServerPluginsFailure() + " " + + caught.getMessage(), caught); + refreshTableInfo(); + } + + }); + } else { + refreshTableInfo(); + } + } + }); + } + }); + + addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), + MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, + Permission.MANAGE_SETTINGS) { + public void executeAction(final ListGridRecord[] selections, Object actionValue) { + List<String> selectedNames = getSelectedNames(selections); + String message = "Really? Delete? For all I've done for you? " + selectedNames; + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + int[] selectedIds = getSelectedIds(selections); + SC.say("setting servers to maintenance mode, ids: " + selectedIds); + GWTServiceLookup.getCloudService().deleteServers(selectedIds, + new AsyncCallback<Void>() { + public void onSuccess(Void arg0) { + // TODO: msg + Message msg = new Message(MSG + .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info); + CoreGUI.getMessageCenter().notify(msg); + refresh(); + } + + public void onFailure(Throwable caught) { + // TODO: msg + CoreGUI.getErrorHandler().handleError( + MSG.view_admin_plugins_disabledServerPluginsFailure() + " " + + caught.getMessage(), caught); + refreshTableInfo(); + } + + }); + } else { + refreshTableInfo(); + } + } + }); + } + }); + } + + private int[] getSelectedIds(ListGridRecord[] selections) { + if (selections == null) { + return new int[0]; + } + int[] ids = new int[selections.length]; + int i = 0; + for (ListGridRecord selection : selections) { + ids[i++] = selection.getAttributeAsInt(FIELD_ID); + } + return ids; + } + + private List<String> getSelectedNames(ListGridRecord[] selections) { + if (selections == null) { + return new ArrayList<String>(0); + } + List<String> ids = new ArrayList<String>(selections.length); + for (ListGridRecord selection : selections) { + ids.add(selection.getAttributeAsString(FIELD_NAME)); + } + return ids; + } + + @Override + public ViewName getViewName() { + return VIEW_ID; + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java index 916f891..a9f9613 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -82,7 +82,7 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA fields.add(FIELD_PORT.getListGridField("90")); fields.add(FIELD_SECURE_PORT.getListGridField("75"));
- ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("110"); + ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("120"); TimestampCellFormatter.prepareDateField(lastUpdateTimeField); fields.add(lastUpdateTimeField);
@@ -139,7 +139,7 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA
@Override public ServerWithAgentCountComposite copyValues(Record from) { - throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)"); + throw new UnsupportedOperationException("ServerWithAgentCountDatasource.copyValues(Record from)"); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index e1c695b..dbfbfbf 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -27,10 +27,13 @@ import java.util.List; import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.PartitionEvent; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList;
/** * @author Jiri Kremser @@ -52,6 +55,8 @@ public interface CloudGWTService extends RemoteService {
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
- List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc); + List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;; + + PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 0e5fd88..84a87b8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -28,15 +28,18 @@ import java.util.List; import org.apache.commons.lang.ArrayUtils;
import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.cloud.PartitionEvent; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.cloud.CloudManagerLocal; +import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
/** @@ -47,6 +50,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager(); + + private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@Override public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException { @@ -97,7 +102,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud }
@Override - public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) { + public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException { try { return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc), "CloudGWTServiceImpl.getFailoverListDetailsByAgentId"); @@ -106,4 +111,14 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
+ @Override + public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException { + try { + return SerialUtility.prepare(partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria), + "CloudGWTServiceImpl.findPartitionEventsByCriteria"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java index 147dbc0..24fc0c7 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java @@ -38,10 +38,11 @@ import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.cloud.FailoverList; import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; import org.rhq.core.domain.cloud.PartitionEventDetails; import org.rhq.core.domain.cloud.PartitionEventType; -import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; import org.rhq.core.domain.cloud.composite.FailoverListComposite; +import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.server.PersistenceUtility; import org.rhq.core.domain.util.PageControl; @@ -50,6 +51,8 @@ import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.authz.RequiredPermission; import org.rhq.enterprise.server.core.AgentManagerLocal; +import org.rhq.enterprise.server.util.CriteriaQueryGenerator; +import org.rhq.enterprise.server.util.CriteriaQueryRunner; import org.rhq.enterprise.server.util.QueryUtility;
/** @@ -247,4 +250,11 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
return new PageList<PartitionEventDetails>(detailsList, (int) count, pageControl); } + + @RequiredPermission(Permission.MANAGE_INVENTORY) + public PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria) { + CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); + CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator, entityManager); + return runner.execute(); + } } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java index a86d82d..f0a1bf2 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java @@ -24,10 +24,11 @@ import javax.ejb.Local;
import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.cloud.PartitionEvent; +import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; import org.rhq.core.domain.cloud.PartitionEventDetails; import org.rhq.core.domain.cloud.PartitionEventType; -import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus; import org.rhq.core.domain.cloud.composite.FailoverListComposite; +import org.rhq.core.domain.criteria.PartitionEventCriteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; @@ -94,4 +95,13 @@ public interface PartitionEventManagerLocal {
PageList<PartitionEventDetails> getPartitionEventDetails(Subject subject, int partitionEventId, PageControl pageControl); + + /** + * the subject needs to have MANAGE_INVENTORY permission. + * + * @param subject + * @param criteria + * @return list with partition events + */ + PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria); }
commit 44101900b1e89c46571859092d1c79cba23f81a7 Author: Jirka Kremser jkremser@redhat.com Date: Tue Nov 27 16:40:44 2012 +0100
hyperlinks across table data and detail information rendered on detail pages are now working
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java index 187eac9..1c0d1de 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -39,9 +39,11 @@ import com.smartgwt.client.widgets.layout.SectionStackSection; import org.rhq.core.domain.resource.Agent; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * Shows details of a server. @@ -147,7 +149,7 @@ public class AgentDetailView extends LocatableVLayout { form.setNumCols(2);
StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); - nameItem.setValue(agent.getName()); + nameItem.setValue("<b>" + agent.getName() + "</b>");
StaticTextItem addressItem = new StaticTextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title()); addressItem.setValue(agent.getAddress()); @@ -164,13 +166,22 @@ public class AgentDetailView extends LocatableVLayout { Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM); lastAvailabilityItem.setValue(lastReport);
+ // TODO: make clickable link StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(), FIELD_AFFINITY_GROUP.title()); affinityGroupItem.setValue(agent.getAffinityGroup() == null ? "" : agent.getAffinityGroup().getName());
- // TODO: create clickable link StaticTextItem currentServerItem = new StaticTextItem(FIELD_SERVER.propertyName(), FIELD_SERVER.title()); - currentServerItem.setValue(agent.getServer() == null ? "none" : agent.getServer().getName()); + String serverValue = null; + if (agent.getServer() == null) { + serverValue = ""; + } else { + String detailsUrl = "#" + ServerTableView.VIEW_PATH + "/" + agent.getServer().getId(); + String formattedValue = StringUtility.escapeHtml(agent.getServer().getName()); + serverValue = SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + } + currentServerItem.setValue(serverValue); +
// ButtonItem saveButton = new ButtonItem(); // saveButton.setOverflow(Overflow.VISIBLE); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java index 3bb0280..d4e758a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java @@ -25,6 +25,7 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeData import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT; import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
import java.util.ArrayList; import java.util.List; @@ -52,8 +53,8 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; * */ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { - - private final Integer serverId; + + private final Integer serverId;
public AgentNodeDatasource(Integer serverId) { super(); @@ -78,12 +79,15 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { ListGridField idField = FIELD_ID.getListGridField(); idField.setHidden(true); fields.add(idField); - fields.add(FIELD_NAME.getListGridField("*")); fields.add(FIELD_SERVER.getListGridField("120")); fields.add(FIELD_ADDRESS.getListGridField("110")); + + ListGridField serverIdField = FIELD_SERVER_ID.getListGridField(); + serverIdField.setHidden(true); + fields.add(serverIdField); + fields.add(FIELD_PORT.getListGridField("90")); - ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120"); TimestampCellFormatter.prepareDateField(lastAvailabilityReportField); fields.add(lastAvailabilityReportField); @@ -150,7 +154,8 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { record.setAttribute(FIELD_NAME.propertyName(), from.getName()); record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress()); record.setAttribute(FIELD_PORT.propertyName(), from.getPort()); - record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "none" : from.getServer().getName()); + record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "" : from.getServer().getName()); + record.setAttribute(FIELD_SERVER_ID.propertyName(), from.getServer() == null ? "" : from.getServer().getId()); record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport()); record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from .getAffinityGroup().getName()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java index 6872204..5873ab3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java @@ -33,6 +33,8 @@ public enum AgentNodeDatasourceField { FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()), + + FIELD_SERVER_ID("serverId", "serverId"),
FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index ae4dc50..41d32be 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -18,27 +18,36 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID; + import java.util.List;
import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; +import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * @author Jiri Kremser */ -public class AgentTableView extends TableSection<AgentNodeDatasource> { +public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)", IconEnum.SERVERS); + public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" - + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID; + + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
public AgentTableView(String locatorId, String tableTitle, Integer serverId) { super(locatorId, tableTitle); @@ -49,12 +58,47 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> {
@Override protected void configureTable() { + super.configureTable(); List<ListGridField> fields = getDataSource().getListGridFields(); ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); + + for (ListGridField field : fields) { + // adding the cell formatter for name field (clickable link) + if (field.getName() == FIELD_NAME) { + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null) { + return ""; + } + String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
- super.configureTable(); + } + }); + } else if (field.getName() == FIELD_SERVER.propertyName()) { + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null || value.toString().isEmpty()) { + return ""; + } + String detailsUrl = "#" + ServerTableView.VIEW_PATH + "/" + + record.getAttributeAsString(FIELD_SERVER_ID.propertyName()); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + + } + }); + } + // TODO: adding the cell formatter for affinity group (clickable link) + + } + + }
@Override @@ -62,27 +106,9 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> { return new AgentDetailView(extendLocatorId("detailsView"), id); }
-// private int[] getSelectedIds(ListGridRecord[] selections) { -// if (selections == null) { -// return new int[0]; -// } -// int[] ids = new int[selections.length]; -// int i = 0; -// for (ListGridRecord selection : selections) { -// ids[i++] = selection.getAttributeAsInt(FIELD_ID); -// } -// return ids; -// } -// -// private ArrayList<String> getSelectedNames(ListGridRecord[] selections) { -// if (selections == null) { -// return new ArrayList<String>(0); -// } -// ArrayList<String> ids = new ArrayList<String>(selections.length); -// for (ListGridRecord selection : selections) { -// ids.add(selection.getAttributeAsString(FIELD_NAME)); -// } -// return ids; -// } + @Override + public ViewName getViewName() { + return VIEW_ID; + }
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 1d9dc46..95cb869 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -44,8 +44,11 @@ import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.Server; +import org.rhq.enterprise.gui.coregui.client.BookmarkableView; +import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; @@ -55,7 +58,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; * * @author Jiri Kremser */ -public class ServerDetailView extends LocatableVLayout { +public class ServerDetailView extends LocatableVLayout implements BookmarkableView {
// private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); private final int serverId; @@ -151,7 +154,7 @@ public class ServerDetailView extends LocatableVLayout { section.setItems(agentsTable);
agentSection = section; - ++initSectionCount; + initSectionCount++; return; }
@@ -163,7 +166,7 @@ public class ServerDetailView extends LocatableVLayout { form.setNumCols(2);
StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); - nameItem.setValue(server.getName()); + nameItem.setValue("<b>" + server.getName() + "</b>");
TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title()); addressItem.setValue(server.getAddress()); @@ -179,9 +182,10 @@ public class ServerDetailView extends LocatableVLayout { operationModeItem.setValueMap("NORMAL", "MAINTENANCE"); operationModeItem.setValue(server.getOperationMode());
+ // TODO: make clickable link StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(), FIELD_AFFINITY_GROUP.title()); - affinityGroupItem.setValue(server.getAffinityGroup()); + affinityGroupItem.setValue(server.getAffinityGroup() == null ? "" : server.getAffinityGroup().getName());
StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title()); installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()), @@ -209,6 +213,11 @@ public class ServerDetailView extends LocatableVLayout { section.setItems(form);
detailsSection = section; - ++initSectionCount; + initSectionCount++; + } + + @Override + public void renderView(ViewPath viewPath) { + Log.debug("ServerDetailView: " + viewPath); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 36c77ab..bcf2f49 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
+import java.io.Serializable; import java.util.ArrayList; import java.util.List;
@@ -28,32 +29,39 @@ import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.cloud.Server; +import org.rhq.core.domain.criteria.Criteria; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction; import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; +import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName; import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; import org.rhq.enterprise.gui.coregui.client.util.message.Message; +import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** * @author Jiri Kremser + * */ -public class ServerTableView extends TableSection<ServerDatasource> { +public class ServerTableView extends TableSection<ServerDatasource<? extends Serializable, Criteria>> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)", IconEnum.SERVERS); + public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" - + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID; - + + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID; + private final boolean showActions;
public ServerTableView(String locatorId, String tableTitle, Integer agentId) { @@ -66,6 +74,7 @@ public class ServerTableView extends TableSection<ServerDatasource> {
@Override protected void configureTable() { + super.configureTable(); List<ListGridField> fields = getDataSource().getListGridFields(); ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); @@ -73,16 +82,34 @@ public class ServerTableView extends TableSection<ServerDatasource> { listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); showActions(); } else { + // sorting by order field listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING); } - super.configureTable(); + for (ListGridField field : fields) { + // adding the cell formatter for name field (clickable link) + if (field.getName() == FIELD_NAME) { + field.setCellFormatter(new CellFormatter() { + @Override + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null) { + return ""; + } + String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID); + String formattedValue = StringUtility.escapeHtml(value.toString()); + return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null); + + } + }); + } + // TODO: adding the cell formatter for affinity group (clickable link) + } }
@Override public Canvas getDetailsView(Integer id) { return new ServerDetailView(extendLocatorId("detailsView"), id); } - + private void showActions() { addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, @@ -97,8 +124,8 @@ public class ServerTableView extends TableSection<ServerDatasource> { if (confirmed) { int[] selectedIds = getSelectedIds(selections); SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, Server.OperationMode.NORMAL, - new AsyncCallback<Void>() { + GWTServiceLookup.getCloudService().updateServerMode(selectedIds, + Server.OperationMode.NORMAL, new AsyncCallback<Void>() { public void onSuccess(Void arg0) { // TODO: msg Message msg = new Message(MSG @@ -136,8 +163,8 @@ public class ServerTableView extends TableSection<ServerDatasource> { if (confirmed) { int[] selectedIds = getSelectedIds(selections); SC.say("setting servers to maintenance mode, ids: " + selectedIds); - GWTServiceLookup.getCloudService().updateServerMode(selectedIds, Server.OperationMode.MAINTENANCE, - new AsyncCallback<Void>() { + GWTServiceLookup.getCloudService().updateServerMode(selectedIds, + Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() { public void onSuccess(Void arg0) { // TODO: msg Message msg = new Message(MSG @@ -214,15 +241,20 @@ public class ServerTableView extends TableSection<ServerDatasource> { return ids; }
- private ArrayList<String> getSelectedNames(ListGridRecord[] selections) { + private List<String> getSelectedNames(ListGridRecord[] selections) { if (selections == null) { return new ArrayList<String>(0); } - ArrayList<String> ids = new ArrayList<String>(selections.length); + List<String> ids = new ArrayList<String>(selections.length); for (ListGridRecord selection : selections) { ids.add(selection.getAttributeAsString(FIELD_NAME)); } return ids; }
+ @Override + public ViewName getViewName() { + return VIEW_ID; + } + }
commit 080f519cf5fad164aabe667558f9518aa72a686d Author: Jirka Kremser jkremser@redhat.com Date: Mon Nov 26 21:15:49 2012 +0100
ServerNodeDatasource has been split into two separate, AgentDetailView added, some refactoring of existing code
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index 894c833..189da3f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -178,7 +178,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), - MSG.view_adminTopology_servers() + " (GWT)"); + MSG.view_adminTopology_servers() + " (GWT)", null); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java new file mode 100644 index 0000000..187eac9 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java @@ -0,0 +1,195 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AGENT_TOKEN; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER; + +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.types.VisibilityMode; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.form.fields.StaticTextItem; +import com.smartgwt.client.widgets.layout.SectionStack; +import com.smartgwt.client.widgets.layout.SectionStackSection; + +import org.rhq.core.domain.resource.Agent; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +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.LocatableSectionStack; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; + +/** + * Shows details of a server. + * + * @author Jiri Kremser + */ +public class AgentDetailView extends LocatableVLayout { + + // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService(); + private final int agentId; + + private final LocatableSectionStack sectionStack; + private SectionStackSection detailsSection = null; + private SectionStackSection failoverListSection = null; + + private volatile int initSectionCount = 0; + + public AgentDetailView(String locatorId, int agentId) { + super(locatorId); + this.agentId = agentId; + setHeight100(); + setWidth100(); + setOverflow(Overflow.AUTO); + + sectionStack = new LocatableSectionStack(extendLocatorId("stack")); + sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE); + sectionStack.setWidth100(); + sectionStack.setHeight100(); + sectionStack.setMargin(5); + sectionStack.setOverflow(Overflow.VISIBLE); + } + + @Override + protected void onInit() { + super.onInit(); + GWTServiceLookup.getAgentService().getAgentByID(this.agentId, new AsyncCallback<Agent>() { + public void onSuccess(final Agent agent) { + prepareDetailsSection(sectionStack, agent); + prepareFailoverListSection(sectionStack, agent); + } + + public void onFailure(Throwable caught) { + SC.say("er1:" + caught); + //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); + } + }); + } + + public boolean isInitialized() { + return initSectionCount >= 2; + } + + @Override + protected void onDraw() { + super.onDraw(); + + // wait until we have all of the sections before we show them. We don't use InitializableView because, + // it seems they are not supported (in the applicable renderView()) at this level. + new Timer() { + final long startTime = System.currentTimeMillis(); + + public void run() { + if (isInitialized()) { + if (null != detailsSection) { + sectionStack.addSection(detailsSection); + } + if (null != failoverListSection) { + sectionStack.addSection(failoverListSection); + } + + addMember(sectionStack); + markForRedraw(); + + } else { + // don't wait forever, give up after 20s and show what we have + long elapsedMillis = System.currentTimeMillis() - startTime; + if (elapsedMillis > 20000) { + initSectionCount = 2; + } + schedule(100); // Reschedule the timer. + } + } + }.run(); // fire the timer immediately + } + + private void prepareFailoverListSection(SectionStack stack, Agent agent) { + SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_agentDetail_agentFailoverList()); + section.setExpanded(true); + ServerTableView agentsTable = new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null, + agent.getId()); + section.setItems(agentsTable); + + failoverListSection = section; + ++initSectionCount; + return; + } + + private void prepareDetailsSection(SectionStack stack, Agent agent) { + final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm")); + form.setMargin(10); + form.setWidth100(); + form.setWrapItemTitles(false); + form.setNumCols(2); + + StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title()); + nameItem.setValue(agent.getName()); + + StaticTextItem addressItem = new StaticTextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title()); + addressItem.setValue(agent.getAddress()); + + StaticTextItem portItem = new StaticTextItem(FIELD_PORT.propertyName(), FIELD_PORT.title()); + portItem.setValue(agent.getPort()); + + StaticTextItem tokenItem = new StaticTextItem(FIELD_AGENT_TOKEN.propertyName(), FIELD_AGENT_TOKEN.title()); + tokenItem.setValue(agent.getAgentToken()); + + StaticTextItem lastAvailabilityItem = new StaticTextItem(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), + FIELD_LAST_AVAILABILITY_REPORT.title()); + String lastReport = agent.getLastAvailabilityReport() == null ? "unknown" : TimestampCellFormatter.format( + Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM); + lastAvailabilityItem.setValue(lastReport); + + StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(), + FIELD_AFFINITY_GROUP.title()); + affinityGroupItem.setValue(agent.getAffinityGroup() == null ? "" : agent.getAffinityGroup().getName()); + + // TODO: create clickable link + StaticTextItem currentServerItem = new StaticTextItem(FIELD_SERVER.propertyName(), FIELD_SERVER.title()); + currentServerItem.setValue(agent.getServer() == null ? "none" : agent.getServer().getName()); + + // ButtonItem saveButton = new ButtonItem(); + // saveButton.setOverflow(Overflow.VISIBLE); + // saveButton.setTitle(MSG.common_button_save()); + // saveButton.addClickHandler(new ClickHandler() { + // public void onClick(ClickEvent event) { + // RecordList list = form.getRecordList(); + // SC.say("name is " + list.get(0).getAttribute("name")); + // } + // }); + + form.setItems(nameItem, addressItem, portItem, tokenItem, lastAvailabilityItem, affinityGroupItem, + currentServerItem); + + SectionStackSection section = new SectionStackSection(MSG.common_title_details()); + section.setExpanded(true); + section.setItems(form); + + detailsSection = section; + ++initSectionCount; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java index 0792373..3bb0280 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java @@ -81,10 +81,10 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
fields.add(FIELD_NAME.getListGridField("*")); fields.add(FIELD_SERVER.getListGridField("120")); - fields.add(FIELD_ADDRESS.getListGridField("105")); + fields.add(FIELD_ADDRESS.getListGridField("110")); fields.add(FIELD_PORT.getListGridField("90"));
- ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("90"); + ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120"); TimestampCellFormatter.prepareDateField(lastAvailabilityReportField); fields.add(lastAvailabilityReportField);
@@ -97,7 +97,6 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { final PageControl pc = getPageControl(request);
- // TODO: null is for all agents -> change to particular server id GWTServiceLookup.getAgentService().getAgentsByServer(serverId, pc, new AsyncCallback<PageList<Agent>>() { public void onSuccess(PageList<Agent> result) { response.setData(buildRecords(result)); @@ -151,9 +150,10 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { record.setAttribute(FIELD_NAME.propertyName(), from.getName()); record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress()); record.setAttribute(FIELD_PORT.propertyName(), from.getPort()); - record.setAttribute(FIELD_SERVER.propertyName(), from.getServer().getName()); + record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "none" : from.getServer().getName()); record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport()); - record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup()); + record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from + .getAffinityGroup().getName()); return record; }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java index d0948f4..ae4dc50 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java @@ -18,14 +18,12 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import java.util.ArrayList; import java.util.List;
import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; -import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.enterprise.gui.coregui.client.IconEnum; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; @@ -61,30 +59,30 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> {
@Override public Canvas getDetailsView(Integer id) { - return new ServerDetailView(extendLocatorId("detailsView"), id); + return new AgentDetailView(extendLocatorId("detailsView"), id); }
- private int[] getSelectedIds(ListGridRecord[] selections) { - if (selections == null) { - return new int[0]; - } - int[] ids = new int[selections.length]; - int i = 0; - for (ListGridRecord selection : selections) { - ids[i++] = selection.getAttributeAsInt(FIELD_ID); - } - return ids; - } - - private ArrayList<String> getSelectedNames(ListGridRecord[] selections) { - if (selections == null) { - return new ArrayList<String>(0); - } - ArrayList<String> ids = new ArrayList<String>(selections.length); - for (ListGridRecord selection : selections) { - ids.add(selection.getAttributeAsString(FIELD_NAME)); - } - return ids; - } +// private int[] getSelectedIds(ListGridRecord[] selections) { +// if (selections == null) { +// return new int[0]; +// } +// int[] ids = new int[selections.length]; +// int i = 0; +// for (ListGridRecord selection : selections) { +// ids[i++] = selection.getAttributeAsInt(FIELD_ID); +// } +// return ids; +// } +// +// private ArrayList<String> getSelectedNames(ListGridRecord[] selections) { +// if (selections == null) { +// return new ArrayList<String>(0); +// } +// ArrayList<String> ids = new ArrayList<String>(selections.length); +// for (ListGridRecord selection : selections) { +// ids.add(selection.getAttributeAsString(FIELD_NAME)); +// } +// return ids; +// }
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java new file mode 100644 index 0000000..0e21356 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java @@ -0,0 +1,169 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_MTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_OPERATION_MODE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_SECURE_PORT; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.DSRequest; +import com.smartgwt.client.data.DSResponse; +import com.smartgwt.client.data.DataSourceField; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.data.fields.DataSourceIntegerField; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; + +import org.rhq.core.domain.cloud.FailoverListDetails; +import org.rhq.core.domain.criteria.Criteria; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; + +/** + * @author Jirka Kremser + * + */ +public class FailoverListItemDatasource extends ServerDatasource<FailoverListDetails, Criteria> { + + private final int agentId; + + public FailoverListItemDatasource(int agentId) { + super(); + this.agentId = agentId; + List<DataSourceField> fields = addDataSourceFields(); + addFields(fields); + } + + @Override + protected List<DataSourceField> addDataSourceFields() { + List<DataSourceField> fields = super.addDataSourceFields(); + DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); + idField.setPrimaryKey(true); + idField.setHidden(true); + fields.add(idField); + return fields; + } + + @Override + public List<ListGridField> getListGridFields() { + List<ListGridField> fields = new ArrayList<ListGridField>(); + + ListGridField idField = FIELD_ID.getListGridField(); + idField.setHidden(true); + fields.add(idField); + fields.add(FIELD_ORDINAL.getListGridField("55")); + fields.add(FIELD_NAME.getListGridField("*")); + fields.add(FIELD_OPERATION_MODE.getListGridField("90")); + fields.add(FIELD_ADDRESS.getListGridField("110")); + fields.add(FIELD_PORT.getListGridField("90")); + fields.add(FIELD_SECURE_PORT.getListGridField("75")); + + ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("110"); + TimestampCellFormatter.prepareDateField(lastUpdateTimeField); + fields.add(lastUpdateTimeField); + + fields.add(FIELD_AFFINITY_GROUP.getListGridField("80")); + + return fields; + } + + @Override + protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { + final PageControl pc = getPageControl(request); + + GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc, new AsyncCallback<List<FailoverListDetails>>() { + public void onSuccess(List<FailoverListDetails> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); + } + + /** + * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, + * pagination, but *not* filter fields. + * + * @param request the request to turn into a page control + * @return the page control for passing to criteria and other queries + */ + protected PageControl getPageControl(DSRequest request) { + // Initialize paging. + PageControl pageControl = new PageControl(0, getDataPageSize()); + + // Initialize sorting. + String sortBy = request.getAttribute("sortBy"); + if (sortBy != null) { + String[] sorts = sortBy.split(","); + for (String sort : sorts) { + PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; + String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; + pageControl.addDefaultOrderingField(columnName, ordering); + } + } + + return pageControl; + } + + @Override + public FailoverListDetails copyValues(Record from) { + throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)"); + } + + @Override + public ListGridRecord copyValues(FailoverListDetails from) { + ListGridRecord record = new ListGridRecord(); + record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId()); + record.setAttribute(FIELD_ORDINAL.propertyName(), from.getOrdinal()); + record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName()); + record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode()); + record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress()); + record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort()); + record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort()); + record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime()); + record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? "" + : from.getServer().getAffinityGroup().getName()); + return record; + } + + @Override + protected Criteria getFetchCriteria(DSRequest request) { + // we don't use criteria for this datasource, just return null + return null; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java new file mode 100644 index 0000000..4c380fd --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java @@ -0,0 +1,83 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.enterprise.gui.coregui.client.CoreGUI; + +/** + * @author Jirka Kremser + * + */ +public enum FailoverListItemDatasourceField { + + FIELD_ID("id", CoreGUI.getMessages().common_title_id()), + + FIELD_ORDINAL("ordinal", "poradi"), + + FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), + + FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()), + + FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()), + + FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()), + + FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), + + FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()), + + FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), + + FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); + + /** + * Corresponds to a property name of Server (e.g. operationMode). + */ + private String propertyName; + + /** + * The table header for the field or property (e.g. Mode). + */ + private String title; + + private FailoverListItemDatasourceField(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(String width) { + ListGridField field = new ListGridField(propertyName, title); + field.setWidth(width); + return field; + } +} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java new file mode 100644 index 0000000..619821d --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java @@ -0,0 +1,33 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import java.util.List; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.core.domain.criteria.BaseCriteria; +import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; + +/** + * @author Jirka Kremser + */ +public abstract class ServerDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> { + protected abstract List<ListGridField> getListGridFields(); +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java index 1d5ae15..1d9dc46 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java @@ -19,16 +19,14 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_CTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_MTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_OPERATION_MODE; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_SECURE_PORT; - -import java.util.List; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_CTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT;
import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -46,7 +44,6 @@ import com.smartgwt.client.widgets.layout.SectionStack; import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.Server; -import org.rhq.core.domain.resource.Agent; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; @@ -90,16 +87,17 @@ public class ServerDetailView extends LocatableVLayout { GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() { public void onSuccess(final Server server) { prepareDetailsSection(sectionStack, server); - GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), - new AsyncCallback<List<Agent>>() { - public void onSuccess(List<Agent> agents) { - prepareAgentSection(sectionStack, server, agents); - }; - - public void onFailure(Throwable caught) { - //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); - } - }); + prepareAgentSection(sectionStack, server); +// GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(), +// new AsyncCallback<List<Agent>>() { +// public void onSuccess(List<Agent> agents) { +// prepareAgentSection(sectionStack, server, agents); +// }; +// +// public void onFailure(Throwable caught) { +// //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught); +// } +// }); }
public void onFailure(Throwable caught) { @@ -146,7 +144,7 @@ public class ServerDetailView extends LocatableVLayout { }.run(); // fire the timer immediately }
- private void prepareAgentSection(SectionStack stack, Server server, List<Agent> agents) { + private void prepareAgentSection(SectionStack stack, Server server) { SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents()); section.setExpanded(true); AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, serverId); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java deleted file mode 100644 index de6cf21..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.admin.topology; - -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ADDRESS; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AFFINITY_GROUP; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AGENT_COUNT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ID; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_MTIME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_NAME; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_OPERATION_MODE; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_PORT; -import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_SECURE_PORT; - -import java.util.ArrayList; -import java.util.List; - -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.smartgwt.client.data.DSRequest; -import com.smartgwt.client.data.DSResponse; -import com.smartgwt.client.data.DataSourceField; -import com.smartgwt.client.data.Record; -import com.smartgwt.client.data.fields.DataSourceIntegerField; -import com.smartgwt.client.widgets.grid.ListGridField; -import com.smartgwt.client.widgets.grid.ListGridRecord; - -import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; -import org.rhq.core.domain.criteria.Criteria; -import org.rhq.core.domain.util.PageControl; -import org.rhq.core.domain.util.PageOrdering; -import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; -import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; -import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; - -/** - * @author Jirka Kremser - * - */ -public class ServerNodeDatasource extends RPCDataSource<ServerWithAgentCountComposite, Criteria> { - - public ServerNodeDatasource() { - super(); - List<DataSourceField> fields = addDataSourceFields(); - addFields(fields); - } - - @Override - protected List<DataSourceField> addDataSourceFields() { - List<DataSourceField> fields = super.addDataSourceFields(); - DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); - idField.setPrimaryKey(true); - idField.setHidden(true); - fields.add(idField); - return fields; - } - - public List<ListGridField> getListGridFields() { - List<ListGridField> fields = new ArrayList<ListGridField>(); - - ListGridField idField = FIELD_ID.getListGridField(); - idField.setHidden(true); - fields.add(idField); - - fields.add(FIELD_NAME.getListGridField("*")); - fields.add(FIELD_OPERATION_MODE.getListGridField("90")); - fields.add(FIELD_ADDRESS.getListGridField("20%")); - fields.add(FIELD_PORT.getListGridField("90")); - fields.add(FIELD_SECURE_PORT.getListGridField("75")); - - ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("20%"); - TimestampCellFormatter.prepareDateField(lastUpdateTimeField); - fields.add(lastUpdateTimeField); - - fields.add(FIELD_AFFINITY_GROUP.getListGridField("80")); - fields.add(FIELD_AGENT_COUNT.getListGridField("75")); - - return fields; - } - - @Override - protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { - final PageControl pc = getPageControl(request); - - GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() { - public void onSuccess(List<ServerWithAgentCountComposite> result) { - response.setData(buildRecords(result)); - response.setTotalRows(result.size()); - processResponse(request.getRequestId(), response); - } - - @Override - public void onFailure(Throwable t) { - //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); - response.setStatus(DSResponse.STATUS_FAILURE); - processResponse(request.getRequestId(), response); - } - }); - } - - /** - * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, - * pagination, but *not* filter fields. - * - * @param request the request to turn into a page control - * @return the page control for passing to criteria and other queries - */ - protected PageControl getPageControl(DSRequest request) { - // Initialize paging. - PageControl pageControl = new PageControl(0, getDataPageSize()); - - // Initialize sorting. - String sortBy = request.getAttribute("sortBy"); - if (sortBy != null) { - String[] sorts = sortBy.split(","); - for (String sort : sorts) { - PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; - String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; - pageControl.addDefaultOrderingField(columnName, ordering); - } - } - - return pageControl; - } - - @Override - public ServerWithAgentCountComposite copyValues(Record from) { - throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)"); - } - - @Override - public ListGridRecord copyValues(ServerWithAgentCountComposite from) { - ListGridRecord record = new ListGridRecord(); - record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId()); - record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName()); - record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode()); - record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress()); - record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort()); - record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort()); - record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime()); - record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup()); - record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount()); - return record; - } - - @Override - protected Criteria getFetchCriteria(DSRequest request) { - // we don't use criteria for this datasource, just return null - return null; - } -} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java deleted file mode 100644 index 1e88e4d..0000000 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * RHQ Management Platform - * Copyright (C) 2005-2012 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.admin.topology; - -import com.smartgwt.client.widgets.grid.ListGridField; - -import org.rhq.enterprise.gui.coregui.client.CoreGUI; - -/** - * @author Jirka Kremser - * - */ -public enum ServerNodeDatasourceField { - - FIELD_ID("id", CoreGUI.getMessages().common_title_id()), - - FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), - - FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()), - - FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()), - - FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()), - - FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), - - FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()), - - FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()), - - FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), - - FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); - - /** - * Corresponds to a property name of Server (e.g. operationMode). - */ - private String propertyName; - - /** - * The table header for the field or property (e.g. Mode). - */ - private String title; - - private ServerNodeDatasourceField(String propertyName, String title) { - this.propertyName = propertyName; - this.title = title; - } - - public String propertyName() { - return propertyName; - } - - public String title() { - return title; - } - - public ListGridField getListGridField() { - return new ListGridField(propertyName, title); - } - - public ListGridField getListGridField(String width) { - ListGridField field = new ListGridField(propertyName, title); - field.setWidth(width); - return field; - } -} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java index 6817fdf..36c77ab 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java @@ -18,6 +18,8 @@ */ package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL; + import java.util.ArrayList; import java.util.List;
@@ -45,18 +47,21 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message; /** * @author Jiri Kremser */ -public class ServerTableView extends TableSection<ServerNodeDatasource> { +public class ServerTableView extends TableSection<ServerDatasource> {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)", IconEnum.SERVERS); public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID; + + private final boolean showActions;
- public ServerTableView(String locatorId, String tableTitle) { + public ServerTableView(String locatorId, String tableTitle, Integer agentId) { super(locatorId, tableTitle); + this.showActions = agentId == null; setHeight100(); setWidth100(); - setDataSource(new ServerNodeDatasource()); + setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(agentId)); }
@Override @@ -64,8 +69,21 @@ public class ServerTableView extends TableSection<ServerNodeDatasource> { List<ListGridField> fields = getDataSource().getListGridFields(); ListGrid listGrid = getListGrid(); listGrid.setFields(fields.toArray(new ListGridField[fields.size()])); - listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); + if (showActions) { + listGrid.sort(FIELD_NAME, SortDirection.ASCENDING); + showActions(); + } else { + listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING); + } + super.configureTable(); + }
+ @Override + public Canvas getDetailsView(Integer id) { + return new ServerDetailView(extendLocatorId("detailsView"), id); + } + + private void showActions() { addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) { @@ -182,13 +200,6 @@ public class ServerTableView extends TableSection<ServerNodeDatasource> { }); } }); - - super.configureTable(); - } - - @Override - public Canvas getDetailsView(Integer id) { - return new ServerDetailView(extendLocatorId("detailsView"), id); }
private int[] getSelectedIds(ListGridRecord[] selections) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java new file mode 100644 index 0000000..916f891 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java @@ -0,0 +1,166 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AGENT_COUNT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ID; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT; +import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.DSRequest; +import com.smartgwt.client.data.DSResponse; +import com.smartgwt.client.data.DataSourceField; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.data.fields.DataSourceIntegerField; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; + +import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; +import org.rhq.core.domain.criteria.Criteria; +import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageOrdering; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; + +/** + * @author Jirka Kremser + * + */ +public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithAgentCountComposite, Criteria> { + + public ServerWithAgentCountDatasource() { + super(); + List<DataSourceField> fields = addDataSourceFields(); + addFields(fields); + } + + @Override + protected List<DataSourceField> addDataSourceFields() { + List<DataSourceField> fields = super.addDataSourceFields(); + DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50); + idField.setPrimaryKey(true); + idField.setHidden(true); + fields.add(idField); + return fields; + } + + public List<ListGridField> getListGridFields() { + List<ListGridField> fields = new ArrayList<ListGridField>(); + + ListGridField idField = FIELD_ID.getListGridField(); + idField.setHidden(true); + fields.add(idField); + + fields.add(FIELD_NAME.getListGridField("*")); + fields.add(FIELD_OPERATION_MODE.getListGridField("90")); + fields.add(FIELD_ADDRESS.getListGridField("110")); + fields.add(FIELD_PORT.getListGridField("90")); + fields.add(FIELD_SECURE_PORT.getListGridField("75")); + + ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("110"); + TimestampCellFormatter.prepareDateField(lastUpdateTimeField); + fields.add(lastUpdateTimeField); + + fields.add(FIELD_AFFINITY_GROUP.getListGridField("80")); + fields.add(FIELD_AGENT_COUNT.getListGridField("75")); + + return fields; + } + + @Override + protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { + final PageControl pc = getPageControl(request); + + GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() { + public void onSuccess(List<ServerWithAgentCountComposite> result) { + response.setData(buildRecords(result)); + response.setTotalRows(result.size()); + processResponse(request.getRequestId(), response); + } + + @Override + public void onFailure(Throwable t) { + //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t); + response.setStatus(DSResponse.STATUS_FAILURE); + processResponse(request.getRequestId(), response); + } + }); + } + + /** + * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields, + * pagination, but *not* filter fields. + * + * @param request the request to turn into a page control + * @return the page control for passing to criteria and other queries + */ + protected PageControl getPageControl(DSRequest request) { + // Initialize paging. + PageControl pageControl = new PageControl(0, getDataPageSize()); + + // Initialize sorting. + String sortBy = request.getAttribute("sortBy"); + if (sortBy != null) { + String[] sorts = sortBy.split(","); + for (String sort : sorts) { + PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC; + String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort; + pageControl.addDefaultOrderingField(columnName, ordering); + } + } + + return pageControl; + } + + @Override + public ServerWithAgentCountComposite copyValues(Record from) { + throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)"); + } + + @Override + public ListGridRecord copyValues(ServerWithAgentCountComposite from) { + ListGridRecord record = new ListGridRecord(); + record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId()); + record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName()); + record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode()); + record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress()); + record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort()); + record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort()); + record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime()); + record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? "" + : from.getServer().getAffinityGroup().getName()); + record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount()); + return record; + } + + @Override + protected Criteria getFetchCriteria(DSRequest request) { + // we don't use criteria for this datasource, just return null + return null; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java new file mode 100644 index 0000000..f393288 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java @@ -0,0 +1,83 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2012 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.admin.topology; + +import com.smartgwt.client.widgets.grid.ListGridField; + +import org.rhq.enterprise.gui.coregui.client.CoreGUI; + +/** + * @author Jirka Kremser + * + */ +public enum ServerWithAgentCountDatasourceField { + + FIELD_ID("id", CoreGUI.getMessages().common_title_id()), + + FIELD_NAME("name", CoreGUI.getMessages().common_title_name()), + + FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()), + + FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()), + + FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()), + + FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()), + + FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()), + + FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()), + + FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()), + + FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount()); + + /** + * Corresponds to a property name of Server (e.g. operationMode). + */ + private String propertyName; + + /** + * The table header for the field or property (e.g. Mode). + */ + private String title; + + private ServerWithAgentCountDatasourceField(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(String width) { + ListGridField field = new ListGridField(propertyName, title); + field.setWidth(width); + return field; + } +} \ No newline at end of file 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 e7c162a..89ac705 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 @@ -38,5 +38,7 @@ public interface AgentGWTService extends RemoteService { Boolean pingAgentForResource(int resourceId) throws RuntimeException;
List<Agent> getAllAgents() throws RuntimeException; + + Agent getAgentByID(int agentId) throws RuntimeException;
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java index 44a285a..e1c695b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java @@ -26,6 +26,7 @@ import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
+import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; import org.rhq.core.domain.resource.Agent; @@ -50,5 +51,7 @@ public interface CloudGWTService extends RemoteService { void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException; + + List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
} 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 5e2d50f..7a85d92 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 @@ -73,8 +73,18 @@ public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements Agent @Override public PageList<Agent> getAgentsByServer(Integer serverId, PageControl pc) throws RuntimeException { try { - //security handled in AgentManagerBean. requires View_Resource. - return SerialUtility.prepare(agentManager.getAgentsByServer(getSessionSubject(), serverId, pc), "AgentService.getAgentsByServer"); + //TODO: security handled in AgentManagerBean. requires View_Resource. + return SerialUtility.prepare(agentManager.getAgentsByServer(getSessionSubject(), serverId, pc), + "AgentService.getAgentsByServer"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + + @Override + public Agent getAgentByID(int agentId) throws RuntimeException { + try { + return SerialUtility.prepare(agentManager.getAgentByID(agentId), "AgentService.getAgentByID"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java index 118005f..0e5fd88 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java @@ -27,6 +27,7 @@ import java.util.List;
import org.apache.commons.lang.ArrayUtils;
+import org.rhq.core.domain.cloud.FailoverListDetails; import org.rhq.core.domain.cloud.Server; import org.rhq.core.domain.cloud.Server.OperationMode; import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite; @@ -50,7 +51,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud @Override public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException { try { - return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc), "CloudGWTServiceImpl.getServers"); + return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc), + "CloudGWTServiceImpl.getServers"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } @@ -68,14 +70,14 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud @Override public List<Agent> getAgentsByServerName(String serverName) throws RuntimeException { try { - List <Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), "CloudGWTServiceImpl.getAgentsByServerName"); + List<Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), + "CloudGWTServiceImpl.getAgentsByServerName"); return new ArrayList<Agent>(persistentBag); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } }
- @Override public void deleteServers(int[] serverIds) throws RuntimeException { try { @@ -85,7 +87,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
- @Override public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException { try { @@ -95,4 +96,14 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud } }
+ @Override + public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) { + try { + return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc), + "CloudGWTServiceImpl.getFailoverListDetailsByAgentId"); + } catch (Throwable t) { + throw getExceptionToThrowToClient(t); + } + } + }
commit 41d2e549663587ce3d6e81a962ffe6808a0fc1e6 Author: Jirka Kremser jkremser@redhat.com Date: Sat Nov 24 13:42:24 2012 +0100
Detail of server is now fully functional, it also displays the list of connected agents
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index 963fee3..894c833 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -185,7 +185,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), - MSG.view_adminTopology_agents() + " (GWT)"); + MSG.view_adminTopology_agents() + " (GWT)", null); } }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java index aaf6cc8..0792373 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java @@ -41,6 +41,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.criteria.Criteria; import org.rhq.core.domain.resource.Agent; import org.rhq.core.domain.util.PageControl; +import org.rhq.core.domain.util.PageList; import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; @@ -51,9 +52,12 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; * */ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { + + private final Integer serverId;
- public AgentNodeDatasource() { + public AgentNodeDatasource(Integer serverId) { super(); + this.serverId = serverId; List<DataSourceField> fields = addDataSourceFields(); addFields(fields); } @@ -76,15 +80,15 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { fields.add(idField);
fields.add(FIELD_NAME.getListGridField("*")); - fields.add(FIELD_SERVER.getListGridField("90")); - fields.add(FIELD_ADDRESS.getListGridField("90")); + fields.add(FIELD_SERVER.getListGridField("120")); + fields.add(FIELD_ADDRESS.getListGridField("105")); fields.add(FIELD_PORT.getListGridField("90"));
ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("90"); TimestampCellFormatter.prepareDateField(lastAvailabilityReportField); fields.add(lastAvailabilityReportField);
- fields.add(FIELD_AFFINITY_GROUP.getListGridField("80")); + fields.add(FIELD_AFFINITY_GROUP.getListGridField("100"));
return fields; } @@ -93,9 +97,9 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) { final PageControl pc = getPageControl(request);
- // TODO: getAllAgents -> agentManager.getAgentsByServer(subject, null, pc); - GWTServiceLookup.getAgentService().getAllAgents(new AsyncCallback<List<Agent>>() { - public void onSuccess(List<Agent> result) { + // TODO: null is for all agents -> change to particular server id + GWTServiceLookup.getAgentService().getAgentsByServer(serverId, pc, new AsyncCallback<PageList<Agent>>() { + public void onSuccess(PageList<Agent> result) { response.setData(buildRecords(result)); response.setTotalRows(result.size()); processResponse(request.getRequestId(), response); @@ -147,7 +151,7 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> { record.setAttribute(FIELD_NAME.propertyName(), from.getName()); record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress()); record.setAttribute(FIELD_PORT.propertyName(), from.getPort()); - record.setAttribute(FIELD_SERVER.propertyName(), from.getServer()); + record.setAttribute(FIELD_SERVER.propertyName(), from.getServer().getName()); record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport()); record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup()); return record; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterpr