All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.qdbp.jdbc.model.AllFieldColumn Maven / Gradle / Ivy

package com.gitee.qdbp.jdbc.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.gitee.qdbp.tools.utils.VerifyTools;

/**
 * 全部字段及列信息
 *
 * @author zhaohuihua
 * @version 190609
 */
public class AllFieldColumn implements Serializable {

    /** serialVersionUID **/
    private static final long serialVersionUID = 1L;

    private final List items;
    private final Map> sceneItems;

    public AllFieldColumn(List items) {
        VerifyTools.requireNotBlank(items, "items");
        List list = new ArrayList<>();
        for (T item : items) {
            VerifyTools.requireNotBlank(item.getFieldName(), "fieldName");
            VerifyTools.requireNotBlank(item.getColumnName(), "columnName");
            @SuppressWarnings("unchecked")
            T copied = (T) item.copy();
            copied.modifyStatus.lockToUnmodifiable();
            list.add(copied);
        }
        this.items = Collections.unmodifiableList(list);
        this.sceneItems = new HashMap<>();
    }

    public boolean isEmpty() {
        return this.items.isEmpty();
    }

    public List items() {
        return this.items;
    }

    /**
     * 查找主键字段
     *
     * @return 主键字段
     * @since 3.2.0
     */
    public SimpleFieldColumn findPrimaryKey() {
        for (T item : this.items) {
            if (item.isPrimaryKey()) {
                return item;
            }
        }
        return null;
    }

    /**
     * 根据使用场景过滤子集
     *
     * @param scene 使用场景
     * @return 字段列表子集
     * @since 3.2.0
     */
    public FieldColumns filter(FieldScene scene) {
        if (sceneItems.containsKey(scene)) {
            return sceneItems.get(scene);
        }
        List list = new ArrayList<>();
        for (T item : this.items) {
            if (sceneMatches(item, scene)) {
                list.add(item);
            }
        }
        FieldColumns part = new FieldColumns<>(list);
        sceneItems.put(scene, part);
        return part;
    }

    protected boolean sceneMatches(T item, FieldScene scene) {
        switch (scene) {
            case RESULT:
                return true;
            case INSERT:
                return item.isColumnInsertable();
            case UPDATE:
                return item.isColumnUpdatable();
            default: // CONDITION
                return item.isColumnInsertable() || item.isColumnUpdatable();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy