Skip to content

Commit 63b8575

Browse files
committed
performance optimizations
1 parent 493e4d5 commit 63b8575

File tree

2 files changed

+196
-150
lines changed

2 files changed

+196
-150
lines changed

core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriter.java

Lines changed: 195 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -287,174 +287,37 @@ public int size() {
287287
}
288288

289289
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);
314291
}
315292

316293
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);
333295
}
334296

335297
private static RdfValue toRdfValue(Value node) {
336298
if (node.isResource()) {
337299
return toRdfResource((Resource) node);
338300
} 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);
402302

403303
}
404304
throw new IllegalArgumentException("Unknown type of node: " + node);
405305

406306
}
407307

408308
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);
455310
}
456311

457312
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+
458321
if (node.isIRI()) {
459322
return vf.createIRI(node.getValue());
460323
} else if (node.isBlankNode()) {
@@ -476,12 +339,19 @@ private Value toRdf4jValue(RdfValue node) {
476339

477340
private IRI toRdf4jIri(RdfResource node) {
478341
if (node.isIRI()) {
342+
if (node instanceof RdfResourceAdapter) {
343+
return (IRI) ((RdfResourceAdapter) node).node;
344+
}
479345
return vf.createIRI(node.getValue());
480346
}
481347
throw new IllegalArgumentException("Unknown type of node: " + node);
482348
}
483349

484350
private Resource toRdf4jResource(RdfResource node) {
351+
if (node instanceof RdfResourceAdapter) {
352+
return ((RdfResourceAdapter) node).node;
353+
}
354+
485355
if (node.isIRI()) {
486356
return vf.createIRI(node.getValue());
487357
} else if (node.isBlankNode()) {
@@ -531,4 +401,180 @@ private static void addPrefixes(Map<String, Object> ctx, Set<Namespace> namespac
531401
}
532402
}
533403

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+
}
534580
}

core/rio/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
<module>datatypes</module>
1717
<module>binary</module>
1818
<module>hdt</module>
19-
<module>jsonld</module>
2019
<module>jsonld-legacy</module>
20+
<module>jsonld</module>
2121
<module>n3</module>
2222
<module>nquads</module>
2323
<module>ntriples</module>

0 commit comments

Comments
 (0)