* @param choicePath the choice attribute path
*/
private void addChoiceOption(AttributeValueView reference, List<String> choicePath) {
String attributeChoice = choicePath.get(0);
I_Type optionType = getAttributeType().getAttributeType(attributeChoice);
I_Entity choiceEntity = m_vie.createEntity(null, getAttributeType().getId());
AttributeValueView valueWidget = reference;
if (reference.hasValue()) {
valueWidget = new AttributeValueView(
this,
m_widgetService.getAttributeLabel(attributeChoice),
m_widgetService.getAttributeHelp(attributeChoice));
}
List<ChoiceMenuEntryBean> menuEntries = Renderer.getChoiceEntries(getAttributeType(), true);
for (ChoiceMenuEntryBean menuEntry : menuEntries) {
valueWidget.addChoice(m_widgetService, menuEntry);
}
int valueIndex = reference.getValueIndex() + 1;
m_entity.insertAttributeValue(m_attributeName, choiceEntity, valueIndex);
((FlowPanel)reference.getParent()).insert(valueWidget, valueIndex);
insertHandlers(valueWidget.getValueIndex());
if (optionType.isSimpleType()) {
String value = m_widgetService.getDefaultAttributeValue(attributeChoice);
I_FormEditWidget widget = m_widgetService.getAttributeFormWidget(attributeChoice);
choiceEntity.addAttributeValue(attributeChoice, value);
valueWidget.setValueWidget(widget, value, true);
} else {
I_Entity value = m_vie.createEntity(null, optionType.getId());
choiceEntity.addAttributeValue(attributeChoice, value);
List<String> remainingAttributeNames = tail(choicePath);
createNestedEntitiesForChoicePath(value, remainingAttributeNames);
I_EntityRenderer renderer = m_widgetService.getRendererForAttribute(attributeChoice, optionType);
valueWidget.setValueEntity(renderer, value);