/
model-data.ts
143 lines (124 loc) · 5.17 KB
/
model-data.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/********************************************************************************
* Copyright (c) 2021-2023 STMicroelectronics and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
import * as sprotty from 'sprotty-protocol/lib/actions';
import { GModelRootSchema } from '../model/model-schema';
import { hasObjectProp, hasStringProp } from '../utils/type-util';
import { Action, RequestAction, ResponseAction } from './base-protocol';
import { Args } from './types';
/**
* Sent from the server to the client in order to set the model. If a model is already present, it is replaced.
* The corresponding namespace declares the action kind as constant and offers helper functions for type guard checks
* and creating new `RequestModelActions`.
*/
export interface RequestModelAction extends RequestAction<SetModelAction>, sprotty.RequestModelAction {
kind: typeof RequestModelAction.KIND;
/**
* Additional options used to compute the graphical model.
*/
options?: Args;
}
export namespace RequestModelAction {
export const KIND = 'requestModel';
export function is(object: unknown): object is RequestModelAction {
return RequestAction.hasKind(object, KIND);
}
export function create(options: { options?: Args; requestId?: string } = {}): RequestModelAction {
return {
kind: KIND,
requestId: '',
...options
};
}
}
/**
* Sent from the server to the client in order to set the model. If a model is already present, it is replaced.
* The corresponding namespace declares the action kind as constant and offers helper functions for type guard checks
* and creating new `SetModelActions`.
*/
export interface SetModelAction extends ResponseAction, sprotty.SetModelAction {
kind: typeof SetModelAction.KIND;
/**
* The new graphical model root.
*/
newRoot: GModelRootSchema;
}
export namespace SetModelAction {
export const KIND = 'setModel';
export function is(object: unknown): object is SetModelAction {
return Action.hasKind(object, KIND) && hasObjectProp(object, 'newRoot');
}
export function create(newRoot: GModelRootSchema, options: { responseId?: string } = {}): SetModelAction {
return {
kind: KIND,
responseId: '',
newRoot,
...options
};
}
}
/**
* Sent from the server to the client in order to update the model. If no model is present yet, this behaves the same as
* a {@link SetModelAction}. The transition from the old model to the new one can be animated.
* The corresponding namespace declares the action kind as constant and offers helper functions for type guard checks
* and creating new `UpdateModelActions`.
*/
export interface UpdateModelAction extends Action, Omit<sprotty.UpdateModelAction, 'matches' | 'cause'> {
kind: typeof UpdateModelAction.KIND;
newRoot: GModelRootSchema;
/**
* Boolean flag to indicate wether updated/changed elements should be animated in the diagram.
*/
animate?: boolean;
}
export namespace UpdateModelAction {
export const KIND = 'updateModel';
export function is(action: unknown): action is UpdateModelAction {
return Action.hasKind(action, KIND) && hasObjectProp(action, 'newRoot');
}
export function create(newRoot: GModelRootSchema, options: { animate?: boolean } = {}): UpdateModelAction {
return {
kind: KIND,
newRoot,
animate: true,
...options
};
}
}
/**
* Sent from the server to the client in order to indicate that the source model has changed.
* The source model denotes the data source from which the diagram has been originally derived (such as a file, a database, etc.).
* The corresponding namespace declares the action kind as constant and offers helper functions for type guard checks
* and creating new `SourceModelChangedActions`.
*/
export interface SourceModelChangedAction extends Action {
kind: typeof SourceModelChangedAction.KIND;
/**
* A human readable name of the source model (e.g. the file name).
*/
sourceModelName: string;
}
export namespace SourceModelChangedAction {
export const KIND = 'sourceModelChanged';
export function is(object: unknown): object is SourceModelChangedAction {
return Action.hasKind(object, KIND) && hasStringProp(object, 'sourceModelName');
}
export function create(sourceModelName: string): SourceModelChangedAction {
return {
kind: KIND,
sourceModelName: sourceModelName
};
}
}