Skip to content

Commit dc00830

Browse files
authored
JCL-319: fixed examples & corrected bug in doc (#406)
* fixed examples & corrected bug in doc * back to java 17
1 parent 643af2e commit dc00830

File tree

5 files changed

+68
-34
lines changed

5 files changed

+68
-34
lines changed

examples/cli/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,13 @@ inrupt.examples.cli.client-secret=<your registered client_secret> // mandatory
1111
_**Note:** client-id & client_secret you receive when you register your client at the Solid-OIDC server registration endpoint, example for PodSpaces [https://login.inrupt.com/registration.html](https://login.inrupt.com/registration.html)._
1212

1313
Also make sure you have install cleaned the entire project beforehand, to make sure all dependencies are loaded, with `./mvnw clean install`.
14-
And then you can run the example with `./mvnw quarkus:dev -pl example/cli`.
14+
And then you can run the example with:
15+
16+
```
17+
cd example/cli
18+
#make sure you are using java 17
19+
../../mvnw clean compile
20+
../../mvnw quarkus:dev -pl .
21+
```
22+
23+
And follow the instructions from quarkus to add command line options.

examples/cli/src/main/java/com/inrupt/client/examples/cli/SolidApp.java

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,18 @@
2222

2323
import static org.slf4j.LoggerFactory.getLogger;
2424

25+
import com.inrupt.client.Request;
26+
import com.inrupt.client.Response;
2527
import com.inrupt.client.openid.OpenIdSession;
2628
import com.inrupt.client.solid.SolidContainer;
2729
import com.inrupt.client.solid.SolidResource;
2830
import com.inrupt.client.solid.SolidSyncClient;
29-
import com.inrupt.client.vocabulary.LDP;
3031
import com.inrupt.client.webid.WebIdProfile;
3132

3233
import io.quarkus.runtime.QuarkusApplication;
3334
import io.quarkus.runtime.annotations.QuarkusMain;
3435

3536
import java.io.PrintWriter;
36-
import java.net.URI;
37-
import java.util.Collection;
3837

3938
import javax.inject.Inject;
4039

@@ -91,9 +90,8 @@ public int run(final String... args) {
9190
printWriter.format("Total number of contained resources is: %s ", resources.size());
9291
printWriter.println();
9392

94-
resources.stream().filter(r -> filterResource(r, cmd)).forEach(r -> {
95-
printWriter.format("Resource: %s, %s", r.getIdentifier(),
96-
principalType(r.getMetadata().getType()));
93+
resources.stream().filter(r -> filterResource(client, r, cmd)).forEach(r -> {
94+
printWriter.format("Resource: %s", r.getIdentifier());
9795
printWriter.println();
9896
});
9997
}
@@ -108,30 +106,26 @@ public int run(final String... args) {
108106
return 0;
109107
}
110108

111-
boolean filterResource(final SolidResource resource, final CommandLine cl) {
112-
if (cl.hasOption("c") && resource.getMetadata().getType().contains(LDP.BasicContainer)) {
109+
boolean filterResource(final SolidSyncClient client, final SolidResource resource, final CommandLine cl) {
110+
if (cl.hasOption("c") && resource.getIdentifier().toString().endsWith("/")) {
113111
return true;
114112
}
115-
if (cl.hasOption("r") && resource.getMetadata().getType().contains(LDP.RDFSource)) {
113+
final var req = Request.newBuilder(resource.getIdentifier())
114+
.HEAD()
115+
.build();
116+
final var res = client.send(req, Response.BodyHandlers.discarding());
117+
final var contentType = res.headers().firstValue("Content-Type");
118+
if (cl.hasOption("r") && contentType.isPresent() &&
119+
(contentType.get().toLowerCase().contains("text/turtle")) ) {
116120
return true;
117121
}
118-
if (cl.hasOption("n") && resource.getMetadata().getType().contains(LDP.NonRDFSource)) {
122+
if (cl.hasOption("n") && contentType.isPresent() &&
123+
!(contentType.get().toLowerCase().contains("text/turtle"))) {
119124
return true;
120125
}
121126
return false;
122127
}
123128

124-
public URI principalType(final Collection<URI> types) {
125-
if (types.contains(LDP.BasicContainer)) {
126-
return LDP.BasicContainer;
127-
} else if (types.contains(LDP.RDFSource)) {
128-
return LDP.RDFSource;
129-
} else if (types.contains(LDP.NonRDFSource)) {
130-
return LDP.NonRDFSource;
131-
}
132-
return LDP.Resource;
133-
}
134-
135129
void showHelp(final Options options) {
136130
final var formatter = new HelpFormatter();
137131
formatter.printHelp(printWriter, formatter.getWidth(), "java -jar inrupt-openid-jwk-runner.jar",

examples/webapp/src/main/java/com/inrupt/client/examples/webapp/SolidStorage.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,19 @@
2020
*/
2121
package com.inrupt.client.examples.webapp;
2222

23+
import com.inrupt.client.Request;
24+
import com.inrupt.client.Response;
2325
import com.inrupt.client.openid.OpenIdSession;
2426
import com.inrupt.client.solid.SolidClient;
2527
import com.inrupt.client.solid.SolidContainer;
28+
import com.inrupt.client.solid.SolidResource;
2629
import com.inrupt.client.vocabulary.LDP;
2730
import com.inrupt.client.webid.WebIdProfile;
2831

2932
import io.quarkus.qute.CheckedTemplate;
3033
import io.quarkus.qute.TemplateInstance;
3134

3235
import java.net.URI;
33-
import java.util.Collection;
3436
import java.util.List;
3537
import java.util.concurrent.CompletableFuture;
3638
import java.util.concurrent.CompletionStage;
@@ -62,7 +64,9 @@ static class Templates {
6264
private static native TemplateInstance profile(
6365
WebIdProfile profile,
6466
List<String> containers,
65-
List<String> resources);
67+
List<String> resources,
68+
List<String> nonRDFresources,
69+
List<String> anyResource);
6670
}
6771

6872
@GET
@@ -75,11 +79,12 @@ public CompletionStage<TemplateInstance> solid() {
7579
session.read(storage, SolidContainer.class).thenApply(container -> {
7680
try (container) {
7781
final var resources = container.getResources().stream()
78-
.collect(Collectors.groupingBy(c -> getPrincipalType(c.getMetadata().getType()),
82+
.collect(Collectors.groupingBy(c -> filterResource(session, c),
7983
Collectors.mapping(c -> c.getIdentifier().toString(),
8084
Collectors.toList())));
8185
return Templates.profile(profile, resources.get(LDP.BasicContainer),
82-
resources.get(LDP.RDFSource));
86+
resources.get(LDP.RDFSource), resources.get(LDP.NonRDFSource),
87+
resources.get(LDP.Resource));
8388
}
8489
}))
8590
.orElseGet(SolidStorage::emptyProfile)
@@ -88,15 +93,22 @@ public CompletionStage<TemplateInstance> solid() {
8893
}
8994

9095
static CompletionStage<TemplateInstance> emptyProfile() {
91-
return CompletableFuture.completedFuture(Templates.profile(null, List.of(), List.of()));
96+
return CompletableFuture.completedFuture(Templates.profile(null, List.of(), List.of(), List.of(), List.of()));
9297
}
9398

94-
static URI getPrincipalType(final Collection<URI> types) {
95-
if (types.contains(LDP.BasicContainer)) {
99+
static URI filterResource(final SolidClient client, final SolidResource resource) {
100+
if (resource.getIdentifier().toString().endsWith("/")) {
96101
return LDP.BasicContainer;
97-
} else if (types.contains(LDP.RDFSource)) {
102+
}
103+
final var req = Request.newBuilder(resource.getIdentifier())
104+
.HEAD()
105+
.build();
106+
final var res = client.send(req, Response.BodyHandlers.discarding()).toCompletableFuture().join();
107+
final var contentType = res.headers().firstValue("Content-Type");
108+
if (contentType.isPresent() && (contentType.get().toLowerCase().contains("text/turtle")) ) {
98109
return LDP.RDFSource;
99-
} else if (types.contains(LDP.NonRDFSource)) {
110+
}
111+
if (contentType.isPresent() && !(contentType.get().toLowerCase().contains("text/turtle"))) {
100112
return LDP.NonRDFSource;
101113
}
102114
return LDP.Resource;

examples/webapp/src/main/resources/templates/SolidStorage/profile.html

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ <h3>Solid Storage</h3>
1414
{/for}
1515
</ul>
1616

17-
{#if containers.size > 0}
17+
{#if containers && containers.size > 0}
1818
<h3>Containers</h3>
1919
<ul style= "list-style-type: '\1F4E6'">
2020
{#for c in containers}
@@ -23,7 +23,7 @@ <h3>Containers</h3>
2323
</ul>
2424
{/if}
2525

26-
{#if resources.size > 0}
26+
{#if resources && resources.size > 0}
2727
<h3>Resources</h3>
2828
<ul style= "list-style-type: '\1F4D6'">
2929
{#for r in resources}
@@ -32,6 +32,24 @@ <h3>Resources</h3>
3232
</ul>
3333
{/if}
3434

35+
{#if nonRDFresources && nonRDFresources.size > 0}
36+
<h3>Non RDF Resources</h3>
37+
<ul style= "list-style-type: '\1F4D6'">
38+
{#for r in nonRDFresources}
39+
<li>&rsaquo; {r}</li>
40+
{/for}
41+
</ul>
42+
{/if}
43+
44+
{#if anyResource && anyResource.size > 0}
45+
<h3>Any Resources</h3>
46+
<ul style= "list-style-type: '\1F4D6'">
47+
{#for r in anyResource}
48+
<li>&rsaquo; {r}</li>
49+
{/for}
50+
</ul>
51+
{/if}
52+
3553
{#else}
3654
<p>You do not have any Solid Pods.</p>
3755
{/if}

src/site/apt/data-modeling/multiple-resources.apt.vm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public class MyApplication {
3030
final Request req = Request.newBuilder(r.getIdentifier())
3131
.HEAD()
3232
.build();
33-
final var contentType = req.headers().firstValue("Content-Type");
33+
final var res = client.send(req, Response.BodyHandlers.discarding());
34+
final var contentType = res.headers().firstValue("Content-Type");
3435
if (contentType.isPresent() && (contentType.get().toLowerCase().contains("text/turtle"))) {
3536
try (Playlist playlist = client.read(r.getIdentifier(), Playlist.class)) {
3637
System.out.println(playlist.getTitle());

0 commit comments

Comments
 (0)