Search in sources :

Example 1 with FormOptionSetOption

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();
}
Also used : FormOptionSetOption(com.enonic.xp.form.FormOptionSetOption)

Example 2 with FormOptionSetOption

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());
}
Also used : FormOptionSet(com.enonic.xp.form.FormOptionSet) Input(com.enonic.xp.form.Input) ContentType(com.enonic.xp.schema.content.ContentType) FormItem(com.enonic.xp.form.FormItem) FormItems(com.enonic.xp.form.FormItems) Occurrences(com.enonic.xp.form.Occurrences) FormOptionSetOption(com.enonic.xp.form.FormOptionSetOption) FormItemSet(com.enonic.xp.form.FormItemSet)

Example 3 with FormOptionSetOption

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());
}
Also used : FormOptionSet(com.enonic.xp.form.FormOptionSet) Input(com.enonic.xp.form.Input) FieldSet(com.enonic.xp.form.FieldSet) ContentType(com.enonic.xp.schema.content.ContentType) FormItem(com.enonic.xp.form.FormItem) FormOptionSetOption(com.enonic.xp.form.FormOptionSetOption) FormItemSet(com.enonic.xp.form.FormItemSet) Test(org.junit.jupiter.api.Test)

Example 4 with FormOptionSetOption

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());
}
Also used : FormOptionSet(com.enonic.xp.form.FormOptionSet) Input(com.enonic.xp.form.Input) ContentType(com.enonic.xp.schema.content.ContentType) FormItem(com.enonic.xp.form.FormItem) FormOptionSetOption(com.enonic.xp.form.FormOptionSetOption) Test(org.junit.jupiter.api.Test)

Example 5 with FormOptionSetOption

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);
            }
        }
    }
}
Also used : PropertySet(com.enonic.xp.data.PropertySet) Occurrences(com.enonic.xp.form.Occurrences) List(java.util.List) FormOptionSetOption(com.enonic.xp.form.FormOptionSetOption) Property(com.enonic.xp.data.Property)

Aggregations

FormOptionSetOption (com.enonic.xp.form.FormOptionSetOption)7 FormItem (com.enonic.xp.form.FormItem)4 FormOptionSet (com.enonic.xp.form.FormOptionSet)4 Input (com.enonic.xp.form.Input)4 FieldSet (com.enonic.xp.form.FieldSet)3 FormItemSet (com.enonic.xp.form.FormItemSet)3 ContentType (com.enonic.xp.schema.content.ContentType)3 Property (com.enonic.xp.data.Property)2 PropertySet (com.enonic.xp.data.PropertySet)2 Occurrences (com.enonic.xp.form.Occurrences)2 Test (org.junit.jupiter.api.Test)2 PropertyPath (com.enonic.xp.data.PropertyPath)1 Value (com.enonic.xp.data.Value)1 Form (com.enonic.xp.form.Form)1 FormItems (com.enonic.xp.form.FormItems)1 InlineMixin (com.enonic.xp.form.InlineMixin)1 Mixin (com.enonic.xp.schema.mixin.Mixin)1 MixinName (com.enonic.xp.schema.mixin.MixinName)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1