TranslationKeyEditorFields.java

package sk.iway.iwcm.components.translation_keys.jpa;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonIgnore;

import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.editor.FieldType;
import sk.iway.iwcm.editor.rest.Field;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.system.datatable.ProcessItemAction;

@Getter
@Setter
public class TranslationKeyEditorFields {

    //List of Free FieldsNconf
    private List<Field> fieldsDefinition;

    //String keyPrefix = "language.";
    private static final String KEY_PREFIX = "language.";

    //Represent how much custom-field's contains TranslationKeyEntity class
    private static final char LAST_ALPHABET = 'J';

    @JsonIgnore
    public void from(Map<String, String> languageFieldCombination, ProcessItemAction action) {
        Prop prop = Prop.getInstance();
        fieldsDefinition = new ArrayList<>();

        //Trere are no set language-fieldAlphabet combination's
        if(languageFieldCombination == null) return;

        //Set language value fields
        for(Map.Entry<String,String> entry : languageFieldCombination.entrySet()) {
            String lng = entry.getKey();
            String fieldAlphabet = entry.getValue();
            try {
                Field valueField = new Field(); //Represent value of translation key in specific language
                valueField.setKey(fieldAlphabet.toLowerCase());
                String label = prop.getText(KEY_PREFIX + lng);
                valueField.setLabel(label);
                valueField.setType(FieldType.TEXTAREA.name().toLowerCase());
                valueField.setMaxlength(65000);

                fieldsDefinition.add(valueField);
            } catch (Exception ex) {
                Logger.error(TranslationKeyEditorFields.class, ex);
            }
        }

        //Set language original value fields
        String originalKeyValue = prop.getText("translation_key.original_value");
        for(Map.Entry<String,String> entry : languageFieldCombination.entrySet()) {
            String lng = entry.getKey();
            String fieldAlphabet = entry.getValue();
            try {
                Field originalValueField = new Field(); //Represent ORIGINAL value of translation key in specific language (load from file replaced by value in DB)
                originalValueField.setKey(fieldAlphabet.toLowerCase());
                String label = prop.getText(KEY_PREFIX + lng) + ", " + originalKeyValue;
                originalValueField.setLabel(label);
                originalValueField.setType(FieldType.LABEL.name().toLowerCase());
                originalValueField.setDisabled(true);
                originalValueField.setCustomPrefix("originalValue");
                fieldsDefinition.add(originalValueField);
            } catch (Exception ex) {
                Logger.error(TranslationKeyEditorFields.class, ex);
            }
        }

        //Hide redundant fields
        String[] lngArr = Constants.getArray("languages");
        char lastUsedAlphabet = (char)(((int)'A') + lngArr.length);
        for(char alphabet = lastUsedAlphabet; alphabet <= LAST_ALPHABET; alphabet++) {
            try {
                Field valueField = new Field();
                valueField.setKey((alphabet + "").toLowerCase());
                valueField.setType(FieldType.NONE.name().toLowerCase());
                fieldsDefinition.add(valueField);

                Field originalValueField = new Field();
                originalValueField.setKey((alphabet + "").toLowerCase());
                originalValueField.setType(FieldType.NONE.name().toLowerCase());
                originalValueField.setCustomPrefix("originalValue");
                fieldsDefinition.add(originalValueField);
            } catch (Exception e) {
                Logger.error(TranslationKeyEditorFields.class, e);
            }
        }
    }
}