AufsConfigTranslationEntity

PHOTO EMBED

Thu May 15 2025 09:38:10 GMT+0000 (Coordinated Universal Time)

Saved by @rrajatssharma

package com.til.tcc.manager.mongo.entity;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.til.tcc.manager.mongo.config.MongoCollections;
import lombok.*;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

@Data
@JsonInclude(value = Include.NON_NULL)
@Document(collection = MongoCollections.COLLECTION_AUFS_TRANSLATION)
@AllArgsConstructor
@NoArgsConstructor
public class AufsConfigTranslationEntity extends BaseMongoEntity {


    //Default Values
    public static final String IN = "IN";
    public static final String DARK = "dark";
    public static final String LIGHT = "light";
    public static final String INR = "INR";

    //Keys Query Node
    public static final String PC = "pc";
    public static final String PLATFORM = "pfm";
    public static final String KEY = "key";
    public static final String CC = "cc";
    public static final String LID = "langId";
    public static final String FV = "fv";
    public static final String THEME = "theme";
    public static final String IS_DEFAULT = "isDefault";
    public static final String ENABLE = "enable";
    public static final String DELETED = "deleted";
    public static final String ID = "_id";

    //Data Property
    @Indexed
    private String pc;

    @Indexed
    private String pfm;

    @Indexed
    private String client;

    @Indexed
    private String key;

    @Indexed
    private Set<String> cc;

    @Indexed
    private Set<Integer> lid;

    @Indexed
    private Integer fv;

    @Indexed
    private Set<String> theme;

    @Indexed
    private Boolean isDefault;

    @Indexed
    protected Boolean enable = false;

    @Indexed
    protected Boolean deleted = false;

    private Map<String, Object> rootTrans;

    public void setRootTrans(Map<String, Object> rootTrans) {
        if (rootTrans != null) {
            this.rootTrans = new HashMap<>();
            rootTrans.forEach((key, value) -> {
                // Convert dot notation to nested maps
                if (key.contains(".")) {
                    createNestedStructure(key, value);
                } else {
                    this.rootTrans.put(key, value);
                }
            });
        } else {
            this.rootTrans = null;
        }
    }

    /**
     * Converts dot-notated keys into proper nested structure
     * Example: "test1.test2" -> {test1: {test2: value}}
     */
    private void createNestedStructure(String keyPath, Object value) {
        String[] parts = keyPath.split("\\.");
        Map<String, Object> current = this.rootTrans;

        for (int i = 0; i < parts.length - 1; i++) {
            current = (Map<String, Object>) current.computeIfAbsent(parts[i], k -> new HashMap<>());
        }

        current.put(parts[parts.length - 1], value);
    }

    /**
     * Gets a value by dot-notated path
     */
    public Object getByPath(String path) {
        if (rootTrans == null || path == null) return null;

        String[] parts = path.split("\\.");
        Object current = rootTrans;

        for (String part : parts) {
            if (!(current instanceof Map)) return null;
            current = ((Map<?, ?>) current).get(part);
        }

        return current;
    }

    /**
     * Removes a value by dot-notated path
     */
    public void removeByPath(String path) {
        if (rootTrans == null || path == null) return;

        String[] parts = path.split("\\.");
        Map<String, Object> current = rootTrans;

        for (int i = 0; i < parts.length - 1; i++) {
            if (!(current.get(parts[i]) instanceof Map)) return;
            current = (Map<String, Object>) current.get(parts[i]);
        }
        current.remove(parts[parts.length - 1]);
    }

}
content_copyCOPY