From e962ac982322babb92b6a9a72c73e2395d0ac903 Mon Sep 17 00:00:00 2001 From: Ralf Aron Date: Wed, 25 Dec 2024 11:50:05 +0100 Subject: [PATCH] fix: renaming --- package-lock.json | 6 + .../src/app/aas-provider/aas-provider.ts | 4 +- .../aas-provider/aas-resource-scan-factory.ts | 12 +- .../src/app/aas-provider/aas-resource-scan.ts | 2 +- .../src/app/aas-provider/aas-server-scan.ts | 6 +- .../src/app/aas-provider/directory-scan.ts | 6 +- .../src/app/aas-provider/opcua-server-scan.ts | 8 +- .../src/app/live/http/http-subscription.ts | 2 +- .../src/app/live/opcua/opcua-subscription.ts | 2 +- .../aas-api}/aas-api-client-v0.ts | 0 .../aas-api}/aas-api-client-v1.ts | 0 .../aas-api}/aas-api-client-v3.ts | 0 .../aas-api}/aas-api-client.ts | 8 +- .../aas-api/aas-api-package.ts} | 6 +- .../aas-client-factory.ts} | 12 +- .../aas-resource.ts => package/aas-client.ts} | 4 +- .../app/{packages => package}/aas-package.ts | 0 .../app/{packages => package}/aas-reader.ts | 1 + .../app/{packages => package}/aas-writer.ts | 2 +- .../create-json-reader.ts | 110 +- .../create-xml-reader.ts | 70 +- .../file-system/aasx-directory.ts | 4 +- .../file-system/aasx-package.ts | 4 +- .../{packages => package}/json-reader-v2.ts | 0 .../{packages => package}/json-reader-v3.ts | 0 .../{packages => package}/json-writer-v2.ts | 0 .../{packages => package}/json-writer-v3.ts | 0 .../opcua/client-file.ts | 0 .../opcua/opaque-structure-decoder.ts | 0 .../opcua/opcua-client.ts | 4 +- .../opcua/opcua-data-type-dictionary.ts | 0 .../opcua/opcua-package.ts | 0 .../opcua/opcua-reader.ts | 0 .../app/{packages => package}/opcua/opcua.ts | 0 .../{packages => package}/xml-reader-v1.ts | 0 .../{packages => package}/xml-reader-v2.ts | 0 .../{packages => package}/xml-reader-v3.ts | 0 .../{packages => package}/xml-writer-v3.ts | 1138 ++++++++--------- .../src/app/template/template-scan.ts | 6 +- .../src/app/template/template-storage.ts | 6 +- .../test/aas-provider/aas-provider.spec.ts | 4 +- .../test/live/http/http-subscription.spec.ts | 2 +- .../live/opcua/opcua-subscription.spec.ts | 2 +- .../aas-api}/aas-api-client-v0.spec.ts | 4 +- .../aas-api}/aas-api-client-v3.spec.ts | 2 +- .../aas-api/aas-api-package.spec.ts} | 10 +- .../file-system}/aasx-package.spec.ts | 4 +- .../json-reader-v2.spec.ts | 2 +- .../json-reader-v3.spec.ts | 2 +- .../json-writer-v2.spec.ts | 2 +- .../json-writer-v3.spec.ts | 2 +- .../opcua/opcua-client.spec.ts | 2 +- .../opcua/opcua-package.spec.ts | 4 +- .../opcua/opcua-reader.spec.ts | 6 +- .../xml-reader-v1.spec.ts | 2 +- .../xml-reader-v3.spec.ts | 2 +- .../xml-writer-v3.spec.ts | 2 +- 57 files changed, 742 insertions(+), 735 deletions(-) rename projects/aas-server/src/app/{packages/aas-server => package/aas-api}/aas-api-client-v0.ts (100%) rename projects/aas-server/src/app/{packages/aas-server => package/aas-api}/aas-api-client-v1.ts (100%) rename projects/aas-server/src/app/{packages/aas-server => package/aas-api}/aas-api-client-v3.ts (100%) rename projects/aas-server/src/app/{packages/aas-server => package/aas-api}/aas-api-client.ts (95%) rename projects/aas-server/src/app/{packages/aas-server/aas-server-package.ts => package/aas-api/aas-api-package.ts} (94%) rename projects/aas-server/src/app/{packages/aas-resource-factory.ts => package/aas-client-factory.ts} (92%) rename projects/aas-server/src/app/{packages/aas-resource.ts => package/aas-client.ts} (96%) rename projects/aas-server/src/app/{packages => package}/aas-package.ts (100%) rename projects/aas-server/src/app/{packages => package}/aas-reader.ts (95%) rename projects/aas-server/src/app/{packages => package}/aas-writer.ts (88%) rename projects/aas-server/src/app/{packages => package}/create-json-reader.ts (97%) rename projects/aas-server/src/app/{packages => package}/create-xml-reader.ts (97%) rename projects/aas-server/src/app/{packages => package}/file-system/aasx-directory.ts (97%) rename projects/aas-server/src/app/{packages => package}/file-system/aasx-package.ts (98%) rename projects/aas-server/src/app/{packages => package}/json-reader-v2.ts (100%) rename projects/aas-server/src/app/{packages => package}/json-reader-v3.ts (100%) rename projects/aas-server/src/app/{packages => package}/json-writer-v2.ts (100%) rename projects/aas-server/src/app/{packages => package}/json-writer-v3.ts (100%) rename projects/aas-server/src/app/{packages => package}/opcua/client-file.ts (100%) rename projects/aas-server/src/app/{packages => package}/opcua/opaque-structure-decoder.ts (100%) rename projects/aas-server/src/app/{packages => package}/opcua/opcua-client.ts (98%) rename projects/aas-server/src/app/{packages => package}/opcua/opcua-data-type-dictionary.ts (100%) rename projects/aas-server/src/app/{packages => package}/opcua/opcua-package.ts (100%) rename projects/aas-server/src/app/{packages => package}/opcua/opcua-reader.ts (100%) rename projects/aas-server/src/app/{packages => package}/opcua/opcua.ts (100%) rename projects/aas-server/src/app/{packages => package}/xml-reader-v1.ts (100%) rename projects/aas-server/src/app/{packages => package}/xml-reader-v2.ts (100%) rename projects/aas-server/src/app/{packages => package}/xml-reader-v3.ts (100%) rename projects/aas-server/src/app/{packages => package}/xml-writer-v3.ts (97%) rename projects/aas-server/src/test/{packages/aas-server => package/aas-api}/aas-api-client-v0.spec.ts (97%) rename projects/aas-server/src/test/{packages/aas-server => package/aas-api}/aas-api-client-v3.spec.ts (99%) rename projects/aas-server/src/test/{packages/aas-server/aas-server-package.spec.ts => package/aas-api/aas-api-package.spec.ts} (81%) rename projects/aas-server/src/test/{packages/aas-server => package/file-system}/aasx-package.spec.ts (92%) rename projects/aas-server/src/test/{packages => package}/json-reader-v2.spec.ts (93%) rename projects/aas-server/src/test/{packages => package}/json-reader-v3.spec.ts (93%) rename projects/aas-server/src/test/{packages => package}/json-writer-v2.spec.ts (94%) rename projects/aas-server/src/test/{packages => package}/json-writer-v3.spec.ts (94%) rename projects/aas-server/src/test/{packages => package}/opcua/opcua-client.spec.ts (99%) rename projects/aas-server/src/test/{packages => package}/opcua/opcua-package.spec.ts (87%) rename projects/aas-server/src/test/{packages => package}/opcua/opcua-reader.spec.ts (82%) rename projects/aas-server/src/test/{packages => package}/xml-reader-v1.spec.ts (96%) rename projects/aas-server/src/test/{packages => package}/xml-reader-v3.spec.ts (96%) rename projects/aas-server/src/test/{packages => package}/xml-writer-v3.spec.ts (92%) diff --git a/package-lock.json b/package-lock.json index 625005a5..f9d899cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12050,6 +12050,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, "license": "MIT" }, "node_modules/concat-stream": { @@ -12836,6 +12837,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15853,6 +15855,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -27094,6 +27097,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -27674,6 +27678,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -33760,6 +33765,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { diff --git a/projects/aas-server/src/app/aas-provider/aas-provider.ts b/projects/aas-server/src/app/aas-provider/aas-provider.ts index 2a23c44e..dd4760c2 100644 --- a/projects/aas-server/src/app/aas-provider/aas-provider.ts +++ b/projects/aas-server/src/app/aas-provider/aas-provider.ts @@ -34,7 +34,7 @@ import { ScanEndpointData } from './worker-data.js'; import { SocketClient } from '../live/socket-client.js'; import { EmptySubscription } from '../live/empty-subscription.js'; import { SocketSubscription } from '../live/socket-subscription.js'; -import { AASResourceFactory } from '../packages/aas-resource-factory.js'; +import { AASClientFactory } from '../package/aas-client-factory.js'; import { Variable } from '../variable.js'; import { WSServer } from '../ws-server.js'; import { ERRORS } from '../errors.js'; @@ -53,7 +53,7 @@ export class AASProvider { @inject(Variable) private readonly variable: Variable, @inject('Logger') private readonly logger: Logger, @inject(Parallel) private readonly parallel: Parallel, - @inject(AASResourceFactory) private readonly resourceFactory: AASResourceFactory, + @inject(AASClientFactory) private readonly resourceFactory: AASClientFactory, @inject('AASIndex') private readonly index: AASIndex, @inject(TaskHandler) private readonly taskHandler: TaskHandler, ) { diff --git a/projects/aas-server/src/app/aas-provider/aas-resource-scan-factory.ts b/projects/aas-server/src/app/aas-provider/aas-resource-scan-factory.ts index 72728ef4..c4d72dfa 100644 --- a/projects/aas-server/src/app/aas-provider/aas-resource-scan-factory.ts +++ b/projects/aas-server/src/app/aas-provider/aas-resource-scan-factory.ts @@ -13,12 +13,12 @@ import { Logger } from '../logging/logger.js'; import { DirectoryScan } from './directory-scan.js'; import { AASServerScan } from './aas-server-scan.js'; import { OpcuaServerScan } from './opcua-server-scan.js'; -import { OpcuaClient } from '../packages/opcua/opcua-client.js'; -import { AasxDirectory } from '../packages/file-system/aasx-directory.js'; -import { AASApiClient } from '../packages/aas-server/aas-api-client.js'; -import { AASApiClientV3 } from '../packages/aas-server/aas-api-client-v3.js'; -import { AASApiClientV1 } from '../packages/aas-server/aas-api-client-v1.js'; -import { AASApiClientV0 } from '../packages/aas-server/aas-api-client-v0.js'; +import { OpcuaClient } from '../package/opcua/opcua-client.js'; +import { AasxDirectory } from '../package/file-system/aasx-directory.js'; +import { AASApiClient } from '../package/aas-api/aas-api-client.js'; +import { AASApiClientV3 } from '../package/aas-api/aas-api-client-v3.js'; +import { AASApiClientV1 } from '../package/aas-api/aas-api-client-v1.js'; +import { AASApiClientV0 } from '../package/aas-api/aas-api-client-v0.js'; import { FileStorageProvider } from '../file-storage/file-storage-provider.js'; import { HttpClient } from '../http-client.js'; diff --git a/projects/aas-server/src/app/aas-provider/aas-resource-scan.ts b/projects/aas-server/src/app/aas-provider/aas-resource-scan.ts index 84298cbb..cbb5f22e 100644 --- a/projects/aas-server/src/app/aas-provider/aas-resource-scan.ts +++ b/projects/aas-server/src/app/aas-provider/aas-resource-scan.ts @@ -10,7 +10,7 @@ import EventEmitter from 'events'; import { AASDocument, AASEndpoint } from 'aas-core'; import { AASIndex } from '../aas-index/aas-index.js'; import { PagedResult } from '../types/paged-result.js'; -import { AASLabel } from '../packages/aas-server/aas-api-client.js'; +import { AASLabel } from '../package/aas-api/aas-api-client.js'; /** Defines an automate to scan an AAS resource for Asset Administration Shells. */ export abstract class AASResourceScan extends EventEmitter { diff --git a/projects/aas-server/src/app/aas-provider/aas-server-scan.ts b/projects/aas-server/src/app/aas-provider/aas-server-scan.ts index f6a1def5..b391bbcf 100644 --- a/projects/aas-server/src/app/aas-provider/aas-server-scan.ts +++ b/projects/aas-server/src/app/aas-provider/aas-server-scan.ts @@ -8,8 +8,8 @@ import { AASDocument } from 'aas-core'; import { Logger } from '../logging/logger.js'; -import { AASApiClient, AASLabel } from '../packages/aas-server/aas-api-client.js'; -import { AASServerPackage } from '../packages/aas-server/aas-server-package.js'; +import { AASApiClient, AASLabel } from '../package/aas-api/aas-api-client.js'; +import { AASApiPackage } from '../package/aas-api/aas-api-package.js'; import { AASResourceScan } from './aas-resource-scan.js'; import { PagedResult } from '../types/paged-result.js'; @@ -32,7 +32,7 @@ export class AASServerScan extends AASResourceScan { } protected override createDocument(id: AASLabel): Promise { - const aasPackage = new AASServerPackage(this.logger, this.client, id.id, id.idShort); + const aasPackage = new AASApiPackage(this.logger, this.client, id.id, id.idShort); return aasPackage.createDocumentAsync(); } diff --git a/projects/aas-server/src/app/aas-provider/directory-scan.ts b/projects/aas-server/src/app/aas-provider/directory-scan.ts index 9cb9e9bd..cb5b4a57 100644 --- a/projects/aas-server/src/app/aas-provider/directory-scan.ts +++ b/projects/aas-server/src/app/aas-provider/directory-scan.ts @@ -8,11 +8,11 @@ import { AASDocument } from 'aas-core'; import { Logger } from '../logging/logger.js'; -import { AasxPackage } from '../packages/file-system/aasx-package.js'; -import { AasxDirectory } from '../packages/file-system/aasx-directory.js'; +import { AasxPackage } from '../package/file-system/aasx-package.js'; +import { AasxDirectory } from '../package/file-system/aasx-directory.js'; import { AASResourceScan } from './aas-resource-scan.js'; import { PagedResult } from '../types/paged-result.js'; -import { AASLabel } from '../packages/aas-server/aas-api-client.js'; +import { AASLabel } from '../package/aas-api/aas-api-client.js'; export class DirectoryScan extends AASResourceScan { private readonly map = new Map(); diff --git a/projects/aas-server/src/app/aas-provider/opcua-server-scan.ts b/projects/aas-server/src/app/aas-provider/opcua-server-scan.ts index 1f3cb8ed..13f87456 100644 --- a/projects/aas-server/src/app/aas-provider/opcua-server-scan.ts +++ b/projects/aas-server/src/app/aas-provider/opcua-server-scan.ts @@ -9,12 +9,12 @@ import { AttributeIds, BrowseDescriptionLike, QualifiedName, ReferenceDescription } from 'node-opcua'; import { AASDocument, noop } from 'aas-core'; import { Logger } from '../logging/logger.js'; -import { OpcuaDataTypeDictionary } from '../packages/opcua/opcua-data-type-dictionary.js'; -import { OpcuaClient } from '../packages/opcua/opcua-client.js'; -import { OpcuaPackage } from '../packages/opcua/opcua-package.js'; +import { OpcuaDataTypeDictionary } from '../package/opcua/opcua-data-type-dictionary.js'; +import { OpcuaClient } from '../package/opcua/opcua-client.js'; +import { OpcuaPackage } from '../package/opcua/opcua-package.js'; import { AASResourceScan } from './aas-resource-scan.js'; import { PagedResult } from '../types/paged-result.js'; -import { AASLabel } from '../packages/aas-server/aas-api-client.js'; +import { AASLabel } from '../package/aas-api/aas-api-client.js'; export class OpcuaServerScan extends AASResourceScan { private readonly logger: Logger; diff --git a/projects/aas-server/src/app/live/http/http-subscription.ts b/projects/aas-server/src/app/live/http/http-subscription.ts index 53ef92ee..4055d203 100644 --- a/projects/aas-server/src/app/live/http/http-subscription.ts +++ b/projects/aas-server/src/app/live/http/http-subscription.ts @@ -10,7 +10,7 @@ import { aas, changeType, LiveNode, LiveRequest, noop } from 'aas-core'; import { HttpSocketItem } from './http-socket-item.js'; import { Logger } from '../../logging/logger.js'; import { SocketClient } from '../socket-client.js'; -import { AASApiClient } from '../../packages/aas-server/aas-api-client.js'; +import { AASApiClient } from '../../package/aas-api/aas-api-client.js'; import { SocketSubscription } from '../socket-subscription.js'; export class HttpSubscription extends SocketSubscription { diff --git a/projects/aas-server/src/app/live/opcua/opcua-subscription.ts b/projects/aas-server/src/app/live/opcua/opcua-subscription.ts index 6b06a4fd..e909fc54 100644 --- a/projects/aas-server/src/app/live/opcua/opcua-subscription.ts +++ b/projects/aas-server/src/app/live/opcua/opcua-subscription.ts @@ -8,7 +8,7 @@ import { LiveNode } from 'aas-core'; import { OpcuaSocketItem } from './opcua-socket-item.js'; -import { OpcuaClient } from '../../packages/opcua/opcua-client.js'; +import { OpcuaClient } from '../../package/opcua/opcua-client.js'; import { Logger } from '../../logging/logger.js'; import { SocketClient } from '../socket-client.js'; import { SocketSubscription } from '../socket-subscription.js'; diff --git a/projects/aas-server/src/app/packages/aas-server/aas-api-client-v0.ts b/projects/aas-server/src/app/package/aas-api/aas-api-client-v0.ts similarity index 100% rename from projects/aas-server/src/app/packages/aas-server/aas-api-client-v0.ts rename to projects/aas-server/src/app/package/aas-api/aas-api-client-v0.ts diff --git a/projects/aas-server/src/app/packages/aas-server/aas-api-client-v1.ts b/projects/aas-server/src/app/package/aas-api/aas-api-client-v1.ts similarity index 100% rename from projects/aas-server/src/app/packages/aas-server/aas-api-client-v1.ts rename to projects/aas-server/src/app/package/aas-api/aas-api-client-v1.ts diff --git a/projects/aas-server/src/app/packages/aas-server/aas-api-client-v3.ts b/projects/aas-server/src/app/package/aas-api/aas-api-client-v3.ts similarity index 100% rename from projects/aas-server/src/app/packages/aas-server/aas-api-client-v3.ts rename to projects/aas-server/src/app/package/aas-api/aas-api-client-v3.ts diff --git a/projects/aas-server/src/app/packages/aas-server/aas-api-client.ts b/projects/aas-server/src/app/package/aas-api/aas-api-client.ts similarity index 95% rename from projects/aas-server/src/app/packages/aas-server/aas-api-client.ts rename to projects/aas-server/src/app/package/aas-api/aas-api-client.ts index 0edc68e6..7d42562e 100644 --- a/projects/aas-server/src/app/packages/aas-server/aas-api-client.ts +++ b/projects/aas-server/src/app/package/aas-api/aas-api-client.ts @@ -12,8 +12,8 @@ import { Logger } from '../../logging/logger.js'; import { HttpSubscription } from '../../live/http/http-subscription.js'; import { SocketClient } from '../../live/socket-client.js'; import { AASPackage } from '../aas-package.js'; -import { AASResource } from '../aas-resource.js'; -import { AASServerPackage } from './aas-server-package.js'; +import { AASClient } from '../aas-client.js'; +import { AASApiPackage } from './aas-api-package.js'; import { SocketSubscription } from '../../live/socket-subscription.js'; import { PagedResult } from '../../types/paged-result.js'; @@ -25,7 +25,7 @@ interface PropertyValue { export type AASLabel = { id: string; idShort: string }; /** Provides access to an AASX-Server. */ -export abstract class AASApiClient extends AASResource { +export abstract class AASApiClient extends AASClient { private reentry = 0; /** @@ -90,7 +90,7 @@ export abstract class AASApiClient extends AASResource { * @returns A new `AASServerPackage` instance. **/ public override createPackage(...args: string[]): AASPackage { - return new AASServerPackage(this.logger, this, args[0], args[1]); + return new AASApiPackage(this.logger, this, args[0], args[1]); } /** diff --git a/projects/aas-server/src/app/packages/aas-server/aas-server-package.ts b/projects/aas-server/src/app/package/aas-api/aas-api-package.ts similarity index 94% rename from projects/aas-server/src/app/packages/aas-server/aas-server-package.ts rename to projects/aas-server/src/app/package/aas-api/aas-api-package.ts index fcf5627e..10df23c6 100644 --- a/projects/aas-server/src/app/packages/aas-server/aas-server-package.ts +++ b/projects/aas-server/src/app/package/aas-api/aas-api-package.ts @@ -8,12 +8,12 @@ import { AASDocument, diffAsync, aas } from 'aas-core'; import { AASPackage } from '../aas-package.js'; -import { AASResource } from '../aas-resource.js'; +import { AASClient } from '../aas-client.js'; import { Logger } from '../../logging/logger.js'; import { AASApiClient } from './aas-api-client.js'; import { ImageProcessing } from '../../image-processing.js'; -export class AASServerPackage extends AASPackage { +export class AASApiPackage extends AASPackage { private readonly server: AASApiClient; private readonly id: string; private readonly idShort: string; @@ -24,7 +24,7 @@ export class AASServerPackage extends AASPackage { * @param resource The handle. * @param id The identifier of the AAS. */ - public constructor(logger: Logger, resource: AASResource, id: string, idShort: string) { + public constructor(logger: Logger, resource: AASClient, id: string, idShort: string) { super(logger); this.server = resource as AASApiClient; diff --git a/projects/aas-server/src/app/packages/aas-resource-factory.ts b/projects/aas-server/src/app/package/aas-client-factory.ts similarity index 92% rename from projects/aas-server/src/app/packages/aas-resource-factory.ts rename to projects/aas-server/src/app/package/aas-client-factory.ts index fd44b112..64227312 100644 --- a/projects/aas-server/src/app/packages/aas-resource-factory.ts +++ b/projects/aas-server/src/app/package/aas-client-factory.ts @@ -9,18 +9,18 @@ import { inject, singleton } from 'tsyringe'; import { AASEndpoint, ApplicationError } from 'aas-core'; import { Logger } from '../logging/logger.js'; -import { AASResource } from './aas-resource.js'; +import { AASClient } from './aas-client.js'; import { AasxDirectory } from './file-system/aasx-directory.js'; -import { AASApiClientV0 } from './aas-server/aas-api-client-v0.js'; -import { AASApiClientV3 } from './aas-server/aas-api-client-v3.js'; +import { AASApiClientV0 } from './aas-api/aas-api-client-v0.js'; +import { AASApiClientV3 } from './aas-api/aas-api-client-v3.js'; import { OpcuaClient } from './opcua/opcua-client.js'; import { ERRORS } from '../errors.js'; import { FileStorageProvider } from '../file-storage/file-storage-provider.js'; -import { AASApiClientV1 } from './aas-server/aas-api-client-v1.js'; +import { AASApiClientV1 } from './aas-api/aas-api-client-v1.js'; import { HttpClient } from '../http-client.js'; @singleton() -export class AASResourceFactory { +export class AASClientFactory { public constructor( @inject('Logger') private readonly logger: Logger, @inject(FileStorageProvider) private readonly fileStorageProvider: FileStorageProvider, @@ -32,7 +32,7 @@ export class AASResourceFactory { * @param url The URL of the container. * @returns A new instance of . */ - public create(endpoint: AASEndpoint): AASResource { + public create(endpoint: AASEndpoint): AASClient { switch (endpoint.type) { case 'AAS_API': switch (endpoint.version) { diff --git a/projects/aas-server/src/app/packages/aas-resource.ts b/projects/aas-server/src/app/package/aas-client.ts similarity index 96% rename from projects/aas-server/src/app/packages/aas-resource.ts rename to projects/aas-server/src/app/package/aas-client.ts index 4f34b21e..0360b831 100644 --- a/projects/aas-server/src/app/packages/aas-resource.ts +++ b/projects/aas-server/src/app/package/aas-client.ts @@ -12,8 +12,8 @@ import { SocketClient } from '../live/socket-client.js'; import { AASPackage } from './aas-package.js'; import { SocketSubscription } from '../live/socket-subscription.js'; -/** Represents a resource of Asset Administration Shells. */ -export abstract class AASResource { +/** Represents a client of a server that provides Asset Administration Shells. */ +export abstract class AASClient { protected constructor( protected readonly logger: Logger, public readonly endpoint: AASEndpoint, diff --git a/projects/aas-server/src/app/packages/aas-package.ts b/projects/aas-server/src/app/package/aas-package.ts similarity index 100% rename from projects/aas-server/src/app/packages/aas-package.ts rename to projects/aas-server/src/app/package/aas-package.ts diff --git a/projects/aas-server/src/app/packages/aas-reader.ts b/projects/aas-server/src/app/package/aas-reader.ts similarity index 95% rename from projects/aas-server/src/app/packages/aas-reader.ts rename to projects/aas-server/src/app/package/aas-reader.ts index a494247e..12575e6a 100644 --- a/projects/aas-server/src/app/packages/aas-reader.ts +++ b/projects/aas-server/src/app/package/aas-reader.ts @@ -8,6 +8,7 @@ import { aas } from 'aas-core'; +/** Represents a reader of an Asset Administration Shell. */ export abstract class AASReader { public abstract readEnvironment(): aas.Environment; diff --git a/projects/aas-server/src/app/packages/aas-writer.ts b/projects/aas-server/src/app/package/aas-writer.ts similarity index 88% rename from projects/aas-server/src/app/packages/aas-writer.ts rename to projects/aas-server/src/app/package/aas-writer.ts index 75a4d948..f286e9e3 100644 --- a/projects/aas-server/src/app/packages/aas-writer.ts +++ b/projects/aas-server/src/app/package/aas-writer.ts @@ -8,7 +8,7 @@ import { aas } from 'aas-core'; -/** */ +/** Represents a writer of an Asset Administration Shell. */ export abstract class AASWriter { public abstract write(env: aas.Environment): string; } diff --git a/projects/aas-server/src/app/packages/create-json-reader.ts b/projects/aas-server/src/app/package/create-json-reader.ts similarity index 97% rename from projects/aas-server/src/app/packages/create-json-reader.ts rename to projects/aas-server/src/app/package/create-json-reader.ts index 3ac154ce..d01e8e19 100644 --- a/projects/aas-server/src/app/packages/create-json-reader.ts +++ b/projects/aas-server/src/app/package/create-json-reader.ts @@ -1,55 +1,55 @@ -/****************************************************************************** - * - * Copyright (c) 2019-2024 Fraunhofer IOSB-INA Lemgo, - * eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - * zur Foerderung der angewandten Forschung e.V. - * - *****************************************************************************/ - -import { aas } from 'aas-core'; -import { AASReader } from './aas-reader.js'; -import { JsonReaderV2 } from './json-reader-v2.js'; -import { JsonReaderV3 } from './json-reader-v3.js'; -import * as aasV2 from '../types/aas-v2.js'; - -export function createJsonReader(data: object): AASReader { - if (isAssetAdministrationShellEnvironment(data)) { - return new JsonReaderV2(data); - } - - if (isEnvironment(data)) { - return new JsonReaderV3(data); - } - - if (isSubmodelElement(data)) { - return new JsonReaderV3(); - } - - if (isSubmodelElementV2(data)) { - return new JsonReaderV2(); - } - - throw new Error('Not implemented.'); - - function isAssetAdministrationShellEnvironment(value: unknown): value is aasV2.AssetAdministrationShellEnvironment { - const env = value as aasV2.AssetAdministrationShellEnvironment; - return Array.isArray(env.assets); - } - - function isEnvironment(value: unknown): value is aas.Environment { - const env = value as aas.Environment; - return ( - Array.isArray(env.assetAdministrationShells) && - Array.isArray(env.submodels) && - Array.isArray(env.conceptDescriptions) - ); - } - - function isSubmodelElement(value: unknown): value is aas.Referable { - return typeof (value as aas.Referable).modelType === 'string'; - } - - function isSubmodelElementV2(value: unknown): value is aasV2.Referable { - return typeof (value as aasV2.Referable).modelType?.name === 'string'; - } -} +/****************************************************************************** + * + * Copyright (c) 2019-2024 Fraunhofer IOSB-INA Lemgo, + * eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft + * zur Foerderung der angewandten Forschung e.V. + * + *****************************************************************************/ + +import { aas } from 'aas-core'; +import { AASReader } from './aas-reader.js'; +import { JsonReaderV2 } from './json-reader-v2.js'; +import { JsonReaderV3 } from './json-reader-v3.js'; +import * as aasV2 from '../types/aas-v2.js'; + +export function createJsonReader(data: object): AASReader { + if (isAssetAdministrationShellEnvironment(data)) { + return new JsonReaderV2(data); + } + + if (isEnvironment(data)) { + return new JsonReaderV3(data); + } + + if (isSubmodelElement(data)) { + return new JsonReaderV3(); + } + + if (isSubmodelElementV2(data)) { + return new JsonReaderV2(); + } + + throw new Error('Not implemented.'); + + function isAssetAdministrationShellEnvironment(value: unknown): value is aasV2.AssetAdministrationShellEnvironment { + const env = value as aasV2.AssetAdministrationShellEnvironment; + return Array.isArray(env.assets); + } + + function isEnvironment(value: unknown): value is aas.Environment { + const env = value as aas.Environment; + return ( + Array.isArray(env.assetAdministrationShells) && + Array.isArray(env.submodels) && + Array.isArray(env.conceptDescriptions) + ); + } + + function isSubmodelElement(value: unknown): value is aas.Referable { + return typeof (value as aas.Referable).modelType === 'string'; + } + + function isSubmodelElementV2(value: unknown): value is aasV2.Referable { + return typeof (value as aasV2.Referable).modelType?.name === 'string'; + } +} diff --git a/projects/aas-server/src/app/packages/create-xml-reader.ts b/projects/aas-server/src/app/package/create-xml-reader.ts similarity index 97% rename from projects/aas-server/src/app/packages/create-xml-reader.ts rename to projects/aas-server/src/app/package/create-xml-reader.ts index 2f2d53a7..264f495a 100644 --- a/projects/aas-server/src/app/packages/create-xml-reader.ts +++ b/projects/aas-server/src/app/package/create-xml-reader.ts @@ -1,35 +1,35 @@ -/****************************************************************************** - * - * Copyright (c) 2019-2024 Fraunhofer IOSB-INA Lemgo, - * eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - * zur Foerderung der angewandten Forschung e.V. - * - *****************************************************************************/ - -import { DOMParser } from '@xmldom/xmldom'; -import { AASReader } from './aas-reader.js'; -import { HTMLDocumentElement } from '../types/html-document-element.js'; -import { XmlReaderV1 } from './xml-reader-v1.js'; -import { XmlReaderV2 } from './xml-reader-v2.js'; -import { XmlReaderV3 } from './xml-reader-v3.js'; - -export function createXmlReader(xml: string): AASReader { - const document = new DOMParser().parseFromString(xml); - const nsMap = (document.documentElement as HTMLDocumentElement)._nsMap ?? {}; - for (const prefix in nsMap) { - const uri = nsMap[prefix]; - if (uri === 'http://www.admin-shell.io/aas/1/0') { - return new XmlReaderV1(document); - } - - if (uri === 'http://www.admin-shell.io/aas/2/0') { - return new XmlReaderV2(document); - } - - if (uri === 'https://admin-shell.io/aas/3/0') { - return new XmlReaderV3(document); - } - } - - throw new Error('Invalid operation.'); -} +/****************************************************************************** + * + * Copyright (c) 2019-2024 Fraunhofer IOSB-INA Lemgo, + * eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft + * zur Foerderung der angewandten Forschung e.V. + * + *****************************************************************************/ + +import { DOMParser } from '@xmldom/xmldom'; +import { AASReader } from './aas-reader.js'; +import { HTMLDocumentElement } from '../types/html-document-element.js'; +import { XmlReaderV1 } from './xml-reader-v1.js'; +import { XmlReaderV2 } from './xml-reader-v2.js'; +import { XmlReaderV3 } from './xml-reader-v3.js'; + +export function createXmlReader(xml: string): AASReader { + const document = new DOMParser().parseFromString(xml); + const nsMap = (document.documentElement as HTMLDocumentElement)._nsMap ?? {}; + for (const prefix in nsMap) { + const uri = nsMap[prefix]; + if (uri === 'http://www.admin-shell.io/aas/1/0') { + return new XmlReaderV1(document); + } + + if (uri === 'http://www.admin-shell.io/aas/2/0') { + return new XmlReaderV2(document); + } + + if (uri === 'https://admin-shell.io/aas/3/0') { + return new XmlReaderV3(document); + } + } + + throw new Error('Invalid operation.'); +} diff --git a/projects/aas-server/src/app/packages/file-system/aasx-directory.ts b/projects/aas-server/src/app/package/file-system/aasx-directory.ts similarity index 97% rename from projects/aas-server/src/app/packages/file-system/aasx-directory.ts rename to projects/aas-server/src/app/package/file-system/aasx-directory.ts index 27f203e7..8cc0196a 100644 --- a/projects/aas-server/src/app/packages/file-system/aasx-directory.ts +++ b/projects/aas-server/src/app/package/file-system/aasx-directory.ts @@ -13,12 +13,12 @@ import { ERRORS } from '../../errors.js'; import { FileStorage } from '../../file-storage/file-storage.js'; import { Logger } from '../../logging/logger.js'; import { AASPackage } from '../aas-package.js'; -import { AASResource } from '../aas-resource.js'; +import { AASClient } from '../aas-client.js'; import { AasxPackage } from './aasx-package.js'; import { SocketSubscription } from '../../live/socket-subscription.js'; import { PagedResult } from '../../types/paged-result.js'; -export class AasxDirectory extends AASResource { +export class AasxDirectory extends AASClient { private readonly root: string; private reentry = 0; diff --git a/projects/aas-server/src/app/packages/file-system/aasx-package.ts b/projects/aas-server/src/app/package/file-system/aasx-package.ts similarity index 98% rename from projects/aas-server/src/app/packages/file-system/aasx-package.ts rename to projects/aas-server/src/app/package/file-system/aasx-package.ts index 47db8c69..226cc7b5 100644 --- a/projects/aas-server/src/app/packages/file-system/aasx-package.ts +++ b/projects/aas-server/src/app/package/file-system/aasx-package.ts @@ -15,7 +15,7 @@ import { AASDocument, aas } from 'aas-core'; import { AasxDirectory } from './aasx-directory.js'; import { AASPackage } from '../aas-package.js'; -import { AASResource } from '../aas-resource.js'; +import { AASClient } from '../aas-client.js'; import { Logger } from '../../logging/logger.js'; import { AASReader } from '../aas-reader.js'; import { ImageProcessing } from '../../image-processing.js'; @@ -29,7 +29,7 @@ export class AasxPackage extends AASPackage { private readonly zip: Promise; private originName: string | null = null; - public constructor(logger: Logger, source: AASResource, file: string) { + public constructor(logger: Logger, source: AASClient, file: string) { super(logger); this.source = source as AasxDirectory; diff --git a/projects/aas-server/src/app/packages/json-reader-v2.ts b/projects/aas-server/src/app/package/json-reader-v2.ts similarity index 100% rename from projects/aas-server/src/app/packages/json-reader-v2.ts rename to projects/aas-server/src/app/package/json-reader-v2.ts diff --git a/projects/aas-server/src/app/packages/json-reader-v3.ts b/projects/aas-server/src/app/package/json-reader-v3.ts similarity index 100% rename from projects/aas-server/src/app/packages/json-reader-v3.ts rename to projects/aas-server/src/app/package/json-reader-v3.ts diff --git a/projects/aas-server/src/app/packages/json-writer-v2.ts b/projects/aas-server/src/app/package/json-writer-v2.ts similarity index 100% rename from projects/aas-server/src/app/packages/json-writer-v2.ts rename to projects/aas-server/src/app/package/json-writer-v2.ts diff --git a/projects/aas-server/src/app/packages/json-writer-v3.ts b/projects/aas-server/src/app/package/json-writer-v3.ts similarity index 100% rename from projects/aas-server/src/app/packages/json-writer-v3.ts rename to projects/aas-server/src/app/package/json-writer-v3.ts diff --git a/projects/aas-server/src/app/packages/opcua/client-file.ts b/projects/aas-server/src/app/package/opcua/client-file.ts similarity index 100% rename from projects/aas-server/src/app/packages/opcua/client-file.ts rename to projects/aas-server/src/app/package/opcua/client-file.ts diff --git a/projects/aas-server/src/app/packages/opcua/opaque-structure-decoder.ts b/projects/aas-server/src/app/package/opcua/opaque-structure-decoder.ts similarity index 100% rename from projects/aas-server/src/app/packages/opcua/opaque-structure-decoder.ts rename to projects/aas-server/src/app/package/opcua/opaque-structure-decoder.ts diff --git a/projects/aas-server/src/app/packages/opcua/opcua-client.ts b/projects/aas-server/src/app/package/opcua/opcua-client.ts similarity index 98% rename from projects/aas-server/src/app/packages/opcua/opcua-client.ts rename to projects/aas-server/src/app/package/opcua/opcua-client.ts index e9b00c7a..1c479f62 100644 --- a/projects/aas-server/src/app/packages/opcua/opcua-client.ts +++ b/projects/aas-server/src/app/package/opcua/opcua-client.ts @@ -13,7 +13,7 @@ import { OpcuaSubscription } from '../../live/opcua/opcua-subscription.js'; import { SocketClient } from '../../live/socket-client.js'; import { SocketSubscription } from '../../live/socket-subscription.js'; import { AASPackage } from '../aas-package.js'; -import { AASResource } from '../aas-resource.js'; +import { AASClient } from '../aas-client.js'; import { OpcuaPackage } from './opcua-package.js'; import { ClientSession, @@ -29,7 +29,7 @@ import { coerceNodeId, } from 'node-opcua'; -export class OpcuaClient extends AASResource { +export class OpcuaClient extends AASClient { private readonly options: OPCUAClientOptions; private client: OPCUAClient | null = null; private session: ClientSession | null = null; diff --git a/projects/aas-server/src/app/packages/opcua/opcua-data-type-dictionary.ts b/projects/aas-server/src/app/package/opcua/opcua-data-type-dictionary.ts similarity index 100% rename from projects/aas-server/src/app/packages/opcua/opcua-data-type-dictionary.ts rename to projects/aas-server/src/app/package/opcua/opcua-data-type-dictionary.ts diff --git a/projects/aas-server/src/app/packages/opcua/opcua-package.ts b/projects/aas-server/src/app/package/opcua/opcua-package.ts similarity index 100% rename from projects/aas-server/src/app/packages/opcua/opcua-package.ts rename to projects/aas-server/src/app/package/opcua/opcua-package.ts diff --git a/projects/aas-server/src/app/packages/opcua/opcua-reader.ts b/projects/aas-server/src/app/package/opcua/opcua-reader.ts similarity index 100% rename from projects/aas-server/src/app/packages/opcua/opcua-reader.ts rename to projects/aas-server/src/app/package/opcua/opcua-reader.ts diff --git a/projects/aas-server/src/app/packages/opcua/opcua.ts b/projects/aas-server/src/app/package/opcua/opcua.ts similarity index 100% rename from projects/aas-server/src/app/packages/opcua/opcua.ts rename to projects/aas-server/src/app/package/opcua/opcua.ts diff --git a/projects/aas-server/src/app/packages/xml-reader-v1.ts b/projects/aas-server/src/app/package/xml-reader-v1.ts similarity index 100% rename from projects/aas-server/src/app/packages/xml-reader-v1.ts rename to projects/aas-server/src/app/package/xml-reader-v1.ts diff --git a/projects/aas-server/src/app/packages/xml-reader-v2.ts b/projects/aas-server/src/app/package/xml-reader-v2.ts similarity index 100% rename from projects/aas-server/src/app/packages/xml-reader-v2.ts rename to projects/aas-server/src/app/package/xml-reader-v2.ts diff --git a/projects/aas-server/src/app/packages/xml-reader-v3.ts b/projects/aas-server/src/app/package/xml-reader-v3.ts similarity index 100% rename from projects/aas-server/src/app/packages/xml-reader-v3.ts rename to projects/aas-server/src/app/package/xml-reader-v3.ts diff --git a/projects/aas-server/src/app/packages/xml-writer-v3.ts b/projects/aas-server/src/app/package/xml-writer-v3.ts similarity index 97% rename from projects/aas-server/src/app/packages/xml-writer-v3.ts rename to projects/aas-server/src/app/package/xml-writer-v3.ts index b987ffc2..f5aa89a3 100644 --- a/projects/aas-server/src/app/packages/xml-writer-v3.ts +++ b/projects/aas-server/src/app/package/xml-writer-v3.ts @@ -1,569 +1,569 @@ -/****************************************************************************** - * - * Copyright (c) 2019-2024 Fraunhofer IOSB-INA Lemgo, - * eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - * zur Foerderung der angewandten Forschung e.V. - * - *****************************************************************************/ - -import { aas, convertToString } from 'aas-core'; -import camelCase from 'lodash-es/camelCase.js'; -import { DOMImplementation, XMLSerializer } from '@xmldom/xmldom'; -import { AASWriter } from './aas-writer.js'; - -export class XmlWriterV3 extends AASWriter { - private readonly document: Document; - - public constructor() { - super(); - - this.document = new DOMImplementation().createDocument('https://admin-shell.io/aas/3/0', null, null); - } - - public override write(env: aas.Environment): string { - const envNode = this.appendChild(this.document, 'environment'); - const xmlns = this.document.createAttribute('xmlns'); - xmlns.value = 'https://admin-shell.io/aas/3/0'; - envNode.attributes.setNamedItem(xmlns); - - const shellsNode = this.appendChild(envNode, 'assetAdministrationShells'); - for (const aas of env.assetAdministrationShells) { - this.writeAssetAdministrationShell(aas, this.appendChild(shellsNode, 'assetAdministrationShell')); - } - - const submodelsNode = this.appendChild(envNode, 'submodels'); - for (const submodel of env.submodels) { - this.writeSubmodel(submodel, this.appendChild(submodelsNode, 'submodel')); - } - - const conceptDescriptionsNode = this.appendChild(envNode, 'conceptDescriptions'); - for (const conceptDescription of env.conceptDescriptions) { - this.writeConceptDescription( - conceptDescription, - this.appendChild(conceptDescriptionsNode, 'conceptDescription'), - ); - } - - this.document; - - return new XMLSerializer().serializeToString(this.document); - } - - private writeKey(key: aas.Key, node: Node): void { - this.writeTextNode(node, 'type', key.type); - this.writeTextNode(node, 'value', key.value); - } - - private writeReference(reference: aas.Reference, node: Node): void { - this.writeTextNode(node, 'type', reference.type); - if (reference.referredSemanticId) { - this.writeReference(reference.referredSemanticId, this.appendChild(node, 'referredSemanticId')); - } - - const keysElement = this.appendChild(node, 'keys'); - for (const key of reference.keys) { - this.writeKey(key, this.appendChild(keysElement, 'key')); - } - } - - private writeExtension(extension: aas.Extension, node: Node): void { - this.writeTextNode(node, 'name', extension.name); - - if (extension.refersTo) { - extension.refersTo.forEach(item => this.writeReference(item, this.appendChild(node, 'refersTo'))); - } - } - - private writeHasExtension(hasExtensions: aas.HasExtensions | undefined, node: Node): void { - if (!hasExtensions?.extensions) return; - - const extensions = this.appendChild(node, 'extensions'); - for (const extension of hasExtensions.extensions) { - this.writeExtension(extension, this.appendChild(extensions, 'extension')); - } - } - - private writeLangString(langString: aas.LangString, node: Node): void { - this.writeTextNode(node, 'language', langString.language); - this.writeTextNode(node, 'text', langString.text); - } - - private writeLangStrings(langStrings: aas.LangString[] | undefined, node: Node, localName: string): void { - if (!langStrings) return; - - for (const langString of langStrings) { - this.writeLangString(langString, this.appendChild(node, localName)); - } - } - - private writeReferable(referable: aas.Referable, node: Node): void { - this.writeHasExtension(referable, node); - this.writeTextNode(node, 'idShort', referable.idShort); - this.writeTextNode(node, 'category', referable.category); - - if (referable.displayName) { - this.writeLangStrings(referable.displayName, this.appendChild(node, 'displayName'), 'langStringNameType'); - } - - if (referable.description) { - this.writeLangStrings(referable.description, this.appendChild(node, 'description'), 'langStringTextType'); - } - } - - private writeValueReferencePair(pair: aas.ValueReferencePair, node: Node): void { - this.writeTextNode(node, 'value', pair.value); - this.writeReference(pair.valueId, this.appendChild(node, 'valueId')); - } - - private writeDataSpecificationIec61360(content: aas.DataSpecificationIec61360, node: Node): void { - this.writeLangStrings( - content.preferredName, - this.appendChild(node, 'preferredName'), - 'langStringPreferredNameTypeIec61360', - ); - - if (content.shortName) { - this.writeLangStrings( - content.shortName, - this.appendChild(node, 'shortName'), - 'langStringShortNameTypeIec61360', - ); - } - - this.writeTextNode(node, 'unit', content.unit); - - if (content.unitId) { - this.writeReference(content.unitId, this.appendChild(node, 'unitId')); - } - - this.writeTextNode(node, 'sourceOfDefinition', content.sourceOfDefinition); - this.writeTextNode(node, 'symbol', content.symbol); - this.writeTextNode(node, 'dataType', content.dataType); - - if (content.definition) { - this.writeLangStrings( - content.definition, - this.appendChild(node, 'definition'), - 'langStringDefinitionTypeIec61360', - ); - } - - if (content.valueList) { - const listNode = this.appendChild(node, 'valueList'); - const pairsNode = this.appendChild(listNode, 'valueReferencePairs'); - for (const valueReferencePair of content.valueList.valueReferencePairs) { - this.writeValueReferencePair(valueReferencePair, this.appendChild(pairsNode, 'valueReferencePair')); - } - } - - if (content.valueFormat) { - this.writeTextNode(node, 'valueFormat', content.valueFormat); - } - - if (content.value) { - this.writeTextNode(node, 'value', content.value); - } - - if (content.levelType) { - const levelType = this.appendChild(node, 'levelType'); - this.writeTextNode(levelType, 'min', convertToString(content.levelType.min)); - this.writeTextNode(levelType, 'max', convertToString(content.levelType.max)); - this.writeTextNode(levelType, 'nom', convertToString(content.levelType.nom)); - this.writeTextNode(levelType, 'typ', convertToString(content.levelType.typ)); - } - } - - private writeEmbeddedDataSpecification(embeddedDataSpecification: aas.EmbeddedDataSpecification, node: Node): void { - this.writeReference(embeddedDataSpecification.dataSpecification, this.appendChild(node, 'dataSpecification')); - const contentNode = this.appendChild(node, 'dataSpecificationContent'); - const content = embeddedDataSpecification.dataSpecificationContent; - if (content.modelType === 'DataSpecificationIEC61360') { - this.writeDataSpecificationIec61360( - content as aas.DataSpecificationIec61360, - this.appendChild(contentNode, 'dataSpecificationIec61360'), - ); - } - } - - private writeHasDataSpecification(hasDataSpecification: aas.HasDataSpecification, node: Node): void { - if (hasDataSpecification.embeddedDataSpecifications) { - const specsNode = this.appendChild(node, 'embeddedDataSpecifications'); - for (const embeddedDataSpecification of hasDataSpecification.embeddedDataSpecifications) { - this.writeEmbeddedDataSpecification( - embeddedDataSpecification, - this.appendChild(specsNode, 'embeddedDataSpecification'), - ); - } - } - } - - private writeAdministrativeInformation(info: aas.AdministrativeInformation, node: Node): void { - this.writeHasDataSpecification(info, node); - } - - private writeIdentifiable(identifiable: aas.Identifiable, node: Node): void { - this.writeReferable(identifiable, node); - this.writeTextNode(node, 'id', identifiable.id); - if (identifiable.administration) { - this.writeAdministrativeInformation(identifiable.administration, this.appendChild(node, 'administration')); - } - } - - private writeHasSemantic(hasSemantic: aas.HasSemantics, node: Node): void { - if (hasSemantic.semanticId) { - this.writeReference(hasSemantic.semanticId, this.appendChild(node, 'semanticId')); - } - - if (hasSemantic.supplementalSemanticIds) { - const child = this.appendChild(node, 'supplementalSemanticIds'); - hasSemantic.supplementalSemanticIds.forEach(item => - this.writeReference(item, this.appendChild(child, 'reference')), - ); - } - } - - private writeHasKind(hasKind: aas.HasKind, node: Node): void { - this.writeTextNode(node, 'kind', hasKind.kind); - } - - private writeQualifier(qualifier: aas.Qualifier, node: Node): void { - this.writeHasSemantic(qualifier, node); - this.writeTextNode(node, 'kind', qualifier.kind); - this.writeTextNode(node, 'type', qualifier.type); - this.writeTextNode(node, 'value', qualifier.value); - this.writeTextNode(node, 'valueType', qualifier.valueType); - - if (qualifier.valueId) { - this.writeReference(qualifier.valueId, this.appendChild(node, 'valueId')); - } - } - - private writeQualifiable(qualifiable: aas.Qualifiable, node: Node): void { - if (qualifiable.qualifiers) { - const qualifiersNode = this.appendChild(node, 'qualifiers'); - for (const qualifier of qualifiable.qualifiers) { - this.writeQualifier(qualifier, this.appendChild(qualifiersNode, 'qualifier')); - } - } - } - - private writeSpecificAssetId(specificAssetId: aas.SpecificAssetId, node: Node): void { - this.writeHasSemantic(specificAssetId, node); - this.writeTextNode(node, 'name', specificAssetId.name); - this.writeTextNode(node, 'value', specificAssetId.value); - - if (specificAssetId.externalSubjectId) { - this.writeReference(specificAssetId.externalSubjectId, this.appendChild(node, 'externalSubjectId')); - } - } - - private writeResource(resource: aas.Resource, node: Node): void { - this.writeTextNode(node, 'contentType', resource.contentType); - this.writeTextNode(node, 'path', resource.path); - } - - private writeAssetInformation(information: aas.AssetInformation, node: Node): void { - this.writeTextNode(node, 'assetKind', information.assetKind); - this.writeTextNode(node, 'assetType', information.assetType); - this.writeTextNode(node, 'globalAssetId', information.globalAssetId); - - if (information.specificAssetIds) { - const nodes = this.appendChild(node, 'specificAssetIds'); - for (const specificAssetId of information.specificAssetIds) { - this.writeSpecificAssetId(specificAssetId, this.appendChild(nodes, 'specificAssetId')); - } - } - - if (information.defaultThumbnail) { - this.writeResource(information.defaultThumbnail, this.appendChild(node, 'defaultThumbnail')); - } - } - - private writeAssetAdministrationShell(aas: aas.AssetAdministrationShell, node: Node): void { - this.writeIdentifiable(aas, node); - this.writeHasDataSpecification(aas, node); - - if (aas.derivedFrom) { - this.writeReference(aas.derivedFrom, this.appendChild(node, 'derivedFrom')); - } - - this.writeAssetInformation(aas.assetInformation, this.appendChild(node, 'assetInformation')); - - if (aas.submodels) { - const submodelsNode = this.appendChild(node, 'submodels'); - for (const submodel of aas.submodels) { - this.writeReference(submodel, this.appendChild(submodelsNode, 'reference')); - } - } - } - - private writeSubmodelElement(submodelElement: aas.SubmodelElement, node: Node): void { - this.writeReferable(submodelElement, node); - this.writeHasSemantic(submodelElement, node); - this.writeQualifiable(submodelElement, node); - this.writeHasDataSpecification(submodelElement, node); - - switch (submodelElement.modelType) { - case 'AnnotatedRelationshipElement': - this.writeAnnotatedRelationshipElement(submodelElement as aas.AnnotatedRelationshipElement, node); - break; - case 'BasicEventElement': - this.writeBasicEventElement(submodelElement as aas.BasicEventElement, node); - break; - case 'Blob': - this.writeBlob(submodelElement as aas.Blob, node); - break; - case 'Capability': - this.writeCapability(submodelElement as aas.Capability, node); - break; - case 'Entity': - this.writeEntity(submodelElement as aas.Entity, node); - break; - case 'File': - this.writeFile(submodelElement as aas.File, node); - break; - case 'MultiLanguageProperty': - this.writeMultiLanguageProperty(submodelElement as aas.MultiLanguageProperty, node); - break; - case 'Operation': - this.writeOperation(submodelElement as aas.Operation, node); - break; - case 'Property': - this.writeProperty(submodelElement as aas.Property, node); - break; - case 'Range': - this.writeRange(submodelElement as aas.Range, node); - break; - case 'ReferenceElement': - this.writeReferenceElement(submodelElement as aas.ReferenceElement, node); - break; - case 'RelationshipElement': - this.writeRelationshipElement(submodelElement as aas.RelationshipElement, node); - break; - case 'SubmodelElementCollection': - this.writeSubmodelElementCollection(submodelElement as aas.SubmodelElementCollection, node); - break; - case 'SubmodelElementList': - this.writeSubmodelElementList(submodelElement as aas.SubmodelElementList, node); - break; - } - } - - private writeDataElement(dataElement: aas.DataElement, node: Node): void { - this.writeReferable(dataElement, node); - this.writeHasSemantic(dataElement, node); - this.writeQualifiable(dataElement, node); - this.writeHasDataSpecification(dataElement, node); - - switch (dataElement.modelType) { - case 'Blob': - this.writeBlob(dataElement as aas.Blob, node); - break; - case 'File': - this.writeFile(dataElement as aas.File, node); - break; - case 'MultiLanguageProperty': - this.writeMultiLanguageProperty(dataElement as aas.MultiLanguageProperty, node); - break; - case 'Property': - this.writeProperty(dataElement as aas.Property, node); - break; - case 'Range': - this.writeRange(dataElement as aas.Range, node); - break; - case 'ReferenceElement': - this.writeReferenceElement(dataElement as aas.ReferenceElement, node); - break; - } - } - - private writeAnnotatedRelationshipElement(relationship: aas.AnnotatedRelationshipElement, node: Node) { - this.writeRelationshipElement(relationship, node); - - if (relationship.annotations) { - const annotationsNode = this.appendChild(node, 'annotations'); - for (const annotation of relationship.annotations) { - this.writeDataElement(annotation, this.appendChild(annotationsNode, camelCase(annotation.modelType))); - } - } - } - - private writeBasicEventElement(event: aas.BasicEventElement, node: Node) { - this.writeReference(event.observed, this.appendChild(node, 'observed')); - this.writeTextNode(node, 'direction', event.direction); - this.writeTextNode(node, 'state', event.state); - this.writeTextNode(node, 'messageTopic', event.messageTopic); - - if (event.messageBroker) { - this.writeReference(event.messageBroker, this.appendChild(node, 'messageBroker')); - } - - this.writeTextNode(node, 'lastUpdate', event.lastUpdate); - this.writeTextNode(node, 'minInterval', event.minInterval); - this.writeTextNode(node, 'maxInterval', event.maxInterval); - } - - private writeBlob(blob: aas.Blob, node: Node) { - this.writeTextNode(node, 'contentType', blob.contentType); - this.writeTextNode(node, 'value', blob.value); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function - private writeCapability(capability: aas.Capability, node: Node) {} - - private writeEntity(entity: aas.Entity, node: Node) { - this.writeTextNode(node, 'entityType', entity.entityType); - this.writeTextNode(node, 'globalAssetId', entity.globalAssetId); - - if (entity.specificAssetIds) { - const child = this.appendChild(node, 'specificAssetIds'); - entity.specificAssetIds.forEach(item => - this.writeSpecificAssetId(item, this.appendChild(child, 'specificAssetId')), - ); - } - - if (entity.statements) { - const statementsNode = this.appendChild(node, 'statements'); - for (const statement of entity.statements) { - this.writeSubmodelElement(statement, this.appendChild(statementsNode, camelCase(statement.modelType))); - } - } - } - - private writeFile(file: aas.File, node: Node) { - this.writeTextNode(node, 'contentType', file.contentType); - this.writeTextNode(node, 'value', file.value); - } - - private writeMultiLanguageProperty(property: aas.MultiLanguageProperty, node: Node) { - const valueNode = this.appendChild(node, 'value'); - this.writeLangStrings(property.value, valueNode, 'langStringTextType'); - - if (property.valueId) { - this.writeReference(property.valueId, this.appendChild(node, 'valueId')); - } - } - - private writeOperationVariable(variable: aas.OperationVariable, node: Node): void { - const valueNode = this.appendChild(node, 'value'); - this.writeSubmodelElement(variable.value, valueNode); - } - - private writeOperation(operation: aas.Operation, node: Node) { - if (operation.inputVariables) { - const variablesNode = this.appendChild(node, 'inputVariables'); - for (const variable of operation.inputVariables) { - this.writeOperationVariable(variable, this.appendChild(variablesNode, 'operationVariable')); - } - } - - if (operation.inoutputVariables) { - const variablesNode = this.appendChild(node, 'inoutputVariables'); - for (const variable of operation.inoutputVariables) { - this.writeOperationVariable(variable, this.appendChild(variablesNode, 'operationVariable')); - } - } - - if (operation.outputVariables) { - const variablesNode = this.appendChild(node, 'outputVariables'); - for (const variable of operation.outputVariables) { - this.writeOperationVariable(variable, this.appendChild(variablesNode, 'operationVariable')); - } - } - } - - private writeProperty(property: aas.Property, node: Node) { - this.writeTextNode(node, 'valueType', property.valueType); - this.writeTextNode(node, 'value', property.value); - - if (property.valueId) { - this.writeReference(property.valueId, this.appendChild(node, 'valueId')); - } - } - - private writeRange(range: aas.Range, node: Node) { - this.writeTextNode(node, 'valueType', range.valueType); - this.writeTextNode(node, 'min', range.min); - this.writeTextNode(node, 'max', range.max); - } - - private writeReferenceElement(reference: aas.ReferenceElement, node: Node) { - if (reference.value) { - this.writeReference(reference.value, this.appendChild(node, 'value')); - } - } - - private writeRelationshipElement(relationship: aas.RelationshipElement, node: Node) { - this.writeReference(relationship.first, this.appendChild(node, 'first')); - this.writeReference(relationship.second, this.appendChild(node, 'second')); - } - - private writeSubmodelElementCollection(collection: aas.SubmodelElementCollection, node: Node) { - if (collection.value) { - const valueNode = this.appendChild(node, 'value'); - for (const value of collection.value) { - const elementNode = this.appendChild(valueNode, camelCase(value.modelType)); - this.writeSubmodelElement(value, elementNode); - } - } - } - - private writeSubmodelElementList(list: aas.SubmodelElementList, node: Node) { - if (typeof list.orderRelevant === 'boolean') { - this.writeTextNode(node, 'orderRelevant', list.orderRelevant ? 'true' : 'false'); - } - - this.writeTextNode(node, 'typeValueListElement', list.typeValueListElement); - this.writeTextNode(node, '', list.valueTypeListElement); - - if (list.semanticIdListElement) { - this.writeReference(list.semanticIdListElement, this.appendChild(node, 'semanticIdListElement')); - } - - if (list.value) { - const valueNode = this.appendChild(node, 'value'); - for (const value of list.value) { - const elementNode = this.appendChild(valueNode, camelCase(value.modelType)); - this.writeSubmodelElement(value, elementNode); - } - } - } - - private writeSubmodel(submodel: aas.Submodel, node: Node): void { - this.writeIdentifiable(submodel, node); - this.writeHasKind(submodel, node); - this.writeHasSemantic(submodel, node); - this.writeQualifiable(submodel, node); - this.writeHasDataSpecification(submodel, node); - - if (submodel.submodelElements) { - const elementsNode = this.appendChild(node, 'submodelElements'); - for (const submodelElement of submodel.submodelElements) { - const elementNode = this.appendChild(elementsNode, camelCase(submodelElement.modelType)); - this.writeSubmodelElement(submodelElement, elementNode); - } - } - } - - private writeConceptDescription(conceptDescription: aas.ConceptDescription, node: Node): void { - this.writeIdentifiable(conceptDescription, node); - this.writeHasDataSpecification(conceptDescription, node); - - if (conceptDescription.isCaseOf) { - const isCaseOfNode = this.appendChild(node, 'isCaseOfNode'); - for (const reference of conceptDescription.isCaseOf) { - this.writeReference(reference, this.appendChild(isCaseOfNode, 'reference')); - } - } - } - - private writeTextNode(node: Node, localName: string, value?: string) { - if (value !== undefined && value !== null) { - node.appendChild(this.document.createElement(localName)).textContent = value; - } - } - - private appendChild(parent: Node, localName: string): Element { - return parent.appendChild(this.document.createElement(localName)); - } -} +/****************************************************************************** + * + * Copyright (c) 2019-2024 Fraunhofer IOSB-INA Lemgo, + * eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft + * zur Foerderung der angewandten Forschung e.V. + * + *****************************************************************************/ + +import { aas, convertToString } from 'aas-core'; +import camelCase from 'lodash-es/camelCase.js'; +import { DOMImplementation, XMLSerializer } from '@xmldom/xmldom'; +import { AASWriter } from './aas-writer.js'; + +export class XmlWriterV3 extends AASWriter { + private readonly document: Document; + + public constructor() { + super(); + + this.document = new DOMImplementation().createDocument('https://admin-shell.io/aas/3/0', null, null); + } + + public override write(env: aas.Environment): string { + const envNode = this.appendChild(this.document, 'environment'); + const xmlns = this.document.createAttribute('xmlns'); + xmlns.value = 'https://admin-shell.io/aas/3/0'; + envNode.attributes.setNamedItem(xmlns); + + const shellsNode = this.appendChild(envNode, 'assetAdministrationShells'); + for (const aas of env.assetAdministrationShells) { + this.writeAssetAdministrationShell(aas, this.appendChild(shellsNode, 'assetAdministrationShell')); + } + + const submodelsNode = this.appendChild(envNode, 'submodels'); + for (const submodel of env.submodels) { + this.writeSubmodel(submodel, this.appendChild(submodelsNode, 'submodel')); + } + + const conceptDescriptionsNode = this.appendChild(envNode, 'conceptDescriptions'); + for (const conceptDescription of env.conceptDescriptions) { + this.writeConceptDescription( + conceptDescription, + this.appendChild(conceptDescriptionsNode, 'conceptDescription'), + ); + } + + this.document; + + return new XMLSerializer().serializeToString(this.document); + } + + private writeKey(key: aas.Key, node: Node): void { + this.writeTextNode(node, 'type', key.type); + this.writeTextNode(node, 'value', key.value); + } + + private writeReference(reference: aas.Reference, node: Node): void { + this.writeTextNode(node, 'type', reference.type); + if (reference.referredSemanticId) { + this.writeReference(reference.referredSemanticId, this.appendChild(node, 'referredSemanticId')); + } + + const keysElement = this.appendChild(node, 'keys'); + for (const key of reference.keys) { + this.writeKey(key, this.appendChild(keysElement, 'key')); + } + } + + private writeExtension(extension: aas.Extension, node: Node): void { + this.writeTextNode(node, 'name', extension.name); + + if (extension.refersTo) { + extension.refersTo.forEach(item => this.writeReference(item, this.appendChild(node, 'refersTo'))); + } + } + + private writeHasExtension(hasExtensions: aas.HasExtensions | undefined, node: Node): void { + if (!hasExtensions?.extensions) return; + + const extensions = this.appendChild(node, 'extensions'); + for (const extension of hasExtensions.extensions) { + this.writeExtension(extension, this.appendChild(extensions, 'extension')); + } + } + + private writeLangString(langString: aas.LangString, node: Node): void { + this.writeTextNode(node, 'language', langString.language); + this.writeTextNode(node, 'text', langString.text); + } + + private writeLangStrings(langStrings: aas.LangString[] | undefined, node: Node, localName: string): void { + if (!langStrings) return; + + for (const langString of langStrings) { + this.writeLangString(langString, this.appendChild(node, localName)); + } + } + + private writeReferable(referable: aas.Referable, node: Node): void { + this.writeHasExtension(referable, node); + this.writeTextNode(node, 'idShort', referable.idShort); + this.writeTextNode(node, 'category', referable.category); + + if (referable.displayName) { + this.writeLangStrings(referable.displayName, this.appendChild(node, 'displayName'), 'langStringNameType'); + } + + if (referable.description) { + this.writeLangStrings(referable.description, this.appendChild(node, 'description'), 'langStringTextType'); + } + } + + private writeValueReferencePair(pair: aas.ValueReferencePair, node: Node): void { + this.writeTextNode(node, 'value', pair.value); + this.writeReference(pair.valueId, this.appendChild(node, 'valueId')); + } + + private writeDataSpecificationIec61360(content: aas.DataSpecificationIec61360, node: Node): void { + this.writeLangStrings( + content.preferredName, + this.appendChild(node, 'preferredName'), + 'langStringPreferredNameTypeIec61360', + ); + + if (content.shortName) { + this.writeLangStrings( + content.shortName, + this.appendChild(node, 'shortName'), + 'langStringShortNameTypeIec61360', + ); + } + + this.writeTextNode(node, 'unit', content.unit); + + if (content.unitId) { + this.writeReference(content.unitId, this.appendChild(node, 'unitId')); + } + + this.writeTextNode(node, 'sourceOfDefinition', content.sourceOfDefinition); + this.writeTextNode(node, 'symbol', content.symbol); + this.writeTextNode(node, 'dataType', content.dataType); + + if (content.definition) { + this.writeLangStrings( + content.definition, + this.appendChild(node, 'definition'), + 'langStringDefinitionTypeIec61360', + ); + } + + if (content.valueList) { + const listNode = this.appendChild(node, 'valueList'); + const pairsNode = this.appendChild(listNode, 'valueReferencePairs'); + for (const valueReferencePair of content.valueList.valueReferencePairs) { + this.writeValueReferencePair(valueReferencePair, this.appendChild(pairsNode, 'valueReferencePair')); + } + } + + if (content.valueFormat) { + this.writeTextNode(node, 'valueFormat', content.valueFormat); + } + + if (content.value) { + this.writeTextNode(node, 'value', content.value); + } + + if (content.levelType) { + const levelType = this.appendChild(node, 'levelType'); + this.writeTextNode(levelType, 'min', convertToString(content.levelType.min)); + this.writeTextNode(levelType, 'max', convertToString(content.levelType.max)); + this.writeTextNode(levelType, 'nom', convertToString(content.levelType.nom)); + this.writeTextNode(levelType, 'typ', convertToString(content.levelType.typ)); + } + } + + private writeEmbeddedDataSpecification(embeddedDataSpecification: aas.EmbeddedDataSpecification, node: Node): void { + this.writeReference(embeddedDataSpecification.dataSpecification, this.appendChild(node, 'dataSpecification')); + const contentNode = this.appendChild(node, 'dataSpecificationContent'); + const content = embeddedDataSpecification.dataSpecificationContent; + if (content.modelType === 'DataSpecificationIEC61360') { + this.writeDataSpecificationIec61360( + content as aas.DataSpecificationIec61360, + this.appendChild(contentNode, 'dataSpecificationIec61360'), + ); + } + } + + private writeHasDataSpecification(hasDataSpecification: aas.HasDataSpecification, node: Node): void { + if (hasDataSpecification.embeddedDataSpecifications) { + const specsNode = this.appendChild(node, 'embeddedDataSpecifications'); + for (const embeddedDataSpecification of hasDataSpecification.embeddedDataSpecifications) { + this.writeEmbeddedDataSpecification( + embeddedDataSpecification, + this.appendChild(specsNode, 'embeddedDataSpecification'), + ); + } + } + } + + private writeAdministrativeInformation(info: aas.AdministrativeInformation, node: Node): void { + this.writeHasDataSpecification(info, node); + } + + private writeIdentifiable(identifiable: aas.Identifiable, node: Node): void { + this.writeReferable(identifiable, node); + this.writeTextNode(node, 'id', identifiable.id); + if (identifiable.administration) { + this.writeAdministrativeInformation(identifiable.administration, this.appendChild(node, 'administration')); + } + } + + private writeHasSemantic(hasSemantic: aas.HasSemantics, node: Node): void { + if (hasSemantic.semanticId) { + this.writeReference(hasSemantic.semanticId, this.appendChild(node, 'semanticId')); + } + + if (hasSemantic.supplementalSemanticIds) { + const child = this.appendChild(node, 'supplementalSemanticIds'); + hasSemantic.supplementalSemanticIds.forEach(item => + this.writeReference(item, this.appendChild(child, 'reference')), + ); + } + } + + private writeHasKind(hasKind: aas.HasKind, node: Node): void { + this.writeTextNode(node, 'kind', hasKind.kind); + } + + private writeQualifier(qualifier: aas.Qualifier, node: Node): void { + this.writeHasSemantic(qualifier, node); + this.writeTextNode(node, 'kind', qualifier.kind); + this.writeTextNode(node, 'type', qualifier.type); + this.writeTextNode(node, 'value', qualifier.value); + this.writeTextNode(node, 'valueType', qualifier.valueType); + + if (qualifier.valueId) { + this.writeReference(qualifier.valueId, this.appendChild(node, 'valueId')); + } + } + + private writeQualifiable(qualifiable: aas.Qualifiable, node: Node): void { + if (qualifiable.qualifiers) { + const qualifiersNode = this.appendChild(node, 'qualifiers'); + for (const qualifier of qualifiable.qualifiers) { + this.writeQualifier(qualifier, this.appendChild(qualifiersNode, 'qualifier')); + } + } + } + + private writeSpecificAssetId(specificAssetId: aas.SpecificAssetId, node: Node): void { + this.writeHasSemantic(specificAssetId, node); + this.writeTextNode(node, 'name', specificAssetId.name); + this.writeTextNode(node, 'value', specificAssetId.value); + + if (specificAssetId.externalSubjectId) { + this.writeReference(specificAssetId.externalSubjectId, this.appendChild(node, 'externalSubjectId')); + } + } + + private writeResource(resource: aas.Resource, node: Node): void { + this.writeTextNode(node, 'contentType', resource.contentType); + this.writeTextNode(node, 'path', resource.path); + } + + private writeAssetInformation(information: aas.AssetInformation, node: Node): void { + this.writeTextNode(node, 'assetKind', information.assetKind); + this.writeTextNode(node, 'assetType', information.assetType); + this.writeTextNode(node, 'globalAssetId', information.globalAssetId); + + if (information.specificAssetIds) { + const nodes = this.appendChild(node, 'specificAssetIds'); + for (const specificAssetId of information.specificAssetIds) { + this.writeSpecificAssetId(specificAssetId, this.appendChild(nodes, 'specificAssetId')); + } + } + + if (information.defaultThumbnail) { + this.writeResource(information.defaultThumbnail, this.appendChild(node, 'defaultThumbnail')); + } + } + + private writeAssetAdministrationShell(aas: aas.AssetAdministrationShell, node: Node): void { + this.writeIdentifiable(aas, node); + this.writeHasDataSpecification(aas, node); + + if (aas.derivedFrom) { + this.writeReference(aas.derivedFrom, this.appendChild(node, 'derivedFrom')); + } + + this.writeAssetInformation(aas.assetInformation, this.appendChild(node, 'assetInformation')); + + if (aas.submodels) { + const submodelsNode = this.appendChild(node, 'submodels'); + for (const submodel of aas.submodels) { + this.writeReference(submodel, this.appendChild(submodelsNode, 'reference')); + } + } + } + + private writeSubmodelElement(submodelElement: aas.SubmodelElement, node: Node): void { + this.writeReferable(submodelElement, node); + this.writeHasSemantic(submodelElement, node); + this.writeQualifiable(submodelElement, node); + this.writeHasDataSpecification(submodelElement, node); + + switch (submodelElement.modelType) { + case 'AnnotatedRelationshipElement': + this.writeAnnotatedRelationshipElement(submodelElement as aas.AnnotatedRelationshipElement, node); + break; + case 'BasicEventElement': + this.writeBasicEventElement(submodelElement as aas.BasicEventElement, node); + break; + case 'Blob': + this.writeBlob(submodelElement as aas.Blob, node); + break; + case 'Capability': + this.writeCapability(submodelElement as aas.Capability, node); + break; + case 'Entity': + this.writeEntity(submodelElement as aas.Entity, node); + break; + case 'File': + this.writeFile(submodelElement as aas.File, node); + break; + case 'MultiLanguageProperty': + this.writeMultiLanguageProperty(submodelElement as aas.MultiLanguageProperty, node); + break; + case 'Operation': + this.writeOperation(submodelElement as aas.Operation, node); + break; + case 'Property': + this.writeProperty(submodelElement as aas.Property, node); + break; + case 'Range': + this.writeRange(submodelElement as aas.Range, node); + break; + case 'ReferenceElement': + this.writeReferenceElement(submodelElement as aas.ReferenceElement, node); + break; + case 'RelationshipElement': + this.writeRelationshipElement(submodelElement as aas.RelationshipElement, node); + break; + case 'SubmodelElementCollection': + this.writeSubmodelElementCollection(submodelElement as aas.SubmodelElementCollection, node); + break; + case 'SubmodelElementList': + this.writeSubmodelElementList(submodelElement as aas.SubmodelElementList, node); + break; + } + } + + private writeDataElement(dataElement: aas.DataElement, node: Node): void { + this.writeReferable(dataElement, node); + this.writeHasSemantic(dataElement, node); + this.writeQualifiable(dataElement, node); + this.writeHasDataSpecification(dataElement, node); + + switch (dataElement.modelType) { + case 'Blob': + this.writeBlob(dataElement as aas.Blob, node); + break; + case 'File': + this.writeFile(dataElement as aas.File, node); + break; + case 'MultiLanguageProperty': + this.writeMultiLanguageProperty(dataElement as aas.MultiLanguageProperty, node); + break; + case 'Property': + this.writeProperty(dataElement as aas.Property, node); + break; + case 'Range': + this.writeRange(dataElement as aas.Range, node); + break; + case 'ReferenceElement': + this.writeReferenceElement(dataElement as aas.ReferenceElement, node); + break; + } + } + + private writeAnnotatedRelationshipElement(relationship: aas.AnnotatedRelationshipElement, node: Node) { + this.writeRelationshipElement(relationship, node); + + if (relationship.annotations) { + const annotationsNode = this.appendChild(node, 'annotations'); + for (const annotation of relationship.annotations) { + this.writeDataElement(annotation, this.appendChild(annotationsNode, camelCase(annotation.modelType))); + } + } + } + + private writeBasicEventElement(event: aas.BasicEventElement, node: Node) { + this.writeReference(event.observed, this.appendChild(node, 'observed')); + this.writeTextNode(node, 'direction', event.direction); + this.writeTextNode(node, 'state', event.state); + this.writeTextNode(node, 'messageTopic', event.messageTopic); + + if (event.messageBroker) { + this.writeReference(event.messageBroker, this.appendChild(node, 'messageBroker')); + } + + this.writeTextNode(node, 'lastUpdate', event.lastUpdate); + this.writeTextNode(node, 'minInterval', event.minInterval); + this.writeTextNode(node, 'maxInterval', event.maxInterval); + } + + private writeBlob(blob: aas.Blob, node: Node) { + this.writeTextNode(node, 'contentType', blob.contentType); + this.writeTextNode(node, 'value', blob.value); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function + private writeCapability(capability: aas.Capability, node: Node) {} + + private writeEntity(entity: aas.Entity, node: Node) { + this.writeTextNode(node, 'entityType', entity.entityType); + this.writeTextNode(node, 'globalAssetId', entity.globalAssetId); + + if (entity.specificAssetIds) { + const child = this.appendChild(node, 'specificAssetIds'); + entity.specificAssetIds.forEach(item => + this.writeSpecificAssetId(item, this.appendChild(child, 'specificAssetId')), + ); + } + + if (entity.statements) { + const statementsNode = this.appendChild(node, 'statements'); + for (const statement of entity.statements) { + this.writeSubmodelElement(statement, this.appendChild(statementsNode, camelCase(statement.modelType))); + } + } + } + + private writeFile(file: aas.File, node: Node) { + this.writeTextNode(node, 'contentType', file.contentType); + this.writeTextNode(node, 'value', file.value); + } + + private writeMultiLanguageProperty(property: aas.MultiLanguageProperty, node: Node) { + const valueNode = this.appendChild(node, 'value'); + this.writeLangStrings(property.value, valueNode, 'langStringTextType'); + + if (property.valueId) { + this.writeReference(property.valueId, this.appendChild(node, 'valueId')); + } + } + + private writeOperationVariable(variable: aas.OperationVariable, node: Node): void { + const valueNode = this.appendChild(node, 'value'); + this.writeSubmodelElement(variable.value, valueNode); + } + + private writeOperation(operation: aas.Operation, node: Node) { + if (operation.inputVariables) { + const variablesNode = this.appendChild(node, 'inputVariables'); + for (const variable of operation.inputVariables) { + this.writeOperationVariable(variable, this.appendChild(variablesNode, 'operationVariable')); + } + } + + if (operation.inoutputVariables) { + const variablesNode = this.appendChild(node, 'inoutputVariables'); + for (const variable of operation.inoutputVariables) { + this.writeOperationVariable(variable, this.appendChild(variablesNode, 'operationVariable')); + } + } + + if (operation.outputVariables) { + const variablesNode = this.appendChild(node, 'outputVariables'); + for (const variable of operation.outputVariables) { + this.writeOperationVariable(variable, this.appendChild(variablesNode, 'operationVariable')); + } + } + } + + private writeProperty(property: aas.Property, node: Node) { + this.writeTextNode(node, 'valueType', property.valueType); + this.writeTextNode(node, 'value', property.value); + + if (property.valueId) { + this.writeReference(property.valueId, this.appendChild(node, 'valueId')); + } + } + + private writeRange(range: aas.Range, node: Node) { + this.writeTextNode(node, 'valueType', range.valueType); + this.writeTextNode(node, 'min', range.min); + this.writeTextNode(node, 'max', range.max); + } + + private writeReferenceElement(reference: aas.ReferenceElement, node: Node) { + if (reference.value) { + this.writeReference(reference.value, this.appendChild(node, 'value')); + } + } + + private writeRelationshipElement(relationship: aas.RelationshipElement, node: Node) { + this.writeReference(relationship.first, this.appendChild(node, 'first')); + this.writeReference(relationship.second, this.appendChild(node, 'second')); + } + + private writeSubmodelElementCollection(collection: aas.SubmodelElementCollection, node: Node) { + if (collection.value) { + const valueNode = this.appendChild(node, 'value'); + for (const value of collection.value) { + const elementNode = this.appendChild(valueNode, camelCase(value.modelType)); + this.writeSubmodelElement(value, elementNode); + } + } + } + + private writeSubmodelElementList(list: aas.SubmodelElementList, node: Node) { + if (typeof list.orderRelevant === 'boolean') { + this.writeTextNode(node, 'orderRelevant', list.orderRelevant ? 'true' : 'false'); + } + + this.writeTextNode(node, 'typeValueListElement', list.typeValueListElement); + this.writeTextNode(node, '', list.valueTypeListElement); + + if (list.semanticIdListElement) { + this.writeReference(list.semanticIdListElement, this.appendChild(node, 'semanticIdListElement')); + } + + if (list.value) { + const valueNode = this.appendChild(node, 'value'); + for (const value of list.value) { + const elementNode = this.appendChild(valueNode, camelCase(value.modelType)); + this.writeSubmodelElement(value, elementNode); + } + } + } + + private writeSubmodel(submodel: aas.Submodel, node: Node): void { + this.writeIdentifiable(submodel, node); + this.writeHasKind(submodel, node); + this.writeHasSemantic(submodel, node); + this.writeQualifiable(submodel, node); + this.writeHasDataSpecification(submodel, node); + + if (submodel.submodelElements) { + const elementsNode = this.appendChild(node, 'submodelElements'); + for (const submodelElement of submodel.submodelElements) { + const elementNode = this.appendChild(elementsNode, camelCase(submodelElement.modelType)); + this.writeSubmodelElement(submodelElement, elementNode); + } + } + } + + private writeConceptDescription(conceptDescription: aas.ConceptDescription, node: Node): void { + this.writeIdentifiable(conceptDescription, node); + this.writeHasDataSpecification(conceptDescription, node); + + if (conceptDescription.isCaseOf) { + const isCaseOfNode = this.appendChild(node, 'isCaseOfNode'); + for (const reference of conceptDescription.isCaseOf) { + this.writeReference(reference, this.appendChild(isCaseOfNode, 'reference')); + } + } + } + + private writeTextNode(node: Node, localName: string, value?: string) { + if (value !== undefined && value !== null) { + node.appendChild(this.document.createElement(localName)).textContent = value; + } + } + + private appendChild(parent: Node, localName: string): Element { + return parent.appendChild(this.document.createElement(localName)); + } +} diff --git a/projects/aas-server/src/app/template/template-scan.ts b/projects/aas-server/src/app/template/template-scan.ts index f482e96c..fbdf53bd 100644 --- a/projects/aas-server/src/app/template/template-scan.ts +++ b/projects/aas-server/src/app/template/template-scan.ts @@ -14,9 +14,9 @@ import { FileStorage } from '../file-storage/file-storage.js'; import { inject, singleton } from 'tsyringe'; import { FileStorageProvider } from '../file-storage/file-storage-provider.js'; import { Variable } from '../variable.js'; -import { createJsonReader } from '../packages/create-json-reader.js'; -import { createXmlReader } from '../packages/create-xml-reader.js'; -import { AasxDirectory } from '../packages/file-system/aasx-directory.js'; +import { createJsonReader } from '../package/create-json-reader.js'; +import { createXmlReader } from '../package/create-xml-reader.js'; +import { AasxDirectory } from '../package/file-system/aasx-directory.js'; import { ScanResultKind, ScanTemplatesResult } from '../aas-provider/scan-result.js'; import { toUint8Array } from '../convert.js'; import { WorkerData } from '../aas-provider/worker-data.js'; diff --git a/projects/aas-server/src/app/template/template-storage.ts b/projects/aas-server/src/app/template/template-storage.ts index 807abf0d..7e7fc6e7 100644 --- a/projects/aas-server/src/app/template/template-storage.ts +++ b/projects/aas-server/src/app/template/template-storage.ts @@ -13,9 +13,9 @@ import { FileStorage } from '../file-storage/file-storage.js'; import { inject, singleton } from 'tsyringe'; import { FileStorageProvider } from '../file-storage/file-storage-provider.js'; import { Variable } from '../variable.js'; -import { createJsonReader } from '../packages/create-json-reader.js'; -import { createXmlReader } from '../packages/create-xml-reader.js'; -import { AasxDirectory } from '../packages/file-system/aasx-directory.js'; +import { createJsonReader } from '../package/create-json-reader.js'; +import { createXmlReader } from '../package/create-xml-reader.js'; +import { AasxDirectory } from '../package/file-system/aasx-directory.js'; import { ScanTemplatesData } from '../aas-provider/worker-data.js'; import { ScanResult, ScanTemplatesResult } from '../aas-provider/scan-result.js'; import { Parallel } from '../aas-provider/parallel.js'; diff --git a/projects/aas-server/src/test/aas-provider/aas-provider.spec.ts b/projects/aas-server/src/test/aas-provider/aas-provider.spec.ts index b22b2735..7adb0b18 100644 --- a/projects/aas-server/src/test/aas-provider/aas-provider.spec.ts +++ b/projects/aas-server/src/test/aas-provider/aas-provider.spec.ts @@ -14,7 +14,7 @@ import { Logger } from '../../app/logging/logger.js'; import { AASProvider } from '../../app/aas-provider/aas-provider.js'; import { Parallel } from '../../app/aas-provider/parallel.js'; import { LocalFileStorage } from '../../app/file-storage/local-file-storage.js'; -import { AASResourceFactory } from '../../app/packages/aas-resource-factory.js'; +import { AASClientFactory } from '../../app/package/aas-client-factory.js'; import { createSpyObj } from 'fhg-jest' import { Variable } from '../../app/variable.js'; import { FileStorageProvider } from '../../app/file-storage/file-storage-provider.js'; @@ -29,7 +29,7 @@ describe('AASProvider', function () { const logger = createSpyObj(['error', 'warning', 'info', 'debug', 'start', 'stop']); const parallel = createSpyObj(['execute', 'on']); // const wsServer = createSpyObj(['notify', 'close', 'on']); - const resourceFactory = createSpyObj(['create', 'testAsync']); + const resourceFactory = createSpyObj(['create', 'testAsync']); beforeEach(function () { fileStorageFactory = createSpyObj(['get']); diff --git a/projects/aas-server/src/test/live/http/http-subscription.spec.ts b/projects/aas-server/src/test/live/http/http-subscription.spec.ts index 442b2fe9..c1b5af18 100644 --- a/projects/aas-server/src/test/live/http/http-subscription.spec.ts +++ b/projects/aas-server/src/test/live/http/http-subscription.spec.ts @@ -11,7 +11,7 @@ import { aas, DefaultType, LiveRequest } from 'aas-core'; import { Logger } from '../../../app/logging/logger.js'; import { HttpSubscription } from '../../../app/live/http/http-subscription.js'; import { SocketClient } from '../../../app/live/socket-client.js'; -import { AASApiClient } from '../../../app/packages/aas-server/aas-api-client.js'; +import { AASApiClient } from '../../../app/package/aas-api/aas-api-client.js'; import env from '../../assets/aas-environment.js'; import { createSpyObj, DoneFn } from 'fhg-jest' diff --git a/projects/aas-server/src/test/live/opcua/opcua-subscription.spec.ts b/projects/aas-server/src/test/live/opcua/opcua-subscription.spec.ts index 52508743..9782d58c 100644 --- a/projects/aas-server/src/test/live/opcua/opcua-subscription.spec.ts +++ b/projects/aas-server/src/test/live/opcua/opcua-subscription.spec.ts @@ -11,7 +11,7 @@ import { OpcuaSubscription } from '../../../app/live/opcua/opcua-subscription.js import { createSpyObj } from 'fhg-jest'; import { Logger } from '../../../app/logging/logger.js'; import { SocketClient } from '../../../app/live/socket-client.js'; -import { OpcuaClient } from '../../../app/packages/opcua/opcua-client.js'; +import { OpcuaClient } from '../../../app/package/opcua/opcua-client.js'; describe('OpcuaSubscription', function () { let subscription: OpcuaSubscription; diff --git a/projects/aas-server/src/test/packages/aas-server/aas-api-client-v0.spec.ts b/projects/aas-server/src/test/package/aas-api/aas-api-client-v0.spec.ts similarity index 97% rename from projects/aas-server/src/test/packages/aas-server/aas-api-client-v0.spec.ts rename to projects/aas-server/src/test/package/aas-api/aas-api-client-v0.spec.ts index 0f5134e6..1f7ee095 100644 --- a/projects/aas-server/src/test/packages/aas-server/aas-api-client-v0.spec.ts +++ b/projects/aas-server/src/test/package/aas-api/aas-api-client-v0.spec.ts @@ -10,14 +10,14 @@ import { describe, beforeEach, it, expect, jest, afterEach } from '@jest/globals import { IncomingMessage } from 'http'; import { Socket } from 'net'; import { aas, selectElement } from 'aas-core'; -import { AASApiClient } from '../../../app/packages/aas-server/aas-api-client.js'; +import { AASApiClient } from '../../../app/package/aas-api/aas-api-client.js'; import listaas from '../../assets/test-aas/listaas.js'; import becher1 from '../../assets/test-aas/cuna-cup-becher1.js'; import submodels from '../../assets/test-aas/submodels.js'; import nameplate from '../../assets/test-aas/nameplate-becher1.js'; import digitalProductPassport from '../../assets/test-aas/digital-product-passport-becher1.js'; import customerFeedback from '../../assets/test-aas/customer-feedback-becher1.js'; -import { AASApiClientV0 } from '../../../app/packages/aas-server/aas-api-client-v0.js'; +import { AASApiClientV0 } from '../../../app/package/aas-api/aas-api-client-v0.js'; import { Logger } from '../../../app/logging/logger.js'; import aasEnvironment from '../../assets/aas-environment.js'; import { createSpyObj } from 'fhg-jest'; diff --git a/projects/aas-server/src/test/packages/aas-server/aas-api-client-v3.spec.ts b/projects/aas-server/src/test/package/aas-api/aas-api-client-v3.spec.ts similarity index 99% rename from projects/aas-server/src/test/packages/aas-server/aas-api-client-v3.spec.ts rename to projects/aas-server/src/test/package/aas-api/aas-api-client-v3.spec.ts index fb05cfad..fe513695 100644 --- a/projects/aas-server/src/test/packages/aas-server/aas-api-client-v3.spec.ts +++ b/projects/aas-server/src/test/package/aas-api/aas-api-client-v3.spec.ts @@ -9,7 +9,7 @@ import { createSpyObj } from 'fhg-jest'; import env from '../../assets/aas-environment.js'; import cloneDeep from 'lodash-es/cloneDeep.js'; -import { AASApiClientV3, OperationResult } from '../../../app/packages/aas-server/aas-api-client-v3.js'; +import { AASApiClientV3, OperationResult } from '../../../app/package/aas-api/aas-api-client-v3.js'; import { aas, DifferenceItem } from 'aas-core'; import { Logger } from '../../../app/logging/logger.js'; import { describe, beforeEach, it, expect, jest, afterEach } from '@jest/globals'; diff --git a/projects/aas-server/src/test/packages/aas-server/aas-server-package.spec.ts b/projects/aas-server/src/test/package/aas-api/aas-api-package.spec.ts similarity index 81% rename from projects/aas-server/src/test/packages/aas-server/aas-server-package.spec.ts rename to projects/aas-server/src/test/package/aas-api/aas-api-package.spec.ts index e41c828c..67588083 100644 --- a/projects/aas-server/src/test/packages/aas-server/aas-server-package.spec.ts +++ b/projects/aas-server/src/test/package/aas-api/aas-api-package.spec.ts @@ -9,12 +9,12 @@ import { describe, beforeEach, it, expect, jest } from '@jest/globals'; import { aas } from 'aas-core'; import { Logger } from '../../../app/logging/logger.js'; -import { AASApiClient } from '../../../app/packages/aas-server/aas-api-client.js'; -import { AASServerPackage } from '../../../app/packages/aas-server/aas-server-package.js'; +import { AASApiClient } from '../../../app/package/aas-api/aas-api-client.js'; +import { AASApiPackage } from '../../../app/package/aas-api/aas-api-package.js'; import { createSpyObj } from 'fhg-jest'; -describe('AasxServerPackage', () => { - let aasPackage: AASServerPackage; +describe('AASApiPackage', () => { + let aasPackage: AASApiPackage; let logger: jest.Mocked; let server: jest.Mocked; let env: aas.Environment; @@ -25,7 +25,7 @@ describe('AasxServerPackage', () => { endpoint: { name: 'Test', type: 'AAS_API', url: 'http:/localhost:1234' }, }); - aasPackage = new AASServerPackage(logger, server, 'http://aas/CunaCup_Becher1', 'CunaCup_Becher1'); + aasPackage = new AASApiPackage(logger, server, 'http://aas/CunaCup_Becher1', 'CunaCup_Becher1'); env = { assetAdministrationShells: [ { diff --git a/projects/aas-server/src/test/packages/aas-server/aasx-package.spec.ts b/projects/aas-server/src/test/package/file-system/aasx-package.spec.ts similarity index 92% rename from projects/aas-server/src/test/packages/aas-server/aasx-package.spec.ts rename to projects/aas-server/src/test/package/file-system/aasx-package.spec.ts index 1e13df72..cb7b7d6c 100644 --- a/projects/aas-server/src/test/packages/aas-server/aasx-package.spec.ts +++ b/projects/aas-server/src/test/package/file-system/aasx-package.spec.ts @@ -7,8 +7,8 @@ *****************************************************************************/ import { describe, beforeEach, it, expect, jest } from '@jest/globals'; -import { AasxPackage } from '../../../app/packages/file-system/aasx-package.js'; -import { AasxDirectory } from '../../../app/packages/file-system/aasx-directory.js'; +import { AasxPackage } from '../../../app/package/file-system/aasx-package.js'; +import { AasxDirectory } from '../../../app/package/file-system/aasx-directory.js'; import { Logger } from '../../../app/logging/logger.js'; import { LocalFileStorage } from '../../../app/file-storage/local-file-storage.js'; import { createSpyObj } from 'fhg-jest'; diff --git a/projects/aas-server/src/test/packages/json-reader-v2.spec.ts b/projects/aas-server/src/test/package/json-reader-v2.spec.ts similarity index 93% rename from projects/aas-server/src/test/packages/json-reader-v2.spec.ts rename to projects/aas-server/src/test/package/json-reader-v2.spec.ts index e6c5ed2c..3411e596 100644 --- a/projects/aas-server/src/test/packages/json-reader-v2.spec.ts +++ b/projects/aas-server/src/test/package/json-reader-v2.spec.ts @@ -7,7 +7,7 @@ *****************************************************************************/ import { readFile } from 'fs/promises'; -import { JsonReaderV2 } from '../../app/packages/json-reader-v2.js'; +import { JsonReaderV2 } from '../../app/package/json-reader-v2.js'; import { describe, beforeEach, it, expect } from '@jest/globals'; describe('JsonReaderV2', function () { diff --git a/projects/aas-server/src/test/packages/json-reader-v3.spec.ts b/projects/aas-server/src/test/package/json-reader-v3.spec.ts similarity index 93% rename from projects/aas-server/src/test/packages/json-reader-v3.spec.ts rename to projects/aas-server/src/test/package/json-reader-v3.spec.ts index ffe7457f..0a9a526a 100644 --- a/projects/aas-server/src/test/packages/json-reader-v3.spec.ts +++ b/projects/aas-server/src/test/package/json-reader-v3.spec.ts @@ -7,7 +7,7 @@ *****************************************************************************/ import { readFile } from 'fs/promises'; -import { JsonReaderV3 } from '../../app/packages/json-reader-v3.js'; +import { JsonReaderV3 } from '../../app/package/json-reader-v3.js'; import { resolve } from 'path/posix'; import { describe, beforeEach, it, expect } from '@jest/globals'; diff --git a/projects/aas-server/src/test/packages/json-writer-v2.spec.ts b/projects/aas-server/src/test/package/json-writer-v2.spec.ts similarity index 94% rename from projects/aas-server/src/test/packages/json-writer-v2.spec.ts rename to projects/aas-server/src/test/package/json-writer-v2.spec.ts index 6e4a9a05..d063b87d 100644 --- a/projects/aas-server/src/test/packages/json-writer-v2.spec.ts +++ b/projects/aas-server/src/test/package/json-writer-v2.spec.ts @@ -7,7 +7,7 @@ *****************************************************************************/ import { describe, beforeEach, it, expect } from '@jest/globals'; -import { JsonWriterV2 } from '../../app/packages/json-writer-v2.js'; +import { JsonWriterV2 } from '../../app/package/json-writer-v2.js'; import env from '../assets/aas-environment.js'; describe('JsonWriterV2', function () { diff --git a/projects/aas-server/src/test/packages/json-writer-v3.spec.ts b/projects/aas-server/src/test/package/json-writer-v3.spec.ts similarity index 94% rename from projects/aas-server/src/test/packages/json-writer-v3.spec.ts rename to projects/aas-server/src/test/package/json-writer-v3.spec.ts index ebb4dfc4..3c84d251 100644 --- a/projects/aas-server/src/test/packages/json-writer-v3.spec.ts +++ b/projects/aas-server/src/test/package/json-writer-v3.spec.ts @@ -6,7 +6,7 @@ * *****************************************************************************/ -import { JsonWriterV3 } from '../../app/packages/json-writer-v3.js'; +import { JsonWriterV3 } from '../../app/package/json-writer-v3.js'; import env from '../assets/aas-environment.js'; import { describe, beforeEach, it, expect } from '@jest/globals'; diff --git a/projects/aas-server/src/test/packages/opcua/opcua-client.spec.ts b/projects/aas-server/src/test/package/opcua/opcua-client.spec.ts similarity index 99% rename from projects/aas-server/src/test/packages/opcua/opcua-client.spec.ts rename to projects/aas-server/src/test/package/opcua/opcua-client.spec.ts index b425ba34..239e4e2a 100644 --- a/projects/aas-server/src/test/packages/opcua/opcua-client.spec.ts +++ b/projects/aas-server/src/test/package/opcua/opcua-client.spec.ts @@ -7,7 +7,7 @@ *****************************************************************************/ import { afterEach, beforeEach, describe, expect, it, jest } from '@jest/globals'; -import { OpcuaClient } from '../../../app/packages/opcua/opcua-client.js'; +import { OpcuaClient } from '../../../app/package/opcua/opcua-client.js'; import { Logger } from '../../../app/logging/logger.js'; import { createSpyObj } from 'fhg-jest'; import { CallMethodRequestLike, CallMethodResult, ClientSession, OPCUAClient, StatusCodes, Variant } from 'node-opcua'; diff --git a/projects/aas-server/src/test/packages/opcua/opcua-package.spec.ts b/projects/aas-server/src/test/package/opcua/opcua-package.spec.ts similarity index 87% rename from projects/aas-server/src/test/packages/opcua/opcua-package.spec.ts rename to projects/aas-server/src/test/package/opcua/opcua-package.spec.ts index f3fd9ed0..cb5abc3b 100644 --- a/projects/aas-server/src/test/packages/opcua/opcua-package.spec.ts +++ b/projects/aas-server/src/test/package/opcua/opcua-package.spec.ts @@ -7,10 +7,10 @@ *****************************************************************************/ import { beforeEach, describe, expect, it, jest } from '@jest/globals'; -import { OpcuaPackage } from '../../../app/packages/opcua/opcua-package.js'; +import { OpcuaPackage } from '../../../app/package/opcua/opcua-package.js'; import { Logger } from '../../../app/logging/logger.js'; import { createSpyObj } from 'fhg-jest'; -import { OpcuaClient } from '../../../app/packages/opcua/opcua-client.js'; +import { OpcuaClient } from '../../../app/package/opcua/opcua-client.js'; describe('OpcuaPackage', function () { let aasPackage: OpcuaPackage; diff --git a/projects/aas-server/src/test/packages/opcua/opcua-reader.spec.ts b/projects/aas-server/src/test/package/opcua/opcua-reader.spec.ts similarity index 82% rename from projects/aas-server/src/test/packages/opcua/opcua-reader.spec.ts rename to projects/aas-server/src/test/package/opcua/opcua-reader.spec.ts index 2ac33356..34080198 100644 --- a/projects/aas-server/src/test/packages/opcua/opcua-reader.spec.ts +++ b/projects/aas-server/src/test/package/opcua/opcua-reader.spec.ts @@ -9,9 +9,9 @@ import { describe, beforeEach, it, expect, jest } from '@jest/globals'; import { createSpyObj } from 'fhg-jest'; import { Logger } from '../../../app/logging/logger.js'; -import { OpcuaReader } from '../../../app/packages/opcua/opcua-reader.js'; -import { OPCUAComponent } from '../../../app/packages/opcua/opcua.js'; -import { OpcuaDataTypeDictionary } from '../../../app/packages/opcua/opcua-data-type-dictionary.js'; +import { OpcuaReader } from '../../../app/package/opcua/opcua-reader.js'; +import { OPCUAComponent } from '../../../app/package/opcua/opcua.js'; +import { OpcuaDataTypeDictionary } from '../../../app/package/opcua/opcua-data-type-dictionary.js'; describe('OpcuaReader', () => { let reader: OpcuaReader; diff --git a/projects/aas-server/src/test/packages/xml-reader-v1.spec.ts b/projects/aas-server/src/test/package/xml-reader-v1.spec.ts similarity index 96% rename from projects/aas-server/src/test/packages/xml-reader-v1.spec.ts rename to projects/aas-server/src/test/package/xml-reader-v1.spec.ts index c51c0821..827619a1 100644 --- a/projects/aas-server/src/test/packages/xml-reader-v1.spec.ts +++ b/projects/aas-server/src/test/package/xml-reader-v1.spec.ts @@ -8,7 +8,7 @@ import { readFile } from 'fs/promises'; import { resolve } from 'path/posix'; -import { XmlReaderV1 } from '../../app/packages/xml-reader-v1.js'; +import { XmlReaderV1 } from '../../app/package/xml-reader-v1.js'; import { describe, beforeAll, beforeEach, it, expect } from '@jest/globals'; describe('XmlReader', function () { diff --git a/projects/aas-server/src/test/packages/xml-reader-v3.spec.ts b/projects/aas-server/src/test/package/xml-reader-v3.spec.ts similarity index 96% rename from projects/aas-server/src/test/packages/xml-reader-v3.spec.ts rename to projects/aas-server/src/test/package/xml-reader-v3.spec.ts index 069b62ef..990f7452 100644 --- a/projects/aas-server/src/test/packages/xml-reader-v3.spec.ts +++ b/projects/aas-server/src/test/package/xml-reader-v3.spec.ts @@ -10,7 +10,7 @@ import { describe, beforeEach, expect, it } from '@jest/globals'; import { readFile } from 'fs/promises'; import { resolve } from 'path/posix'; import { aas } from 'aas-core'; -import { XmlReaderV3 } from '../../app/packages/xml-reader-v3.js'; +import { XmlReaderV3 } from '../../app/package/xml-reader-v3.js'; describe('XmlReaderV3', () => { let reader: XmlReaderV3; diff --git a/projects/aas-server/src/test/packages/xml-writer-v3.spec.ts b/projects/aas-server/src/test/package/xml-writer-v3.spec.ts similarity index 92% rename from projects/aas-server/src/test/packages/xml-writer-v3.spec.ts rename to projects/aas-server/src/test/package/xml-writer-v3.spec.ts index 47d73060..d57187ef 100644 --- a/projects/aas-server/src/test/packages/xml-writer-v3.spec.ts +++ b/projects/aas-server/src/test/package/xml-writer-v3.spec.ts @@ -8,7 +8,7 @@ import { describe, beforeEach, it, expect } from '@jest/globals'; import env from '../assets/aas-environment.js'; -import { XmlWriterV3 } from '../../app/packages/xml-writer-v3.js'; +import { XmlWriterV3 } from '../../app/package/xml-writer-v3.js'; describe('XmlWriterV3', () => { let writer: XmlWriterV3;