etc/eclipse-tools/maven/RHQ | 13
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PluginConfigurationUpdateCriteria.java | 10
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceConfigurationUpdateCriteria.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/buttons/BackButton.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java | 252 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationSettings.java | 142 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java | 290 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java | 160 +----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java | 37 +
modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Connection_inprogress_16.png |binary
modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Emblem_inprogress_16.png |binary
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java | 1
14 files changed, 806 insertions(+), 121 deletions(-)
New commits:
commit 688336923a684a20e16f858fa426b4d598381c10
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 14:05:24 2010 -0500
have a tool in eclipse to generate GWT Messages
diff --git a/etc/eclipse-tools/maven/RHQ Maven Build - Generate GWT I18N Messages.launch b/etc/eclipse-tools/maven/RHQ Maven Build - Generate GWT I18N Messages.launch
new file mode 100644
index 0000000..ba390ec
--- /dev/null
+++ b/etc/eclipse-tools/maven/RHQ Maven Build - Generate GWT I18N Messages.launch
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<stringAttribute key="bad_container_name" value="\rhq\etc\eclipse-tools\maven"/>
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1289934079470_4" label="working set" name="working set"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/rhq/modules/enterprise/gui/coregui/pom.xml" type="1"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/rhq/modules/enterprise/gui/coregui/src" type="2"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/rhq/modules/enterprise/gui/coregui/target" type="2"/> </launchConfigurationWorkingSet>}"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${none}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${env_var:M2_HOME}/bin/${MAVEN_EXE}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-o -Dmaven.test.skip=true process-resources gwt:i18n"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/rhq/modules/enterprise/gui/coregui}"/>
+</launchConfiguration>
commit a5726e2f39b6fc633c70897a058fb727106924fa
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:44:35 2010 -0500
add new param to action method
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
index ecf34ea..d2f5b53 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
@@ -146,7 +146,7 @@ public class HistoryGroupPluginConfigurationTable extends Table {
this.groupPerms.isInventory() ? TableActionEnablement.ANY : TableActionEnablement.NEVER) {
@Override
- public void executeAction(final ListGridRecord[] selection) {
+ public void executeAction(final ListGridRecord[] selection, Object actionValue) {
if (selection == null || selection.length == 0) {
return;
}
@@ -179,7 +179,7 @@ public class HistoryGroupPluginConfigurationTable extends Table {
addTableAction(extendLocatorId("viewSettingsAction"), "View Settings", new AbstractTableAction(
TableActionEnablement.SINGLE) {
@Override
- public void executeAction(ListGridRecord[] selection) {
+ public void executeAction(ListGridRecord[] selection, Object actionValue) {
CoreGUI.goToView(LinkManager
.getGroupPluginConfigurationUpdateHistoryLink(HistoryGroupPluginConfigurationTable.this.group
.getId())
@@ -190,7 +190,7 @@ public class HistoryGroupPluginConfigurationTable extends Table {
addTableAction(extendLocatorId("viewMemberHistoryAction"), "View Member History", new AbstractTableAction(
TableActionEnablement.SINGLE) {
@Override
- public void executeAction(ListGridRecord[] selection) {
+ public void executeAction(ListGridRecord[] selection, Object actionValue) {
CoreGUI.goToView(LinkManager
.getGroupPluginConfigurationUpdateHistoryLink(HistoryGroupPluginConfigurationTable.this.group
.getId())
commit 144b42505b807ed34168e1779e773fa3eb0824d1
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:41:20 2010 -0500
merge conflicts
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
new file mode 100644
index 0000000..8b43279
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
@@ -0,0 +1,252 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.inventory;
+
+import java.util.Date;
+import java.util.HashMap;
+
+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.Record;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.events.CloseClientEvent;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
+
+import org.rhq.core.domain.configuration.AbstractConfigurationUpdate;
+import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
+import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
+import org.rhq.core.domain.criteria.PluginConfigurationUpdateCriteria;
+import org.rhq.core.domain.resource.composite.ResourcePermission;
+import org.rhq.core.domain.resource.group.ResourceGroup;
+import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
+import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHTMLPane;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
+
+/**
+ * Shows a table of individual resource members that belonged to the group when the group plugin configuration was updated.
+ *
+ * @author John Mazzitelli
+ */
+public class HistoryGroupPluginConfigurationMembers extends LocatableVLayout {
+ private final ResourceGroup group;
+ private final ResourcePermission groupPerms;
+ private final int groupUpdateId;
+
+ public HistoryGroupPluginConfigurationMembers(String locatorId, ResourceGroupComposite groupComposite, int updateId) {
+ super(locatorId);
+ this.group = groupComposite.getResourceGroup();
+ this.groupPerms = groupComposite.getResourcePermission();
+ this.groupUpdateId = updateId;
+
+ setMargin(5);
+ setMembersMargin(5);
+ String backPath = LinkManager.getGroupPluginConfigurationUpdateHistoryLink(this.group.getId());
+ BackButton backButton = new BackButton(extendLocatorId("BackButton"), "Back to List", backPath);
+ addMember(backButton);
+
+ MembersTable table = new MembersTable(extendLocatorId("Table"));
+ addMember(table);
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+ }
+
+ private class MembersTable extends Table {
+ public MembersTable(String locatorId) {
+ super(locatorId, "Group Connection Settings Member Histories");
+ setDataSource(new DataSource());
+ }
+
+ @Override
+ protected void configureTable() {
+ ListGridField fieldResource = new ListGridField("resourceLink", "Resource");
+ ListGridField fieldDateCreated = new ListGridField("dateCreated", "Date Created");
+ ListGridField fieldLastUpdated = new ListGridField("lastUpdated", "Last Updated");
+ ListGridField fieldUser = new ListGridField("user", "User");
+ ListGridField fieldStatus = new ListGridField("status", "Status");
+
+ fieldResource.setWidth("*");
+ fieldDateCreated.setWidth("15%");
+ fieldLastUpdated.setWidth("15%");
+ fieldUser.setWidth("10%");
+ fieldStatus.setWidth("10%");
+
+ fieldResource.setType(ListGridFieldType.LINK);
+
+ fieldStatus.setType(ListGridFieldType.ICON);
+ HashMap<String, String> statusIcons = new HashMap<String, String>(4);
+ statusIcons.put(ConfigurationUpdateStatus.SUCCESS.name(), "/images/icons/Connection_ok_16.png");
+ statusIcons.put(ConfigurationUpdateStatus.FAILURE.name(), "/images/icons/Connection_failed_16.png");
+ statusIcons.put(ConfigurationUpdateStatus.INPROGRESS.name(), "/images/icons/Connection_inprogress_16.png");
+ statusIcons.put(ConfigurationUpdateStatus.NOCHANGE.name(), "/images/icons/Connection_16.png");
+ fieldStatus.setValueIcons(statusIcons);
+ fieldStatus.addRecordClickHandler(new RecordClickHandler() {
+ @Override
+ public void onRecordClick(RecordClickEvent event) {
+ final Window winModal = new LocatableWindow(HistoryGroupPluginConfigurationMembers.this
+ .extendLocatorId("statusDetailsWin"));
+ winModal.setTitle("Status Details");
+ winModal.setOverflow(Overflow.VISIBLE);
+ winModal.setShowMinimizeButton(false);
+ winModal.setShowMaximizeButton(true);
+ winModal.setIsModal(true);
+ winModal.setShowModalMask(true);
+ winModal.setAutoSize(true);
+ winModal.setAutoCenter(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
+ winModal.centerInPage();
+ winModal.addCloseClickHandler(new CloseClickHandler() {
+ @Override
+ public void onCloseClick(CloseClientEvent event) {
+ winModal.markForDestroy();
+ }
+ });
+
+ LocatableHTMLPane htmlPane = new LocatableHTMLPane(HistoryGroupPluginConfigurationMembers.this
+ .extendLocatorId("statusDetailsPane"));
+ htmlPane.setMargin(10);
+ htmlPane.setDefaultWidth(500);
+ htmlPane.setDefaultHeight(400);
+ htmlPane.setContents("<pre>" + getStatusHtmlString(event.getRecord()) + "</pre>");
+ winModal.addItem(htmlPane);
+ winModal.show();
+ }
+ });
+ fieldStatus.setShowHover(true);
+ fieldStatus.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) {
+ String html = getStatusHtmlString(record);
+ if (html.length() > 80) {
+ // this was probably an error stack trace, snip it so the tooltip isn't too big
+ html = "<pre>" + html.substring(0, 80)
+ + "...</pre><p>Click the status icon for full details</p>";
+ }
+ return html;
+ }
+ });
+
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fieldResource, fieldDateCreated, fieldLastUpdated, fieldUser, fieldStatus);
+
+ listGrid.setLinkTextProperty("resourceName");
+ }
+
+ private String getStatusHtmlString(Record record) {
+ String html = null;
+ AbstractConfigurationUpdate obj = (AbstractConfigurationUpdate) record.getAttributeAsObject("object");
+ switch (obj.getStatus()) {
+ case SUCCESS: {
+ html = "This configuration update was successful";
+ break;
+ }
+ case INPROGRESS: {
+ html = "This configuration update is still in progress";
+ break;
+ }
+ case NOCHANGE: {
+ html = "No changes were made to the configuration";
+ break;
+ }
+ case FAILURE: {
+ html = obj.getErrorMessage();
+ if (html == null) {
+ html = "This configuration update failed for an unknown reason.";
+ }
+ break;
+ }
+ }
+ return html;
+ }
+
+ private class DataSource extends RPCDataSource<PluginConfigurationUpdate> {
+
+ @Override
+ public PluginConfigurationUpdate copyValues(Record from) {
+ return (PluginConfigurationUpdate) from.getAttributeAsObject("object");
+ }
+
+ @Override
+ public ListGridRecord copyValues(PluginConfigurationUpdate from) {
+ ListGridRecord record = new ListGridRecord();
+
+ record.setAttribute("id", from.getId());
+ record.setAttribute("resourceLink", LinkManager.getResourceLink(from.getResource().getId()));
+ record.setAttribute("resourceName", from.getResource().getName());
+ record.setAttribute("dateCreated", new Date(from.getCreatedTime()));
+ record.setAttribute("lastUpdated", new Date(from.getModifiedTime()));
+ record.setAttribute("user", from.getSubjectName());
+ record.setAttribute("status", from.getStatus().name());
+
+ record.setAttribute("object", from);
+
+ return record;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response) {
+ ConfigurationGWTServiceAsync configurationService = GWTServiceLookup.getConfigurationService();
+
+ PluginConfigurationUpdateCriteria criteria = new PluginConfigurationUpdateCriteria();
+ criteria.addFilterGroupConfigurationUpdateId(HistoryGroupPluginConfigurationMembers.this.groupUpdateId);
+ // TODO need to disambiguate resources
+ criteria.fetchResource(true);
+
+ configurationService.findPluginConfigurationUpdatesByCriteria(criteria,
+ new AsyncCallback<PageList<PluginConfigurationUpdate>>() {
+
+ @Override
+ public void onSuccess(PageList<PluginConfigurationUpdate> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to get history for group members", caught);
+ 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/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationSettings.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationSettings.java
new file mode 100644
index 0000000..4a2bc72
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationSettings.java
@@ -0,0 +1,142 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.inventory;
+
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Map;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Overflow;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.composite.ResourceConfigurationComposite;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.resource.composite.DisambiguationReport;
+import org.rhq.core.domain.resource.composite.ResourcePermission;
+import org.rhq.core.domain.resource.group.ResourceGroup;
+import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.GroupConfigurationEditor;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.GroupMemberConfiguration;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
+import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecorator;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Read only view that shows group plugin configuration properties. These are properties
+ * that are common across all members of the group.
+ *
+ * @author John Mazzitelli
+ */
+public class HistoryGroupPluginConfigurationSettings extends LocatableVLayout {
+ private final ResourceGroup group;
+ private final ResourcePermission groupPerms;
+ private final int groupUpdateId;
+ private ConfigurationDefinition configurationDefinition;
+ private List<GroupMemberConfiguration> memberConfigurations;
+ private GroupConfigurationEditor editor;
+
+ public HistoryGroupPluginConfigurationSettings(String locatorId, ResourceGroupComposite groupComposite, int updateId) {
+ super(locatorId);
+ this.group = groupComposite.getResourceGroup();
+ this.groupPerms = groupComposite.getResourcePermission();
+ this.groupUpdateId = updateId;
+
+ setMargin(5);
+ setMembersMargin(5);
+ String backPath = LinkManager.getGroupPluginConfigurationUpdateHistoryLink(this.group.getId());
+ BackButton backButton = new BackButton(extendLocatorId("BackButton"), "Back to List", backPath);
+ addMember(backButton);
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+ if (this.groupPerms.isInventory()) {
+ loadConfigurationDefinition();
+ loadConfigurations();
+ } else {
+ CoreGUI.getMessageCenter()
+ .notify(new Message("You do not have permissions to see the connection settings"));
+ }
+ }
+
+ private void initEditor() {
+ if (this.configurationDefinition != null && this.memberConfigurations != null) {
+ this.editor = new GroupConfigurationEditor(this.extendLocatorId("Editor"), this.configurationDefinition,
+ this.memberConfigurations);
+ this.editor.setOverflow(Overflow.AUTO);
+ this.editor.setReadOnly(true);
+ this.editor.setStructuredConfigTabTitle("Group Properties" + " - " + this.groupUpdateId);
+ addMember(this.editor);
+ }
+ }
+
+ private void loadConfigurationDefinition() {
+ if (this.configurationDefinition == null) {
+ final ResourceType type = this.group.getResourceType();
+ ResourceTypeRepository.Cache.getInstance().getResourceTypes(new Integer[] { type.getId() },
+ EnumSet.of(ResourceTypeRepository.MetadataType.pluginConfigurationDefinition),
+ new ResourceTypeRepository.TypesLoadedCallback() {
+ public void onTypesLoaded(Map<Integer, ResourceType> types) {
+ configurationDefinition = types.get(type.getId()).getPluginConfigurationDefinition();
+ if (configurationDefinition == null) {
+ throw new IllegalStateException("Connection settings are not supported by this group.");
+ }
+ initEditor();
+ }
+ });
+ }
+ }
+
+ private void loadConfigurations() {
+ this.memberConfigurations = null;
+ GWTServiceLookup.getConfigurationService().findPluginConfigurationsForGroupUpdate(groupUpdateId,
+ new AsyncCallback<List<DisambiguationReport<ResourceConfigurationComposite>>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to retrieve member connection settings for [" + group + "]", caught);
+ }
+
+ public void onSuccess(List<DisambiguationReport<ResourceConfigurationComposite>> results) {
+ memberConfigurations = new ArrayList<GroupMemberConfiguration>(results.size());
+ for (DisambiguationReport<ResourceConfigurationComposite> result : results) {
+ int resourceId = result.getOriginal().getResourceId();
+ String label = ReportDecorator.decorateDisambiguationReport(result, resourceId, false);
+ Configuration configuration = result.getOriginal().getConfiguration();
+ GroupMemberConfiguration memberConfiguration = new GroupMemberConfiguration(resourceId, label,
+ configuration);
+ if (configuration == null || configuration.getProperties().isEmpty()) {
+ throw new RuntimeException(
+ "One or more null or empty member connection settings was returned by the Server.");
+ }
+ memberConfigurations.add(memberConfiguration);
+ }
+ initEditor();
+ }
+ });
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
new file mode 100644
index 0000000..ecf34ea
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
@@ -0,0 +1,290 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.inventory;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.EnumSet;
+import java.util.HashMap;
+
+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.Record;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.events.CloseClientEvent;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
+
+import org.rhq.core.domain.configuration.AbstractConfigurationUpdate;
+import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
+import org.rhq.core.domain.configuration.group.GroupPluginConfigurationUpdate;
+import org.rhq.core.domain.criteria.GroupPluginConfigurationUpdateCriteria;
+import org.rhq.core.domain.resource.composite.ResourcePermission;
+import org.rhq.core.domain.resource.group.ResourceGroup;
+import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
+import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
+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.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHTMLPane;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
+
+/**
+ * Table showing group plugin configuration history.
+ *
+ * @author John Mazzitelli
+ */
+public class HistoryGroupPluginConfigurationTable extends Table {
+ private final ResourceGroup group;
+ private final ResourcePermission groupPerms;
+
+ public HistoryGroupPluginConfigurationTable(String locatorId, ResourceGroupComposite groupComposite) {
+ super(locatorId, "Group Connection Settings History");
+ this.group = groupComposite.getResourceGroup();
+ this.groupPerms = groupComposite.getResourcePermission();
+
+ setDataSource(new DataSource());
+ }
+
+ @Override
+ protected void configureTable() {
+ ListGridField fieldId = new ListGridField("id", "Version");
+ ListGridField fieldDateCreated = new ListGridField("dateCreated", "Date Created");
+ ListGridField fieldLastUpdated = new ListGridField("lastUpdated", "Last Updated");
+ ListGridField fieldUser = new ListGridField("user", "User");
+ ListGridField fieldStatus = new ListGridField("status", "Status");
+
+ fieldId.setWidth("10%");
+ fieldDateCreated.setWidth("35%");
+ fieldLastUpdated.setWidth("35%");
+ fieldUser.setWidth("*");
+ fieldStatus.setWidth("10%");
+
+ fieldStatus.setType(ListGridFieldType.ICON);
+ HashMap<String, String> statusIcons = new HashMap<String, String>(4);
+ statusIcons.put(ConfigurationUpdateStatus.SUCCESS.name(), "/images/icons/Connection_ok_16.png");
+ statusIcons.put(ConfigurationUpdateStatus.FAILURE.name(), "/images/icons/Connection_failed_16.png");
+ statusIcons.put(ConfigurationUpdateStatus.INPROGRESS.name(), "/images/icons/Connection_inprogress_16.png");
+ statusIcons.put(ConfigurationUpdateStatus.NOCHANGE.name(), "/images/icons/Connection_16.png");
+ fieldStatus.setValueIcons(statusIcons);
+ fieldStatus.addRecordClickHandler(new RecordClickHandler() {
+ @Override
+ public void onRecordClick(RecordClickEvent event) {
+ final Window winModal = new LocatableWindow(HistoryGroupPluginConfigurationTable.this
+ .extendLocatorId("statusDetailsWin"));
+ winModal.setTitle("Status Details");
+ winModal.setOverflow(Overflow.VISIBLE);
+ winModal.setShowMinimizeButton(false);
+ winModal.setShowMaximizeButton(true);
+ winModal.setIsModal(true);
+ winModal.setShowModalMask(true);
+ winModal.setAutoSize(true);
+ winModal.setAutoCenter(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
+ winModal.centerInPage();
+ winModal.addCloseClickHandler(new CloseClickHandler() {
+ @Override
+ public void onCloseClick(CloseClientEvent event) {
+ winModal.markForDestroy();
+ }
+ });
+
+ LocatableHTMLPane htmlPane = new LocatableHTMLPane(HistoryGroupPluginConfigurationTable.this
+ .extendLocatorId("statusDetailsPane"));
+ htmlPane.setMargin(10);
+ htmlPane.setDefaultWidth(500);
+ htmlPane.setDefaultHeight(400);
+ htmlPane.setContents(getStatusHtmlString(event.getRecord()));
+ winModal.addItem(htmlPane);
+ winModal.show();
+ }
+ });
+ fieldStatus.setShowHover(true);
+ fieldStatus.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) {
+ String html = getStatusHtmlString(record);
+ return html;
+ }
+ });
+
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fieldId, fieldDateCreated, fieldLastUpdated, fieldUser, fieldStatus);
+
+ addTableAction(extendLocatorId("deleteAction"), "Delete", "Are You Sure?", new AbstractTableAction(
+ this.groupPerms.isInventory() ? TableActionEnablement.ANY : TableActionEnablement.NEVER) {
+
+ @Override
+ public void executeAction(final ListGridRecord[] selection) {
+ if (selection == null || selection.length == 0) {
+ return;
+ }
+
+ ConfigurationGWTServiceAsync service = GWTServiceLookup.getConfigurationService();
+ Integer groupId = HistoryGroupPluginConfigurationTable.this.group.getId();
+ Integer[] updateIds = new Integer[selection.length];
+ int i = 0;
+ for (ListGridRecord record : selection) {
+ updateIds[i++] = record.getAttributeAsInt("id");
+ }
+
+ service.deleteGroupPluginConfigurationUpdate(groupId, updateIds, new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ refresh();
+ Message message = new Message("Deleted [" + selection.length + "] history items",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ CoreGUI.getMessageCenter().notify(message);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to delete group plugin config history", caught);
+ }
+ });
+ }
+ });
+
+ addTableAction(extendLocatorId("viewSettingsAction"), "View Settings", new AbstractTableAction(
+ TableActionEnablement.SINGLE) {
+ @Override
+ public void executeAction(ListGridRecord[] selection) {
+ CoreGUI.goToView(LinkManager
+ .getGroupPluginConfigurationUpdateHistoryLink(HistoryGroupPluginConfigurationTable.this.group
+ .getId())
+ + "/" + selection[0].getAttribute("id") + "/Settings");
+ }
+ });
+
+ addTableAction(extendLocatorId("viewMemberHistoryAction"), "View Member History", new AbstractTableAction(
+ TableActionEnablement.SINGLE) {
+ @Override
+ public void executeAction(ListGridRecord[] selection) {
+ CoreGUI.goToView(LinkManager
+ .getGroupPluginConfigurationUpdateHistoryLink(HistoryGroupPluginConfigurationTable.this.group
+ .getId())
+ + "/" + selection[0].getAttribute("id") + "/Members");
+ }
+ });
+ }
+
+ private String getStatusHtmlString(Record record) {
+ String html = null;
+ AbstractConfigurationUpdate obj = (AbstractConfigurationUpdate) record.getAttributeAsObject("object");
+ switch (obj.getStatus()) {
+ case SUCCESS: {
+ html = "This group configuration update was successful";
+ break;
+ }
+ case INPROGRESS: {
+ html = "<p>" + "This group configuration update is still in progress" + "</p><p>"
+ + "View Member History for status of each individual resource" + "</p>";
+ break;
+ }
+ case NOCHANGE: {
+ html = "No changes were made to the group configuration";
+ break;
+ }
+ case FAILURE: {
+ html = obj.getErrorMessage();
+ if (html == null) {
+ html = "<p>" + "This group configuration update failed" + "</p><p>"
+ + "View Member History for status of each individual resource" + "</p>";
+ } else {
+ if (html.length() > 80) {
+ // this was probably an error stack trace, snip it so the tooltip isn't too big
+ html = "<pre>" + html.substring(0, 80) + "...</pre><p>" + "Click the status icon for full details."
+ + "</p>";
+ } else {
+ html = "<pre>" + html + "</pre>";
+ }
+ html = html + "<p>" + "View Member History for status of each individual resource" + "</p>";
+ }
+ break;
+ }
+ }
+ return html;
+ }
+
+ private class DataSource extends RPCDataSource<GroupPluginConfigurationUpdate> {
+
+ @Override
+ public GroupPluginConfigurationUpdate copyValues(Record from) {
+ return (GroupPluginConfigurationUpdate) from.getAttributeAsObject("object");
+ }
+
+ @Override
+ public ListGridRecord copyValues(GroupPluginConfigurationUpdate from) {
+ ListGridRecord record = new ListGridRecord();
+
+ record.setAttribute("id", from.getId());
+ record.setAttribute("dateCreated", new Date(from.getCreatedTime()));
+ record.setAttribute("lastUpdated", new Date(from.getModifiedTime()));
+ record.setAttribute("user", from.getSubjectName());
+ record.setAttribute("status", from.getStatus().name());
+
+ record.setAttribute("object", from);
+
+ return record;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response) {
+ ConfigurationGWTServiceAsync configurationService = GWTServiceLookup.getConfigurationService();
+
+ GroupPluginConfigurationUpdateCriteria criteria = new GroupPluginConfigurationUpdateCriteria();
+ ArrayList<Integer> groupList = new ArrayList<Integer>(1);
+ groupList.add(HistoryGroupPluginConfigurationTable.this.group.getId());
+ criteria.addFilterResourceGroupIds(groupList);
+
+ configurationService.findGroupPluginConfigurationUpdatesByCriteria(criteria,
+ new AsyncCallback<PageList<GroupPluginConfigurationUpdate>>() {
+
+ @Override
+ public void onSuccess(PageList<GroupPluginConfigurationUpdate> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to get group plugin config history", caught);
+ 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/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java
index 23a95b6..6e0d7c1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java
@@ -18,144 +18,69 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.inventory;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
+import com.smartgwt.client.widgets.Canvas;
-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.Record;
-import com.smartgwt.client.types.ListGridFieldType;
-import com.smartgwt.client.util.SC;
-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.configuration.ConfigurationUpdateStatus;
-import org.rhq.core.domain.configuration.group.GroupPluginConfigurationUpdate;
-import org.rhq.core.domain.criteria.GroupPluginConfigurationUpdateCriteria;
-import org.rhq.core.domain.resource.composite.ResourcePermission;
-import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
-import org.rhq.enterprise.gui.coregui.client.components.table.Table;
-import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
-import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
-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.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.ViewPath;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* A view for group plugin configuration history.
*
* @author John Mazzitelli
*/
-public class HistoryGroupPluginConfigurationView extends Table {
- private final ResourceGroup group;
- private final ResourcePermission groupPerms;
+public class HistoryGroupPluginConfigurationView extends LocatableVLayout implements BookmarkableView {
+ private final ResourceGroupComposite groupComposite;
+ private HistoryGroupPluginConfigurationTable groupHistoryTable;
+ private Canvas detailsCanvas = null;
public HistoryGroupPluginConfigurationView(String locatorId, ResourceGroupComposite groupComposite) {
- super(locatorId, "Group Connection Settings History");
- this.group = groupComposite.getResourceGroup();
- this.groupPerms = groupComposite.getResourcePermission();
+ super(locatorId);
+ this.groupComposite = groupComposite;
- setDataSource(new DataSource());
+ groupHistoryTable = new HistoryGroupPluginConfigurationTable(extendLocatorId("Table"), groupComposite);
+ addMember(groupHistoryTable);
}
@Override
- protected void configureTable() {
- ListGridField fieldId = new ListGridField("id", "Version");
- ListGridField fieldDateCreated = new ListGridField("dateCreated", "Date Created");
- ListGridField fieldLastUpdated = new ListGridField("lastUpdated", "Last Updated");
- ListGridField fieldStatus = new ListGridField("status", "Status");
- fieldStatus.setType(ListGridFieldType.ICON);
- HashMap<String, String> statusIcons = new HashMap<String, String>(4);
- statusIcons.put(ConfigurationUpdateStatus.SUCCESS.name(), "/images/icons/Connection_ok_16.png");
- statusIcons.put(ConfigurationUpdateStatus.FAILURE.name(), "/images/icons/Connection_failed_16.png");
- statusIcons.put(ConfigurationUpdateStatus.INPROGRESS.name(), "/images/icons/Connection_inprogress_16.png");
- statusIcons.put(ConfigurationUpdateStatus.NOCHANGE.name(), "/images/icons/Connection_16.png");
- fieldStatus.setValueIcons(statusIcons);
-
- ListGrid listGrid = getListGrid();
- listGrid.setFields(fieldId, fieldDateCreated, fieldLastUpdated, fieldStatus);
-
- addTableAction(extendLocatorId("deleteAction"), "Delete", "Are You Sure?", new AbstractTableAction(
- this.groupPerms.isInventory() ? TableActionEnablement.ANY : TableActionEnablement.NEVER) {
- @Override
- public void executeAction(ListGridRecord[] selection, Object actionValue) {
- // TODO Auto-generated method stub
- SC.say("TODO: deleting...");
+ public void renderView(ViewPath viewPath) {
+ if (viewPath.isEnd()) {
+ setVisibleMember(this.groupHistoryTable);
+ } else {
+ // the details view can be one of two: the "Settings" view which shows the group plugin config properties themselves
+ // or "Members" view which shows a tabular set of data, one plugin history row for each individual resource in the group
+ // the syntax is "/#####/{Settings,Members}" where ##### is the group history ID
+ int groupHistoryId = viewPath.getCurrentAsInt();
+ viewPath.next();
+ boolean configView = false;
+ if (viewPath.isEnd()) {
+ configView = true; // if nothing follows the ID, the default view to show is the group config properties
+ } else {
+ String currentPath = viewPath.getCurrent().getPath();
+ if ("Settings".equals(currentPath)) { // do not i18n this string, its a URL fragment
+ configView = true;
+ } else if ("Members".equals(currentPath)) { // do not i18n this string, its a URL fragment
+ configView = false;
+ } else {
+ throw new IllegalArgumentException("Cannot render page - invalid URL: " + currentPath);
+ }
}
- });
- addTableAction(extendLocatorId("viewSettingsAction"), "View Settings", new AbstractTableAction(
- TableActionEnablement.SINGLE) {
- @Override
- public void executeAction(ListGridRecord[] selection, Object actionValue) {
- // TODO Auto-generated method stub
- SC.say("TODO: view settings...");
+ if (detailsCanvas != null) {
+ removeMember(detailsCanvas);
+ this.detailsCanvas.destroy();
}
- });
- addTableAction(extendLocatorId("viewMemberHistoryAction"), "View Member History", new AbstractTableAction(
- TableActionEnablement.SINGLE) {
- @Override
- public void executeAction(ListGridRecord[] selection, Object actionValue) {
- // TODO Auto-generated method stub
- SC.say("TODO: view member history...");
+ if (configView) {
+ detailsCanvas = new HistoryGroupPluginConfigurationSettings(extendLocatorId("SettingsView"),
+ this.groupComposite, groupHistoryId);
+ } else {
+ detailsCanvas = new HistoryGroupPluginConfigurationMembers(extendLocatorId("MembersView"),
+ this.groupComposite, groupHistoryId);
}
- });
- }
-
- private class DataSource extends RPCDataSource<GroupPluginConfigurationUpdate> {
-
- @Override
- public GroupPluginConfigurationUpdate copyValues(Record from) {
- return (GroupPluginConfigurationUpdate) from.getAttributeAsObject("object");
- }
-
- @Override
- public ListGridRecord copyValues(GroupPluginConfigurationUpdate from) {
- ListGridRecord record = new ListGridRecord();
-
- record.setAttribute("id", from.getId());
- record.setAttribute("dateCreated", new Date(from.getCreatedTime()));
- record.setAttribute("lastUpdated", new Date(from.getModifiedTime()));
- record.setAttribute("status", from.getStatus().name());
-
- record.setAttribute("object", from);
-
- return record;
- }
-
- @Override
- protected void executeFetch(final DSRequest request, final DSResponse response) {
- ConfigurationGWTServiceAsync configurationService = GWTServiceLookup.getConfigurationService();
-
- GroupPluginConfigurationUpdateCriteria criteria = new GroupPluginConfigurationUpdateCriteria();
- ArrayList<Integer> groupList = new ArrayList<Integer>(1);
- groupList.add(HistoryGroupPluginConfigurationView.this.group.getId());
- criteria.addFilterResourceGroupIds(groupList);
-
- configurationService.findGroupPluginConfigurationUpdatesByCriteria(criteria,
- new AsyncCallback<PageList<GroupPluginConfigurationUpdate>>() {
-
- @Override
- public void onSuccess(PageList<GroupPluginConfigurationUpdate> result) {
- response.setData(buildRecords(result));
- response.setTotalRows(result.getTotalSize());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to get group plugin config history", caught);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- });
+ addMember(detailsCanvas);
+ setVisibleMember(detailsCanvas);
}
}
}
commit 32e41285b587dc7d6ad7e624dac074fda58c1a22
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:34:36 2010 -0500
forgot I need to provide the new API to the interface
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
index 8b2b556..5b8c09f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
@@ -56,9 +56,15 @@ public interface ConfigurationGWTService extends RemoteService {
List<DisambiguationReport<ResourceConfigurationComposite>> findPluginConfigurationsForGroup(int groupId);
+ List<DisambiguationReport<ResourceConfigurationComposite>> findPluginConfigurationsForGroupUpdate(int groupUpdateId);
+
void updateResourceConfigurationsForGroup(int groupId, List<ResourceConfigurationComposite> resourceConfigurations);
void updatePluginConfigurationsForGroup(int groupId, List<ResourceConfigurationComposite> pluginConfigurations);
+ void deleteGroupPluginConfigurationUpdate(Integer groupId, Integer[] groupPluginConfigUpdateIds);
+
+ void deleteGroupResourceConfigurationUpdate(Integer groupId, Integer[] groupResourceConfigUpdateIds);
+
//RawConfiguration dummy(RawConfiguration config);
}
commit d8e02028cdbc748bf40279272d92b73c80462337
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:34:18 2010 -0500
as a convienence, strip any # that appears in the first char (this happens if you use the LinkManager)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/buttons/BackButton.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/buttons/BackButton.java
index 5708fb8..7054d2e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/buttons/BackButton.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/buttons/BackButton.java
@@ -43,7 +43,7 @@ public class BackButton extends LocatableStretchImgButton {
setTitle("<b>" + title + "</b>");
addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- History.newItem(anchor);
+ History.newItem((anchor.startsWith("#")) ? anchor.substring(1) : anchor);
}
});
setAutoFit(true);
commit 9d293188da17f79da6d188b6e5be62d38d3c228c
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:33:54 2010 -0500
add new group plugin config history URL
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
index 073ef0c..a5b2c95 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
@@ -45,6 +45,10 @@ public class LinkManager {
}
}
+ public static String getGroupPluginConfigurationUpdateHistoryLink(int groupId) {
+ return getResourceGroupLink(groupId) + "/Inventory/Connection Settings History";
+ }
+
public static String getGroupDefinitionLink(int groupDefinitionId) {
if (GWT) {
return "#Inventory/Groups/DynaGroup%20Manager/" + groupDefinitionId;
commit 3600e2319d78aaadcaad0dcc5ae2ebdd86ecfb02
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:33:30 2010 -0500
be able to delete group history items
be able to get plugin configs for a group
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index dcd0d7b..72515a4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -199,6 +199,25 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implemen
}
}
+ public List<DisambiguationReport<ResourceConfigurationComposite>> findPluginConfigurationsForGroupUpdate(
+ int groupUpdateId) {
+ try {
+ Map<Integer, Configuration> configurations = this.configurationManager
+ .getPluginConfigurationMapForGroupUpdate(groupUpdateId);
+ List<ResourceConfigurationComposite> configurationComposites = convertToCompositesList(configurations);
+
+ // Disambiguate - i.e. generate unambiguous Resource names for each of the Resource id's.
+ List<DisambiguationReport<ResourceConfigurationComposite>> disambiguatedConfigurationComposites = resourceManager
+ .disambiguate(configurationComposites, RESOURCE_CONFIGURATION_COMPOSITE_RESOURCE_ID_EXTRACTOR,
+ DefaultDisambiguationUpdateStrategies.getDefault());
+
+ return SerialUtility.prepare(disambiguatedConfigurationComposites,
+ "ConfigurationService.findPluginConfigurationsForGroupUpdate");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
public void updateResourceConfigurationsForGroup(int groupId,
List<ResourceConfigurationComposite> resourceConfigurations) {
try {
@@ -221,6 +240,24 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implemen
}
}
+ public void deleteGroupPluginConfigurationUpdate(Integer groupId, Integer[] groupPluginConfigUpdateIds) {
+ try {
+ this.configurationManager.deleteGroupPluginConfigurationUpdates(getSessionSubject(), groupId,
+ groupPluginConfigUpdateIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ public void deleteGroupResourceConfigurationUpdate(Integer groupId, Integer[] groupResourceConfigUpdateIds) {
+ try {
+ this.configurationManager.deleteGroupResourceConfigurationUpdates(getSessionSubject(), groupId,
+ groupResourceConfigUpdateIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
/*
// Dummy method for gwt compiler
public RawConfiguration dummy(RawConfiguration config) {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index ae2d0e7..c41c441 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -1772,6 +1772,7 @@ public class ConfigurationManagerBean implements ConfigurationManagerLocal, Conf
groupIdParameter);
}
+ // TODO: THIS NEEDS AUTHZ CHECK!
@SuppressWarnings("unchecked")
public Map<Integer, Configuration> getPluginConfigurationMapForGroupUpdate(Integer groupPluginConfigurationUpdateId) {
Tuple<String, Object> groupIdParameter = new Tuple<String, Object>("groupConfigurationUpdateId",
commit 67748c775700f713c2de77e937e537a9cebb1604
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Nov 16 12:32:31 2010 -0500
be able to query for individual history items based on parent group ID
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PluginConfigurationUpdateCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PluginConfigurationUpdateCriteria.java
index 7187835..f13ebfe 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PluginConfigurationUpdateCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PluginConfigurationUpdateCriteria.java
@@ -41,7 +41,8 @@ public class PluginConfigurationUpdateCriteria extends AbstractResourceConfigura
public static final String SORT_FIELD_RESOURCE_NAME = "name";
public static final String SORT_FIELD_RESOURCE_ID = "resourceId";
- private String filterResourceTypeId; // requires overrides
+ private Integer filterGroupConfigurationUpdateId; // required overrides
+ private Integer filterResourceTypeId; // requires overrides
private String filterResourceTypeName; // requires overrides
private List<Integer> filterResourceIds; // requires overrides
private List<Integer> filterResourceGroupIds; // requires overrides
@@ -54,6 +55,7 @@ public class PluginConfigurationUpdateCriteria extends AbstractResourceConfigura
public PluginConfigurationUpdateCriteria() {
+ filterOverrides.put("groupConfigurationUpdateId", "groupConfigurationUpdate.id = ?");
filterOverrides.put("resourceTypeId", "resource.resourceType.id = ?");
filterOverrides.put("resourceTypeName", "resource.resourceType.name like ?");
filterOverrides.put("resourceIds", "resource.id IN ( ? )");
@@ -72,7 +74,11 @@ public class PluginConfigurationUpdateCriteria extends AbstractResourceConfigura
return PluginConfigurationUpdate.class;
}
- public void addFilterResourceTypeId(String filterResourceTypeId) {
+ public void addFilterGroupConfigurationUpdateId(Integer filterGroupConfigurationUpdateId) {
+ this.filterGroupConfigurationUpdateId = filterGroupConfigurationUpdateId;
+ }
+
+ public void addFilterResourceTypeId(Integer filterResourceTypeId) {
this.filterResourceTypeId = filterResourceTypeId;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceConfigurationUpdateCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceConfigurationUpdateCriteria.java
index 315e08c..e8c7cf6 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceConfigurationUpdateCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceConfigurationUpdateCriteria.java
@@ -44,7 +44,8 @@ public class ResourceConfigurationUpdateCriteria extends AbstractResourceConfigu
public static final String SORT_FIELD_RESOURCE_NAME = "name";
public static final String SORT_FIELD_RESOURCE_ID = "resourceId";
- private String filterResourceTypeId; // requires overrides
+ private Integer filterGroupConfigurationUpdateId; // required overrides
+ private Integer filterResourceTypeId; // requires overrides
private String filterResourceTypeName; // requires overrides
private List<Integer> filterResourceIds; // requires overrides
private List<Integer> filterResourceGroupIds; // requires overrides
@@ -57,6 +58,7 @@ public class ResourceConfigurationUpdateCriteria extends AbstractResourceConfigu
public ResourceConfigurationUpdateCriteria() {
+ filterOverrides.put("groupConfigurationUpdateId", "groupConfigurationUpdate.id = ?");
filterOverrides.put("resourceTypeId", "resource.resourceType.id = ?");
filterOverrides.put("resourceTypeName", "resource.resourceType.name like ?");
filterOverrides.put("resourceIds", "resource.id IN ( ? )");
@@ -75,7 +77,11 @@ public class ResourceConfigurationUpdateCriteria extends AbstractResourceConfigu
return ResourceConfigurationUpdate.class;
}
- public void addFilterResourceTypeId(String filterResourceTypeId) {
+ public void addFilterGroupConfigurationUpdateId(Integer filterGroupConfigurationUpdateId) {
+ this.filterGroupConfigurationUpdateId = filterGroupConfigurationUpdateId;
+ }
+
+ public void addFilterResourceTypeId(Integer filterResourceTypeId) {
this.filterResourceTypeId = filterResourceTypeId;
}
commit 7267bb0fb5ac44d17c345816453611969c57c805
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Nov 15 11:49:54 2010 -0500
do not allow the user to delete group plugin config history items if they don't have perms
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java
index ee86f5d..23a95b6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationView.java
@@ -35,6 +35,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.group.GroupPluginConfigurationUpdate;
import org.rhq.core.domain.criteria.GroupPluginConfigurationUpdateCriteria;
+import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.core.domain.util.PageList;
@@ -52,11 +53,13 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
* @author John Mazzitelli
*/
public class HistoryGroupPluginConfigurationView extends Table {
- private ResourceGroup group;
+ private final ResourceGroup group;
+ private final ResourcePermission groupPerms;
public HistoryGroupPluginConfigurationView(String locatorId, ResourceGroupComposite groupComposite) {
super(locatorId, "Group Connection Settings History");
this.group = groupComposite.getResourceGroup();
+ this.groupPerms = groupComposite.getResourcePermission();
setDataSource(new DataSource());
}
@@ -79,7 +82,7 @@ public class HistoryGroupPluginConfigurationView extends Table {
listGrid.setFields(fieldId, fieldDateCreated, fieldLastUpdated, fieldStatus);
addTableAction(extendLocatorId("deleteAction"), "Delete", "Are You Sure?", new AbstractTableAction(
- TableActionEnablement.ANY) {
+ this.groupPerms.isInventory() ? TableActionEnablement.ANY : TableActionEnablement.NEVER) {
@Override
public void executeAction(ListGridRecord[] selection, Object actionValue) {
// TODO Auto-generated method stub
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Connection_inprogress_16.png b/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Connection_inprogress_16.png
index ee2325d..3754265 100644
Binary files a/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Connection_inprogress_16.png and b/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Connection_inprogress_16.png differ
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Emblem_inprogress_16.png b/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Emblem_inprogress_16.png
index 99f38ed..682130d 100644
Binary files a/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Emblem_inprogress_16.png and b/modules/enterprise/gui/portal-war/src/main/webapp/images/icons/Emblem_inprogress_16.png differ