<commit_before>﻿/**
 * @license
 * Copyright color-coding studio. All Rights Reserved.
 *
 * Use of this source code is governed by an Apache License, Version 2.0
 * that can be found in the LICENSE file at http://www.apache.org/licenses/LICENSE-2.0
 */

import { List, ICriteria } from "../data/index";

/**
 * 属性改变监听者
 */
export interface PropertyChangedListener {
    /** 调用者，this指向 */
    caller?: any;
    /** 标记 */
    id?: string;
    /**
     * 属性改变
     */
    propertyChanged(property: string);
}

/**
 * 可绑定对象
 */
export interface IBindable {
    /**
     * 注册监听事件
     * @param listener 监听者
     */
    registerListener(listener: PropertyChangedListener);
    /**
     * 移出监听事件
     * @param listener 监听者
     */
    removeListener(listener: PropertyChangedListener);
    /**
     * 移出全部监听事件
     */
    removeListener(recursive: boolean): void;
}

/**
 * 状态跟踪对象
 */
export interface ITrackable {
    /**
     * 是否新建
     */
    readonly isNew: boolean;
    /**
     * 是否修改
     */
    readonly isDirty: boolean;
    /**
     * 是否删除
     */
    readonly isDeleted: boolean;
    /**
     * 是否有效
     */
    readonly isVaild: boolean;
    /**
     * 是否加载数据中
     */
    isLoading: boolean;

    /**
     * 标记为未修改
     * 
     * @param recursive 递归
     */
    markOld(recursive: boolean): void;

    /**
     * 标记为新
     * 
     * @param recursive 递归
     */
    markNew(recursive: boolean): void;

    /**
     * 标记为删除
     * 
     * @param recursive 递归
     */
    markDeleted(recursive: boolean): void;

    /**
     * 对象置为脏
     * 
     * @param recursive 递归
     */
    markDirty(recursive: boolean): void;

    /**
     * 清除删除标记
     *
     * @param recursive 递归
     */
    clearDeleted(recursive: boolean): void;
}

/**
 * 业务对象
 */
export interface IBusinessObject extends ITrackable {
    /**
     * 获取属性的值
     * @param property 属性名称
     */
    getProperty<P>(property: string): P;

    /**
     * 设置属性的值
     * @param property 属性名称
     * @param value 值
     */
    setProperty<P>(property: string, value: P);
}

/**
 * 业务对象集合
 */
export interface IBusinessObjectList<T extends IBusinessObject> extends List<T> {
    /**
     * 新建并添加子项<commit_msg>添加字符串输出方法<commit_after>﻿/**
 * @license
 * Copyright color-coding studio. All Rights Reserved.
 *
 * Use of this source code is governed by an Apache License, Version 2.0
 * that can be found in the LICENSE file at http://www.apache.org/licenses/LICENSE-2.0
 */

import { List, ICriteria } from "../data/index";

/**
 * 属性改变监听者
 */
export interface PropertyChangedListener {
    /** 调用者，this指向 */
    caller?: any;
    /** 标记 */
    id?: string;
    /**
     * 属性改变
     */
    propertyChanged(property: string);
}

/**
 * 可绑定对象
 */
export interface IBindable {
    /**
     * 注册监听事件
     * @param listener 监听者
     */
    registerListener(listener: PropertyChangedListener);
    /**
     * 移出监听事件
     * @param listener 监听者
     */
    removeListener(listener: PropertyChangedListener);
    /**
     * 移出全部监听事件
     */
    removeListener(recursive: boolean): void;
}

/**
 * 状态跟踪对象
 */
export interface ITrackable {
    /**
     * 是否新建
     */
    readonly isNew: boolean;
    /**
     * 是否修改
     */
    readonly isDirty: boolean;
    /**
     * 是否删除
     */
    readonly isDeleted: boolean;
    /**
     * 是否有效
     */
    readonly isVaild: boolean;
    /**
     * 是否加载数据中
     */
    isLoading: boolean;

    /**
     * 标记为未修改
     * 
     * @param recursive 递归
     */
    markOld(recursive: boolean): void;

    /**
     * 标记为新
     * 
     * @param recursive 递归
     */
    markNew(recursive: boolean): void;

    /**
     * 标记为删除
     * 
     * @param recursive 递归
     */
    markDeleted(recursive: boolean): void;

    /**
     * 对象置为脏
     * 
     * @param recursive 递归
     */
    markDirty(recursive: boolean): void;

    /**
     * 清除删除标记
     *
     * @param recursive 递归
     */
    clearDeleted(recursive: boolean): void;
}

/**
 * 业务对象
 */
export interface IBusinessObject extends ITrackable {
    /**
     * 获取属性的值
     * @param property 属性名称
     */
    getProperty<P>(property: string): P;

    /**
     * 设置属性的值
     * @param property 属性名称
     * @param value 值
     */
    setProperty<P>(property: string, value: P);

    /** 输出字符串 */
    toString(): string;
}

/**
 * 业务对象集合
 */
export interface IBusinessObjectList<T extends IBusinessObject> extends List<T> {
    /**
     * 新建并添加子项
{'fraction_non_alphanumeric': 0.13505484460694697, 'fraction_numerical': 0.0018281535648994515, 'mean_word_length': 1.9044459190444591, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4612209', 'n_tokens_mistral': 1664, 'n_tokens_neox': 1748, 'n_words': 322}