use of com.enonic.xp.schema.mixin.Mixin in project xp by enonic.
the class MixinLoader method load.
@Override
protected Mixin load(final MixinName name, final Resource resource) {
final Mixin.Builder builder = Mixin.create();
parseXml(resource, builder);
final Instant modifiedTime = Instant.ofEpochMilli(resource.getTimestamp());
builder.modifiedTime(modifiedTime);
builder.createdTime(modifiedTime);
builder.icon(loadIcon(name));
return builder.name(name).build();
}
use of com.enonic.xp.schema.mixin.Mixin in project xp by enonic.
the class ContentServiceImplTest_update method update_with_metadata.
@Test
public void update_with_metadata() throws Exception {
final PropertyTree data = new PropertyTree();
data.setString("testString", "value");
data.setString("testString2", "value");
final Mixin mixin = Mixin.create().name("myapplication:my_mixin").addFormItem(Input.create().name("inputToBeMixedIn").label("Mixed in").inputType(InputTypeName.TEXT_LINE).build()).build();
Mockito.when(this.mixinService.getByName(Mockito.isA(MixinName.class))).thenReturn(mixin);
final ExtraData extraData = new ExtraData(XDataName.from("myapplication:my_mixin"), new PropertyTree());
ExtraDatas extraDatas = ExtraDatas.from(List.of(extraData));
final CreateContentParams createContentParams = CreateContentParams.create().contentData(data).displayName("This is my content").parent(ContentPath.ROOT).permissions(AccessControlList.empty()).type(ContentTypeName.folder()).extraDatas(extraDatas).build();
final Content content = this.contentService.create(createContentParams);
assertTrue(content.hasExtraData());
final UpdateContentParams updateContentParams = new UpdateContentParams();
updateContentParams.contentId(content.getId()).editor(edit -> {
final PropertyTree editData = edit.data;
editData.setString("testString", "value-updated");
});
this.contentService.update(updateContentParams);
final Content storedContent = this.contentService.getById(content.getId());
assertEquals("This is my content", storedContent.getDisplayName());
assertEquals("value-updated", storedContent.getData().getString("testString"));
assertEquals("value", storedContent.getData().getString("testString2"));
}
use of com.enonic.xp.schema.mixin.Mixin in project xp by enonic.
the class MixinServiceImpl method getAll.
@Override
public Mixins getAll() {
final Set<Mixin> list = new LinkedHashSet<>();
for (final Application application : this.applicationService.getInstalledApplications()) {
final Mixins types = getByApplication(application.getKey());
list.addAll(types.getList());
}
return Mixins.from(list);
}
use of com.enonic.xp.schema.mixin.Mixin 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.schema.mixin.Mixin in project xp by enonic.
the class MixinServiceImplTest method testEmpty.
@Test
public void testEmpty() {
final Mixins types1 = this.service.getAll();
assertNotNull(types1);
assertEquals(0, types1.getSize());
final Mixins types2 = this.service.getByApplication(ApplicationKey.from("other"));
assertNotNull(types2);
assertEquals(0, types2.getSize());
final Mixin mixin = service.getByName(MixinName.from("other:mytype"));
assertEquals(null, mixin);
}
Aggregations