Skip to content

Commit 9add292

Browse files
committed
Using explicit xmldom reference
1 parent 3f1aaf6 commit 9add292

File tree

1 file changed

+31
-30
lines changed

1 file changed

+31
-30
lines changed

src/dgmlManager.ts

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { ArrowType, BoundingBox, Category, Edge, NetworkNode, Node, NodeType, Position } from "@model";
2+
import * as xmldom from '@xmldom/xmldom';
23

34
export class DgmlManager {
45

5-
public createNewDirectedGraph(domImpl: DOMImplementation, direction: string, layout: string, zoomLevel: string): Document {
6-
let xmlDoc: Document = domImpl.createDocument('', null, null);
6+
public createNewDirectedGraph(domImpl: xmldom.DOMImplementation, direction: string, layout: string, zoomLevel: string): xmldom.Document {
7+
let xmlDoc: xmldom.Document = domImpl.createDocument('', '', null);
78
const root = xmlDoc.createElement("DirectedGraph");
89
if (direction.length > 0) {
910
root.setAttribute("GraphDirection", direction);
@@ -15,50 +16,50 @@ export class DgmlManager {
1516
return xmlDoc;
1617
}
1718

18-
private addNodeToRoot(xmlDoc: Document, tagName: string): Element | null {
19+
private addNodeToRoot(xmlDoc: xmldom.Document, tagName: string): xmldom.Element | undefined | null {
1920
const root = xmlDoc.documentElement;
20-
const elements = root.getElementsByTagName(tagName);
21-
let nodeElement: Element;
22-
if (elements.length === 0) {
21+
const elements = root?.getElementsByTagName(tagName);
22+
let nodeElement: xmldom.Element;
23+
if (elements?.length === 0) {
2324
nodeElement = xmlDoc.createElement(tagName);
24-
root.appendChild(nodeElement);
25+
root?.appendChild(nodeElement);
2526
return nodeElement;
2627
}
2728
else {
28-
const exitingNode = elements.item(0);
29+
const exitingNode = elements?.item(0);
2930
return exitingNode;
3031
}
3132
}
3233

33-
private addNode(element: Element | null, nodeElement: Element, attribute: string = 'Id') {
34+
private addNode(element: xmldom.Element | undefined | null, nodeElement: xmldom.Element, attribute: string = 'Id') {
3435
if (element !== null) {
3536
let nodeAlreadyAdded = false;
36-
if (element.childNodes.length > 0) {
37+
if (element != undefined && element.childNodes.length > 0) {
3738
for (let i = 0; i < element.childNodes.length; i++) {
3839
let node = element.childNodes[i];
39-
if (node.nodeType === 1 && (node as Element).hasAttribute(attribute) &&
40-
(node as Element).getAttribute(attribute)?.toLowerCase() === nodeElement.getAttribute(attribute)?.toLowerCase()) {
40+
if (node.nodeType === 1 && (node as xmldom.Element).hasAttribute(attribute) &&
41+
(node as xmldom.Element).getAttribute(attribute)?.toLowerCase() === nodeElement.getAttribute(attribute)?.toLowerCase()) {
4142
nodeAlreadyAdded = true;
4243
}
4344
}
4445
}
4546
if (!nodeAlreadyAdded) {
46-
element.appendChild(nodeElement);
47+
element?.appendChild(nodeElement);
4748
}
4849
}
4950
}
5051

51-
private addLinkNode(xmlDoc: Document, element: Element | null, source: string, target: string, categoryId: string, label: string | undefined) {
52+
private addLinkNode(xmlDoc: xmldom.Document, element: xmldom.Element | undefined | null, source: string, target: string, categoryId: string, label: string | undefined) {
5253
if (element !== null) {
5354
let nodeAlreadyAdded = false;
54-
if (element.childNodes.length > 0) {
55-
for (let i = 0; i < element.childNodes.length; i++) {
56-
let node = element.childNodes[i];
55+
if (element != undefined && element.childNodes.length > 0) {
56+
for (let i = 0; i < element?.childNodes.length; i++) {
57+
let node = element?.childNodes[i];
5758
if (node.nodeType === 1 &&
58-
(node as Element).hasAttribute("Source") &&
59-
(node as Element).hasAttribute("Target") &&
60-
(node as Element).getAttribute("Source")?.toLowerCase() === source.toLowerCase() &&
61-
(node as Element).getAttribute("Target")?.toLowerCase() === target.toLowerCase()) {
59+
(node as xmldom.Element).hasAttribute("Source") &&
60+
(node as xmldom.Element).hasAttribute("Target") &&
61+
(node as xmldom.Element).getAttribute("Source")?.toLowerCase() === source.toLowerCase() &&
62+
(node as xmldom.Element).getAttribute("Target")?.toLowerCase() === target.toLowerCase()) {
6263
nodeAlreadyAdded = true;
6364
}
6465
}
@@ -71,12 +72,12 @@ export class DgmlManager {
7172
if (label !== undefined) {
7273
linkElement.setAttribute("Label", label);
7374
}
74-
element.appendChild(linkElement);
75+
element?.appendChild(linkElement);
7576
}
7677
}
7778
}
7879

79-
public addNodesAndLinks(xmlDoc: Document, nodes: Node[], nodeInfoDictionary: { [id: string]: NetworkNode }, edges: Edge[]) {
80+
public addNodesAndLinks(xmlDoc: xmldom.Document, nodes: Node[], nodeInfoDictionary: { [id: string]: NetworkNode }, edges: Edge[]) {
8081
const nodesElement = this.addNodeToRoot(xmlDoc, "Nodes");
8182
const linksElement = this.addNodeToRoot(xmlDoc, "Links");
8283
const categoryDictionary: { [nodeType: string]: Category } = {};
@@ -116,7 +117,7 @@ export class DgmlManager {
116117
}
117118
}
118119

119-
private generateDirectedGraphNodesXml(xmlDoc: Document, node: Node, nodesElement: Element | null) {
120+
private generateDirectedGraphNodesXml(xmlDoc: xmldom.Document, node: Node, nodesElement: xmldom.Element | undefined |null) {
120121
const nodeElement = xmlDoc.createElement("Node");
121122
nodeElement.setAttribute("Label", node.name);
122123
nodeElement.setAttribute("Id", node.id);
@@ -143,18 +144,18 @@ export class DgmlManager {
143144
return `${position.x},${position.y},${width},${height}`;
144145
}
145146

146-
private generateDirectedGraphLinksXml(xmlDoc: Document, edge: Edge, linksElement: Element | null) {
147+
private generateDirectedGraphLinksXml(xmlDoc: xmldom.Document, edge: Edge, linksElement: xmldom.Element | undefined | null) {
147148
const categoryId = ArrowType[edge.arrowType];
148149
this.addLinkNode(xmlDoc, linksElement, edge.source, edge.target, categoryId, edge.getEdgeTitle());
149150
}
150151

151-
private addCategoryRef(xmlDoc: Document, node: Element, categoryRef: string) {
152+
private addCategoryRef(xmlDoc: xmldom.Document, node: xmldom.Element, categoryRef: string) {
152153
const categoryElement = xmlDoc.createElement("Category");
153154
categoryElement.setAttribute("Ref", categoryRef);
154155
node.appendChild(categoryElement);
155156
}
156157

157-
private addCategory(xmlDoc: Document, categoriesElement: Element | null, category: Category) {
158+
private addCategory(xmlDoc: xmldom.Document, categoriesElement: xmldom.Element | undefined | null, category: Category) {
158159
if (categoriesElement !== null && (category.backgroundColor || category.stroke || category.icon)) {
159160
const categoryElement = xmlDoc.createElement("Category");
160161
categoryElement.setAttribute("Id", category.id);
@@ -175,14 +176,14 @@ export class DgmlManager {
175176
}
176177
}
177178

178-
private addCategoriesAndStyles(xmlDoc: Document, categories: { [nodeType: string]: Category }) {
179+
private addCategoriesAndStyles(xmlDoc: xmldom.Document, categories: { [nodeType: string]: Category }) {
179180
const categoriesElement = this.addNodeToRoot(xmlDoc, "Categories");
180181
Object.keys(categories).forEach(nodeType => {
181182
this.addCategory(xmlDoc, categoriesElement, categories[nodeType]);
182183
});
183184
}
184185

185-
private addProperties(xmlDoc: Document) {
186+
private addProperties(xmlDoc: xmldom.Document) {
186187
const propertiesElement = this.addNodeToRoot(xmlDoc, "Properties");
187188
this.addProperty(xmlDoc, propertiesElement, "TypescriptFilepath", "System.String", "Typescript filepath", true);
188189
this.addProperty(xmlDoc, propertiesElement, "Background", "System.Windows.Media.Brush");
@@ -194,7 +195,7 @@ export class DgmlManager {
194195
this.addProperty(xmlDoc, propertiesElement, "Bounds", "System.Windows.Rect");
195196
}
196197

197-
private addProperty(xmlDoc: Document, propertiesElement: Element | null, idValue: string, datatypeValue: string, label: string | undefined = undefined, isReference: boolean | undefined = undefined) {
198+
private addProperty(xmlDoc: xmldom.Document, propertiesElement: xmldom.Element | undefined | null, idValue: string, datatypeValue: string, label: string | undefined = undefined, isReference: boolean | undefined = undefined) {
198199
const propertyElement = xmlDoc.createElement("Property");
199200
propertyElement.setAttribute("Id", idValue);
200201
propertyElement.setAttribute("DataType", datatypeValue);

0 commit comments

Comments
 (0)