@@ -3,12 +3,15 @@ import { DisposableObject } from "../common/disposable-object";
33import { AppEvent , AppEventEmitter } from "../common/events" ;
44import { DatabaseItem } from "../databases/local-databases" ;
55import { Method } from "./method" ;
6+ import { ModeledMethod } from "./modeled-method" ;
67import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "./shared/hide-modeled-methods" ;
78
89interface DbModelingState {
910 databaseItem : DatabaseItem ;
1011 methods : Method [ ] ;
1112 hideModeledMethods : boolean ;
13+ modeledMethods : Record < string , ModeledMethod > ;
14+ modifiedMethodSignatures : Set < string > ;
1215}
1316
1417interface MethodsChangedEvent {
@@ -22,11 +25,25 @@ interface HideModeledMethodsChangedEvent {
2225 isActiveDb : boolean ;
2326}
2427
28+ interface ModeledMethodsChangedEvent {
29+ modeledMethods : Record < string , ModeledMethod > ;
30+ dbUri : string ;
31+ isActiveDb : boolean ;
32+ }
33+
34+ interface ModifiedMethodsChangedEvent {
35+ modifiedMethods : Set < string > ;
36+ dbUri : string ;
37+ isActiveDb : boolean ;
38+ }
39+
2540export class ModelingStore extends DisposableObject {
2641 public readonly onActiveDbChanged : AppEvent < void > ;
2742 public readonly onDbClosed : AppEvent < string > ;
2843 public readonly onMethodsChanged : AppEvent < MethodsChangedEvent > ;
2944 public readonly onHideModeledMethodsChanged : AppEvent < HideModeledMethodsChangedEvent > ;
45+ public readonly onModeledMethodsChanged : AppEvent < ModeledMethodsChangedEvent > ;
46+ public readonly onModifiedMethodsChanged : AppEvent < ModifiedMethodsChangedEvent > ;
3047
3148 private readonly state : Map < string , DbModelingState > ;
3249 private activeDb : string | undefined ;
@@ -35,6 +52,8 @@ export class ModelingStore extends DisposableObject {
3552 private readonly onDbClosedEventEmitter : AppEventEmitter < string > ;
3653 private readonly onMethodsChangedEventEmitter : AppEventEmitter < MethodsChangedEvent > ;
3754 private readonly onHideModeledMethodsChangedEventEmitter : AppEventEmitter < HideModeledMethodsChangedEvent > ;
55+ private readonly onModeledMethodsChangedEventEmitter : AppEventEmitter < ModeledMethodsChangedEvent > ;
56+ private readonly onModifiedMethodsChangedEventEmitter : AppEventEmitter < ModifiedMethodsChangedEvent > ;
3857
3958 constructor ( app : App ) {
4059 super ( ) ;
@@ -61,6 +80,18 @@ export class ModelingStore extends DisposableObject {
6180 ) ;
6281 this . onHideModeledMethodsChanged =
6382 this . onHideModeledMethodsChangedEventEmitter . event ;
83+
84+ this . onModeledMethodsChangedEventEmitter = this . push (
85+ app . createEventEmitter < ModeledMethodsChangedEvent > ( ) ,
86+ ) ;
87+ this . onModeledMethodsChanged =
88+ this . onModeledMethodsChangedEventEmitter . event ;
89+
90+ this . onModifiedMethodsChangedEventEmitter = this . push (
91+ app . createEventEmitter < ModifiedMethodsChangedEvent > ( ) ,
92+ ) ;
93+ this . onModifiedMethodsChanged =
94+ this . onModifiedMethodsChangedEventEmitter . event ;
6495 }
6596
6697 public initializeStateForDb ( databaseItem : DatabaseItem ) {
@@ -69,6 +100,8 @@ export class ModelingStore extends DisposableObject {
69100 databaseItem,
70101 methods : [ ] ,
71102 hideModeledMethods : INITIAL_HIDE_MODELED_METHODS_VALUE ,
103+ modeledMethods : { } ,
104+ modifiedMethodSignatures : new Set ( ) ,
72105 } ) ;
73106 }
74107
@@ -129,6 +162,73 @@ export class ModelingStore extends DisposableObject {
129162 } ) ;
130163 }
131164
165+ public addModeledMethods (
166+ dbItem : DatabaseItem ,
167+ methods : Record < string , ModeledMethod > ,
168+ ) {
169+ this . changeModeledMethods ( dbItem , ( state ) => {
170+ const newModeledMethods = {
171+ ...methods ,
172+ ...Object . fromEntries (
173+ Object . entries ( state . modeledMethods ) . filter (
174+ ( [ _ , value ] ) => value . type !== "none" ,
175+ ) ,
176+ ) ,
177+ } ;
178+ state . modeledMethods = newModeledMethods ;
179+ } ) ;
180+ }
181+
182+ public setModeledMethods (
183+ dbItem : DatabaseItem ,
184+ methods : Record < string , ModeledMethod > ,
185+ ) {
186+ this . changeModeledMethods ( dbItem , ( state ) => {
187+ state . modeledMethods = methods ;
188+ } ) ;
189+ }
190+
191+ public updateModeledMethod ( dbItem : DatabaseItem , method : ModeledMethod ) {
192+ this . changeModeledMethods ( dbItem , ( state ) => {
193+ state . modeledMethods [ method . signature ] = method ;
194+ } ) ;
195+ }
196+
197+ public setModifiedMethods (
198+ dbItem : DatabaseItem ,
199+ methodSignatures : Set < string > ,
200+ ) {
201+ this . changeModifiedMethods ( dbItem , ( state ) => {
202+ state . modifiedMethodSignatures = methodSignatures ;
203+ } ) ;
204+ }
205+
206+ public addModifiedMethods (
207+ dbItem : DatabaseItem ,
208+ methodSignatures : Iterable < string > ,
209+ ) {
210+ this . changeModifiedMethods ( dbItem , ( state ) => {
211+ for ( const signature of methodSignatures ) {
212+ state . modifiedMethodSignatures . add ( signature ) ;
213+ }
214+ } ) ;
215+ }
216+
217+ public addModifiedMethod ( dbItem : DatabaseItem , methodSignature : string ) {
218+ this . addModifiedMethods ( dbItem , [ methodSignature ] ) ;
219+ }
220+
221+ public removeModifiedMethods (
222+ dbItem : DatabaseItem ,
223+ methodSignatures : string [ ] ,
224+ ) {
225+ this . changeModifiedMethods ( dbItem , ( state ) => {
226+ methodSignatures . forEach ( ( signature ) => {
227+ state . modifiedMethodSignatures . delete ( signature ) ;
228+ } ) ;
229+ } ) ;
230+ }
231+
132232 private getState ( databaseItem : DatabaseItem ) : DbModelingState {
133233 if ( ! this . state . has ( databaseItem . databaseUri . toString ( ) ) ) {
134234 throw Error (
@@ -138,4 +238,34 @@ export class ModelingStore extends DisposableObject {
138238
139239 return this . state . get ( databaseItem . databaseUri . toString ( ) ) ! ;
140240 }
241+
242+ private changeModifiedMethods (
243+ dbItem : DatabaseItem ,
244+ updateState : ( state : DbModelingState ) => void ,
245+ ) {
246+ const state = this . getState ( dbItem ) ;
247+
248+ updateState ( state ) ;
249+
250+ this . onModifiedMethodsChangedEventEmitter . fire ( {
251+ modifiedMethods : state . modifiedMethodSignatures ,
252+ dbUri : dbItem . databaseUri . toString ( ) ,
253+ isActiveDb : dbItem . databaseUri . toString ( ) === this . activeDb ,
254+ } ) ;
255+ }
256+
257+ private changeModeledMethods (
258+ dbItem : DatabaseItem ,
259+ updateState : ( state : DbModelingState ) => void ,
260+ ) {
261+ const state = this . getState ( dbItem ) ;
262+
263+ updateState ( state ) ;
264+
265+ this . onModeledMethodsChangedEventEmitter . fire ( {
266+ modeledMethods : state . modeledMethods ,
267+ dbUri : dbItem . databaseUri . toString ( ) ,
268+ isActiveDb : dbItem . databaseUri . toString ( ) === this . activeDb ,
269+ } ) ;
270+ }
141271}
0 commit comments