Search in sources :

Example 1 with MixinName

use of com.enonic.xp.schema.mixin.MixinName in project xp by enonic.

the class ApplicationRelativeResolverTest method toMixinName.

@Test
public void toMixinName() {
    final ApplicationRelativeResolver resolver = new ApplicationRelativeResolver(ApplicationKey.from("aaa"));
    MixinName mixinName = resolver.toMixinName("bbb");
    assertEquals(mixinName.getLocalName(), "bbb");
    mixinName = resolver.toMixinName("ccc:ddd");
    assertEquals(mixinName.getLocalName(), "ddd");
}
Also used : MixinName(com.enonic.xp.schema.mixin.MixinName) Test(org.junit.jupiter.api.Test)

Example 2 with MixinName

use of com.enonic.xp.schema.mixin.MixinName 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;
}
Also used : FormOptionSet(com.enonic.xp.form.FormOptionSet) Form(com.enonic.xp.form.Form) FormItem(com.enonic.xp.form.FormItem) ArrayList(java.util.ArrayList) FormOptionSetOption(com.enonic.xp.form.FormOptionSetOption) Mixin(com.enonic.xp.schema.mixin.Mixin) InlineMixin(com.enonic.xp.form.InlineMixin) MixinName(com.enonic.xp.schema.mixin.MixinName) FieldSet(com.enonic.xp.form.FieldSet) InlineMixin(com.enonic.xp.form.InlineMixin) FormItemSet(com.enonic.xp.form.FormItemSet)

Aggregations

MixinName (com.enonic.xp.schema.mixin.MixinName)2 FieldSet (com.enonic.xp.form.FieldSet)1 Form (com.enonic.xp.form.Form)1 FormItem (com.enonic.xp.form.FormItem)1 FormItemSet (com.enonic.xp.form.FormItemSet)1 FormOptionSet (com.enonic.xp.form.FormOptionSet)1 FormOptionSetOption (com.enonic.xp.form.FormOptionSetOption)1 InlineMixin (com.enonic.xp.form.InlineMixin)1 Mixin (com.enonic.xp.schema.mixin.Mixin)1 ArrayList (java.util.ArrayList)1 Test (org.junit.jupiter.api.Test)1