@@ -19,6 +19,11 @@ import {Samm} from '../../vocabulary';
19
19
import { EntityInstantiator } from '../entity-instantiator' ;
20
20
import { DefaultEntityInstance } from '../../aspect-meta-model/default-entity-instance' ;
21
21
22
+ export interface MultiLanguageText {
23
+ value : string ;
24
+ language : string ;
25
+ }
26
+
22
27
export class EnumerationCharacteristicInstantiator extends CharacteristicInstantiator {
23
28
constructor ( metaModelElementInstantiator : MetaModelElementInstantiator , nextProcessor : CharacteristicInstantiator ) {
24
29
super ( metaModelElementInstantiator , nextProcessor ) ;
@@ -114,38 +119,41 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
114
119
const entityInstance = new DefaultEntityInstance ( quad . object . value . split ( '#' ) [ 1 ] , entity , descriptions ) ;
115
120
entityInstanceQuads . forEach ( quad => {
116
121
const predicateKey = this . getPredicateKey ( quad ) ;
117
- if ( Util . isBlankNode ( quad . object ) ) {
118
- entityInstance [ predicateKey ] =
119
- this . solveBlankNodeValues ( [ ...this . metaModelElementInstantiator . rdfModel . resolveBlankNodes ( quad . object . value ) ] ) ;
120
- }
121
- else {
122
- entityInstance [ predicateKey ] = quad . object . value ;
123
- }
122
+ entityInstance [ predicateKey ] = this . resolveQuadObject ( quad ) ;
124
123
} ) ;
125
124
126
125
return entityInstance ;
127
126
}
128
127
throw new Error ( `Could resolve Entity instance ${ entityTypeQuad . subject . value } ` ) ;
129
128
}
130
129
131
- shouldProcess ( nameNode : NamedNode ) : boolean {
132
- return this . metaModelElementInstantiator . sammC . EnumerationCharacteristic ( ) . equals ( nameNode ) ;
130
+ private resolveQuadObject ( quad : Quad ) : MultiLanguageText | Array < MultiLanguageText > | string {
131
+ if ( Util . isBlankNode ( quad . object ) ) {
132
+ const resolvedBlankNodes = this . metaModelElementInstantiator . rdfModel . resolveBlankNodes ( quad . object . value ) ;
133
+ return this . solveBlankNodeValues ( [ ...resolvedBlankNodes ] ) ;
134
+ }
135
+
136
+ if ( ( ( quad . object as any ) . datatypeString === Samm . RDF_LANG_STRING ) ||
137
+ ( ( quad . object as any ) . datatypeString === Samm . XML_LANG_STRING ) ) {
138
+ return this . createLanguageObject ( quad ) ;
139
+ }
140
+
141
+ return quad . object . value ;
133
142
}
134
143
135
- solveBlankNodeValues ( resolvedBlankNodes : Array < Quad > ) {
136
- return resolvedBlankNodes . length > 0
137
- ? resolvedBlankNodes . map ( item => this . createLanguageObject ( item ) )
138
- : '' ;
144
+ private solveBlankNodeValues ( resolvedBlankNodes : Array < Quad > ) : Array < MultiLanguageText > {
145
+ return resolvedBlankNodes . length > 0 ? resolvedBlankNodes . map ( item => this . createLanguageObject ( item ) ) : [ ] ;
139
146
}
140
147
141
148
private getPredicateKey ( quad : Quad ) : string {
142
149
return quad . predicate . value . split ( '#' ) [ 1 ] ;
143
150
}
144
151
145
- private createLanguageObject ( quad : Quad ) : any {
146
- return ( quad . object as any ) . language
147
- ? { value : quad . object . value , language : ( quad . object as any ) . language }
148
- : quad . object . value ;
152
+ private createLanguageObject ( quad : Quad ) : MultiLanguageText {
153
+ return { value : quad . object . value , language : ( quad . object as any ) . language } ;
149
154
}
150
155
156
+ shouldProcess ( nameNode : NamedNode ) : boolean {
157
+ return this . metaModelElementInstantiator . sammC . EnumerationCharacteristic ( ) . equals ( nameNode ) ;
158
+ }
151
159
}
0 commit comments