diff --git a/applications/conceptual-model-editor/src/action/open-edit-association-profile-dialog.tsx b/applications/conceptual-model-editor/src/action/open-edit-association-profile-dialog.tsx index 94e01066..6afd34a7 100644 --- a/applications/conceptual-model-editor/src/action/open-edit-association-profile-dialog.tsx +++ b/applications/conceptual-model-editor/src/action/open-edit-association-profile-dialog.tsx @@ -28,7 +28,7 @@ export function openEditAssociationProfileDialogAction( entity: SemanticModelRelationshipUsage, ) { const state = createEditAssociationProfileDialogState( - classes, graph, visualModel, options.language, model, entity); + classes, graph, visualModel, options.language, model, entity.id); const onConfirm = (nextState: EditAssociationProfileDialogState) => { updateSemanticAssociationProfile(notifications, graph.models, entity, state, nextState); diff --git a/applications/conceptual-model-editor/src/action/open-edit-attribute-profile-dialog.tsx b/applications/conceptual-model-editor/src/action/open-edit-attribute-profile-dialog.tsx index 41b4a7e1..22eb65e3 100644 --- a/applications/conceptual-model-editor/src/action/open-edit-attribute-profile-dialog.tsx +++ b/applications/conceptual-model-editor/src/action/open-edit-attribute-profile-dialog.tsx @@ -28,7 +28,7 @@ export function openEditAttributeProfileDialogAction( entity: SemanticModelRelationshipUsage, ) { const state = createEditAttributeProfileDialogState( - classes, graph, visualModel, options.language, model, entity); + classes, graph, visualModel, options.language, model, entity.id); const onConfirm = (nextState: EditAttributeProfileDialogState) => { updateSemanticAttributeProfile(notifications, graph.models, entity, state, nextState); diff --git a/applications/conceptual-model-editor/src/action/open-edit-class-profile-dialog.tsx b/applications/conceptual-model-editor/src/action/open-edit-class-profile-dialog.tsx index 5a9c9572..3b4f5818 100644 --- a/applications/conceptual-model-editor/src/action/open-edit-class-profile-dialog.tsx +++ b/applications/conceptual-model-editor/src/action/open-edit-class-profile-dialog.tsx @@ -24,7 +24,7 @@ export function openEditClassProfileDialogAction( entity: SemanticModelClassUsage, ) { const state = createEditClassProfileDialogState( - classes, graph, visualModel, options.language, model, entity); + classes, graph, visualModel, options.language, model, entity.id); const onConfirm = (nextState: EditClassProfileDialogState) => { updateSemanticClassProfile(notifications, entity, graph.models, state, nextState); diff --git a/applications/conceptual-model-editor/src/dialog/association-profile/create-edit-association-profile-dialog-state.ts b/applications/conceptual-model-editor/src/dialog/association-profile/create-edit-association-profile-dialog-state.ts index 8c8ea059..969512e5 100644 --- a/applications/conceptual-model-editor/src/dialog/association-profile/create-edit-association-profile-dialog-state.ts +++ b/applications/conceptual-model-editor/src/dialog/association-profile/create-edit-association-profile-dialog-state.ts @@ -1,13 +1,13 @@ import { VisualModel } from "@dataspecer/core-v2/visual-model"; import { InMemorySemanticModel } from "@dataspecer/core-v2/semantic-model/in-memory"; -import { SemanticModelRelationshipUsage, isSemanticModelClassUsage, isSemanticModelRelationshipUsage } from "@dataspecer/core-v2/semantic-model/usage/concepts"; +import { isSemanticModelClassUsage, isSemanticModelRelationshipUsage } from "@dataspecer/core-v2/semantic-model/usage/concepts"; import { ClassesContextType } from "../../context/classes-context"; import { ModelGraphContextType } from "../../context/model-context"; import { EditAssociationProfileDialogState } from "./edit-association-profile-dialog-controller"; import { getDomainAndRange } from "../../util/relationship-utils"; -import { InvalidAggregation, MissingRelationshipEnds } from "../../application/error"; +import { InvalidAggregation, MissingEntity, MissingRelationshipEnds } from "../../application/error"; import { createEntityProfileStateForEdit } from "../utilities/entity-profile-utilities"; import { createRelationshipProfileStateForEdit } from "../utilities/relationship-profile-utilities"; import { entityModelsMapToCmeVocabulary } from "../../dataspecer/semantic-model/semantic-model-adapter"; @@ -21,11 +21,16 @@ export function createEditAssociationProfileDialogState( visualModel: VisualModel | null, language: string, model: InMemorySemanticModel, - entity: SemanticModelRelationshipUsage, + entityIdentifier: string, ): EditAssociationProfileDialogState { const entities = graphContext.aggregatorView.getEntities(); - const aggregated = entities[entity.id]?.aggregatedEntity; - if (!isSemanticModelRelationshipUsage(aggregated)) { + const aggregate = entities[entityIdentifier]; + const entity = aggregate.rawEntity; + const aggregated = aggregate.aggregatedEntity; + if (entity === null) { + throw new MissingEntity(entityIdentifier); + } + if (!isSemanticModelRelationshipUsage(entity) || !isSemanticModelRelationshipUsage(aggregated)) { throw new InvalidAggregation(entity, null); } diff --git a/applications/conceptual-model-editor/src/dialog/attribute-profile/create-edit-attribute-profile-dialog-state.ts b/applications/conceptual-model-editor/src/dialog/attribute-profile/create-edit-attribute-profile-dialog-state.ts index 8dee152d..24eae4bf 100644 --- a/applications/conceptual-model-editor/src/dialog/attribute-profile/create-edit-attribute-profile-dialog-state.ts +++ b/applications/conceptual-model-editor/src/dialog/attribute-profile/create-edit-attribute-profile-dialog-state.ts @@ -1,7 +1,7 @@ import { VisualModel } from "@dataspecer/core-v2/visual-model"; import { InMemorySemanticModel } from "@dataspecer/core-v2/semantic-model/in-memory"; -import { SemanticModelRelationshipUsage, isSemanticModelClassUsage, isSemanticModelRelationshipUsage } from "@dataspecer/core-v2/semantic-model/usage/concepts"; +import { isSemanticModelClassUsage, isSemanticModelRelationshipUsage } from "@dataspecer/core-v2/semantic-model/usage/concepts"; import { ClassesContextType } from "../../context/classes-context"; import { ModelGraphContextType } from "../../context/model-context"; @@ -10,31 +10,28 @@ import { EditAttributeProfileDialogState } from "./edit-attribute-profile-dialog import { createRelationshipProfileStateForEdit } from "../utilities/relationship-profile-utilities"; import { createEntityProfileStateForEdit } from "../utilities/entity-profile-utilities"; import { entityModelsMapToCmeVocabulary } from "../../dataspecer/semantic-model/semantic-model-adapter"; -import { InvalidAggregation, MissingRelationshipEnds } from "../../application/error"; +import { InvalidAggregation, MissingEntity, MissingRelationshipEnds } from "../../application/error"; import { DialogWrapper } from "../dialog-api"; import { EditAttributeProfileDialog } from "./edit-attribute-profile-dialog"; import { representClassProfiles, representDataTypes, representOwlThing, representRelationshipProfiles, representRelationships, representUndefinedDataType } from "../utilities/dialog-utilities"; -/** - * @param classesContext - * @param graphContext - * @param visualModel - * @param language - * @param entity Raw entity to create profile for. - * @returns - */ export function createEditAttributeProfileDialogState( classesContext: ClassesContextType, graphContext: ModelGraphContextType, visualModel: VisualModel | null, language: string, model: InMemorySemanticModel, - entity: SemanticModelRelationshipUsage, + entityIdentifier: string, ): EditAttributeProfileDialogState { const entities = graphContext.aggregatorView.getEntities(); - const aggregated = entities[entity.id]?.aggregatedEntity; - if (!isSemanticModelRelationshipUsage(aggregated)) { + const aggregate = entities[entityIdentifier]; + const entity = aggregate.rawEntity; + const aggregated = aggregate.aggregatedEntity; + if (entity === null) { + throw new MissingEntity(entityIdentifier); + } + if (!isSemanticModelRelationshipUsage(entity) || !isSemanticModelRelationshipUsage(aggregated)) { throw new InvalidAggregation(entity, null); } diff --git a/applications/conceptual-model-editor/src/dialog/class-profile/create-edit-class-profile-dialog-state.ts b/applications/conceptual-model-editor/src/dialog/class-profile/create-edit-class-profile-dialog-state.ts index 862ca28c..2d7118a0 100644 --- a/applications/conceptual-model-editor/src/dialog/class-profile/create-edit-class-profile-dialog-state.ts +++ b/applications/conceptual-model-editor/src/dialog/class-profile/create-edit-class-profile-dialog-state.ts @@ -1,6 +1,6 @@ import { VisualModel } from "@dataspecer/core-v2/visual-model"; import { InMemorySemanticModel } from "@dataspecer/core-v2/semantic-model/in-memory"; -import { SemanticModelClassUsage, isSemanticModelClassUsage } from "@dataspecer/core-v2/semantic-model/usage/concepts"; +import { isSemanticModelClassUsage } from "@dataspecer/core-v2/semantic-model/usage/concepts"; import { ClassesContextType } from "../../context/classes-context"; import { ModelGraphContextType } from "../../context/model-context"; @@ -8,7 +8,7 @@ import { EditClassProfileDialogState } from "./edit-class-profile-dialog-control import { representClassProfiles, representClasses } from "../utilities/dialog-utilities"; import { DialogWrapper } from "../dialog-api"; import { EditClassProfileDialog } from "./edit-class-profile-dialog"; -import { InvalidAggregation } from "../../application/error"; +import { InvalidAggregation, MissingEntity } from "../../application/error"; import { entityModelsMapToCmeVocabulary } from "../../dataspecer/semantic-model/semantic-model-adapter"; import { createEntityProfileStateForEdit } from "../utilities/entity-profile-utilities"; @@ -18,12 +18,17 @@ export function createEditClassProfileDialogState( visualModel: VisualModel | null, language: string, model: InMemorySemanticModel, - entity: SemanticModelClassUsage, + entityIdentifier: string, ): EditClassProfileDialogState { const entities = graphContext.aggregatorView.getEntities(); - const aggregated = entities[entity.id]?.aggregatedEntity; - if (!isSemanticModelClassUsage(aggregated)) { + const aggregate = entities[entityIdentifier]; + const entity = aggregate.rawEntity; + const aggregated = aggregate.aggregatedEntity; + if (entity === null) { + throw new MissingEntity(entityIdentifier); + } + if (!isSemanticModelClassUsage(entity) || !isSemanticModelClassUsage(aggregated)) { throw new InvalidAggregation(entity, null); } diff --git a/applications/conceptual-model-editor/src/dialog/utilities/relationship-profile-utilities.ts b/applications/conceptual-model-editor/src/dialog/utilities/relationship-profile-utilities.ts index dbdcfad6..ebac650a 100644 --- a/applications/conceptual-model-editor/src/dialog/utilities/relationship-profile-utilities.ts +++ b/applications/conceptual-model-editor/src/dialog/utilities/relationship-profile-utilities.ts @@ -106,20 +106,20 @@ export function createRelationshipProfileStateForEdit