EnumerationTypeEditorFields.java

package sk.iway.iwcm.components.enumerations.model;

import java.io.Serializable;

import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;

@Getter
@Setter
public class EnumerationTypeEditorFields implements Serializable {

    @DataTableColumn(
        inputType = DataTableColumnType.SELECT,
        title="components.enumerations.child_enumeration_type_name",
        sortAfter = "typeName",
        filter = false,
        tab="basic"
    )
    private Integer childEnumTypeId;

    public void fromEnumerationType(EnumerationTypeBean enumerationTypeOriginal) {
        EnumerationTypeBean bean = enumerationTypeOriginal.getChildEnumerationTypeBean();

        //Set id of child enumeration type bean
        if(bean != null) this.childEnumTypeId = bean.getEnumerationTypeId();

        enumerationTypeOriginal.setEditorFields(this);
    }

    public void toEnumerationType(EnumerationTypeBean enumerationTypeOriginal, EnumerationTypeRepository etr, Prop prop) {
        //Both child and parent options CANNOT be true
        if(enumerationTypeOriginal.isAllowChildEnumerationType() && enumerationTypeOriginal.isAllowParentEnumerationData())
            throw new IllegalArgumentException(prop.getText("enum_type.allow_error"));

        //Check loop dependencies (A can have B as child, but B cant have A as child same time)
        //If loop dependencies is ok, then set enumeration child bean (if null or -1 its empty select)
        Integer childId = enumerationTypeOriginal.getEditorFields().getChildEnumTypeId() == null ? -1 : enumerationTypeOriginal.getEditorFields().getChildEnumTypeId();
        Integer oldChildId = null;
        if (enumerationTypeOriginal.getEnumerationTypeId()!=null) oldChildId = etr.getChildEnumTypeId(enumerationTypeOriginal.getEnumerationTypeId());
        oldChildId = oldChildId == null ? -1 : oldChildId;

        //Check only if childId is changed
        //!! Very important in case child is same but already deleted
        if(oldChildId.equals(childId)==false) {
            EnumerationTypeBean childEnumType = etr.getByEnumId(childId);
            if(childEnumType != null) {
                EnumerationTypeBean childOfTheChild = childEnumType.getChildEnumerationTypeBean();
                if(childOfTheChild != null && (childOfTheChild.getId().equals(enumerationTypeOriginal.getId()))) {
                    String errorText = prop.getText("enum_type.loop_child_reference_1") + " " + childEnumType.getTypeName() + " " + prop.getText("enum_type.loop_child_reference_2");
                    throw new IllegalArgumentException(errorText);
                } else if(childEnumType.isHidden()) {
                    //Check that selected type is not soft deleted (hidden)
                    throw new IllegalArgumentException(prop.getText("enum_type.allready_deleted_error"));
                } else enumerationTypeOriginal.setChildEnumerationTypeBean(childEnumType);
            }
        }

        if(childId != -1)
            enumerationTypeOriginal.setChildEnumerationTypeBean(etr.getByEnumId(childId));
        else enumerationTypeOriginal.setChildEnumerationTypeBean(null);
    }
}