modules/core/domain/src/main/java/org/rhq/core/domain/configuration/composite/ResourceConfigurationComposite.java | 4 modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/DisambiguationReport.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 41 ++++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java | 80 +++++++--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java | 10 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java | 18 +- 6 files changed, 113 insertions(+), 43 deletions(-)
New commits: commit 915e740bb29e3ac21eaa1674a8a51779c1494991 Author: Ian Springer ian.springer@redhat.com Date: Thu Oct 7 22:17:23 2010 -0400
add Resource name to Disambiguation report; more work on group config editor
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/composite/ResourceConfigurationComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/composite/ResourceConfigurationComposite.java index e00e29d..cbff0b9 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/composite/ResourceConfigurationComposite.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/composite/ResourceConfigurationComposite.java @@ -35,8 +35,8 @@ public class ResourceConfigurationComposite implements Serializable{ */ private Configuration configuration;
- // No-arg constructor required by GWT - protected ResourceConfigurationComposite() { + // Default constructor required by GWT + public ResourceConfigurationComposite() { }
public ResourceConfigurationComposite(int resourceId, Configuration configuration) { diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/DisambiguationReport.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/DisambiguationReport.java index f54354b..717721b 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/DisambiguationReport.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/DisambiguationReport.java @@ -165,6 +165,7 @@ public class DisambiguationReport<T> implements Serializable { }
public String toString() { - return "DisambiguationReport(type=" + resourceType + ", parents=" + parents + ", original=" + original + ")"; + return "DisambiguationReport(type=" + resourceType + ", parents=" + parents + ", original=" + original + + ", name=" + name + ")"; } } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java index 8a4d9fa..310f59f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java @@ -569,18 +569,23 @@ public class ConfigurationEditor extends LocatableVLayout { final FormItem valueItem; if (propertyDefinition instanceof PropertyDefinitionSimple) { final PropertyDefinitionSimple propertyDefinitionSimple = (PropertyDefinitionSimple)propertyDefinition; - final PropertySimple propertySimple = (PropertySimple)property; + PropertySimple propertySimple = (PropertySimple)property; + + if (propertySimple == null) { + propertySimple = new PropertySimple(propertyDefinitionSimple.getName(), null); + }
+ final PropertySimple finalPropertySimple = propertySimple; valueItem = buildSimpleField(propertyDefinitionSimple, propertySimple); valueItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent changedEvent) { - propertySimple.setErrorMessage(null); + finalPropertySimple.setErrorMessage(null); boolean isValid = changedEvent.getItem().validate(); if (isValid) { - propertySimple.setValue(changedEvent.getValue()); + finalPropertySimple.setValue(changedEvent.getValue()); } if (firePropertyChangedEvents) { - firePropertyChangedEvent(propertySimple, propertyDefinitionSimple, isValid); + firePropertyChangedEvent(finalPropertySimple, propertyDefinitionSimple, isValid); } } }); @@ -602,6 +607,9 @@ public class ConfigurationEditor extends LocatableVLayout { PropertyDefinitionList propertyDefinitionList = (PropertyDefinitionList)propertyDefinition; PropertyDefinition memberDefinition = propertyDefinitionList.getMemberDefinition(); PropertyList propertyList = (PropertyList)property; + if (propertyList == null) { + propertyList = new PropertyList(propertyDefinitionList.getName()); + } if (memberDefinition instanceof PropertyDefinitionMap) { // List of Maps is a specially supported case with summary fields as columns in a table // Note: This field spans 3 columns. @@ -638,9 +646,15 @@ public class ConfigurationEditor extends LocatableVLayout { fields.add(canvasItem); } } else if (propertyDefinition instanceof PropertyDefinitionMap) { + PropertyDefinitionMap propertyDefinitionMap = (PropertyDefinitionMap)propertyDefinition; + PropertyMap propertyMap = (PropertyMap)property; + if (propertyMap == null) { + propertyMap = new PropertyMap(propertyDefinitionMap.getName()); + } + // Note: This field spans 3 columns. FormItem mapField = - buildMapField(locatorId, (PropertyDefinitionMap)propertyDefinition, (PropertyMap)property); + buildMapField(locatorId, propertyDefinitionMap, propertyMap); fields.add(mapField); }
@@ -1293,7 +1307,7 @@ public class ConfigurationEditor extends LocatableVLayout { return valueItem; }
- private static Property getTopLevelProperty(Property property) { + protected static Property getTopLevelProperty(Property property) { Property currentProperty = property; while (currentProperty.getConfiguration() == null) { if (currentProperty.getParentList() != null) { @@ -1307,12 +1321,12 @@ public class ConfigurationEditor extends LocatableVLayout { } return currentProperty; } - + protected FormItem buildUnsetItem(PropertyDefinitionSimple propertyDefinition, final PropertySimple property, final FormItem valueItem) { FormItem item; if (!propertyDefinition.isRequired()) { - CheckboxItem unsetItem = new CheckboxItem(); + final CheckboxItem unsetItem = new CheckboxItem(); boolean unset = isUnset(propertyDefinition, property); unsetItem.setValue(unset); unsetItem.setDisabled(isReadOnly(propertyDefinition, property)); @@ -1325,15 +1339,24 @@ public class ConfigurationEditor extends LocatableVLayout { public void onChange(ChangeEvent changeEvent) { Boolean isUnset = (Boolean) changeEvent.getValue(); if (isUnset) { + valueItem.getForm().setValue(valueItem.getName(), (String)null); valueItem.setDisabled(true); - valueItem.setValue((String) null); } else { valueItem.setDisabled(false); valueItem.focusInItem(); } + valueItem.redraw(); property.setValue(valueItem.getValue()); } }); + + valueItem.addChangeHandler(new ChangeHandler() { + public void onChange(ChangeEvent changeEvent) { + String value = (String)changeEvent.getValue(); + unsetItem.setDisabled(value == null); + } + }); + item = unsetItem; } else { item = new SpacerItem(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java index 4bdb9e6..463ee42 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java @@ -79,30 +79,43 @@ public class GroupConfigurationEditor extends ConfigurationEditor { protected FormItem buildSimpleField(final PropertyDefinitionSimple propertyDefinitionSimple, final PropertySimple propertySimple) { final FormItem item; - if (propertySimple.getOverride()) { + boolean isAggregate = isAggregateProperty(propertySimple); + if (!isAggregate || isHomogeneous(propertySimple)) { item = super.buildSimpleField(propertyDefinitionSimple, propertySimple); } else { item = new StaticTextItem(); - item.setTitle("<i>Member Values Differ</i>"); - item.setIcons(); + item.setDefaultValue("<span style='color: red'><i>Member Values Differ</i></span>"); + item.setShowTitle(false); }
- // Add the icon that user can click to edit the member values. - FormItemIcon icon = new FormItemIcon(); - icon.setSrc("[SKIN]/actions/edit.png"); - icon.setName("Edit Member Values"); - icon.addFormItemClickHandler(new FormItemClickHandler() { - public void onFormItemClick(FormItemIconClickEvent event) { - // TODO: Pass the actual index, rather than null, if the prop is inside a list. - displayMemberValuesEditor(extendLocatorId("MemberValuesEditor"), propertyDefinitionSimple, item, - propertySimple, null); - } - }); - item.setIcons(icon); + if (isAggregate) { + // Add the icon that user can click to edit the member values. + FormItemIcon icon = new FormItemIcon(); + icon.setSrc("[SKIN]/actions/edit.png"); + icon.setName("Edit Member Values"); + icon.addFormItemClickHandler(new FormItemClickHandler() { + public void onFormItemClick(FormItemIconClickEvent event) { + // TODO: Pass the actual index, rather than null, if the prop is inside a list. + displayMemberValuesEditor(extendLocatorId("MemberValuesEditor"), propertyDefinitionSimple, item, + propertySimple, null); + } + }); + // TODO: Figure out a way to add a tooltip to the icon. + item.setIcons(icon); + }
return item; }
+ private boolean isAggregateProperty(PropertySimple propertySimple) { + return (propertySimple.getConfiguration() == getConfiguration()); + } + + private static Boolean isHomogeneous(PropertySimple propertySimple) { + Boolean override = propertySimple.getOverride(); + return (override != null && override); + } + private void displayMemberValuesEditor(String locatorId, PropertyDefinitionSimple propertyDefinitionSimple, final FormItem aggregateValueItem, final PropertySimple aggregatePropertySimple, Integer index) { @@ -113,26 +126,36 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
final DynamicForm form = new DynamicForm(); form.setHeight100(); - form.setColWidths("55%", "5%", "40%"); + form.setNumCols(3); + form.setColWidths("60%", "8%", "32%"); layout.addMember(form);
// Add header row. List<FormItem> items = new ArrayList<FormItem>(); - StaticTextItem memberHeader = new StaticTextItem("memberHeader", "Member"); + StaticTextItem memberHeader = new StaticTextItem(); + memberHeader.setShowTitle(false); + memberHeader.setDefaultValue("<h4>Member</h4>"); items.add(memberHeader); - StaticTextItem unsetHeader = new StaticTextItem("unsetHeader", "Unset"); + StaticTextItem unsetHeader = new StaticTextItem(); + unsetHeader.setShowTitle(false); + unsetHeader.setDefaultValue("<h4>Unset</h4>"); items.add(unsetHeader); - StaticTextItem valueHeader = new StaticTextItem("valueHeader", "Value"); + StaticTextItem valueHeader = new StaticTextItem(); + valueHeader.setShowTitle(false); + valueHeader.setDefaultValue("<h4>Value</h4>"); valueHeader.setEndRow(true); items.add(valueHeader);
// Add data rows. final Map<String, PropertySimple> memberProperties = new HashMap<String, PropertySimple>(this.memberConfigurations.size()); final List<FormItem> valueItems = new ArrayList<FormItem>(this.memberConfigurations.size()); + final List<FormItem> unsetItems = new ArrayList<FormItem>(this.memberConfigurations.size()); for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) { // TODO: Format the disambiguated member name. String memberName = memberConfiguration.getLabel(); - StaticTextItem memberItem = new StaticTextItem("member", memberName); + StaticTextItem memberItem = new StaticTextItem(); + memberItem.setShowTitle(false); + memberItem.setDefaultValue(memberName); items.add(memberItem); Configuration configuration = memberConfiguration.getConfiguration(); PropertySimple memberPropertySimple = getPropertySimple(configuration, propertyDefinitionSimple, index); @@ -142,6 +165,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor { valueItems.add(valueItem); FormItem unsetItem = buildUnsetItem(propertyDefinitionSimple, memberPropertySimple, valueItem); items.add(unsetItem); + unsetItems.add(unsetItem); items.add(valueItem); valueItem.setEndRow(true); } @@ -164,7 +188,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor { String firstValue = (String)valueItems.get(0).getValue(); for (FormItem valueItem : valueItems) { String value = (String)valueItem.getValue(); - if ((value != null && !value.equals(firstValue)) || firstValue != null) { + if ((value != null && !value.equals(firstValue)) || (value == null && firstValue != null)) { valuesHomogeneous = false; } PropertySimple memberPropertySimple = @@ -174,12 +198,15 @@ public class GroupConfigurationEditor extends ConfigurationEditor { } if (valuesHomogeneous) { // Values are all the same, so update the value of the aggregate property and set its override flag to true. - aggregateValueItem.setValue(firstValue); + aggregateValueItem.getForm().setValue(aggregateValueItem.getName(), firstValue); // TODO: Will this cause a value changed event to fire for the aggregate form item? aggregatePropertySimple.setStringValue(firstValue); - aggregatePropertySimple.setErrorMessage(null); aggregatePropertySimple.setOverride(true); + } else { + aggregatePropertySimple.setStringValue(null); + aggregatePropertySimple.setOverride(false); } + // TODO: Figure out a way to update the aggregate Unset checkbox. popup.destroy(); } }); @@ -189,7 +216,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor { public void onItemChanged(ItemChangedEvent itemChangedEvent) { okButton.setDisabled(!form.validate()); } - }); + });
final IButton cancelButton = new IButton("Cancel"); cancelButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @@ -241,4 +268,9 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
return (PropertySimple)property; } + + private static Configuration getConfiguration(Property property) { + Property topLevelProperty = getTopLevelProperty(property); + return topLevelProperty.getConfiguration(); + } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java index ee2297c..03cfc83 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java @@ -67,7 +67,6 @@ public class GroupResourceConfigurationEditView extends LocatableVLayout impleme private ResourceGroup group; private ResourcePermission resourcePermission; private ConfigurationDefinition configurationDefinition; - private Configuration aggregateConfiguration; private List<GroupMemberConfiguration> memberConfigurations;
private ConfigurationEditor editor; @@ -122,7 +121,7 @@ public class GroupResourceConfigurationEditView extends LocatableVLayout impleme }
private void initEditor() { - if (this.configurationDefinition != null && this.aggregateConfiguration != null) { + if (this.configurationDefinition != null && this.memberConfigurations != null) { this.editor = new GroupConfigurationEditor(this.extendLocatorId("Editor"), this.configurationDefinition, this.memberConfigurations); this.editor.setOverflow(Overflow.AUTO); @@ -150,7 +149,6 @@ public class GroupResourceConfigurationEditView extends LocatableVLayout impleme }
private void loadConfigurations() { - this.aggregateConfiguration = null; this.memberConfigurations = null; this.configurationService.findResourceConfigurationsForGroup(group.getId(), new AsyncCallback<List<DisambiguationReport<ResourceConfigurationComposite>>>() { public void onFailure(Throwable caught) { @@ -165,8 +163,12 @@ public class GroupResourceConfigurationEditView extends LocatableVLayout impleme String resourceHtml = ReportDecorator.decorateResourceName(ReportDecorator.GWT_RESOURCE_URL, result.getResourceType(), result.getName(), resourceId); String label = parentsHtml + ReportDecorator.DEFAULT_SEPARATOR + resourceHtml; + Configuration configuration = result.getOriginal().getConfiguration(); GroupMemberConfiguration memberConfiguration = new GroupMemberConfiguration(resourceId, label, - result.getOriginal().getConfiguration()); + configuration); + if (configuration == null || configuration.getProperties().isEmpty()) { + throw new RuntimeException("One or more null or empty member Resource configuration was returned by the Server."); + } memberConfigurations.add(memberConfiguration); } initEditor(); 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 abd6592..63fa33f 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 @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map;
+import com.allen_sauer.gwt.log.client.Log; + import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.PluginConfigurationUpdate; import org.rhq.core.domain.configuration.RawConfiguration; @@ -11,7 +13,6 @@ import org.rhq.core.domain.configuration.ResourceConfigurationUpdate; import org.rhq.core.domain.configuration.composite.ResourceConfigurationComposite; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria; -import org.rhq.core.domain.operation.composite.ResourceOperationLastCompletedComposite; import org.rhq.core.domain.resource.composite.DisambiguationReport; import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.util.PageControl; @@ -26,6 +27,9 @@ import org.rhq.enterprise.server.resource.disambiguation.DefaultDisambiguationUp import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
+/** + * + */ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implements ConfigurationGWTService {
private static final long serialVersionUID = 1L; @@ -135,18 +139,26 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implemen .disambiguate(configurationComposites, RESOURCE_CONFIGURATION_COMPOSITE_RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedConfigurationComposites; + return SerialUtility.prepare(disambiguatedConfigurationComposites, + "ConfigurationService.findResourceConfigurationsForGroup"); } catch (RuntimeException e) { throw new RuntimeException(ThrowableUtil.getAllMessages(e)); } }
public RawConfiguration dummy(RawConfiguration config) { - com.allen_sauer.gwt.log.client.Log.info(config.getPath()); + Log.info(config.getPath()); return new RawConfiguration(); // Dummy method for gwt compiler }
+/* + public ResourceConfigurationComposite dummy(ResourceConfigurationComposite resourceConfigurationComposite) { + return new ResourceConfigurationComposite(); + // Dummy method for gwt compiler + } +*/ + private static final IntExtractor<ResourceConfigurationComposite> RESOURCE_CONFIGURATION_COMPOSITE_RESOURCE_ID_EXTRACTOR = new IntExtractor<ResourceConfigurationComposite>() { public int extract(ResourceConfigurationComposite configurationComposite) {
rhq-commits@lists.fedorahosted.org