Skip to content

Commit 3a6d61c

Browse files
committed
refactor
1 parent f97cfaf commit 3a6d61c

8 files changed

+88
-121
lines changed

src/aspect-meta-model/characteristic/default-enumeration.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,17 @@
1111
* SPDX-License-Identifier: MPL-2.0
1212
*/
1313
import {Type} from '../type';
14-
import {DefaultCharacteristic} from './default-characteristic';
14+
import {Characteristic, DefaultCharacteristic} from './default-characteristic';
1515
import {DefaultEntityInstance} from '../default-entity-instance';
1616
import {DefaultEntity} from '../default-entity';
17-
import { ValuesCollection } from './default-values-collection';
1817

19-
export class DefaultEnumeration extends DefaultCharacteristic implements ValuesCollection {
18+
export interface Enumeration extends Characteristic {
19+
values: Array<DefaultEntityInstance | string | number>;
20+
21+
indexOf(value: string): number;
22+
}
23+
24+
export class DefaultEnumeration extends DefaultCharacteristic implements Enumeration {
2025
constructor(
2126
metaModelVersion: string,
2227
aspectModelUrn: string,

src/aspect-meta-model/characteristic/default-sorted-set.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import {Characteristic} from './default-characteristic';
1616
import {Type} from '../type';
1717
import { DefaultEntityInstance } from '../default-entity-instance';
1818
import { DefaultEntity } from '../default-entity';
19-
import { ValuesCollection } from './default-values-collection';
19+
import { Enumeration } from './default-enumeration';
2020

21-
export class DefaultSortedSet extends DefaultCollection implements ValuesCollection {
21+
export class DefaultSortedSet extends DefaultCollection implements Enumeration {
2222
constructor(metaModelVersion: string, aspectModelUrn: string, name: string, elementCharacteristic?: Characteristic, dataType?: Type,private _values?: Array<DefaultEntityInstance | string | number>) {
2323
super(metaModelVersion, aspectModelUrn, name, false, true, elementCharacteristic, dataType);
2424
}

src/aspect-meta-model/characteristic/default-state.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
*/
1313

1414
import {Type} from '../type';
15-
import {DefaultEnumeration} from './default-enumeration';
15+
import {DefaultEnumeration, Enumeration} from './default-enumeration';
1616
import {DefaultEntityInstance} from '../default-entity-instance';
17-
import { ValuesCollection } from './default-values-collection';
1817

19-
export interface State extends ValuesCollection {
18+
export interface State extends Enumeration {
2019
defaultValue: DefaultEntityInstance | string | number;
2120
}
2221

src/aspect-meta-model/characteristic/default-values-collection.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
3+
*
4+
* See the AUTHORS file(s) distributed with this work for
5+
* additional information regarding authorship.
6+
*
7+
* This Source Code Form is subject to the terms of the Mozilla Public
8+
* License, v. 2.0. If a copy of the MPL was not distributed with this
9+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
10+
*
11+
* SPDX-License-Identifier: MPL-2.0
12+
*/
13+
14+
import {Quad} from "n3";
15+
16+
export interface MultiLanguageText {
17+
value: string;
18+
language: string;
19+
}
20+
21+
export class CharacteristicInstantiatorUtil {
22+
23+
public static resolveValues(quad: Quad, dataType: string): string | number {
24+
if (!dataType || !dataType.includes('#')) {
25+
return `${quad.object.value}`;
26+
}
27+
28+
switch (dataType.split('#')[1]) {
29+
case 'decimal':
30+
case 'integer':
31+
case 'double':
32+
case 'float':
33+
case 'byte':
34+
case 'short':
35+
case 'int':
36+
case 'long':
37+
case 'unsignedByte':
38+
case 'unsignedLong':
39+
case 'unsignedInt':
40+
case 'unsignedShort':
41+
case 'positiveInteger':
42+
case 'nonNegativeInteger':
43+
case 'negativeInteger':
44+
case 'nonPositiveInteger':
45+
return Number(quad.object.value);
46+
default:
47+
return `${quad.object.value}`;
48+
}
49+
}
50+
51+
public static solveBlankNodeValues(resolvedBlankNodes: Array<Quad>): Array<MultiLanguageText> {
52+
return resolvedBlankNodes.length > 0 ? resolvedBlankNodes.map(item => this.createLanguageObject(item)) : [];
53+
}
54+
55+
public static getPredicateKey(quad: Quad): string {
56+
return quad.predicate.value.split('#')[1];
57+
}
58+
59+
public static createLanguageObject(quad: Quad): MultiLanguageText {
60+
return {value: quad.object.value, language: (quad.object as any).language};
61+
}
62+
}

src/instantiator/characteristic/enumeration-characteristic-instantiator.ts

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,11 @@ import {CharacteristicInstantiator} from './characteristic-instantiator';
1414
import {MetaModelElementInstantiator} from '../meta-model-element-instantiator';
1515
import {NamedNode, Quad, Util} from 'n3';
1616
import {Characteristic} from '../../aspect-meta-model';
17-
import {DefaultEnumeration} from '../../aspect-meta-model/characteristic/default-enumeration';
17+
import {DefaultEnumeration, Enumeration} from '../../aspect-meta-model/characteristic/default-enumeration';
1818
import {Samm} from '../../vocabulary';
1919
import {EntityInstantiator} from '../entity-instantiator';
2020
import {DefaultEntityInstance} from '../../aspect-meta-model/default-entity-instance';
21-
import { ValuesCollection } from '../../aspect-meta-model/characteristic/default-values-collection';
22-
23-
export interface MultiLanguageText {
24-
value: string;
25-
language: string;
26-
}
21+
import {CharacteristicInstantiatorUtil, MultiLanguageText} from './characteristic-instantiator-util';
2722

2823
export class EnumerationCharacteristicInstantiator extends CharacteristicInstantiator {
2924
constructor(metaModelElementInstantiator: MetaModelElementInstantiator, nextProcessor: CharacteristicInstantiator) {
@@ -50,45 +45,17 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
5045
* Override the method in the corresponding specific enumeration class to create the correct type of
5146
* collection e.g. see state-characteristic-instantiator.
5247
*/
53-
protected creatEnumerationObject(): ValuesCollection {
48+
protected creatEnumerationObject(): Enumeration {
5449
return new DefaultEnumeration(null, null, null, null, null);
5550
}
5651

5752
private getEnumerationValues(quad: Quad, dataType: string): Array<string | number | DefaultEntityInstance> {
5853
const quads = this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value);
5954
return quads.map(quadValue =>
60-
Util.isLiteral(quadValue.object) ? this.resolveValues(quadValue, dataType) : this.resolveEntityInstance(quadValue)
55+
Util.isLiteral(quadValue.object) ? CharacteristicInstantiatorUtil.resolveValues(quadValue, dataType) : this.resolveEntityInstance(quadValue)
6156
);
6257
}
6358

64-
private resolveValues(quad: Quad, dataType: string): string | number {
65-
if (!dataType || !dataType.includes('#')) {
66-
return `${quad.object.value}`;
67-
}
68-
69-
switch (dataType.split('#')[1]) {
70-
case 'decimal':
71-
case 'integer':
72-
case 'double':
73-
case 'float':
74-
case 'byte':
75-
case 'short':
76-
case 'int':
77-
case 'long':
78-
case 'unsignedByte':
79-
case 'unsignedLong':
80-
case 'unsignedInt':
81-
case 'unsignedShort':
82-
case 'positiveInteger':
83-
case 'nonNegativeInteger':
84-
case 'negativeInteger':
85-
case 'nonPositiveInteger':
86-
return Number(quad.object.value);
87-
default:
88-
return `${quad.object.value}`;
89-
}
90-
}
91-
9259
protected resolveEntityInstance(quad: Quad): DefaultEntityInstance {
9360
const entityInstanceQuads = this.metaModelElementInstantiator.rdfModel.store.getQuads(quad.object, null, null, null);
9461
const entityTypeQuad = entityInstanceQuads.find(
@@ -118,7 +85,7 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
11885
// create the related instance and attach the metamodel element to it
11986
const entityInstance = new DefaultEntityInstance(quad.object.value.split('#')[1], entity, descriptions);
12087
entityInstanceQuads.forEach(quad => {
121-
const predicateKey = this.getPredicateKey(quad);
88+
const predicateKey = CharacteristicInstantiatorUtil.getPredicateKey(quad);
12289
entityInstance[predicateKey] = this.resolveQuadObject(quad);
12390
});
12491

@@ -130,29 +97,17 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
13097
private resolveQuadObject(quad: Quad): MultiLanguageText | Array<MultiLanguageText> | string {
13198
if (Util.isBlankNode(quad.object)) {
13299
const resolvedBlankNodes = this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value);
133-
return this.solveBlankNodeValues([...resolvedBlankNodes]);
100+
return CharacteristicInstantiatorUtil.solveBlankNodeValues([...resolvedBlankNodes]);
134101
}
135102

136103
if (((quad.object as any).datatypeString === Samm.RDF_LANG_STRING) ||
137104
((quad.object as any).datatypeString === Samm.XML_LANG_STRING)) {
138-
return this.createLanguageObject(quad);
105+
return CharacteristicInstantiatorUtil.createLanguageObject(quad);
139106
}
140107

141108
return quad.object.value;
142109
}
143110

144-
private solveBlankNodeValues(resolvedBlankNodes: Array<Quad>): Array<MultiLanguageText> {
145-
return resolvedBlankNodes.length > 0 ? resolvedBlankNodes.map(item => this.createLanguageObject(item)) : [];
146-
}
147-
148-
private getPredicateKey(quad: Quad): string {
149-
return quad.predicate.value.split('#')[1];
150-
}
151-
152-
private createLanguageObject(quad: Quad): MultiLanguageText {
153-
return {value: quad.object.value, language: (quad.object as any).language};
154-
}
155-
156111
shouldProcess(nameNode: NamedNode): boolean {
157112
return this.metaModelElementInstantiator.sammC.EnumerationCharacteristic().equals(nameNode);
158113
}

src/instantiator/characteristic/sorted-set-characteristic-instantiator.ts

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,7 @@ import {Characteristic} from '../../aspect-meta-model';
2121
import {Samm} from '../../vocabulary';
2222
import {EntityInstantiator} from '../entity-instantiator';
2323
import {DefaultEntityInstance} from '../../aspect-meta-model/default-entity-instance';
24-
import { ValuesCollection } from '../../aspect-meta-model/characteristic/default-values-collection';
25-
26-
export interface MultiLanguageText {
27-
value: string;
28-
language: string;
29-
}
24+
import {CharacteristicInstantiatorUtil, MultiLanguageText} from './characteristic-instantiator-util';
3025

3126
export class SortedSetCharacteristicInstantiator extends CollectionCharacteristicInstantiator {
3227
constructor(metaModelElementInstantiator: MetaModelElementInstantiator, nextProcessor: CharacteristicInstantiator) {
@@ -87,7 +82,7 @@ export class SortedSetCharacteristicInstantiator extends CollectionCharacteristi
8782
// create the related instance and attach the metamodel element to it
8883
const entityInstance = new DefaultEntityInstance(quad.object.value.split('#')[1], entity, descriptions);
8984
entityInstanceQuads.forEach(quad => {
90-
const predicateKey = this.getPredicateKey(quad);
85+
const predicateKey = CharacteristicInstantiatorUtil.getPredicateKey(quad);
9186
entityInstance[predicateKey] = this.resolveQuadObject(quad);
9287
});
9388

@@ -99,62 +94,22 @@ export class SortedSetCharacteristicInstantiator extends CollectionCharacteristi
9994
private resolveQuadObject(quad: Quad): MultiLanguageText | Array<MultiLanguageText> | string {
10095
if (Util.isBlankNode(quad.object)) {
10196
const resolvedBlankNodes = this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value);
102-
return this.solveBlankNodeValues([...resolvedBlankNodes]);
97+
return CharacteristicInstantiatorUtil.solveBlankNodeValues([...resolvedBlankNodes]);
10398
}
10499

105100
if (((quad.object as any).datatypeString === Samm.RDF_LANG_STRING) ||
106101
((quad.object as any).datatypeString === Samm.XML_LANG_STRING)) {
107-
return this.createLanguageObject(quad);
102+
return CharacteristicInstantiatorUtil.createLanguageObject(quad);
108103
}
109104

110105
return quad.object.value;
111106
}
112107

113-
private solveBlankNodeValues(resolvedBlankNodes: Array<Quad>): Array<MultiLanguageText> {
114-
return resolvedBlankNodes.length > 0 ? resolvedBlankNodes.map(item => this.createLanguageObject(item)) : [];
115-
}
116-
117-
private getPredicateKey(quad: Quad): string {
118-
return quad.predicate.value.split('#')[1];
119-
}
120-
121-
private createLanguageObject(quad: Quad): MultiLanguageText {
122-
return {value: quad.object.value, language: (quad.object as any).language};
123-
}
124-
125108
private getEnumerationValues(quad: Quad, dataType: string): Array<string | number | DefaultEntityInstance> {
126109
const quads = this.metaModelElementInstantiator.rdfModel.resolveBlankNodes(quad.object.value);
127110
return quads.map(quadValue =>
128-
Util.isLiteral(quadValue.object) ? this.resolveValues(quadValue, dataType) : this.resolveEntityInstance(quadValue)
111+
Util.isLiteral(quadValue.object) ? CharacteristicInstantiatorUtil.resolveValues(quadValue, dataType) : this.resolveEntityInstance(quadValue)
129112
);
130113
}
131114

132-
private resolveValues(quad: Quad, dataType: string): string | number {
133-
if (!dataType || !dataType.includes('#')) {
134-
return `${quad.object.value}`;
135-
}
136-
137-
switch (dataType.split('#')[1]) {
138-
case 'decimal':
139-
case 'integer':
140-
case 'double':
141-
case 'float':
142-
case 'byte':
143-
case 'short':
144-
case 'int':
145-
case 'long':
146-
case 'unsignedByte':
147-
case 'unsignedLong':
148-
case 'unsignedInt':
149-
case 'unsignedShort':
150-
case 'positiveInteger':
151-
case 'nonNegativeInteger':
152-
case 'negativeInteger':
153-
case 'nonPositiveInteger':
154-
return Number(quad.object.value);
155-
default:
156-
return `${quad.object.value}`;
157-
}
158-
}
159-
160115
}

src/instantiator/characteristic/state-characteristic-instantiator.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@
1414
import {CharacteristicInstantiator} from '../characteristic/characteristic-instantiator';
1515
import {MetaModelElementInstantiator} from '../meta-model-element-instantiator';
1616
import {NamedNode, Quad, Util} from 'n3';
17-
import {Characteristic} from '../../aspect-meta-model';
17+
import {Characteristic, Enumeration} from '../../aspect-meta-model';
1818
import {DefaultState} from '../../aspect-meta-model/characteristic/default-state';
1919
import {EnumerationCharacteristicInstantiator} from './enumeration-characteristic-instantiator';
20-
import { ValuesCollection } from '../../aspect-meta-model/characteristic/default-values-collection';
2120

2221
export class StateCharacteristicInstantiator extends EnumerationCharacteristicInstantiator {
2322
constructor(metaModelElementInstantiator: MetaModelElementInstantiator, nextProcessor: CharacteristicInstantiator) {
@@ -37,7 +36,7 @@ export class StateCharacteristicInstantiator extends EnumerationCharacteristicIn
3736
return stateCharacteristic;
3837
}
3938

40-
protected creatEnumerationObject(): ValuesCollection {
39+
protected creatEnumerationObject(): Enumeration {
4140
return new DefaultState(null, null, null, null, null);
4241
}
4342

0 commit comments

Comments
 (0)