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@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@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@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@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@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@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@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@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@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
rhq-commits@lists.fedorahosted.org