@@ -287,174 +287,37 @@ public int size() {
287
287
}
288
288
289
289
private static RdfNQuad toRdfNQuad (Statement statement ) {
290
- return new RdfNQuad () {
291
- @ Override
292
- public Optional <RdfResource > getGraphName () {
293
- if (statement .getContext () != null ) {
294
- return Optional .of (toRdfResource (statement .getContext ()));
295
- }
296
- return Optional .empty ();
297
- }
298
-
299
- @ Override
300
- public RdfResource getSubject () {
301
- return toRdfResource (statement .getSubject ());
302
- }
303
-
304
- @ Override
305
- public RdfResource getPredicate () {
306
- return toRdfResource (statement .getPredicate ());
307
- }
308
-
309
- @ Override
310
- public RdfValue getObject () {
311
- return toRdfValue (statement .getObject ());
312
- }
313
- };
290
+ return new RdfNQuadAdapter (statement );
314
291
}
315
292
316
293
private static RdfTriple toRdfTriple (Statement statement ) {
317
- return new RdfTriple () {
318
- @ Override
319
- public RdfResource getSubject () {
320
- return toRdfResource (statement .getSubject ());
321
- }
322
-
323
- @ Override
324
- public RdfResource getPredicate () {
325
- return toRdfResource (statement .getPredicate ());
326
- }
327
-
328
- @ Override
329
- public RdfValue getObject () {
330
- return toRdfValue (statement .getObject ());
331
- }
332
- };
294
+ return new RdfTripleAdapter (statement );
333
295
}
334
296
335
297
private static RdfValue toRdfValue (Value node ) {
336
298
if (node .isResource ()) {
337
299
return toRdfResource ((Resource ) node );
338
300
} else if (node .isLiteral ()) {
339
- return new RdfLiteral () {
340
- @ Override
341
- public String getValue () {
342
- return node .stringValue ();
343
- }
344
-
345
- @ Override
346
- public boolean isLiteral () {
347
- return true ;
348
- }
349
-
350
- @ Override
351
- public String getDatatype () {
352
- return ((Literal ) node ).getDatatype ().stringValue ();
353
- }
354
-
355
- @ Override
356
- public Optional <String > getLanguage () {
357
- return ((Literal ) node ).getLanguage ();
358
- }
359
-
360
- @ Override
361
- public int hashCode () {
362
- return Objects .hash (getDatatype (), getLanguage ().orElse (null ), getValue ());
363
- }
364
-
365
- @ Override
366
- public boolean equals (Object obj ) {
367
- if (this == obj ) {
368
- return true ;
369
- }
370
- if (obj == null ) {
371
- return false ;
372
- }
373
- if (obj instanceof RdfLiteral ) {
374
- RdfLiteral other = (RdfLiteral ) obj ;
375
- return Objects .equals (getDatatype (), other .getDatatype ())
376
- && Objects .equals (getLanguage ().orElse (null ), other .getLanguage ().orElse ("" ))
377
- && Objects .equals (getValue (), other .getValue ());
378
- }
379
-
380
- return false ;
381
- }
382
-
383
- @ Override
384
- public String toString () {
385
- StringBuilder builder = new StringBuilder ();
386
-
387
- builder .append (getValue ());
388
-
389
- if (getLanguage ().isPresent ()) {
390
- builder .append ('@' );
391
- builder .append (getLanguage ().get ());
392
-
393
- } else if (getDatatype () != null ) {
394
- builder .append ("^^" );
395
- builder .append (getDatatype ());
396
- }
397
-
398
- return builder .toString ();
399
- }
400
-
401
- };
301
+ return new RdfLiteralAdapter (node );
402
302
403
303
}
404
304
throw new IllegalArgumentException ("Unknown type of node: " + node );
405
305
406
306
}
407
307
408
308
private static RdfResource toRdfResource (Resource node ) {
409
- return new RdfResource () {
410
- @ Override
411
- public String getValue () {
412
- if (node .isBNode ()) {
413
- return "_:" + ((BNode ) node ).getID ();
414
- }
415
- return node .stringValue ();
416
- }
417
-
418
- @ Override
419
- public boolean isIRI () {
420
- return node .isIRI ();
421
- }
422
-
423
- @ Override
424
- public boolean isBlankNode () {
425
- return node .isBNode ();
426
- }
427
-
428
- @ Override
429
- public int hashCode () {
430
- return Objects .hash (getValue ());
431
- }
432
-
433
- @ Override
434
- public boolean equals (Object obj ) {
435
- if (this == obj ) {
436
- return true ;
437
- }
438
- if (obj == null ) {
439
- return false ;
440
- }
441
- if (obj instanceof RdfResource ) {
442
- RdfResource other = (RdfResource ) obj ;
443
- return Objects .equals (getValue (), other .getValue ());
444
- }
445
-
446
- return false ;
447
-
448
- }
449
-
450
- @ Override
451
- public String toString () {
452
- return Objects .toString (getValue ());
453
- }
454
- };
309
+ return new RdfResourceAdapter (node );
455
310
}
456
311
457
312
private Value toRdf4jValue (RdfValue node ) {
313
+ if (node instanceof RdfResourceAdapter ) {
314
+ return ((RdfResourceAdapter ) node ).node ;
315
+ }
316
+
317
+ if (node instanceof RdfLiteralAdapter ) {
318
+ return ((RdfLiteralAdapter ) node ).node ;
319
+ }
320
+
458
321
if (node .isIRI ()) {
459
322
return vf .createIRI (node .getValue ());
460
323
} else if (node .isBlankNode ()) {
@@ -476,12 +339,19 @@ private Value toRdf4jValue(RdfValue node) {
476
339
477
340
private IRI toRdf4jIri (RdfResource node ) {
478
341
if (node .isIRI ()) {
342
+ if (node instanceof RdfResourceAdapter ) {
343
+ return (IRI ) ((RdfResourceAdapter ) node ).node ;
344
+ }
479
345
return vf .createIRI (node .getValue ());
480
346
}
481
347
throw new IllegalArgumentException ("Unknown type of node: " + node );
482
348
}
483
349
484
350
private Resource toRdf4jResource (RdfResource node ) {
351
+ if (node instanceof RdfResourceAdapter ) {
352
+ return ((RdfResourceAdapter ) node ).node ;
353
+ }
354
+
485
355
if (node .isIRI ()) {
486
356
return vf .createIRI (node .getValue ());
487
357
} else if (node .isBlankNode ()) {
@@ -531,4 +401,180 @@ private static void addPrefixes(Map<String, Object> ctx, Set<Namespace> namespac
531
401
}
532
402
}
533
403
404
+ private static class RdfLiteralAdapter implements RdfLiteral {
405
+ private final Value node ;
406
+
407
+ public RdfLiteralAdapter (Value node ) {
408
+ this .node = node ;
409
+ }
410
+
411
+ @ Override
412
+ public String getValue () {
413
+ return node .stringValue ();
414
+ }
415
+
416
+ @ Override
417
+ public boolean isLiteral () {
418
+ return true ;
419
+ }
420
+
421
+ @ Override
422
+ public String getDatatype () {
423
+ return ((Literal ) node ).getDatatype ().stringValue ();
424
+ }
425
+
426
+ @ Override
427
+ public Optional <String > getLanguage () {
428
+ return ((Literal ) node ).getLanguage ();
429
+ }
430
+
431
+ @ Override
432
+ public int hashCode () {
433
+ return Objects .hash (getDatatype (), getLanguage ().orElse (null ), getValue ());
434
+ }
435
+
436
+ @ Override
437
+ public boolean equals (Object obj ) {
438
+ if (this == obj ) {
439
+ return true ;
440
+ }
441
+ if (obj == null ) {
442
+ return false ;
443
+ }
444
+ if (obj instanceof RdfLiteral ) {
445
+ RdfLiteral other = (RdfLiteral ) obj ;
446
+ return Objects .equals (getDatatype (), other .getDatatype ())
447
+ && Objects .equals (getLanguage ().orElse (null ), other .getLanguage ().orElse ("" ))
448
+ && Objects .equals (getValue (), other .getValue ());
449
+ }
450
+
451
+ return false ;
452
+ }
453
+
454
+ @ Override
455
+ public String toString () {
456
+ StringBuilder builder = new StringBuilder ();
457
+
458
+ builder .append (getValue ());
459
+
460
+ if (getLanguage ().isPresent ()) {
461
+ builder .append ('@' );
462
+ builder .append (getLanguage ().get ());
463
+
464
+ } else if (getDatatype () != null ) {
465
+ builder .append ("^^" );
466
+ builder .append (getDatatype ());
467
+ }
468
+
469
+ return builder .toString ();
470
+ }
471
+
472
+ }
473
+
474
+ private static class RdfResourceAdapter implements RdfResource {
475
+ private final Resource node ;
476
+
477
+ public RdfResourceAdapter (Resource node ) {
478
+ this .node = node ;
479
+ }
480
+
481
+ @ Override
482
+ public String getValue () {
483
+ if (node .isBNode ()) {
484
+ return "_:" + ((BNode ) node ).getID ();
485
+ }
486
+ return node .stringValue ();
487
+ }
488
+
489
+ @ Override
490
+ public boolean isIRI () {
491
+ return node .isIRI ();
492
+ }
493
+
494
+ @ Override
495
+ public boolean isBlankNode () {
496
+ return node .isBNode ();
497
+ }
498
+
499
+ @ Override
500
+ public int hashCode () {
501
+ return Objects .hash (getValue ());
502
+ }
503
+
504
+ @ Override
505
+ public boolean equals (Object obj ) {
506
+ if (this == obj ) {
507
+ return true ;
508
+ }
509
+ if (obj == null ) {
510
+ return false ;
511
+ }
512
+ if (obj instanceof RdfResource ) {
513
+ RdfResource other = (RdfResource ) obj ;
514
+ return Objects .equals (getValue (), other .getValue ());
515
+ }
516
+
517
+ return false ;
518
+
519
+ }
520
+
521
+ @ Override
522
+ public String toString () {
523
+ return Objects .toString (getValue ());
524
+ }
525
+ }
526
+
527
+ private static class RdfTripleAdapter implements RdfTriple {
528
+ private final Statement statement ;
529
+
530
+ public RdfTripleAdapter (Statement statement ) {
531
+ this .statement = statement ;
532
+ }
533
+
534
+ @ Override
535
+ public RdfResource getSubject () {
536
+ return toRdfResource (statement .getSubject ());
537
+ }
538
+
539
+ @ Override
540
+ public RdfResource getPredicate () {
541
+ return toRdfResource (statement .getPredicate ());
542
+ }
543
+
544
+ @ Override
545
+ public RdfValue getObject () {
546
+ return toRdfValue (statement .getObject ());
547
+ }
548
+ }
549
+
550
+ private static class RdfNQuadAdapter implements RdfNQuad {
551
+ private final Statement statement ;
552
+
553
+ public RdfNQuadAdapter (Statement statement ) {
554
+ this .statement = statement ;
555
+ }
556
+
557
+ @ Override
558
+ public Optional <RdfResource > getGraphName () {
559
+ if (statement .getContext () != null ) {
560
+ return Optional .of (toRdfResource (statement .getContext ()));
561
+ }
562
+ return Optional .empty ();
563
+ }
564
+
565
+ @ Override
566
+ public RdfResource getSubject () {
567
+ return toRdfResource (statement .getSubject ());
568
+ }
569
+
570
+ @ Override
571
+ public RdfResource getPredicate () {
572
+ return toRdfResource (statement .getPredicate ());
573
+ }
574
+
575
+ @ Override
576
+ public RdfValue getObject () {
577
+ return toRdfValue (statement .getObject ());
578
+ }
579
+ }
534
580
}
0 commit comments