Skip to content

Commit a3f90fd

Browse files
Kr0noxEntenwilli
authored andcommitted
fix loading from url
1 parent 09b4f02 commit a3f90fd

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { Action } from "sprotty-protocol";
2+
import { FileData, LoadJsonCommand } from "./loadJson";
3+
import { inject } from "inversify";
4+
import { TYPES, ILogger, ActionDispatcher } from "sprotty";
5+
import { EditorModeController } from "../settings/editorMode";
6+
import { LabelTypeRegistry } from "../labels/LabelTypeRegistry";
7+
import { SavedDiagram } from "./SavedDiagram";
8+
import { FileName } from "../fileName/fileName";
9+
import { SETTINGS } from "../settings/Settings";
10+
import { ConstraintRegistry } from "../constraint/constraintRegistry";
11+
import { LoadingIndicator } from "../loadingIndicator/loadingIndicator";
12+
13+
interface LoadFromUrlAction extends Action {
14+
url: string;
15+
}
16+
17+
export namespace LoadFromUrlAction {
18+
export const KIND = "loadUrl";
19+
20+
export function create(url: string): LoadFromUrlAction {
21+
return { kind: KIND, url };
22+
}
23+
}
24+
25+
export class LoadFromUrlCommand extends LoadJsonCommand {
26+
static readonly KIND = LoadFromUrlAction.KIND;
27+
28+
constructor(
29+
@inject(TYPES.Action) private readonly action: LoadFromUrlAction,
30+
@inject(TYPES.ILogger) logger: ILogger,
31+
@inject(LabelTypeRegistry) labelTypeRegistry: LabelTypeRegistry,
32+
@inject(ConstraintRegistry) constraintRegistry: ConstraintRegistry,
33+
@inject(SETTINGS.Mode) editorModeController: EditorModeController,
34+
@inject(TYPES.IActionDispatcher) actionDispatcher: ActionDispatcher,
35+
@inject(FileName) fileName: FileName,
36+
@inject(LoadingIndicator) loadingIndicator: LoadingIndicator,
37+
) {
38+
super(
39+
logger,
40+
labelTypeRegistry,
41+
constraintRegistry,
42+
editorModeController,
43+
actionDispatcher,
44+
fileName,
45+
loadingIndicator,
46+
);
47+
}
48+
49+
protected async getFile(): Promise<FileData<SavedDiagram> | undefined> {
50+
const content = await fetch(this.action.url).then((response) => response.json() as Promise<SavedDiagram>);
51+
const urlParts = this.action.url.split("/");
52+
const fileName = urlParts[urlParts.length - 1];
53+
return {
54+
content,
55+
fileName,
56+
};
57+
}
58+
}

frontend/webEditor/src/serialize/di.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import { DfdModelFactory } from "./ModelFactory";
88
import { SaveJsonFileCommand } from "./saveJsonFile";
99
import { SaveDfdAndDdFileCommand } from "./saveDfdAndDdFile";
1010
import { AnalyzeCommand } from "./analyze";
11+
import { LoadFromUrlCommand } from "./LoadUrl";
1112

1213
export const serializeModule = new ContainerModule((bind, unbind, isBound, rebind) => {
1314
const context = { bind, unbind, isBound, rebind };
1415
configureCommand(context, LoadDefaultDiagramCommand);
1516
configureCommand(context, LoadJsonFileCommand);
1617
configureCommand(context, LoadDfdAndDdFileCommand);
1718
configureCommand(context, LoadPalladioFileCommand);
19+
configureCommand(context, LoadFromUrlCommand);
1820
configureCommand(context, SaveJsonFileCommand);
1921
configureCommand(context, SaveDfdAndDdFileCommand);
2022
configureCommand(context, AnalyzeCommand);

frontend/webEditor/src/startUpAgent/LoadDefaultDiagram.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,18 @@ import { ActionDispatcher, TYPES } from "sprotty";
22
import { IStartUpAgent } from "./StartUpAgent";
33
import { LoadDefaultDiagramAction } from "../serialize/loadDefaultDiagram";
44
import { inject } from "inversify";
5+
import { LoadFromUrlAction } from "../serialize/LoadUrl";
56

67
export class LoadDefaultDiagramStartUpAgent implements IStartUpAgent {
78
constructor(@inject(TYPES.IActionDispatcher) private actionDispatcher: ActionDispatcher) {}
89

910
run(): void {
10-
this.actionDispatcher.dispatch(LoadDefaultDiagramAction.create());
11+
const urlParams = new URLSearchParams(window.location.search);
12+
const fileUrlParameter = urlParams.get("file");
13+
this.actionDispatcher.dispatch(
14+
fileUrlParameter != undefined
15+
? LoadFromUrlAction.create(fileUrlParameter)
16+
: LoadDefaultDiagramAction.create(),
17+
);
1118
}
1219
}

0 commit comments

Comments
 (0)