de.espirit.firstspirit.access.editor.FsListEditorValueExample


package de.espirit.firstspirit.access.editor;

import de.espirit.firstspirit.access.Language;
import de.espirit.firstspirit.access.editor.fslist.IdProvidingFormData;
import de.espirit.firstspirit.access.editor.value.ContentFormsProducer;
import de.espirit.firstspirit.access.editor.value.InvalidValueException;
import de.espirit.firstspirit.access.editor.value.LinkFormsProducer;
import de.espirit.firstspirit.access.editor.value.SectionFormsProducer;
import de.espirit.firstspirit.access.project.Project;
import de.espirit.firstspirit.access.store.templatestore.LinkTemplate;
import de.espirit.firstspirit.access.store.templatestore.SectionTemplate;
import de.espirit.firstspirit.forms.FormData;
import de.espirit.firstspirit.forms.FormDataList;
import de.espirit.firstspirit.forms.FormField;
import de.espirit.or.schema.Entity;
import org.jetbrains.annotations.Nullable;


/**
 * Example how to get the list of sections and create a new section from a FsListEditorValue and store a section into a FsListEditorValue.
 *
 * @since 4.2.400
 */
public class FsListEditorValueExample {


	/**
	 * Creates a new section in the given {@link FsListEditorValue} editor in INLINE mode - using a section template of the given template store.
	 *
	 * @since 4.2.400
	 */
	public FormData createSectionTemplateFormData(final FsListEditorValue editor, final Project project, final SectionTemplate sectionTemplate) throws InvalidValueException {

		// 1. get project masterlanguage
		final Language masterLanguage = project.getMasterLanguage();

		// 2. get the list of form data
		// - FsListEditorValue is language independent by contract, therefore it doesn't matter which language is used
		final FormDataList dataList = editor.get(masterLanguage);

		// 3. create a new form data object
		final IdProvidingFormData formData = ((SectionFormsProducer) dataList.getProducer()).create(sectionTemplate);

		// 4. store the modified section list to the editor
		dataList.add(formData);
		editor.set(masterLanguage, dataList);

		return formData;
	}


	/**
	 * Creates a new section in the given {@link FsListEditorValue} editor in INLINE mode - using a link template of the given template store.
	 *
	 * @since 4.2.400
	 */
	public FormData createLinkTemplateFormData(final FsListEditorValue editor, final Project project, final LinkTemplate linkTemplate) throws InvalidValueException {

		// 1. get project masterlanguage
		final Language masterLanguage = project.getMasterLanguage();

		// 2. get the list of form data
		// - FsListEditorValue is language independent by contract, therefore it doesn't matter which language is used
		final FormDataList dataList = editor.get(masterLanguage);

		// 3. create a new form data object
		final IdProvidingFormData formData = ((LinkFormsProducer) dataList.getProducer()).create(linkTemplate, masterLanguage);

		// 4. store the modified section list to the editor
		dataList.add(formData);
		editor.set(masterLanguage, dataList);

		return formData;
	}


	/**
	 * Creates a new {@link de.espirit.firstspirit.forms.FormData} in the given {@link FsListEditorValue} editor in DATABASE mode.
	 *
	 * @since 4.2.400
	 */
	public FormData createEntityFormData(final FsListEditorValue editor, final Project project) throws InvalidValueException {

		// 1. get project masterlanguage
		final Language masterLanguage = project.getMasterLanguage();

		// 2. get the list of form data
		// - FsListEditorValue is language independent by contract, therefore it doesn't matter which language is used
		final FormDataList dataList = editor.get(masterLanguage);

		// 3. create a new form data object
		final IdProvidingFormData formData = ((ContentFormsProducer) dataList.getProducer()).create();

		// 4. store the modified form data list to the editor
		dataList.add(formData);
		editor.set(masterLanguage, dataList);

		return formData;
	}


	/**
	 * Creates a new {@link de.espirit.firstspirit.forms.FormData} in the given {@link FormField} fsListFormField in DATABASE mode.
	 *
	 * @since 4.2.441
	 */
	public FormData setEntity(final FormField<FormDataList> fsListFormField, final Entity entity) throws InvalidValueException {

		// 1. get the list of form data
		final FormDataList dataList = fsListFormField.get();

		// 2. create a new form data object based on given entity
		final IdProvidingFormData formData = ((ContentFormsProducer) dataList.getProducer()).create(entity);

		// 3. store the modified form data list to the form field
		dataList.add(formData);
		fsListFormField.set(dataList);

		return formData;
	}


	/**
	 * Returns the first section of the given FsListEditorValue editor.
	 *
	 * @since 4.2.200
	 */
	@Nullable
	public FormData getFirstSection(final FsListEditorValue editor, final Project project) {

		// 1. get project masterlanguage
		final Language masterLanguage = project.getMasterLanguage();

		// 2. get the SectionList
		// - FsListEditorValue is language independent by contract, therefore it doesn't matter which language is used
		final FormDataList dataList = editor.get(masterLanguage);

		// 3. get the first Section out of the SectionList
		FormData formData = null;
		if ( ! dataList.isEmpty()) {
			formData = dataList.get(0);
		}

		return formData;
	}


	/**
	 * Returns the SectionList (persistence object) of the given FsListEditorValue editor
	 *
	 * @since 4.2.200
	 */
	@Nullable
	public FormDataList getDataList(final FsListEditorValue editor, final Project project) {
		// 1. get project masterlanguage
		final Language masterLanguage = project.getMasterLanguage();

		// 2. get the SectionList
		// - FsListEditorValue is language independent by contract, therefore it doesn't matter which language is used
		return editor.get(masterLanguage);
	}
}