use of com.enonic.xp.form.Form in project xp by enonic.
the class MixinServiceImpl method transformFormItems.
private List<FormItem> transformFormItems(final Iterable<FormItem> iterable, final Set<MixinName> inlineMixinStack) {
final List<FormItem> formItems = new ArrayList<>();
for (final FormItem formItem : iterable) {
if (formItem instanceof InlineMixin) {
final InlineMixin inline = (InlineMixin) formItem;
final MixinName mixinName = inline.getMixinName();
final Mixin mixin = getByName(mixinName);
if (mixin != null) {
if (inlineMixinStack.contains(mixinName)) {
final String error = "Cycle detected in mixin [" + mixin.getName() + "]. It contains an inline mixin that references itself.";
LOG.error(error);
throw new IllegalArgumentException(error);
}
inlineMixinStack.add(mixinName);
final Form mixinForm = doInlineFormItems(mixin.getForm(), inlineMixinStack);
inlineMixinStack.remove(mixinName);
for (final FormItem mixinFormItem : mixinForm) {
formItems.add(mixinFormItem.copy());
}
} else {
throw new IllegalArgumentException("Inline mixin [" + mixinName + "] not found");
}
} else if (formItem instanceof FormItemSet) {
final FormItemSet.Builder formItemSetBuilder = FormItemSet.create((FormItemSet) formItem);
formItemSetBuilder.clearFormItems();
formItemSetBuilder.addFormItems(transformFormItems((FormItemSet) formItem, inlineMixinStack));
formItems.add(formItemSetBuilder.build());
} else if (formItem instanceof FieldSet) {
final FieldSet.Builder formItemSetBuilder = FieldSet.create((FieldSet) formItem);
formItemSetBuilder.clearFormItems();
formItemSetBuilder.addFormItems(transformFormItems((FieldSet) formItem, inlineMixinStack));
formItems.add(formItemSetBuilder.build());
} else if (formItem instanceof FormOptionSet) {
final FormOptionSet.Builder formOptionSetBuilder = FormOptionSet.create((FormOptionSet) formItem);
formOptionSetBuilder.clearOptions();
for (FormOptionSetOption option : (FormOptionSet) formItem) {
final FormOptionSetOption.Builder optionBuilder = FormOptionSetOption.create(option);
optionBuilder.clearFormItems();
optionBuilder.addFormItems(transformFormItems(option.getFormItems(), inlineMixinStack));
formOptionSetBuilder.addOptionSetOption(optionBuilder.build());
}
formItems.add(formOptionSetBuilder.build());
} else {
formItems.add(formItem.copy());
}
}
return formItems;
}
use of com.enonic.xp.form.Form in project xp by enonic.
the class FormDefaultValuesProcessorImplTest method testItemSetWithOptionSetWithMinOccurrencesMoreEqualZero.
@Test
public void testItemSetWithOptionSetWithMinOccurrencesMoreEqualZero() {
FormItemSet.Builder checkItemSet = FormItemSet.create().name("checkItemSet").occurrences(Occurrences.create(1, 3));
checkItemSet.addFormItem(FormOptionSet.create().name("checkOptionSet").occurrences(Occurrences.create(0, 1)).addOptionSetOption(FormOptionSetOption.create().name("option").build()).build());
final Form form = Form.create().addFormItem(checkItemSet.build()).build();
final FormDefaultValuesProcessor defaultValuesProcessor = new FormDefaultValuesProcessorImpl();
final PropertyTree data = new PropertyTree();
defaultValuesProcessor.setDefaultValues(form, data);
assertEquals(1, data.getTotalSize());
assertNotNull(data.getString("checkItemSet"));
}
use of com.enonic.xp.form.Form in project xp by enonic.
the class FormDefaultValuesProcessorImplTest method testOptionSetWithDefaultValueAndMinOccurrencesMoreThanZero.
@Test
public void testOptionSetWithDefaultValueAndMinOccurrencesMoreThanZero() {
FormOptionSet.Builder checkOptionSet = FormOptionSet.create().required(false).name("checkOptionSet").occurrences(Occurrences.create(2, 3));
FormOptionSetOption.Builder option1 = FormOptionSetOption.create().name("option_1");
FormOptionSetOption.Builder option2 = FormOptionSetOption.create().name("option_2").defaultOption(true).addFormItem(Input.create().name("testInput").label("testInput").inputType(InputTypeName.TEXT_LINE).defaultValue(InputTypeDefault.create().property(InputTypeProperty.create("default", "Default Value").build()).build()).occurrences(Occurrences.create(3, 3)).build());
checkOptionSet.addOptionSetOption(option1.build());
checkOptionSet.addOptionSetOption(option2.build());
final Form form = Form.create().addFormItem(checkOptionSet.build()).build();
final FormDefaultValuesProcessor defaultValuesProcessor = new FormDefaultValuesProcessorImpl();
final PropertyTree data = new PropertyTree();
defaultValuesProcessor.setDefaultValues(form, data);
for (int i = 0; i < 2; i++) {
Property checkOptionSet_1 = data.getProperty("checkOptionSet", i);
assertEquals("option_2", checkOptionSet_1.getSet().getString("_selected"));
PropertySet propertySet = checkOptionSet_1.getSet().getPropertySet("option_2");
for (int j = 0; j < 3; j++) {
assertEquals("Default Value", propertySet.getString("testInput", j));
}
}
}
use of com.enonic.xp.form.Form in project xp by enonic.
the class FormDefaultValuesProcessorImplTest method defaultValue_checkbox_invalid.
@Test
public void defaultValue_checkbox_invalid() {
Input input = Input.create().name("testInput").label("testInput").inputType(InputTypeName.CHECK_BOX).defaultValue(InputTypeDefault.create().property(InputTypeProperty.create("default", "unchecked").build()).build()).build();
final Form form = Form.create().addFormItem(input).build();
final FormDefaultValuesProcessor defaultValuesProcessor = new FormDefaultValuesProcessorImpl();
final PropertyTree data = new PropertyTree();
defaultValuesProcessor.setDefaultValues(form, data);
assertNull(data.getString("testInput"));
}
use of com.enonic.xp.form.Form in project xp by enonic.
the class FormDefaultValuesProcessorImplTest method testOptionSetWithMinOccurrencesMoreZero.
@Test
public void testOptionSetWithMinOccurrencesMoreZero() {
FormOptionSet.Builder checkOptionSet = FormOptionSet.create().required(false).name("checkOptionSet").occurrences(Occurrences.create(1, 3));
FormOptionSetOption.Builder option = FormOptionSetOption.create().name("option_1");
checkOptionSet.addOptionSetOption(option.build());
FormItemSet.Builder formItemSet = FormItemSet.create().name("item-set").occurrences(Occurrences.create(1, 2)).addFormItem(checkOptionSet.build());
final Form form = Form.create().addFormItem(formItemSet.build()).build();
final FormDefaultValuesProcessor defaultValuesProcessor = new FormDefaultValuesProcessorImpl();
final PropertyTree data = new PropertyTree();
defaultValuesProcessor.setDefaultValues(form, data);
assertEquals(2, data.getTotalSize());
assertNotNull(data.getProperty("item-set"));
assertNotNull(data.getProperty("item-set.checkOptionSet"));
}
Aggregations