UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

308 lines (302 loc) • 12.3 kB
import type CircuitManager from "../CircuitManager.js"; import type CircuitLocation from "./CircuitLocation.js"; import type CircuitSection from "./CircuitSection.js"; import type Subcircuit from "./Subcircuit.js"; import type { EventedMixin } from "../../core/Evented.js"; import type { JSONSupport } from "../../core/JSONSupport.js"; import type { CircuitStatus, CircuitType } from "./typeUtils.js"; import type { CircuitLocationProperties } from "./CircuitLocation.js"; import type { SubcircuitProperties } from "./Subcircuit.js"; export type CommonProperties = Pick<Circuit, "name"> & Partial<Pick<Circuit, "attributes" | "circuitManager" | "circuitType" | "globalId" | "subcircuits">>; export interface EmptyCircuitProperties extends CommonProperties { startLocation?: null; stopLocation?: null; sections?: null; } export interface NonSectionedCircuitProperties extends CommonProperties { startLocation: CircuitLocation; stopLocation: CircuitLocation; sections?: null; } export interface SectionedCircuitProperties extends CommonProperties { startLocation?: null; stopLocation?: null; sections: Map<CircuitSection, CircuitSection[]>; } export interface CircuitEvents {} /** * Represents a circuit in a telecom domain network. * * ## Creating a Circuit * * Circuits may be created in one of three ways: with [start location](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#startLocation) and [stop location](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#stopLocation), * with [sections](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#sections), or with neither. * * Keep in mind that [name](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#name) must always be specified when instantiating a Circuit, and the following may be * optionally specified: [attributes](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#attributes), [circuitManager](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#circuitManager), [circuitType](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#circuitType), * [globalId](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#globalId), and [subcircuits](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#subcircuits). * * <details> * <summary>Read More</summary> * * ### With start and stop location * * If created with start and stop [locations](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitLocation/), [isSectioned](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#isSectioned) is false. * * ```ts * const startLocation = new CircuitLocation({ * sourceId: 20, * globalId: "{665803BB-258E-4BAE-A5B2-27DBD8A83C30}", * firstUnit: 1, * lastUnit: 1, * }); * * const stopLocation = new CircuitLocation({ * sourceId: 20, * globalId: "{58CB492A-1992-4518-A60F-6119B1317E89}", * firstUnit: 1, * lastUnit: 1, * }); * * const circuit = new Circuit({ * name: "FIRSTCIRCUIT", * circuitType: "physical", * startLocation, * stopLocation, * }); * ``` * * ### With sections * * If created with [sections](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitSection/), [isSectioned](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#isSectioned) is true. * * ```ts * const sectionOne = new CircuitSection({ * sectionId: 1, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE1" }), * }); * * const sectionTwo = new CircuitSection({ * sectionId: 2, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE2" }), * }); * * const sectionThree = new CircuitSection({ * sectionId: 3, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE3" }), * }); * * const sectionFour = new CircuitSection({ * sectionId: 4, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE4" }), * }); * * const sections = new Map([ * [sectionOne, [sectionTwo, sectionThree]], * [sectionTwo, [sectionFour]], * [sectionThree, [sectionFour]], * [sectionFour, []], * ]); * * const circuit = new Circuit({ * name: "TESTCIRCUIT", * sections, * }); * ``` * * ### As an empty circuit * * It is possible to create an empty Circuit, without start locations, stop locations, or sections. In this scenario, * [isSectioned](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Circuit/#isSectioned) will be false until locations or sections are added to the Circuit. * * ```ts * const circuit = new Circuit({ name: "TESTCIRCUIT" }); * ``` * * To create an empty *sectioned* Circuit, specify an empty Map for the `sections` property. * * ```ts * const circuit = new Circuit({ * name: "TESTCIRCUIT", * sections: new Map(), * }); * ``` * * </details> * * @beta * @since 4.34 * @see [UtilityNetwork](https://developers.arcgis.com/javascript/latest/references/core/networks/UtilityNetwork/) * @see [CircuitManager](https://developers.arcgis.com/javascript/latest/references/core/networks/CircuitManager/) * @see [CircuitSection](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitSection/) * @see [Subcircuit](https://developers.arcgis.com/javascript/latest/references/core/networks/support/Subcircuit/) * @see [CircuitLocation](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitLocation/) * @see [Telecom domain network](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/telecom-domain-networks.htm) */ export default class Circuit extends CircuitSuperclass { /** * @deprecated * Do not directly reference this property. * Use EventNames and EventTypes helpers from \@arcgis/core/Evented */ "@eventTypes": CircuitEvents; constructor(circuitProperties?: Circuit | NonSectionedCircuitProperties | SectionedCircuitProperties | EmptyCircuitProperties); /** User-defined attributes on the circuit. */ accessor attributes: Record<string, any> | null | undefined; /** * An instance of `CircuitManager` associated with the circuit. * * This is updated when a circuit is successfully created or altered with * `CircuitManager.create()` or `CircuitManager.alter()`. */ accessor circuitManager: CircuitManager | null | undefined; /** * Indicates the type of the circuit. * * A virtual circuit does not require traversability between its start and stop locations. * If a virtual circuit is also a sectioned circuit, the circuit must have at least one virtual section. * * @default "physical" */ accessor circuitType: CircuitType; /** The global ID of the circuit. */ accessor globalId: string | null | undefined; /** Whether the circuit has been logically deleted. */ get isDeleted(): boolean; /** Whether the circuit is defined by circuit sections. */ get isSectioned(): boolean; /** The last time the circuit was exported. */ get lastExportedTime(): Date | null | undefined; /** The last time the circuit was verified. */ get lastVerifiedTime(): Date | null | undefined; /** * The name of the circuit. * This name is unique within the domain network. */ accessor name: string; /** * A map representing the logical connectivity between circuit sections as a directed adjacency list. * Each key is a [CircuitSection](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitSection/) that connects to the other * [CircuitSection](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitSection/) instances indicated by the key's value. * * For example, consider the following keys and values, where each number is a section ID: * * ```json * { * "1": [2, 3], * "2": [4], * "3": [4], * "4": [], * } * ``` * * In this example, section 1 connects to 2 and 3 (where sections 2 and 3 are in parallel), 2 connects to 4, * 3 connects to 4, and 4 connects to nothing (is the end of the circuit). * * This connectivity between sections is graphically represented as: * * ``` * 1 * / \ * 2 3 * \ / * 4 * ``` * * @example * const sectionOne = new CircuitSection({ * sectionId: 1, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE1" }), * }); * * const sectionTwo = new CircuitSection({ * sectionId: 2, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE2" }), * }); * * const sectionThree = new CircuitSection({ * sectionId: 3, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE3" }), * }); * * const sectionFour = new CircuitSection({ * sectionId: 4, * subcircuit: new Subcircuit({ name: "SUBCIRCUITVALUE4" }), * }); * * const sections = new Map([ * [sectionOne, [sectionTwo, sectionThree]], * [sectionTwo, [sectionFour]], * [sectionThree, [sectionFour]], * [sectionFour, []], * ]); * * const circuit = new Circuit({ * name: "TESTCIRCUIT", * sections, * }); */ accessor sections: Map<CircuitSection, CircuitSection[]> | null | undefined; /** * The feature or object associated with the start location of the circuit. * This property is null if the circuit is sectioned. */ get startLocation(): CircuitLocation | null | undefined; set startLocation(value: CircuitLocationProperties | null | undefined); /** * Indicates the status of the circuit. * * The circuit status is initially "dirty" and remains dirty until the circuit is validated. * The circuit status is "clean" when the circuit has been successfully validated. * The circuit status returns to "dirty" if any circuit components are modified. */ get status(): CircuitStatus; /** * The feature or object associated with the stop location of the circuit. * This property is null if the circuit is sectioned. */ get stopLocation(): CircuitLocation | null | undefined; set stopLocation(value: CircuitLocationProperties | null | undefined); /** The subcircuits that the circuit is subdivided into. */ get subcircuits(): Subcircuit[]; set subcircuits(value: SubcircuitProperties[]); /** * Returns the value of the specified user-defined attribute. * * @param name - The name of the attribute. * @returns Returns the value of the attribute specified by `name`. */ getAttribute<T = any>(name: string): T; /** * Returns the [CircuitSection](https://developers.arcgis.com/javascript/latest/references/core/networks/support/CircuitSection/) instance with a specified section ID * from the circuit's `sections`. * * @param sectionId - The section ID of the section to retrieve. * @returns The circuit section with the specified ID, if one exists in the circuit. */ getSectionById(sectionId: number): CircuitSection | null; /** * Sets a new value for the specified user-defined attribute. * * @param name - The name of the attribute to set. * @param newValue - The new value to set on the named attribute. */ setAttribute(name: string, newValue: any): void; /** * Sets the sections of the circuit. * This method sets the circuit's `startLocation` and `stopLocation` to null, making this a sectioned circuit. * * @param sections - The circuit's sections. */ setSections(sections: Map<CircuitSection, CircuitSection[]>): void; /** * Sets the start and stop locations of the circuit. * This method sets the circuit's `sections` to null, making this a non-sectioned circuit. * * @param startLocation - The start location of the circuit. * @param stopLocation - The stop location of the circuit. */ setStartStopLocations(startLocation: CircuitLocation, stopLocation: CircuitLocation): void; } declare const CircuitSuperclass: typeof JSONSupport & typeof EventedMixin