@@ -19,6 +19,11 @@ import {Samm} from '../../vocabulary';
1919import { EntityInstantiator } from '../entity-instantiator' ;
2020import { DefaultEntityInstance } from '../../aspect-meta-model/default-entity-instance' ;
2121
22+ export interface MultiLanguageText {
23+ value : string ;
24+ language : string ;
25+ }
26+
2227export class EnumerationCharacteristicInstantiator extends CharacteristicInstantiator {
2328 constructor ( metaModelElementInstantiator : MetaModelElementInstantiator , nextProcessor : CharacteristicInstantiator ) {
2429 super ( metaModelElementInstantiator , nextProcessor ) ;
@@ -114,38 +119,41 @@ export class EnumerationCharacteristicInstantiator extends CharacteristicInstant
114119 const entityInstance = new DefaultEntityInstance ( quad . object . value . split ( '#' ) [ 1 ] , entity , descriptions ) ;
115120 entityInstanceQuads . forEach ( quad => {
116121 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 ) ;
124123 } ) ;
125124
126125 return entityInstance ;
127126 }
128127 throw new Error ( `Could resolve Entity instance ${ entityTypeQuad . subject . value } ` ) ;
129128 }
130129
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 ;
133142 }
134143
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 ) ) : [ ] ;
139146 }
140147
141148 private getPredicateKey ( quad : Quad ) : string {
142149 return quad . predicate . value . split ( '#' ) [ 1 ] ;
143150 }
144151
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 } ;
149154 }
150155
156+ shouldProcess ( nameNode : NamedNode ) : boolean {
157+ return this . metaModelElementInstantiator . sammC . EnumerationCharacteristic ( ) . equals ( nameNode ) ;
158+ }
151159}
0 commit comments