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(a)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) {