Search in sources :

Example 1 with Occurrences

use of com.enonic.xp.form.Occurrences 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 2 with Occurrences

use of com.enonic.xp.form.Occurrences in project xp by enonic.

the class XmlContentTypeParserTest method assertResult.

private void assertResult() throws Exception {
    final ContentType result = this.builder.build();
    assertEquals("myapplication:mytype", result.getName().toString());
    assertEquals("All the Base Types", result.getDisplayName());
    assertEquals("description", result.getDescription());
    assertEquals("${firstName} ${lastName}", result.getDisplayNameExpression());
    assertEquals("Display Name Label", result.getDisplayNameLabel());
    assertEquals("myapplication:content", result.getSuperType().toString());
    assertEquals(false, result.isAbstract());
    assertEquals(true, result.isFinal());
    assertEquals(4, result.getForm().size());
    final FormItem item = result.getForm().getFormItem("myDate");
    assertNotNull(item);
    final Input input = (Input) item;
    assertEquals(InputTypeName.DATE.toString(), input.getInputType().toString());
    final FormItem contentSelectorItem = result.getForm().getFormItem("someonesParent");
    assertNotNull(contentSelectorItem);
    final Input contentSelectorInput = (Input) contentSelectorItem;
    assertEquals(InputTypeName.CONTENT_SELECTOR.toString(), contentSelectorInput.getInputType().toString());
    assertEquals("mytype", contentSelectorInput.getInputTypeConfig().getProperty("allowContentType").getValue());
    assertEquals(2, contentSelectorInput.getInputTypeConfig().getProperties("allowContentType").size());
    assertEquals("path1", contentSelectorInput.getInputTypeConfig().getProperty("allowPath").getValue());
    assertEquals(2, contentSelectorInput.getInputTypeConfig().getProperties("allowPath").size());
    assertEquals("system:reference", contentSelectorInput.getInputTypeConfig().getProperty("relationshipType").getValue());
    final InputTypeConfig config = input.getInputTypeConfig();
    assertNotNull(config);
    final Input defaultOccurrencesInput = result.getForm().getInput("defaultOccurrences");
    final Occurrences defaultOccurrences = defaultOccurrencesInput.getOccurrences();
    assertEquals(0, defaultOccurrences.getMinimum());
    assertEquals(1, defaultOccurrences.getMaximum());
}
Also used : Input(com.enonic.xp.form.Input) ContentType(com.enonic.xp.schema.content.ContentType) FormItem(com.enonic.xp.form.FormItem) InputTypeConfig(com.enonic.xp.inputtype.InputTypeConfig) Occurrences(com.enonic.xp.form.Occurrences)

Example 3 with Occurrences

use of com.enonic.xp.form.Occurrences 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)

Example 4 with Occurrences

use of com.enonic.xp.form.Occurrences in project xp by enonic.

the class OccurrenceValidator method validateOccurrences.

private static void validateOccurrences(final FormItem formItem, final List<PropertySet> parentDataSets, final ValidationErrors.Builder validationErrorsBuilder) {
    final Occurrences occurrences;
    if (formItem instanceof Input) {
        occurrences = ((Input) formItem).getOccurrences();
    } else if (formItem instanceof FormItemSet) {
        occurrences = ((FormItemSet) formItem).getOccurrences();
    } else if (formItem instanceof FormOptionSet) {
        occurrences = ((FormOptionSet) formItem).getOccurrences();
    } else {
        return;
    }
    for (final PropertySet parentDataSet : parentDataSets) {
        final int entryCount = parentDataSet.countProperties(formItem.getName());
        final PropertyPath parentPath = Optional.ofNullable(parentDataSet.getProperty()).map(Property::getPath).orElseGet(() -> PropertyPath.from(formItem.getPath().getParent().toString()));
        final PropertyPath path = PropertyPath.from(parentPath, formItem.getName());
        final int minOccurrences = occurrences.getMinimum();
        if (occurrences.impliesRequired() && entryCount < minOccurrences) {
            validationErrorsBuilder.add(ValidationError.dataError(ValidationErrorCode.from(ApplicationKey.SYSTEM, "cms.occurrencesInvalid"), path).i18n("system.cms.validation.minOccurrencesInvalid").args(formItem.getPath(), minOccurrences, entryCount).build());
        }
        final int maxOccurrences = occurrences.getMaximum();
        if (maxOccurrences > 0 && entryCount > maxOccurrences) {
            validationErrorsBuilder.add(ValidationError.dataError(ValidationErrorCode.from(ApplicationKey.SYSTEM, "cms.occurrencesInvalid"), path).i18n("system.cms.validation.maxOccurrencesInvalid").args(formItem.getPath(), occurrences.getMaximum(), entryCount).build());
        }
    }
}
Also used : FormOptionSet(com.enonic.xp.form.FormOptionSet) Input(com.enonic.xp.form.Input) PropertyPath(com.enonic.xp.data.PropertyPath) Occurrences(com.enonic.xp.form.Occurrences) PropertySet(com.enonic.xp.data.PropertySet) FormItemSet(com.enonic.xp.form.FormItemSet)

Aggregations

Occurrences (com.enonic.xp.form.Occurrences)4 Input (com.enonic.xp.form.Input)3 PropertySet (com.enonic.xp.data.PropertySet)2 FormItem (com.enonic.xp.form.FormItem)2 FormItemSet (com.enonic.xp.form.FormItemSet)2 FormOptionSet (com.enonic.xp.form.FormOptionSet)2 FormOptionSetOption (com.enonic.xp.form.FormOptionSetOption)2 ContentType (com.enonic.xp.schema.content.ContentType)2 Property (com.enonic.xp.data.Property)1 PropertyPath (com.enonic.xp.data.PropertyPath)1 FormItems (com.enonic.xp.form.FormItems)1 InputTypeConfig (com.enonic.xp.inputtype.InputTypeConfig)1 List (java.util.List)1