modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
| 261 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
| 119 +++-
2 files changed, 225 insertions(+), 155 deletions(-)
New commits:
commit 2d314c765251509e6a0cf4f075a2f9fad4b8b3bd
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 22 23:07:25 2010 -0400
add support for dynamic/open maps to group config editor; inform user that
viewing/editing of list properties is not currently supported for group configs
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 163ff47..a46b8bb 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
@@ -128,7 +128,6 @@ import
org.rhq.core.domain.configuration.definition.constraint.IntegerRangeConst
import org.rhq.core.domain.configuration.definition.constraint.RegexConstraint;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.components.table.PropertyGrid;
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.inventory.resource.type.ResourceTypeRepository;
@@ -406,7 +405,7 @@ public class ConfigurationEditor extends LocatableVLayout {
protected VLayout buildStructuredPane() {
LocatableVLayout layout = new
LocatableVLayout(extendLocatorId("Structured"));
- List<PropertyGroupDefinition> definitions =
configurationDefinition.getGroupDefinitions();
+ List<PropertyGroupDefinition> groupDefinitions =
configurationDefinition.getGroupDefinitions();
final SectionStack sectionStack = new
LocatableSectionStack(layout.extendLocatorId("Sections"));
sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
@@ -415,11 +414,11 @@ public class ConfigurationEditor extends LocatableVLayout {
sectionStack.setScrollSectionIntoView(true);
sectionStack.setOverflow(Overflow.AUTO);
- if (configurationDefinition.getNonGroupedProperties().size() > 0) {
+ if (!configurationDefinition.getNonGroupedProperties().isEmpty()) {
sectionStack.addSection(buildGroupSection(layout.extendLocatorId("NoGroup"),
null));
}
- for (PropertyGroupDefinition definition : definitions) {
+ for (PropertyGroupDefinition definition : groupDefinitions) {
// com.allen_sauer.gwt.log.client.Log.info("building: "
+ definition.getDisplayName());
sectionStack.addSection(buildGroupSection(layout.extendLocatorId(definition.getName()),
definition));
}
@@ -527,15 +526,14 @@ public class ConfigurationEditor extends LocatableVLayout {
form.setColWidths(190, 28, 210);
List<FormItem> fields = new ArrayList<FormItem>();
- addItemsForPropertiesRecursively(locatorId, propertyDefinitions, propertyMap,
fields, firePropertyChangedEvents);
+ addItemsForPropertiesRecursively(locatorId, propertyDefinitions, propertyMap,
fields);
form.setFields(fields.toArray(new FormItem[fields.size()]));
return form;
}
private void addItemsForPropertiesRecursively(String locatorId,
Collection<PropertyDefinition> propertyDefinitions,
- AbstractPropertyMap propertyMap,
List<FormItem> fields,
- boolean firePropertyChangedEvents) {
+ AbstractPropertyMap propertyMap,
List<FormItem> fields) {
boolean odd = true;
List<PropertyDefinition> sortedPropertyDefinitions = new
ArrayList<PropertyDefinition>(propertyDefinitions);
Collections.sort(sortedPropertyDefinitions, new PropertyDefinitionComparator());
@@ -548,7 +546,7 @@ public class ConfigurationEditor extends LocatableVLayout {
}
}
addItemsForPropertyRecursively(locatorId + "_" +
propertyDefinition.getName(), propertyDefinition, property,
- odd, fields, firePropertyChangedEvents);
+ odd, fields);
odd = !odd;
}
}
@@ -556,7 +554,7 @@ public class ConfigurationEditor extends LocatableVLayout {
public void addItemsForPropertyRecursively(String locatorId, PropertyDefinition
propertyDefinition,
Property property,
boolean oddRow,
- List<FormItem> fields, final boolean
firePropertyChangedEvents) {
+ List<FormItem> fields) {
List<FormItem> fieldsForThisProperty;
if (propertyDefinition instanceof PropertyDefinitionSimple) {
@@ -640,8 +638,8 @@ public class ConfigurationEditor extends LocatableVLayout {
SpacerItem unsetItem = new SpacerItem();
fields.add(unsetItem);
- CanvasItem listOfSimplesItem = buildListOfSimplesField(locatorId,
propertyDefinitionList, propertyList,
- oddRow);
+ CanvasItem listOfSimplesItem = buildListOfSimplesField(locatorId,
propertyDefinitionList, propertyList
+ );
fields.add(listOfSimplesItem);
StaticTextItem descriptionItem = buildDescriptionField(propertyDefinition);
@@ -674,7 +672,7 @@ public class ConfigurationEditor extends LocatableVLayout {
return fields;
}
- private StaticTextItem buildNameItem(PropertyDefinition propertyDefinition) {
+ protected StaticTextItem buildNameItem(PropertyDefinition propertyDefinition) {
StaticTextItem nameItem = new StaticTextItem();
nameItem.setStartRow(true);
String title = "<b>"
@@ -693,9 +691,9 @@ public class ConfigurationEditor extends LocatableVLayout {
return descriptionItem;
}
- private void firePropertyChangedEvent(Property property,
- PropertyDefinition propertyDefinition,
- boolean isValid) {
+ protected void firePropertyChangedEvent(Property property,
+ PropertyDefinition propertyDefinition,
+ boolean isValid) {
boolean wasValidBefore = this.invalidPropertyNames.isEmpty();
Property topLevelProperty = getTopLevelProperty(property);
if (isValid) {
@@ -719,76 +717,31 @@ public class ConfigurationEditor extends LocatableVLayout {
private FormItem buildMapField(String parentLocatorId, PropertyDefinitionMap
propertyDefinitionMap,
final PropertyMap propertyMap) {
- Canvas canvas;
- Map<String, PropertyDefinition> memberPropertyDefinitions =
propertyDefinitionMap.getPropertyDefinitions();
String locatorId = parentLocatorId + "_" +
propertyDefinitionMap.getName();
- if (memberPropertyDefinitions == null || memberPropertyDefinitions.isEmpty()) {
- canvas = buildDynamicMapField(locatorId, propertyDefinitionMap,
propertyMap);
- } else {
- canvas = buildStaticMapField(locatorId, propertyDefinitionMap, propertyMap);
+ boolean isDynamic = isDynamic(propertyDefinitionMap);
+ if (isDynamic) {
+ PropertyDefinitionMap propertyDefinitionMapClone = new
PropertyDefinitionMap(propertyDefinitionMap.getName(),
+ propertyDefinitionMap.getDescription(),
propertyDefinitionMap.isRequired());
+
propertyDefinitionMapClone.setConfigurationDefinition(propertyDefinitionMap.getConfigurationDefinition());
+ addMemberPropertyDefinitionsToDynamicPropertyMap(propertyDefinitionMapClone,
propertyMap);
+ propertyDefinitionMap = propertyDefinitionMapClone;
}
- CanvasItem canvasItem = buildComplexPropertyField(canvas);
- canvasItem.setColSpan(3);
- canvasItem.setEndRow(true);
-
- return canvasItem;
- }
-
- private CanvasItem buildComplexPropertyField(Canvas canvas) {
- CanvasItem canvasItem = new CanvasItem();
- canvasItem.setCanvas(canvas);
- canvasItem.setShowTitle(false);
- return canvasItem;
- }
-
- private Canvas buildDynamicMapField(String parentLocatorId, PropertyDefinitionMap
propertyDefinitionMap,
- final PropertyMap propertyMap) {
- Log.debug("Building dynamic map field for " + propertyMap +
"...");
-
- // create the property grid
- final PropertyGrid propertyGrid = new PropertyGrid();
- propertyGrid.getNameField().setName("Name");
- propertyGrid.getValuesField().setName("Value");
-
- // create the editors
- Map<String, FormItem> editorsMap = new HashMap<String, FormItem>();
- TextItem textEditor = new TextItem();
- editorsMap.put("simpleText", textEditor);
-
- // set the editors and attribute name where to find the record type
- propertyGrid.setEditorsMap("fieldType", editorsMap);
+ VLayout layout = new VLayout();
- ListGridRecord[] records = new ListGridRecord[propertyMap.getMap().size()];
- int i = 0;
- for (Property prop : propertyMap.getMap().values()) {
- if (!(prop instanceof PropertySimple)) {
- Log.warn("Unsupported Configuration permutation: PropertyMap "
+ propertyMap
- + " contains non-simple member Property " + prop + " -
skipping...");
- continue;
- }
- PropertySimple propSimple = (PropertySimple)prop;
- ListGridRecord record = new ListGridRecord();
- String propertyName = prop.getName();
- record.setAttribute("Name", propertyName);
- String value = propSimple.getStringValue();
- record.setAttribute("Value", value);
- record.setAttribute("fieldType", "simpleText");
- records[i++] = record;
- }
- propertyGrid.setData(records);
-
- VLayout canvas = new VLayout();
- canvas.addMember(propertyGrid);
+ final PropertyDefinitionMap propertyDefinitionMapFinal = propertyDefinitionMap;
+ Canvas valuesCanvas = buildPropertiesForm(parentLocatorId,
propertyDefinitionMapFinal.getPropertyDefinitions().values(),
+ propertyMap, true);
+ layout.addMember(valuesCanvas);
- if (!isReadOnly(propertyDefinitionMap, propertyMap)) {
+ if (isDynamic && !isReadOnly(propertyDefinitionMap, propertyMap)) {
// Map is not read-only - add footer with New and Delete buttons to allow
user to add or remove members.
- ToolStrip footer = new ToolStrip();
- footer.setPadding(5);
- footer.setWidth100();
- footer.setMembersMargin(15);
- canvas.addMember(footer);
+ ToolStrip buttonBar = new ToolStrip();
+ buttonBar.setPadding(5);
+ buttonBar.setWidth100();
+ buttonBar.setMembersMargin(15);
+ layout.addMember(buttonBar);
- final IButton deleteButton = new
LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete");
+ /*final IButton deleteButton = new
LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete");
deleteButton.setDisabled(true);
deleteButton.addClickHandler(new
com.smartgwt.client.widgets.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
@@ -815,7 +768,7 @@ public class ConfigurationEditor extends LocatableVLayout {
int count = propertyGrid.getSelection().length;
deleteButton.setDisabled(count < 1);
}
- });
+ });*/
final IButton newButton = new
LocatableIButton(extendLocatorId(propertyMap.getName()), "New");
newButton.addClickHandler(new
com.smartgwt.client.widgets.events.ClickHandler() {
@@ -829,16 +782,11 @@ public class ConfigurationEditor extends LocatableVLayout {
+ "', because the set already contains
a property with that name.",
Message.Severity.Error,
EnumSet.of(Message.Option.Transient)));
} else {
- propertyMap.put(new PropertySimple(propertyName,
null));
-
- ListGridRecord record = new ListGridRecord();
- record.setAttribute("Name", propertyName);
- record.setAttribute("Value", "");
- record.setAttribute("fieldType",
"simpleText");
+ PropertySimple memberPropertySimple = new
PropertySimple(propertyName, null);
+ addPropertyToDynamicMap(memberPropertySimple,
propertyMap);
+ firePropertyChangedEvent(propertyMap,
propertyDefinitionMapFinal, true);
- propertyGrid.addData(record);
- propertyGrid.focus();
- propertyGrid.enableSpecificEditor(record);
+ reload();
CoreGUI.getMessageCenter().notify(new
Message("Added property to the set.", EnumSet.of(
Message.Option.Transient)));
@@ -847,33 +795,103 @@ public class ConfigurationEditor extends LocatableVLayout {
});
}
});
- footer.addMember(newButton);
- }
+ buttonBar.addMember(newButton);
+
+ DynamicForm deleteForm = new DynamicForm();
+ deleteForm.setNumCols(3);
+ buttonBar.addMember(deleteForm);
+
+ final SelectItem selectItem = new SelectItem();
+
selectItem.setValueMap(propertyDefinitionMap.getPropertyDefinitions().keySet().toArray(
+ new String[propertyDefinitionMap.getPropertyDefinitions().size()]));
+ selectItem.setMultiple(true);
+ selectItem.setMultipleAppearance(MultipleAppearance.GRID);
+ selectItem.setTitle("Delete");
+
+ final ButtonItem okButtonItem = new ButtonItem();
+ okButtonItem.setTitle("OK");
+ okButtonItem.setDisabled(true);
+ okButtonItem.setEndRow(true);
+ okButtonItem.addClickHandler(new
com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
+ public void
onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent clickEvent) {
+ SC.confirm("Are you sure you want to delete the selected
properties from the set?", new BooleanCallback() {
+ @Override
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ Object value = selectItem.getValue();
+ if (value != null) {
+ String stringValue = value.toString();
+ String[] memberPropertyNames =
stringValue.split(",");
+ for (final String memberPropertyName :
memberPropertyNames) {
+ PropertySimple memberPropertySimple =
propertyMap.getSimple(memberPropertyName);
+
removePropertyFromDynamicMap(memberPropertySimple);
+ firePropertyChangedEvent(propertyMap,
propertyDefinitionMapFinal, true);
+ }
+ }
- propertyGrid.addCellSavedHandler(new CellSavedHandler() {
- @Override
- public void onCellSaved(CellSavedEvent cellSavedEvent) {
- Record record = cellSavedEvent.getRecord();
- String propertyName = record.getAttribute("Name");
- PropertySimple prop = propertyMap.getSimple(propertyName);
- if (prop == null) {
- prop = new PropertySimple(propertyName, null);
- propertyMap.put(prop);
+ reload();
+ CoreGUI.getMessageCenter().notify(new
Message("Removed properties from the set.", EnumSet.of(
+ Message.Option.Transient)));
+ }
+ }
+ });
}
- String value = record.getAttribute("Value");
- prop.setStringValue(value);
- }
- });
+ });
- return canvas;
+ selectItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent changedEvent) {
+ Object value = changedEvent.getValue();
+ if (value != null) {
+ String stringValue = value.toString();
+ String[] memberPropertyNames = stringValue.split(",");
+ okButtonItem.setDisabled(memberPropertyNames.length == 0);
+ }
+ }
+ });
+
+ deleteForm.setFields(selectItem, okButtonItem);
+ }
+
+ CanvasItem canvasItem = buildComplexPropertyField(layout);
+ canvasItem.setColSpan(3);
+ canvasItem.setEndRow(true);
+
+ return canvasItem;
}
- private Canvas buildStaticMapField(String parentLocatorId, PropertyDefinitionMap
propertyDefinitionMap,
- PropertyMap propertyMap) {
- Log.debug("Building static map field for " + propertyMap +
"...");
+ protected void addPropertyToDynamicMap(PropertySimple memberPropertySimple,
PropertyMap propertyMap) {
+ memberPropertySimple.setOverride(true);
+ propertyMap.put(memberPropertySimple);
+ }
- return buildPropertiesForm(parentLocatorId,
propertyDefinitionMap.getPropertyDefinitions().values(),
- propertyMap, true);
+ protected void removePropertyFromDynamicMap(PropertySimple propertySimple) {
+ PropertyMap parentMap = propertySimple.getParentMap();
+ parentMap.getMap().remove(propertySimple.getName());
+ }
+
+ private boolean isDynamic(PropertyDefinitionMap propertyDefinitionMap) {
+ Map<String, PropertyDefinition> memberPropertyDefinitions =
propertyDefinitionMap.getPropertyDefinitions();
+ return memberPropertyDefinitions == null || memberPropertyDefinitions.isEmpty();
+ }
+
+ private void addMemberPropertyDefinitionsToDynamicPropertyMap(PropertyDefinitionMap
propertyDefinitionMap,
+ PropertyMap
propertyMap) {
+ for (String propertyName : propertyMap.getMap().keySet()) {
+ PropertySimple memberPropertySimple = propertyMap.getSimple(propertyName);
+ if (memberPropertySimple != null) {
+ PropertyDefinitionSimple memberPropertyDefinitionSimple = new
PropertyDefinitionSimple(propertyName,
+ null, false, PropertySimpleType.STRING);
+ propertyDefinitionMap.put(memberPropertyDefinitionSimple);
+ }
+ }
+ }
+
+ private CanvasItem buildComplexPropertyField(Canvas canvas) {
+ CanvasItem canvasItem = new CanvasItem();
+ canvasItem.setCanvas(canvas);
+ canvasItem.setShowTitle(false);
+ return canvasItem;
}
private CanvasItem buildListOfMapsField(final String locatorId,
@@ -1064,7 +1082,7 @@ public class ConfigurationEditor extends LocatableVLayout {
}
private CanvasItem buildListOfSimplesField(String locatorId, final
PropertyDefinitionList propertyDefinitionList,
- final PropertyList propertyList, boolean
oddRow) {
+ final PropertyList propertyList) {
Log.debug("Building list-of-simples field for " + propertyList +
"...");
LocatableVLayout vLayout = new LocatableVLayout(locatorId);
@@ -1369,14 +1387,14 @@ public class ConfigurationEditor extends LocatableVLayout {
return currentProperty;
}
- protected FormItem buildUnsetItem(PropertyDefinitionSimple propertyDefinition, final
PropertySimple property,
+ protected FormItem buildUnsetItem(final PropertyDefinitionSimple
propertyDefinitionSimple, final PropertySimple propertySimple,
final FormItem valueItem) {
FormItem item;
- if (!propertyDefinition.isRequired()) {
+ if (!propertyDefinitionSimple.isRequired()) {
final CheckboxItem unsetItem = new CheckboxItem();
- boolean unset = isUnset(propertyDefinition, property);
+ boolean unset = isUnset(propertyDefinitionSimple, propertySimple);
unsetItem.setValue(unset);
- unsetItem.setDisabled(isReadOnly(propertyDefinition, property));
+ unsetItem.setDisabled(isReadOnly(propertyDefinitionSimple, propertySimple));
unsetItem.setShowLabel(false);
unsetItem.setShowTitle(false);
unsetItem.setLabelAsTitle(false);
@@ -1387,27 +1405,20 @@ public class ConfigurationEditor extends LocatableVLayout {
Boolean isUnset = (Boolean) changeEvent.getValue();
valueItem.setDisabled(isUnset);
if (isUnset) {
+ updatePropertySimpleValue(null, propertySimple,
propertyDefinitionSimple);
setValue(valueItem, null);
} else {
valueItem.focusInItem();
}
valueItem.redraw();
- property.setValue(valueItem.getValue());
- }
- });
-
-/*
- valueItem.addChangeHandler(new ChangeHandler() {
- public void onChange(ChangeEvent changeEvent) {
- Object value = changeEvent.getValue();
- unsetItem.setDisabled(value == null);
+ propertySimple.setValue(valueItem.getValue());
}
});
-*/
item = unsetItem;
} else {
item = new SpacerItem();
+ item.setShowTitle(false);
}
return item;
}
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 c2e2eb7..f544ac6 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
@@ -53,6 +53,7 @@ import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionList;
import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -113,6 +114,26 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
}
@Override
+ protected List<FormItem> buildFieldsForPropertyList(String locatorId,
PropertyDefinition propertyDefinition,
+ boolean oddRow,
PropertyDefinitionList propertyDefinitionList,
+ PropertyDefinition
memberDefinition,
+ PropertyList propertyList) {
+ List<FormItem> fields = new ArrayList<FormItem>();
+
+ StaticTextItem nameItem = buildNameItem(propertyDefinition);
+ fields.add(nameItem);
+
+ StaticTextItem staticTextItem = new StaticTextItem();
+ staticTextItem.setShowTitle(false);
+ staticTextItem.setValue("List properties are not currently supported for
group configurations.");
+ staticTextItem.setColSpan(3);
+ staticTextItem.setEndRow(true);
+ fields.add(staticTextItem);
+
+ return fields;
+ }
+
+ @Override
protected FormItem buildSimpleField(final PropertyDefinitionSimple
propertyDefinitionSimple,
final PropertySimple propertySimple) {
final FormItem item = super.buildSimpleField(propertyDefinitionSimple,
propertySimple);
@@ -138,6 +159,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
return item;
}
+
private FormItemIcon buildEditMemberValuesIcon(final PropertyDefinitionSimple
propertyDefinitionSimple,
final PropertySimple propertySimple,
final FormItem dynamicItem) {
FormItemIcon icon = new FormItemIcon();
@@ -161,10 +183,9 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
private void updateMemberProperties(PropertyDefinitionSimple
propertyDefinitionSimple,
PropertySimple propertySimple, Object value
) {
- for (GroupMemberConfiguration memberConfiguration : memberConfigurations) {
+ for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
Configuration configuration = memberConfiguration.getConfiguration();
- PropertySimple memberPropertySimple =
- getPropertySimple(configuration, propertyDefinitionSimple, null);
+ PropertySimple memberPropertySimple =
(PropertySimple)getProperty(configuration, propertySimple, null);
memberPropertySimple.setValue(value);
}
}
@@ -173,7 +194,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
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)) {
+ if (unsetItem instanceof CheckboxItem && !isHomogeneous(propertySimple)
&& isAggregateProperty(propertySimple)) {
// non-homogeneous aggregate property (i.e. members have mixed values)
unsetItem.setValue(false);
unsetItem.setDisabled(true);
@@ -287,7 +308,8 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
memberItem.setDefaultValue(memberName);
items.add(memberItem);
Configuration configuration = memberConfiguration.getConfiguration();
- PropertySimple memberPropertySimple = getPropertySimple(configuration,
propertyDefinitionSimple, index);
+ PropertySimple memberPropertySimple =
+ (PropertySimple)getProperty(configuration, aggregatePropertySimple,
index);
FormItem valueItem = buildSimpleField(propertyDefinitionSimple,
memberPropertySimple);
valueItems.add(valueItem);
valueItemNameToPropertySimpleMap.put(valueItem.getName(),
memberPropertySimple);
@@ -303,12 +325,15 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
okButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
boolean valuesHomogeneous = true;
+ boolean isValid = true;
+
Object firstValue = valueItems.get(0).getValue();
for (FormItem valueItem : valueItems) {
Object value = valueItem.getValue();
if ((value != null && !value.equals(firstValue)) || (value ==
null && firstValue != null)) {
valuesHomogeneous = false;
}
+ isValid = isValid && valueItem.validate();
PropertySimple memberPropertySimple =
valueItemNameToPropertySimpleMap.get(valueItem.getName());
memberPropertySimple.setValue(value);
memberPropertySimple.setErrorMessage(null);
@@ -332,7 +357,6 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
aggregateValueItem.setDisabled(false);
aggregateStaticItem.hide();
-
} else {
aggregatePropertySimple.setValue(null);
aggregatePropertySimple.setOverride(false);
@@ -342,6 +366,8 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
aggregateStaticItem.show();
}
+ firePropertyChangedEvent(aggregatePropertySimple,
propertyDefinitionSimple, isValid);
+
membersForm.markForRedraw();
popup.destroy();
}
@@ -406,46 +432,79 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
// Update all the member properties.
for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
Configuration configuration = memberConfiguration.getConfiguration();
- PropertySimple memberPropertySimple =
- getPropertySimple(configuration, propertyDefinitionSimple, null);
+ PropertySimple memberPropertySimple =
(PropertySimple)getProperty(configuration, propertySimple, null);
memberPropertySimple.setErrorMessage(null);
memberPropertySimple.setValue(value);
}
}
- private PropertySimple getPropertySimple(Configuration configuration,
- PropertyDefinitionSimple
propertyDefinitionSimple,
- Integer index) {
- LinkedList<PropertyDefinition> propertyDefinitionHierarchy = new
LinkedList<PropertyDefinition>();
- PropertyDefinition currentPropertyDefinition = propertyDefinitionSimple;
- propertyDefinitionHierarchy.add(currentPropertyDefinition);
+ @Override
+ protected void removePropertyFromDynamicMap(PropertySimple propertySimple) {
+ // Remove the aggregate property.
+ super.removePropertyFromDynamicMap(propertySimple);
+
+ // Remove the member properties.
+ for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
+ Configuration configuration = memberConfiguration.getConfiguration();
+ PropertySimple memberPropertySimple =
(PropertySimple)getProperty(configuration, propertySimple, null);
+ PropertyMap parentMap = memberPropertySimple.getParentMap();
+ parentMap.getMap().remove(memberPropertySimple.getName());
+ }
+ }
+
+ @Override
+ protected void addPropertyToDynamicMap(PropertySimple propertySimple, PropertyMap
propertyMap) {
+ // Add the aggregate property.
+ super.addPropertyToDynamicMap(propertySimple, propertyMap);
+
+ // Add the member properties.
+ for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
+ Configuration configuration = memberConfiguration.getConfiguration();
+ // The below call will create the member property and add it to the
appropriate parent property in the member config.
+ PropertySimple memberPropertySimple =
(PropertySimple)getProperty(configuration, propertySimple, null);
+ }
+ }
+
+ private Property getProperty(Configuration configuration,
+ Property referenceProperty,
+ Integer index) {
+ LinkedList<Property> propertyHierarchy = new LinkedList<Property>();
+ Property currentProperty = referenceProperty;
+ propertyHierarchy.add(currentProperty);
do {
- if (currentPropertyDefinition.getParentPropertyMapDefinition() != null) {
- currentPropertyDefinition =
currentPropertyDefinition.getParentPropertyMapDefinition();
- } else if (currentPropertyDefinition.getParentPropertyListDefinition() !=
null) {
- currentPropertyDefinition =
currentPropertyDefinition.getParentPropertyListDefinition();
- } else if (currentPropertyDefinition.getConfigurationDefinition() == null) {
- throw new IllegalStateException(currentPropertyDefinition + " has no
parent.");
+ if (currentProperty.getParentMap() != null) {
+ currentProperty = currentProperty.getParentMap();
+ } else if (currentProperty.getParentList() != null) {
+ currentProperty = currentProperty.getParentList();
+ } else if (currentProperty.getConfiguration() == null) {
+ throw new IllegalStateException(currentProperty + " has no
parent.");
}
- propertyDefinitionHierarchy.addFirst(currentPropertyDefinition);
+ propertyHierarchy.addFirst(currentProperty);
}
- while (currentPropertyDefinition.getConfigurationDefinition() == null);
+ while (currentProperty.getConfiguration() == null);
- Property property =
configuration.get(propertyDefinitionHierarchy.get(0).getName());
- for (int i = 1, propertyDefinitionHierarchySize =
propertyDefinitionHierarchy.size();
- i < propertyDefinitionHierarchySize; i++) {
- PropertyDefinition propertyDefinition = propertyDefinitionHierarchy.get(i);
+ Property property = configuration.get(propertyHierarchy.get(0).getName());
+ for (int i = 1, propertyHierarchySize = propertyHierarchy.size(); i <
propertyHierarchySize; i++) {
+ String childPropertyName = propertyHierarchy.get(i).getName();
if (property instanceof PropertyMap) {
PropertyMap propertyMap = (PropertyMap)property;
- property = propertyMap.get(propertyDefinition.getName());
+ property = propertyMap.get(childPropertyName);
+ if (property == null) {
+ property = new PropertySimple(childPropertyName, null);
+ propertyMap.put(property);
+ }
} else if (property instanceof PropertyList) {
PropertyList propertyList = (PropertyList)property;
- property = propertyList.getList().get(index);
+ if (index < propertyList.getList().size()) {
+ property = propertyList.getList().get(index);
+ } else {
+ property = new PropertySimple(childPropertyName, null);
+ propertyList.add(property);
+ }
}
}
- PropertySimple propertySimple = (PropertySimple)property;
- return propertySimple;
+ return property;
}
private boolean isAggregateProperty(PropertySimple propertySimple) {