Skip to content

Commit 760b0f7

Browse files
authored
Merge pull request #322 from filip26/patch/rdf-equals-hashcode
Rdf API Improvements (toString, equals, hashCode)
2 parents bf08156 + 1bfb4f2 commit 760b0f7

File tree

7 files changed

+82
-29
lines changed

7 files changed

+82
-29
lines changed

src/main/java/com/apicatalog/jsonld/serialization/RdfToJsonld.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,8 @@ private void step5(final String graphName, final RdfGraph graph) throws JsonLdEr
333333
// 5.7.
334334
for (final RdfTriple triple : graph.toList()) {
335335

336-
final String subject = triple.getSubject().toString();
337-
final String predicate = triple.getPredicate().toString();
336+
final String subject = triple.getSubject().getValue();
337+
final String predicate = triple.getPredicate().getValue();
338338

339339
// 5.7.1.
340340
if (!graphMap.contains(graphName, subject)) {
@@ -350,9 +350,9 @@ private void step5(final String graphName, final RdfGraph graph) throws JsonLdEr
350350

351351
// 5.7.4.
352352
if ((triple.getObject().isBlankNode() || triple.getObject().isIRI())
353-
&& !graphMap.contains(graphName, triple.getObject().toString())) {
353+
&& !graphMap.contains(graphName, triple.getObject().getValue())) {
354354

355-
graphMap.set(graphName, triple.getObject().toString(), Keywords.ID, JsonProvider.instance().createValue(triple.getObject().toString()));
355+
graphMap.set(graphName, triple.getObject().getValue(), Keywords.ID, JsonProvider.instance().createValue(triple.getObject().getValue()));
356356
}
357357

358358
// 5.7.5.
@@ -364,11 +364,11 @@ private void step5(final String graphName, final RdfGraph graph) throws JsonLdEr
364364

365365
JsonArray types = type.get().asJsonArray();
366366

367-
graphMap.set(graphName, subject, Keywords.TYPE, JsonProvider.instance().createArrayBuilder(types).add(triple.getObject().toString()).build());
367+
graphMap.set(graphName, subject, Keywords.TYPE, JsonProvider.instance().createArrayBuilder(types).add(triple.getObject().getValue()).build());
368368

369369
} else {
370370

371-
graphMap.set(graphName, subject, Keywords.TYPE, JsonProvider.instance().createArrayBuilder().add(triple.getObject().toString()).build());
371+
graphMap.set(graphName, subject, Keywords.TYPE, JsonProvider.instance().createArrayBuilder().add(triple.getObject().getValue()).build());
372372
}
373373

374374
continue;
@@ -398,20 +398,20 @@ private void step5(final String graphName, final RdfGraph graph) throws JsonLdEr
398398
}
399399

400400
// 5.7.9.
401-
if (triple.getObject().isIRI() && RdfConstants.NIL.equals(triple.getObject().toString())) {
401+
if (triple.getObject().isIRI() && RdfConstants.NIL.equals(triple.getObject().getValue())) {
402402

403403
Reference reference = new Reference();
404404
reference.graphName = graphName;
405405
reference.subject = subject;
406406
reference.property = predicate;
407407
reference.value = value;
408408

409-
graphMap.addUsage(graphName, triple.getObject().toString(), reference);
409+
graphMap.addUsage(graphName, triple.getObject().getValue(), reference);
410410

411411
// 5.7.10.
412-
} else if (referenceOnce.containsKey(triple.getObject().toString())) {
412+
} else if (referenceOnce.containsKey(triple.getObject().getValue())) {
413413

414-
referenceOnce.put(triple.getObject().toString(), null);
414+
referenceOnce.put(triple.getObject().getValue(), null);
415415

416416
// 5.7.11.
417417
} else if (triple.getObject().isBlankNode()) {
@@ -422,7 +422,7 @@ private void step5(final String graphName, final RdfGraph graph) throws JsonLdEr
422422
reference.property = predicate;
423423
reference.value = value;
424424

425-
referenceOnce.put(triple.getObject().toString(), reference);
425+
referenceOnce.put(triple.getObject().getValue(), reference);
426426
}
427427
}
428428
}

src/main/java/com/apicatalog/rdf/RdfTriple.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,17 @@ public interface RdfTriple {
2828
RdfResource getSubject();
2929

3030
/**
31-
* An absolute IRI or blank node identifier denoting the predicate of the triple.
31+
* An absolute IRI or blank node identifier denoting the predicate of the
32+
* triple.
3233
*
3334
* @return an absolute URI or blank node
3435
*/
3536
RdfResource getPredicate();
3637

37-
3838
/**
3939
* An absolute IRI or blank node identifier or {@link RdfLiteral}.
4040
*
4141
* @return {@link RdfValue}
4242
*/
4343
RdfValue getObject();
44-
4544
}

src/main/java/com/apicatalog/rdf/impl/RdfLiteralImpl.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Optional;
2020

2121
import com.apicatalog.rdf.RdfLiteral;
22+
import com.apicatalog.rdf.io.nquad.NQuadsWriter;
2223
import com.apicatalog.rdf.lang.RdfConstants;
2324
import com.apicatalog.rdf.lang.XsdConstants;
2425

@@ -85,15 +86,18 @@ public boolean equals(Object obj) {
8586
public String toString() {
8687
StringBuilder builder = new StringBuilder();
8788

88-
builder.append(value);
89+
builder.append('"');
90+
builder.append(NQuadsWriter.escape(value));
91+
builder.append('"');
8992

9093
if (langTag != null) {
9194
builder.append('@');
9295
builder.append(langTag);
9396

94-
} else if (dataType != null) {
95-
builder.append("^^");
97+
} else if (dataType != null && !XsdConstants.STRING.equals(dataType)) {
98+
builder.append("^^<");
9699
builder.append(dataType);
100+
builder.append('>');
97101
}
98102

99103
return builder.toString();

src/main/java/com/apicatalog/rdf/impl/RdfNQuadImpl.java

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.apicatalog.rdf.impl;
1717

18+
import java.util.Objects;
1819
import java.util.Optional;
1920

2021
import com.apicatalog.rdf.RdfNQuad;
@@ -37,10 +38,39 @@ public Optional<RdfResource> getGraphName() {
3738

3839
@Override
3940
public String toString() {
40-
return "RdfNQuadImpl[subject=" + getSubject()
41-
+ ", predicate=" + getPredicate()
42-
+ ", object=" + getObject()
43-
+ ", graph=" + graphName
44-
+ "]";
41+
final StringBuilder builder = new StringBuilder()
42+
.append(getSubject())
43+
.append(' ')
44+
.append(getPredicate())
45+
.append(' ')
46+
.append(getObject())
47+
.append(' ');
48+
49+
if (graphName != null) {
50+
builder.append(graphName).append(' ');
51+
}
52+
53+
return builder.append('.').toString();
54+
}
55+
56+
@Override
57+
public int hashCode() {
58+
final int prime = 31;
59+
int result = super.hashCode();
60+
result = prime * result + Objects.hash(graphName);
61+
return result;
4562
}
63+
64+
@Override
65+
public boolean equals(Object obj) {
66+
if (this == obj)
67+
return true;
68+
if (!super.equals(obj))
69+
return false;
70+
if (getClass() != obj.getClass())
71+
return false;
72+
RdfNQuadImpl other = (RdfNQuadImpl) obj;
73+
return Objects.equals(graphName, other.graphName);
74+
}
75+
4676
}

src/main/java/com/apicatalog/rdf/impl/RdfResourceImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public boolean equals(Object obj) {
6666

6767
@Override
6868
public String toString() {
69-
return Objects.toString(value);
69+
if (blankNode) {
70+
return Objects.toString(value);
71+
}
72+
return '<' + Objects.toString(value) + '>';
7073
}
7174
}

src/main/java/com/apicatalog/rdf/impl/RdfTripleImpl.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package com.apicatalog.rdf.impl;
1717

18+
import java.util.Objects;
19+
1820
import com.apicatalog.rdf.RdfResource;
1921
import com.apicatalog.rdf.RdfTriple;
2022
import com.apicatalog.rdf.RdfValue;
@@ -50,9 +52,24 @@ public RdfValue getObject() {
5052

5153
@Override
5254
public String toString() {
53-
return "RdfTripleImpl[subject=" + subject
54-
+ ", predicate=" + predicate
55-
+ ", object=" + object
56-
+ "]";
55+
return subject + " " + predicate + " " + object + " .";
56+
}
57+
58+
@Override
59+
public int hashCode() {
60+
return Objects.hash(object, predicate, subject);
61+
}
62+
63+
@Override
64+
public boolean equals(Object obj) {
65+
if (this == obj)
66+
return true;
67+
if (obj == null)
68+
return false;
69+
if (getClass() != obj.getClass())
70+
return false;
71+
RdfTripleImpl other = (RdfTripleImpl) obj;
72+
return Objects.equals(object, other.object) && Objects.equals(predicate, other.predicate) && Objects.equals(subject, other.subject);
5773
}
74+
5875
}

src/main/java/com/apicatalog/rdf/io/nquad/NQuadsWriter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void writeValue(RdfValue object) throws IOException {
7777
}
7878

7979
if (object.isIRI()) {
80-
writeIri(object.toString());
80+
writeIri(object.getValue());
8181
return;
8282
}
8383

@@ -87,7 +87,7 @@ public void writeValue(RdfValue object) throws IOException {
8787
}
8888

8989
if (object.isBlankNode()) {
90-
writer.write(object.toString());
90+
writer.write(object.getValue());
9191
return;
9292
}
9393

0 commit comments

Comments
 (0)