package com.liangjian.dataplatform.member.service;

import com.liangjian.dataplatform.member.entity.vo.datanodes.MetaCorePackage;
import com.liangjian.dataplatform.member.entity.vo.datanodes.MetaDataSource;
import com.liangjian.dataplatform.member.entity.vo.datanodes.PDM;
import com.liangjian.dataplatform.member.entity.vo.datanodes.PDMColumn;
import com.liangjian.dataplatform.member.entity.vo.detailvo.PDMDetailVo;

import java.util.List;

/**
 * @Author: 黄子奇
 * @Date: 2019/8/29 10:59
 *
 * 查询元数据的在Service在IMetaCoreQuerySerivce，逻辑较多，所以选择分开
 * 这里是元数据删改查的Service
 */
public interface IMetaCoreCUDService {

    /*
    新增或修改系列
     */

    /**
     * 保存（新增、修改）目录
     * @param metaCorePackage
     * @return
     */
    boolean saveBasePackage(MetaCorePackage metaCorePackage);

    /**
     * 保存PDM信息(仅PDM）
     * @param pdm
     * @return
     */
    boolean savePDM(PDM pdm);

    /**
     * 保存PDMColumn信息（仅PDMColumn）
     * @param column
     * @return
     */
    boolean savePDNColumn(PDMColumn column);

    /**
     * 通过详细信息保存PDM、PDMColumn、MetaRel
     * @param detailVo
     * @return
     */
    boolean savePDMByDetail(PDMDetailVo detailVo);

    /**
     * 保存落地库中数据源信息
     * @param mds
     * @return
     */
    boolean saveDataSource(MetaDataSource mds);

    /**
     * 通过反向工程添加PDM
     * @param id
     * @return
     */
    boolean addPDMByReverse(String id, String pid);

    /**
     * 通过反向工程获取到的详细信息添加PDM
     * @param vo
     * @return
     */
    boolean addPDMByReverse(PDMDetailVo vo, String pid);

    /**
     * 通过反向过程添加多个PDM
     * @param ids
     * @return
     */
    boolean addPDMByReverses(List<String> ids, String pid);


    /* 删除系列 */

    /**
     * 删除元数据节点，会同时删除其子节点，需谨慎
     * @param id
     * @return
     */
    boolean deleteMeta(String id);

    /**
     * 批量删除元数据节点
     * @param ids
     * @return
     */
    boolean deleteMeta(List<String> ids);
}
