use of com.enonic.xp.form.FormOptionSetOption in project xp by enonic.
the class ContentTypeMapper method serializeFormOptionSet.
private void serializeFormOptionSet(final MapGenerator gen, final FormOptionSet optionSet) {
gen.map();
gen.value("formItemType", "OptionSet");
gen.value("name", optionSet.getName());
gen.value("label", optionSet.getLabel());
gen.value("expanded", optionSet.isExpanded());
gen.value("helpText", optionSet.getHelpText());
serializeOccurrences(gen, optionSet.getOccurrences());
serializeMultiselection(gen, optionSet.getMultiselection());
gen.array("options");
for (FormOptionSetOption option : optionSet) {
serializeOption(gen, option);
}
gen.end();
gen.end();
}
use of com.enonic.xp.form.FormOptionSetOption in project xp by enonic.
the class XmlContentTypeParserTest method assertOptionSetResult.
private void assertOptionSetResult() throws Exception {
final ContentType result = this.builder.build();
assertEquals("myapplication:mytype", result.getName().toString());
assertEquals("OptionSet", result.getDisplayName());
assertEquals("OptionSet for testing", result.getDescription());
assertEquals("base:structured", result.getSuperType().toString());
assertFalse(result.isAbstract());
assertFalse(result.isFinal());
assertEquals(2, result.getForm().size());
final FormItem item = result.getForm().getFormItem("radioOptionSet");
assertNotNull(item);
final FormOptionSet radioOptionSet = (FormOptionSet) item;
assertEquals(FormItemType.FORM_OPTION_SET, radioOptionSet.getType());
final FormItems radioOptions = radioOptionSet.getFormItems();
assertEquals(2, radioOptions.size());
FormOptionSetOption radioOption1 = radioOptions.getItemByName("option_1").toFormOptionSetOption();
FormOptionSetOption radioOption2 = radioOptions.getItemByName("option_2").toFormOptionSetOption();
assertEquals(FormItemType.FORM_OPTION_SET_OPTION, radioOption1.getType());
assertEquals(FormItemType.FORM_OPTION_SET_OPTION, radioOption2.getType());
assertFalse(radioOption1.isDefaultOption());
assertFalse(radioOption2.isDefaultOption());
assertEquals(0, radioOption2.getFormItems().size());
assertEquals(2, radioOption1.getFormItems().size());
final Input textInput = radioOption1.getFormItems().getItemByName("text-input").toInput();
assertEquals(InputTypeName.TEXT_LINE.toString(), textInput.getInputType().toString());
assertEquals("Text input", textInput.getHelpText());
final FormItemSet formItemSet = radioOption1.getFormItems().getItemByName("minimum3").toFormItemSet();
assertEquals(2, formItemSet.getFormItems().size());
final FormOptionSet checkOptionSet = result.getForm().getFormItem("checkOptionSet").toFormOptionSet();
assertEquals(FormItemType.FORM_OPTION_SET, checkOptionSet.getType());
assertEquals("Multi selection", checkOptionSet.getLabel());
assertTrue(checkOptionSet.isExpanded());
final Occurrences checkOptionSetOccurrences = checkOptionSet.getOccurrences();
assertEquals(0, checkOptionSetOccurrences.getMinimum());
assertEquals(1, checkOptionSetOccurrences.getMaximum());
final FormItems checkOptions = checkOptionSet.getFormItems();
assertEquals(4, checkOptions.size());
// check option set 1st option
final FormOptionSetOption checkOption1 = checkOptions.getItemByName("option_1").toFormOptionSetOption();
assertTrue(checkOption1.isDefaultOption());
assertEquals(0, checkOption1.getFormItems().size());
// check option set 2nd option
final FormOptionSetOption checkOption2 = checkOptions.getItemByName("option_2").toFormOptionSetOption();
assertTrue(checkOption2.isDefaultOption());
assertEquals(1, checkOption2.getFormItems().size());
// nested option set
final FormOptionSet nestedOptionSet = checkOption2.getFormItems().getItemByName("nestedOptionSet").toFormOptionSet();
final FormItems nestedSetOptions = nestedOptionSet.getFormItems();
assertEquals(2, nestedSetOptions.size());
assertFalse(nestedOptionSet.isExpanded());
final FormOptionSetOption nestedSetOption1 = nestedSetOptions.getItemByName("option2_1").toFormOptionSetOption();
assertFalse(nestedSetOption1.isDefaultOption());
assertEquals(1, nestedSetOption1.getFormItems().size());
final FormOptionSetOption nestedSetOption2 = nestedSetOptions.getItemByName("option2_2").toFormOptionSetOption();
assertTrue(nestedSetOption2.isDefaultOption());
assertEquals(1, nestedSetOption2.getFormItems().size());
// check option set 3rd option
final FormOptionSetOption checkOption3 = checkOptions.getItemByName("option_3").toFormOptionSetOption();
assertFalse(checkOption3.isDefaultOption());
assertEquals(1, checkOption3.getFormItems().size());
final Input imageSelectorInput = checkOption3.getFormItems().getItemByName("imageselector").toInput();
assertEquals("mytype", imageSelectorInput.getInputTypeConfig().getProperty("allowContentType").getValue());
assertEquals(2, imageSelectorInput.getInputTypeConfig().getProperties("allowContentType").size());
assertEquals("path1", imageSelectorInput.getInputTypeConfig().getProperty("allowPath").getValue());
assertEquals(2, imageSelectorInput.getInputTypeConfig().getProperties("allowPath").size());
assertEquals("system:reference", imageSelectorInput.getInputTypeConfig().getProperty("relationshipType").getValue());
final Occurrences imageSelectorOccurrences = imageSelectorInput.getOccurrences();
assertEquals(1, imageSelectorOccurrences.getMinimum());
assertEquals(1, imageSelectorOccurrences.getMaximum());
// check option set 4th option
final FormOptionSetOption checkOption4 = checkOptions.getItemByName("option_4").toFormOptionSetOption();
assertFalse(checkOption4.isDefaultOption());
assertEquals(2, checkOption4.getFormItems().size());
final Input doubleInput = checkOption4.getFormItems().getItemByName("double").toInput();
final Input longInput = checkOption4.getFormItems().getItemByName("long").toInput();
assertEquals(InputTypeName.DOUBLE.toString(), doubleInput.getInputType().toString());
assertEquals(InputTypeName.LONG.toString(), longInput.getInputType().toString());
final Occurrences longInputOccurrences = longInput.getOccurrences();
assertEquals(0, longInputOccurrences.getMinimum());
assertEquals(1, longInputOccurrences.getMaximum());
}
use of com.enonic.xp.form.FormOptionSetOption in project xp by enonic.
the class XmlContentTypeParserTest method testI18nParseOmittingElementValue.
@Test
public void testI18nParseOmittingElementValue() throws Exception {
parse(this.parser, "-i18n-only-attribute.xml");
final ContentType result = this.builder.build();
assertEquals("translated.display-name", result.getDisplayNameI18nKey());
assertEquals("translated.description", result.getDescriptionI18nKey());
// input type
final Input input = (Input) result.getForm().getFormItem("textLine");
assertEquals("translated.label", input.getLabelI18nKey());
assertEquals("translated.label", input.getLabel());
assertEquals("translated.help-text", input.getHelpTextI18nKey());
assertEquals("translated.help-text", input.getHelpText());
// option set
final FormItem item = result.getForm().getFormItem("radioOptionSet");
assertNotNull(item);
final FormOptionSet radioOptionSet = (FormOptionSet) item;
assertEquals(FormItemType.FORM_OPTION_SET, radioOptionSet.getType());
assertEquals("translated.help-text", radioOptionSet.getHelpTextI18nKey());
assertEquals("translated.help-text", radioOptionSet.getHelpText());
assertEquals("translated.label", radioOptionSet.getLabelI18nKey());
assertEquals("translated.label", radioOptionSet.getLabel());
final Input inputInsideOption = radioOptionSet.getFormItems().getInput(FormItemPath.from("option_1.text-input"));
assertEquals("translated.help-text", inputInsideOption.getHelpTextI18nKey());
assertEquals("translated.help-text", inputInsideOption.getHelpText());
assertEquals("translated.label", inputInsideOption.getLabelI18nKey());
assertEquals("translated.label", inputInsideOption.getLabel());
final FormOptionSetOption radioOption = radioOptionSet.getFormItems().getItemByName("option_1").toFormOptionSetOption();
assertEquals("translated.help-text", radioOption.getHelpTextI18nKey());
assertEquals("translated.help-text", radioOption.getHelpText());
assertEquals("translated.label", radioOption.getLabelI18nKey());
assertEquals("translated.label", radioOption.getLabel());
// field set
FormItem fieldSetItem = null;
for (final FormItem next : result.getForm().getFormItems()) {
if (next.getName().startsWith("fieldSet")) {
fieldSetItem = next;
}
}
assertNotNull(fieldSetItem);
final FieldSet fieldSet = (FieldSet) fieldSetItem;
assertEquals("translated.label", fieldSet.getLabelI18nKey());
assertEquals("translated.label", fieldSet.getLabel());
final Input inputInsideFieldSet = fieldSet.getFormItems().getInput(FormItemPath.from("textLine2"));
assertEquals("translated.help-text", inputInsideFieldSet.getHelpTextI18nKey());
assertEquals("translated.help-text", inputInsideFieldSet.getHelpText());
assertEquals("translated.label", inputInsideFieldSet.getLabelI18nKey());
assertEquals("translated.label", inputInsideFieldSet.getLabel());
// item set
final FormItem itemSet = result.getForm().getFormItem("item-set");
assertNotNull(item);
final FormItemSet formItemSet = (FormItemSet) itemSet;
assertEquals("translated.label", formItemSet.getLabelI18nKey());
assertEquals("translated.label", formItemSet.getLabel());
assertEquals("translated.help-text", formItemSet.getHelpTextI18nKey());
assertEquals("translated.help-text", formItemSet.getHelpText());
final Input inputInsideFormItemSet = formItemSet.getFormItems().getInput(FormItemPath.from("textLine1"));
assertEquals("translated.help-text", inputInsideFormItemSet.getHelpTextI18nKey());
assertEquals("translated.help-text", inputInsideFormItemSet.getHelpText());
assertEquals("translated.label", inputInsideFormItemSet.getLabelI18nKey());
assertEquals("translated.label", inputInsideFormItemSet.getLabel());
}
use of com.enonic.xp.form.FormOptionSetOption in project xp by enonic.
the class XmlContentTypeParserTest method testI18n_optionSet.
@Test
public void testI18n_optionSet() throws Exception {
parse(this.parser, "-i18n.xml");
final ContentType result = this.builder.build();
final FormItem item = result.getForm().getFormItem("radioOptionSet");
assertNotNull(item);
final FormOptionSet radioOptionSet = (FormOptionSet) item;
assertEquals(FormItemType.FORM_OPTION_SET, radioOptionSet.getType());
assertEquals("translated.help-text", radioOptionSet.getHelpTextI18nKey());
assertEquals("translated.label", radioOptionSet.getLabelI18nKey());
final Input inputInsideOption = radioOptionSet.getFormItems().getInput(FormItemPath.from("option_1.text-input"));
assertEquals("translated.help-text", inputInsideOption.getHelpTextI18nKey());
assertEquals("translated.label", inputInsideOption.getLabelI18nKey());
final FormOptionSetOption radioOption = radioOptionSet.getFormItems().getItemByName("option_1").toFormOptionSetOption();
assertEquals("translated.help-text", radioOption.getHelpTextI18nKey());
assertEquals("translated.label", radioOption.getLabelI18nKey());
}
use of com.enonic.xp.form.FormOptionSetOption in project xp by enonic.
the class OccurrenceValidator method validateFormOptionSetSelection.
private static void validateFormOptionSetSelection(final FormOptionSet formOptionSet, final List<PropertySet> parentDataSets, final ValidationErrors.Builder validationErrorsBuilder) {
final List<PropertySet> propertySets = getDataSets(formOptionSet.getName(), parentDataSets);
for (PropertySet propertySet : propertySets) {
boolean hasSelectionArray = propertySet.getPropertyArrays().stream().anyMatch(array -> array.getValueType().equals(ValueTypes.STRING));
final List<Property> selectedItems = propertySet.getProperties(OPTION_SET_SELECTION_ARRAY_NAME);
int numberOfOptions = hasSelectionArray ? selectedItems.size() : Math.toIntExact(StreamSupport.stream(formOptionSet.spliterator(), false).filter(FormOptionSetOption::isDefaultOption).count());
final Occurrences occurrences = formOptionSet.getMultiselection();
if (numberOfOptions < occurrences.getMinimum() || (occurrences.getMaximum() != 0 && numberOfOptions > occurrences.getMaximum())) {
validationErrorsBuilder.add(ValidationError.dataError(ValidationErrorCode.from(ApplicationKey.SYSTEM, "cms.validation.occurrencesInvalid"), propertySet.getProperty().getPath()).i18n("system.cms.validation.optionsetOccurrencesInvalid").args(formOptionSet.getPath(), occurrences.getMinimum(), occurrences.getMaximum(), numberOfOptions).build());
}
for (final FormOptionSetOption option : formOptionSet) {
if (hasSelectionArray && optionIsSelected(option, selectedItems)) {
validate(option.getFormItems(), Optional.ofNullable(propertySet.getSet(option.getName())).map(List::of).orElse(List.of()), validationErrorsBuilder);
}
}
}
}
Aggregations