import { DataObject } from '@loopback/repository';
import { ObjectSubType } from '../models';
import { ObjectTypeRepository } from '../repositories';
import { ObjectType, ObjectTypeRelations } from './../models/object-type.model';
import { ObjectSubTypeRepository } from './../repositories/object-sub-type.repository';
import { ApplicationService, CurrentContext } from './application.service';
import { ContentEntityService } from './content-entity/content-entity.service';
export declare class ObjectTypeService {
    private objectTypeRepository;
    private objectSubTypeRepository;
    private contentEntityService;
    private appCtx;
    constructor(objectTypeRepository: ObjectTypeRepository, objectSubTypeRepository: ObjectSubTypeRepository, contentEntityService: ContentEntityService, appCtx: ApplicationService);
    add(objectType: DataObject<ObjectType> & {
        name: string;
    }, ctx: CurrentContext): Promise<ObjectType>;
    getTypeWithContent(ctx: CurrentContext): Promise<{
        [id: string]: ObjectType;
    }>;
    cleanWhenReboot(): Promise<void>;
    registerApplicationType(objectType: DataObject<ObjectType> & {
        name: string;
    }): Promise<ObjectType>;
    searchByName(name: string): Promise<ObjectType>;
    private get filterOrder();
    private get filterFields();
    private get filterInclude();
    searchById(id: string): Promise<ObjectType & ObjectTypeRelations>;
    getImplementedTypes(type: string): Promise<string[]>;
    getImplementingCommonTypes(type: string): Promise<string[]>;
    getImplementingTypes(type: string): Promise<string[]>;
    getParentTypesOfType(type: string): Promise<string[]>;
    getParentTypesOfImplementingType(type: string): Promise<string[]>;
    search(ctx: CurrentContext): Promise<(ObjectType & ObjectTypeRelations)[]>;
    protected extendsType(type: ObjectType, allTypes: {
        [name: string]: ObjectType;
    }): void;
    searchAll(): Promise<{
        [name: string]: ObjectType & ObjectTypeRelations;
    }>;
    getAll(ctx: CurrentContext): Promise<{
        [id: string]: ObjectType;
    }>;
    private resetCache;
    removeById(id: string, ctx: CurrentContext): Promise<void>;
    modifyById(id: string, objectType: DataObject<ObjectType>, ctx: CurrentContext): Promise<ObjectType>;
    createSubType(id: string, objectSubType: DataObject<ObjectSubType>): Promise<ObjectSubType>;
    modifySubTypeById(objectTypeId: string, id: string, objectSubType: DataObject<ObjectSubType>): Promise<ObjectSubType>;
    removeSubTypeById(objectTypeId: string, id: string): Promise<import("@loopback/repository").Count>;
    getOrCreateObjectSubType(objectTypeId: string, subObjectTypeId: string, defaultValue?: {
        name: string;
        title?: string;
        acl: boolean;
        owner: boolean;
        namespace: boolean;
        tree: boolean;
        min?: number;
        max?: number;
        exclusions?: string[];
        mandatories?: string[];
    }): Promise<ObjectSubType>;
}
