modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/MetadataManagerTest.java
| 3
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
| 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
| 121 +++++----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
| 133 +++++++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
| 14 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/GroupResourceConfigurationEditView.java
| 34 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
| 90 +++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
| 4
8 files changed, 276 insertions(+), 130 deletions(-)
New commits:
commit f1da64dcb747835917e43e45361236ced104c509
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 8 10:24:39 2010 -0400
fix compile error in ConfigurationMetadataManager; improve
PropertyDefinitionEnumeration's toString() impl
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
index a121510..96ca8ac 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
@@ -151,6 +151,11 @@ public class PropertyDefinitionEnumeration implements Serializable {
@Override
public String toString() {
- return "PropertyDefinitionEnumeration: " + value;
+ return "PropertyDefinitionEnumeration{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", value='" + value + '\'' +
+ ", orderIndex=" + orderIndex +
+ '}';
}
}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
index f46c7a4..bcf5e47 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
@@ -394,8 +394,8 @@ public class ConfigurationMetadataManagerBean implements
ConfigurationMetadataMa
for (PropertyDefinitionEnumeration pde : changed) {
for (PropertyDefinitionEnumeration nPde : newOptions) {
if (nPde.equals(pde)) {
- pde.setDefault(nPde.isDefault());
- pde.setValue(nPde.getValue());
+ pde.setName(nPde.getName());
+ pde.setOrderIndex(nPde.getOrderIndex());
}
}
}
commit b531bbe8b661e46cb872338c2c19a6804faff396
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 8 10:23:30 2010 -0400
first functional cut of resource group config editor!
diff --git
a/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/MetadataManagerTest.java
b/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/MetadataManagerTest.java
index 9ef0ca8..2df1e43 100644
---
a/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/MetadataManagerTest.java
+++
b/modules/core/client-api/src/test/java/org/rhq/core/clientapi/agent/metadata/test/MetadataManagerTest.java
@@ -213,8 +213,7 @@ public class MetadataManagerTest {
assert bravo.getEnumeratedValues().size() == 4;
assert bravo.getEnumeratedValues().get(0).getName().equals("First Option
Name");
assert
bravo.getEnumeratedValues().get(0).getValue().equals("FirstOptionValue");
- assert bravo.getEnumeratedValues().get(0).isDefault();
- assert !bravo.getEnumeratedValues().get(1).isDefault();
+ assert
bravo.getEnumeratedValues().get(0).getValue().equals(def.getDefaultTemplate().getConfiguration().getSimpleValue("bravo",
null));
assert def.getPropertyDefinitionSimple("charlie").getType() ==
PropertySimpleType.BOOLEAN;
assert def.getPropertyDefinitionSimple("delta").getType() ==
PropertySimpleType.INTEGER;
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 310f59f..3f01cde 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
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Date;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
@@ -73,6 +74,9 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.form.validator.CustomValidator;
import com.smartgwt.client.widgets.form.validator.FloatRangeValidator;
import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
+import com.smartgwt.client.widgets.form.validator.IsBooleanValidator;
+import com.smartgwt.client.widgets.form.validator.IsFloatValidator;
+import com.smartgwt.client.widgets.form.validator.IsIntegerValidator;
import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
import com.smartgwt.client.widgets.form.validator.RegExpValidator;
import com.smartgwt.client.widgets.form.validator.Validator;
@@ -668,8 +672,7 @@ public class ConfigurationEditor extends LocatableVLayout {
PropertyDefinition propertyDefinition,
boolean isValid) {
boolean wasValidBefore = this.invalidPropertyNames.isEmpty();
- Property topLevelProperty = getTopLevelProperty(property);
- validate();
+ Property topLevelProperty = getTopLevelProperty(property);
if (isValid) {
this.invalidPropertyNames.remove(topLevelProperty.getName());
} else {
@@ -1243,45 +1246,37 @@ public class ConfigurationEditor extends LocatableVLayout {
}
} else {
switch (propertyDefinitionSimple.getType()) {
-
- case STRING:
- case FILE:
- case DIRECTORY:
- valueItem = new TextItem();
- valueItem.setValue(propertySimple == null ? "" :
propertySimple.getStringValue());
- break;
- case LONG_STRING:
- valueItem = new TextAreaItem();
- valueItem.setValue(propertySimple == null ? "" :
propertySimple.getStringValue());
- break;
- case PASSWORD:
- valueItem = new PasswordItem();
- valueItem.setValue(propertySimple == null ? "" :
propertySimple.getStringValue());
- break;
- case BOOLEAN:
- valueItem = new RadioGroupItem();
- LinkedHashMap<String, String> valMap = new LinkedHashMap<String,
String>();
- valMap.put("true", "Yes");
- valMap.put("false", "No");
- valueItem.setValueMap(valMap);
- valueItem.setValue(propertySimple == null ||
propertySimple.getStringValue() == null ? false : propertySimple
- .getBooleanValue());
- break;
- case INTEGER:
- case LONG:
- valueItem = new IntegerItem();
- if (propertySimple != null && propertySimple.getStringValue() !=
null)
- valueItem.setValue(propertySimple.getLongValue());
- break;
- case FLOAT:
- case DOUBLE:
- valueItem = new FloatItem();
- valueItem.setValue(propertySimple == null ||
propertySimple.getStringValue() == null ? 0 : propertySimple
- .getDoubleValue());
- break;
+ case STRING:
+ case FILE:
+ case DIRECTORY:
+ valueItem = new TextItem();
+ break;
+ case LONG_STRING:
+ valueItem = new TextAreaItem();
+ break;
+ case PASSWORD:
+ valueItem = new PasswordItem();
+ break;
+ case BOOLEAN:
+ valueItem = new RadioGroupItem();
+ LinkedHashMap<String, String> valMap = new
LinkedHashMap<String, String>();
+ valMap.put("true", "Yes");
+ valMap.put("false", "No");
+ valueItem.setValueMap(valMap);
+ break;
+ case INTEGER:
+ case LONG:
+ valueItem = new IntegerItem();
+ break;
+ case FLOAT:
+ case DOUBLE:
+ valueItem = new FloatItem();
+ break;
}
}
+ valueItem.setDefaultValue((String)null);
+ valueItem.setValue(propertySimple.getStringValue());
valueItem.setRequired(propertyDefinitionSimple.isRequired());
List<Validator> validators = buildValidators(propertyDefinitionSimple,
propertySimple);
@@ -1339,7 +1334,7 @@ public class ConfigurationEditor extends LocatableVLayout {
public void onChange(ChangeEvent changeEvent) {
Boolean isUnset = (Boolean) changeEvent.getValue();
if (isUnset) {
- valueItem.getForm().setValue(valueItem.getName(), (String)null);
+ setValue(valueItem, null);
valueItem.setDisabled(true);
} else {
valueItem.setDisabled(false);
@@ -1350,12 +1345,14 @@ public class ConfigurationEditor extends LocatableVLayout {
}
});
+/*
valueItem.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent changeEvent) {
- String value = (String)changeEvent.getValue();
+ Object value = changeEvent.getValue();
unsetItem.setDisabled(value == null);
}
});
+*/
item = unsetItem;
} else {
@@ -1385,19 +1382,34 @@ public class ConfigurationEditor extends LocatableVLayout {
return !isInvalidRequiredProperty && (propertyDefinition.isReadOnly() ||
this.readOnly);
}
- private List<Validator> buildValidators(PropertyDefinitionSimple
propertyDefinition, Property property) {
+ protected List<Validator> buildValidators(PropertyDefinitionSimple
propertyDefinition, Property property) {
List<Validator> validators = new ArrayList<Validator>();
+ Validator typeValidator = null;
switch (propertyDefinition.getType()) {
case STRING:
case LONG_STRING:
case FILE:
case DIRECTORY:
- LengthRangeValidator validator = new LengthRangeValidator();
- validator.setMax(PropertySimple.MAX_VALUE_LENGTH);
- validators.add(validator);
+ LengthRangeValidator lengthRangeValidator = new LengthRangeValidator();
+ lengthRangeValidator.setMax(PropertySimple.MAX_VALUE_LENGTH);
+ typeValidator = lengthRangeValidator;
+ break;
+ case BOOLEAN:
+ typeValidator = new IsBooleanValidator();
+ break;
+ case INTEGER:
+ case LONG:
+ typeValidator = new IsIntegerValidator();
+ break;
+ case FLOAT:
+ case DOUBLE:
+ typeValidator = new IsFloatValidator();
break;
}
+ if (typeValidator != null) {
+ validators.add(typeValidator);
+ }
Set<Constraint> constraints = propertyDefinition.getConstraints();
if (constraints != null) {
@@ -1527,12 +1539,31 @@ public class ConfigurationEditor extends LocatableVLayout {
popup.show();
}
+ protected static void setValue(FormItem item, Object value) {
+ if (value instanceof String) {
+ item.setValue((String)value);
+ } else if (value instanceof Boolean) {
+ item.setValue((Boolean)value);
+ } else if (value instanceof Integer) {
+ item.setValue((Integer)value);
+ } else if (value instanceof Float) {
+ item.setValue((Float)value);
+ } else if (value instanceof Double) {
+ item.setValue((Double)value);
+ } else if (value instanceof Date) {
+ item.setValue((Date)value);
+ } else {
+ String stringValue = (value != null) ? value.toString() : null;
+ item.setValue(stringValue);
+ }
+ }
+
private static class PropertyDefinitionComparator implements
Comparator<PropertyDefinition> {
public int compare(PropertyDefinition o1, PropertyDefinition o2) {
return new Integer(o1.getOrder()).compareTo(o2.getOrder());
}
}
-
+
private class PluginReportedErrorValidator extends CustomValidator {
private Property property;
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 463ee42..b25b625 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
@@ -35,6 +35,8 @@ import com.smartgwt.client.widgets.form.events.ItemChangedHandler;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.FormItemIcon;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.form.fields.events.FormItemClickHandler;
import com.smartgwt.client.widgets.form.fields.events.FormItemIconClickEvent;
import com.smartgwt.client.widgets.layout.HLayout;
@@ -57,6 +59,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class GroupConfigurationEditor extends ConfigurationEditor {
private List<GroupMemberConfiguration> memberConfigurations;
+ private Map<String, FormItem> valueItemNameToUnsetItemMap = new
HashMap<String, FormItem>();
public GroupConfigurationEditor(String locatorId, ConfigurationDefinition
configurationDefinition,
List<GroupMemberConfiguration>
memberConfigurations) {
@@ -78,47 +81,62 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
@Override
protected FormItem buildSimpleField(final PropertyDefinitionSimple
propertyDefinitionSimple,
final PropertySimple propertySimple) {
- final FormItem item;
- boolean isAggregate = isAggregateProperty(propertySimple);
- if (!isAggregate || isHomogeneous(propertySimple)) {
- item = super.buildSimpleField(propertyDefinitionSimple, propertySimple);
- } else {
- item = new StaticTextItem();
- item.setDefaultValue("<span style='color:
red'><i>Member Values Differ</i></span>");
- item.setShowTitle(false);
- }
+ final FormItem item = super.buildSimpleField(propertyDefinitionSimple,
propertySimple);
+ boolean isAggregate = isAggregateProperty(propertySimple);
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.setNeverDisable(true);
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);
+ public void onFormItemClick(FormItemIconClickEvent event) {
+ // TODO: Pass the actual index, rather than null, if the prop is
inside a list.
+
displayMemberValuesEditor(extendLocatorId("MemberValuesEditor"),
propertyDefinitionSimple,
+ propertySimple, null, item);
+ }
+ });
+ // TODO: Figure out a way to add a tooltip to the icon.
+ item.setIcons(icon);
+
+ if (!isHomogeneous(propertySimple)) {
+ updateHeterogeneousValueItem(item);
+ }
+
+ item.addChangedHandler(new ChangedHandler() {
+ public void onChanged(ChangedEvent changedEvent) {
+ Object value = changedEvent.getValue();
+ for (GroupMemberConfiguration memberConfiguration :
memberConfigurations) {
+ Configuration configuration =
memberConfiguration.getConfiguration();
+ PropertySimple memberPropertySimple =
+ getPropertySimple(configuration, propertyDefinitionSimple,
propertySimple, null);
+ memberPropertySimple.setValue(value);
+ }
}
});
- // 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);
+ @Override
+ protected FormItem buildUnsetItem(final PropertyDefinitionSimple
propertyDefinitionSimple, final PropertySimple propertySimple,
+ final FormItem valueItem) {
+ final FormItem unsetItem = super.buildUnsetItem(propertyDefinitionSimple,
propertySimple, valueItem);
+ if (!isHomogeneous(propertySimple) &&
isAggregateProperty(propertySimple)) {
+ // non-homogeneous aggregate property (i.e. members have mixed values)
+ unsetItem.setValue(false);
+ unsetItem.setDisabled(true);
+ }
+ this.valueItemNameToUnsetItemMap.put(valueItem.getName(), unsetItem);
+ return unsetItem;
}
- private void displayMemberValuesEditor(String locatorId, PropertyDefinitionSimple
propertyDefinitionSimple,
- final FormItem aggregateValueItem,
- final PropertySimple aggregatePropertySimple,
Integer index) {
+ private void displayMemberValuesEditor(String locatorId, final
PropertyDefinitionSimple propertyDefinitionSimple,
+ final PropertySimple aggregatePropertySimple,
+ Integer index, final FormItem
aggregateValueItem
+ ) {
LocatableVLayout layout = new LocatableVLayout(locatorId);
layout.setHeight100();
@@ -151,14 +169,13 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
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();
memberItem.setShowTitle(false);
memberItem.setDefaultValue(memberName);
items.add(memberItem);
Configuration configuration = memberConfiguration.getConfiguration();
- PropertySimple memberPropertySimple = getPropertySimple(configuration,
propertyDefinitionSimple, index);
+ PropertySimple memberPropertySimple = getPropertySimple(configuration,
propertyDefinitionSimple, aggregatePropertySimple, index);
memberProperties.put(memberName, memberPropertySimple);
FormItem valueItem = buildSimpleField(propertyDefinitionSimple,
memberPropertySimple);
valueItem.setAttribute("rhq:property", memberPropertySimple);
@@ -170,7 +187,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
valueItem.setEndRow(true);
}
form.setItems(items.toArray(new FormItem[items.size()]));
-
+
final Window popup = new Window();
popup.setTitle("Member Values for Property '" +
propertyDefinitionSimple.getName());
popup.setWidth(800);
@@ -185,28 +202,43 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
okButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
boolean valuesHomogeneous = true;
- String firstValue = (String)valueItems.get(0).getValue();
+ Object firstValue = valueItems.get(0).getValue();
for (FormItem valueItem : valueItems) {
- String value = (String)valueItem.getValue();
+ Object value = valueItem.getValue();
if ((value != null && !value.equals(firstValue)) || (value ==
null && firstValue != null)) {
valuesHomogeneous = false;
}
PropertySimple memberPropertySimple =
(PropertySimple)valueItem.getAttributeAsObject("rhq:property");
- memberPropertySimple.setStringValue(value);
+ memberPropertySimple.setValue(value);
memberPropertySimple.setErrorMessage(null);
}
+
+ FormItem aggregateUnsetItem =
valueItemNameToUnsetItemMap.get(aggregateValueItem.getName());
+ aggregateUnsetItem.setDisabled(!valuesHomogeneous);
if (valuesHomogeneous) {
- // Values are all the same, so update the value of the aggregate
property and set its override flag to true.
- aggregateValueItem.getForm().setValue(aggregateValueItem.getName(),
firstValue);
- // TODO: Will this cause a value changed event to fire for the
aggregate form item?
- aggregatePropertySimple.setStringValue(firstValue);
+ // Update the value of the aggregate property and set its override
flag to true.
+ aggregatePropertySimple.setValue(firstValue);
aggregatePropertySimple.setOverride(true);
+
+ // Set the aggregate value item's value to the homogeneous value,
enable it, and make sure it has
+ // validators set.
+ aggregateValueItem.setDisabled(false);
+ setValue(aggregateValueItem, firstValue);
+ aggregateValueItem.setTooltip(null);
+ aggregateValueItem.setValidateOnChange(true);
+ aggregateValueItem.setValidateOnExit(true);
+
+ aggregateUnsetItem.setValue(firstValue == null);
} else {
- aggregatePropertySimple.setStringValue(null);
+ aggregatePropertySimple.setValue(null);
aggregatePropertySimple.setOverride(false);
+
+ updateHeterogeneousValueItem(aggregateValueItem);
+
+ aggregateUnsetItem.setValue((String)null);
}
- // TODO: Figure out a way to update the aggregate Unset checkbox.
+
popup.destroy();
}
});
@@ -237,8 +269,17 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
popup.show();
}
+ private void updateHeterogeneousValueItem(FormItem item) {
+ item.setDisabled(true);
+ item.setValidateOnChange(false);
+ item.setValidateOnExit(false);
+ item.setValue("MEMBER VALUES DIFFER");
+ item.setTooltip("Member values differ - click icon to edit them.");
+ }
+
private PropertySimple getPropertySimple(Configuration configuration,
- PropertyDefinitionSimple
propertyDefinitionSimple, Integer index) {
+ PropertyDefinitionSimple
propertyDefinitionSimple,
+ PropertySimple aggregatePropertySimple,
Integer index) {
LinkedList<PropertyDefinition> propertyDefinitionHierarchy = new
LinkedList<PropertyDefinition>();
PropertyDefinition currentPropertyDefinition = propertyDefinitionSimple;
do {
@@ -266,7 +307,21 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
}
}
- return (PropertySimple)property;
+ PropertySimple propertySimple = (PropertySimple)property;
+ if (isHomogeneous(aggregatePropertySimple)) {
+ // If the aggregate property has its override bit set, make sure the member
property has the same value.
+ propertySimple.setStringValue(aggregatePropertySimple.getStringValue());
+ }
+ return propertySimple;
+ }
+
+ private boolean isAggregateProperty(PropertySimple propertySimple) {
+ return (getConfiguration(propertySimple) == getConfiguration());
+ }
+
+ private static Boolean isHomogeneous(PropertySimple propertySimple) {
+ Boolean override = propertySimple.getOverride();
+ return (override != null && override);
}
private static Configuration getConfiguration(Property property) {
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 e0be6ef..f96d603 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
@@ -2,10 +2,8 @@ package org.rhq.enterprise.gui.coregui.client.gwt;
import java.util.List;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
-import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.composite.ResourceConfigurationComposite;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -13,14 +11,15 @@ import
org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
-import
org.rhq.enterprise.server.configuration.ConfigurationUpdateStillInProgressException;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
+/**
+ *
+ */
@RemoteServiceRelativePath("ConfigurationGWTService")
public interface ConfigurationGWTService extends RemoteService {
-
Configuration getPluginConfiguration(int resourceId);
ConfigurationDefinition getPluginConfigurationDefinition(int resourceTypeId);
@@ -40,6 +39,11 @@ public interface ConfigurationGWTService extends RemoteService {
List<DisambiguationReport<ResourceConfigurationComposite>>
findResourceConfigurationsForGroup(int groupId);
- RawConfiguration dummy(RawConfiguration config);
+ List<DisambiguationReport<ResourceConfigurationComposite>>
findPluginConfigurationsForGroup(int groupId);
+
+ void updateResourceConfigurationsForGroup(int groupId,
List<ResourceConfigurationComposite> resourceConfigurations);
+
+ void updatePluginConfigurationsForGroup(int groupId,
List<ResourceConfigurationComposite> pluginConfigurations);
+ //RawConfiguration dummy(RawConfiguration config);
}
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 03cfc83..cef496a 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
@@ -26,7 +26,6 @@ import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
@@ -92,6 +91,7 @@ public class GroupResourceConfigurationEditView extends LocatableVLayout
impleme
toolStrip.addMember(new LayoutSpacer());
this.saveButton = new LocatableIButton(this.extendLocatorId("Save"),
"Save");
+ this.saveButton.setTooltip("Update the configurations of all group
members.");
this.saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
save();
@@ -176,26 +176,34 @@ public class GroupResourceConfigurationEditView extends
LocatableVLayout impleme
});
}
- private void save() {
- // TODO
-
- SC.say("Boo!");
-/*
-
GWTServiceLookup.getConfigurationService().updateResourceConfiguration(resource.getId(),
updatedConfiguration,
- new AsyncCallback<ResourceConfigurationUpdate>() {
+ private void save() {
+ List<ResourceConfigurationComposite> resourceConfigurations =
convertToCompositeList();
+
GWTServiceLookup.getConfigurationService().updateResourceConfigurationsForGroup(this.group.getId(),
+ resourceConfigurations, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to update
configuration.", caught);
+ CoreGUI.getErrorHandler().handleError("Configuration update
failed for "
+ + group.getResourceType().getName() + " compatible group
'" + group.getName() + "'.", caught);
}
- public void onSuccess(ResourceConfigurationUpdate result) {
+ public void onSuccess(Void result) {
CoreGUI.getMessageCenter().notify(
- new Message("Configuration updated.",
- "Configuration updated for Resource [" +
resource.getName() + "].",
+ new Message("Configuration update initiated.",
+ "Configuration update initiated for " +
group.getResourceType().getName()
+ + " compatible group '" + group.getName() +
"'.",
Message.Severity.Info));
reloadConfiguration();
}
});
-*/
+ }
+
+ private List<ResourceConfigurationComposite> convertToCompositeList() {
+ List<ResourceConfigurationComposite> resourceConfigurations =
+ new
ArrayList<ResourceConfigurationComposite>(this.memberConfigurations.size());
+ for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
+ resourceConfigurations.add(new
ResourceConfigurationComposite(memberConfiguration.getId(),
+ memberConfiguration.getConfiguration()));
+ }
+ return resourceConfigurations;
}
@Override
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 63fa33f..e20bd50 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
@@ -1,14 +1,12 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
import java.util.ArrayList;
+import java.util.HashMap;
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;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.composite.ResourceConfigurationComposite;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -34,6 +32,13 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl
implemen
private static final long serialVersionUID = 1L;
+ private static final IntExtractor<ResourceConfigurationComposite>
RESOURCE_CONFIGURATION_COMPOSITE_RESOURCE_ID_EXTRACTOR =
+ new IntExtractor<ResourceConfigurationComposite>() {
+ public int extract(ResourceConfigurationComposite configurationComposite) {
+ return configurationComposite.getResourceId();
+ }
+ };
+
private ConfigurationManagerLocal configurationManager =
LookupUtil.getConfigurationManager();
private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private ResourceGroupManagerLocal groupManager =
LookupUtil.getResourceGroupManager();
@@ -125,14 +130,7 @@ public class ConfigurationGWTServiceImpl extends
AbstractGWTServiceImpl implemen
ResourceGroup group = this.groupManager.getResourceGroup(getSessionSubject(),
groupId);
Map<Integer,Configuration> configurations =
this.configurationManager.getResourceConfigurationMapForCompatibleGroup(group);
- List<ResourceConfigurationComposite> configurationComposites =
- new
ArrayList<ResourceConfigurationComposite>(configurations.size());
- for (Integer resourceId : configurations.keySet()) {
- Configuration configuration = configurations.get(resourceId);
- ResourceConfigurationComposite configurationComposite =
- new ResourceConfigurationComposite(resourceId, configuration);
- configurationComposites.add(configurationComposite);
- }
+ List<ResourceConfigurationComposite> configurationComposites =
convertToCompositesList(configurations);
// Disambiguate - i.e. generate unambiguous Resource names for each of the
Resource id's.
List<DisambiguationReport<ResourceConfigurationComposite>>
disambiguatedConfigurationComposites = resourceManager
@@ -146,24 +144,70 @@ public class ConfigurationGWTServiceImpl extends
AbstractGWTServiceImpl implemen
}
}
- public RawConfiguration dummy(RawConfiguration config) {
- Log.info(config.getPath());
- return new RawConfiguration();
- // Dummy method for gwt compiler
+ public List<DisambiguationReport<ResourceConfigurationComposite>>
findPluginConfigurationsForGroup(
+ int groupId) {
+ try {
+ Map<Integer,Configuration> configurations =
+
this.configurationManager.getPluginConfigurationsForCompatibleGroup(getSessionSubject(),
groupId);
+ 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.findPluginConfigurationsForGroup");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ public void updateResourceConfigurationsForGroup(int groupId,
+
List<ResourceConfigurationComposite> resourceConfigurations) {
+ try {
+ Map<Integer, Configuration> configurations =
convertToMap(resourceConfigurations);
+
this.configurationManager.scheduleGroupResourceConfigurationUpdate(getSessionSubject(),
groupId, configurations);
+ } catch (RuntimeException e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ public void updatePluginConfigurationsForGroup(int groupId,
+
List<ResourceConfigurationComposite> pluginConfigurations) {
+ try {
+ Map<Integer, Configuration> configurations =
convertToMap(pluginConfigurations);
+
this.configurationManager.scheduleGroupPluginConfigurationUpdate(getSessionSubject(),
groupId, configurations);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
/*
- public ResourceConfigurationComposite dummy(ResourceConfigurationComposite
resourceConfigurationComposite) {
- return new ResourceConfigurationComposite();
- // Dummy method for gwt compiler
+ // Dummy method for gwt compiler
+ public RawConfiguration dummy(RawConfiguration config) {
+ Log.info(config.getPath());
+ return new RawConfiguration();
}
*/
- private static final IntExtractor<ResourceConfigurationComposite>
RESOURCE_CONFIGURATION_COMPOSITE_RESOURCE_ID_EXTRACTOR =
- new IntExtractor<ResourceConfigurationComposite>() {
- public int extract(ResourceConfigurationComposite configurationComposite) {
- return configurationComposite.getResourceId();
+ private List<ResourceConfigurationComposite>
convertToCompositesList(Map<Integer, Configuration> configurations) {
+ List<ResourceConfigurationComposite> configurationComposites =
+ new ArrayList<ResourceConfigurationComposite>(configurations.size());
+ for (Integer resourceId : configurations.keySet()) {
+ Configuration configuration = configurations.get(resourceId);
+ ResourceConfigurationComposite configurationComposite =
+ new ResourceConfigurationComposite(resourceId, configuration);
+ configurationComposites.add(configurationComposite);
}
- };
+ return configurationComposites;
+ }
+ private Map<Integer, Configuration>
convertToMap(List<ResourceConfigurationComposite> resourceConfigurations) {
+ Map<Integer, Configuration> configurations = new HashMap<Integer,
Configuration>(resourceConfigurations.size());
+ for (ResourceConfigurationComposite resourceConfiguration :
resourceConfigurations) {
+ configurations.put(resourceConfiguration.getResourceId(),
resourceConfiguration.getConfiguration());
+ }
+ return configurations;
+ }
}