diff --git a/src/app/modeler/services/model/model.service.ts b/src/app/modeler/services/model/model.service.ts index 210ceef..6e73b31 100644 --- a/src/app/modeler/services/model/model.service.ts +++ b/src/app/modeler/services/model/model.service.ts @@ -6,12 +6,13 @@ import { DataType, DataVariable, I18nString, + ImportUtils, NodeElement, PetriNet, Place, Role, Transition, - XmlArcType + XmlArcType, } from '@netgrif/petriflow'; import {ModelConfig} from './model-config'; import {CanvasConfiguration} from '@netgrif/petri.svg'; @@ -29,7 +30,7 @@ import {ChangedRole} from '../../role-mode/role-detail/changed-role'; import {ModelerUtils} from '../../modeler-utils'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModelService { private readonly _model: BehaviorSubject; @@ -59,7 +60,7 @@ export class ModelService { ]); constructor( - private arcFactory: ArcFactory + private arcFactory: ArcFactory, ) { this._model = new BehaviorSubject(undefined); this._placeChange = new Subject(); @@ -113,7 +114,7 @@ export class ModelService { this.alignPositionCoordinate(x, CanvasConfiguration.WIDTH), this.alignPositionCoordinate(y, CanvasConfiguration.HEIGHT), false, - this.nextPlaceId() + this.nextPlaceId(), ); if (this.model.getPlaces().length === 0) { place.marking = 1; @@ -177,7 +178,7 @@ export class ModelService { const transition = new Transition( this.alignPositionCoordinate(x, CanvasConfiguration.WIDTH), this.alignPositionCoordinate(y, CanvasConfiguration.HEIGHT), - this.nextTransitionId() + this.nextTransitionId(), ); this.addTransition(transition); return transition; @@ -272,10 +273,10 @@ export class ModelService { return arc; } - public newArcBreakpoint(arc: Arc, position: DOMPoint, index: number,): void { + public newArcBreakpoint(arc: Arc, position: DOMPoint, index: number): void { const breakPoint = new Breakpoint( this.alignPositionX(position.x), - this.alignPositionY(position.y) + this.alignPositionY(position.y), ); arc.breakpoints.splice(index, 0, breakPoint); this.model.lastChanged = Date.now(); @@ -455,7 +456,7 @@ export class ModelService { public alignPosition(position: DOMPoint): DOMPoint { return new DOMPoint( this.alignPositionX(position.x), - this.alignPositionY(position.y) + this.alignPositionY(position.y), ); } @@ -483,8 +484,10 @@ export class ModelService { const referencedData = model.getData(id); if (referencedData) { if (referencedData.init.value) { - return Number(referencedData.init.value); - // TODO: NAB-326 check if isFinite and >= 0 + if (ImportUtils.isInitValueNumber(referencedData.init)) { + return Number(referencedData.init.value); + } + return 0; } return 0; } @@ -531,8 +534,8 @@ export class ModelService { .map(dg => dg.getDataRefs() .map(ref => - ModelerUtils.numberOfEventActions(ref.getEvents()) - ).reduce((sum, current) => sum + current, 0) + ModelerUtils.numberOfEventActions(ref.getEvents()), + ).reduce((sum, current) => sum + current, 0), ).reduce((sum, current) => sum + current, 0); return eventActions + dataRefActions; } diff --git a/src/app/modeler/simulation-mode/simulation-mode.service.ts b/src/app/modeler/simulation-mode/simulation-mode.service.ts index bba93bb..9c95d00 100644 --- a/src/app/modeler/simulation-mode/simulation-mode.service.ts +++ b/src/app/modeler/simulation-mode/simulation-mode.service.ts @@ -1,6 +1,6 @@ import {Injectable, Injector} from '@angular/core'; import {BehaviorSubject} from 'rxjs'; -import {Arc, BasicSimulation, PetriNet, Place, Transition} from '@netgrif/petriflow'; +import {Arc, BasicSimulation, ImportUtils, PetriNet, Place, Transition} from '@netgrif/petriflow'; import {TutorialService} from '../../tutorial/tutorial-service'; import {ModelService} from '../services/model/model.service'; import {EventSimulationTool} from './tool/event-simulation.tool'; @@ -24,7 +24,7 @@ import {SimulationMode} from './simulation-mode'; import {CanvasPlace} from '../edit-mode/domain/canvas-place'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SimulationModeService extends CanvasModeService { @@ -74,7 +74,7 @@ export class SimulationModeService extends CanvasModeService { new ChangeDataTool(modelService, dialog, this, router, transitionService), new ResetPositionAndZoomTool(modelService, dialog, this, router, transitionService), new GridTool(modelService, dialog, this, router, transitionService), - new SwitchLabelTool(modelService, dialog, this, router, transitionService) + new SwitchLabelTool(modelService, dialog, this, router, transitionService), ); this.switchTools.tools.forEach(t => t.bind()); this.tools = [ @@ -82,12 +82,18 @@ export class SimulationModeService extends CanvasModeService { this.defaultTool, new EventSimulationTool(modelService, dialog, this, router, transitionService), ), - this.switchTools + this.switchTools, ]; this.originalModel = new BehaviorSubject(this.modelService.model.clone()); this.originalModel.subscribe(model => { this.data = new Map(model.getArcs().filter(a => !!a.reference && !!model.getData(a.reference)) - .map(a => [a.reference, Number.parseInt(model.getData(a.reference).init?.value, 10) || 0])); + .map(a => { + const data = model.getData(a.reference); + if (ImportUtils.isInitValueNumber(data.init)) { + return [a.reference, Number.parseInt(data.init.value, 10)]; + } + return [a.reference, 0]; + })); this.simulation = new BasicSimulation(model, this.data); this.renderModel(model); });