Skip to content

Commit 3e58d87

Browse files
committed
Package implementation and test fixes
1 parent 48f4e9e commit 3e58d87

13 files changed

Lines changed: 293 additions & 83 deletions

File tree

http-tests/admin/packages/install-package-400.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ curl -k -w "%{http_code}\n" -o /dev/null -s \
1212
-E "$OWNER_CERT_FILE":"$OWNER_CERT_PWD" \
1313
-X POST \
1414
-H "Content-Type: application/x-www-form-urlencoded" \
15-
"$ADMIN_BASE_URL"packages/install \
15+
"${ADMIN_BASE_URL}packages/install" \
1616
| grep -q "$STATUS_BAD_REQUEST"

http-tests/admin/packages/install-package-401.sh renamed to http-tests/admin/packages/install-package-403.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ purge_cache "$END_USER_VARNISH_SERVICE"
77
purge_cache "$ADMIN_VARNISH_SERVICE"
88
purge_cache "$FRONTEND_VARNISH_SERVICE"
99

10-
# Unauthorized access (without certificate) should return 401 Unauthorized
10+
# Unauthorized access (without certificate) should return 403 Forbidden
1111
curl -k -w "%{http_code}\n" -o /dev/null -s \
1212
-X POST \
1313
-H "Content-Type: application/x-www-form-urlencoded" \
1414
--data-urlencode "package-uri=https://packages.linkeddatahub.com/skos/#this" \
15-
"$ADMIN_BASE_URL"packages/install \
16-
| grep -q "$STATUS_UNAUTHORIZED"
15+
"${ADMIN_BASE_URL}packages/install" \
16+
| grep -q "$STATUS_FORBIDDEN"

http-tests/admin/packages/install-package-404.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ curl -k -w "%{http_code}\n" -o /dev/null -s \
1414
-X POST \
1515
-H "Content-Type: application/x-www-form-urlencoded" \
1616
--data-urlencode "package-uri=https://packages.linkeddatahub.com/nonexistent/#package" \
17-
"$ADMIN_BASE_URL"packages/install \
17+
"${ADMIN_BASE_URL}packages/install" \
1818
| grep -q "$STATUS_NOT_FOUND"

http-tests/admin/packages/install-package.sh

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,13 @@ curl -k -w "%{http_code}\n" -o /dev/null -f -s \
1616
-X POST \
1717
-H "Content-Type: application/x-www-form-urlencoded" \
1818
--data-urlencode "package-uri=$package_uri" \
19-
"$ADMIN_BASE_URL"packages/install \
19+
"${ADMIN_BASE_URL}packages/install" \
2020
| grep -q "$STATUS_SEE_OTHER"
2121

22-
# verify package stylesheet was installed to filesystem
23-
# path should be: /static/com/linkeddatahub/packages/skos/layout.xsl
24-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
25-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
26-
--env-file "$HTTP_TEST_ROOT/.env" \
27-
exec -T linkeddatahub \
28-
test -f /usr/local/tomcat/webapps/ROOT/static/com/linkeddatahub/packages/skos/layout.xsl
22+
# verify package stylesheet was installed (should return 200)
23+
curl -k -f -s -o /dev/null \
24+
"$END_USER_BASE_URL"static/com/linkeddatahub/packages/skos/layout.xsl
2925

3026
# verify master stylesheet was regenerated and includes package import
31-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
32-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
33-
--env-file "$HTTP_TEST_ROOT/.env" \
34-
exec -T linkeddatahub \
35-
grep -q "com/linkeddatahub/packages/skos/layout.xsl" \
36-
/usr/local/tomcat/webapps/ROOT/static/localhost/layout.xsl
27+
curl -k -s "${END_USER_BASE_URL}static/localhost/layout.xsl" \
28+
| grep -q "com/linkeddatahub/packages/skos/layout.xsl"

http-tests/admin/packages/install-uninstall-package.sh

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,6 @@ purge_cache "$FRONTEND_VARNISH_SERVICE"
1010
# test package URI (SKOS package)
1111
package_uri="https://packages.linkeddatahub.com/skos/#this"
1212

13-
# ensure package is not installed initially
14-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
15-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
16-
--env-file "$HTTP_TEST_ROOT/.env" \
17-
exec -T linkeddatahub \
18-
test ! -f /usr/local/tomcat/webapps/ROOT/static/com/linkeddatahub/packages/skos/layout.xsl || true
19-
2013
# install package
2114
curl -k -w "%{http_code}\n" -o /dev/null -f -s \
2215
-E "$OWNER_CERT_FILE":"$OWNER_CERT_PWD" \
@@ -26,20 +19,13 @@ curl -k -w "%{http_code}\n" -o /dev/null -f -s \
2619
"$ADMIN_BASE_URL"packages/install \
2720
| grep -q "$STATUS_SEE_OTHER"
2821

29-
# verify package was installed
30-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
31-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
32-
--env-file "$HTTP_TEST_ROOT/.env" \
33-
exec -T linkeddatahub \
34-
test -f /usr/local/tomcat/webapps/ROOT/static/com/linkeddatahub/packages/skos/layout.xsl
22+
# verify package stylesheet was installed (should return 200)
23+
curl -k -f -s -o /dev/null \
24+
"${END_USER_BASE_URL}static/com/linkeddatahub/packages/skos/layout.xsl"
3525

3626
# verify master stylesheet includes package
37-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
38-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
39-
--env-file "$HTTP_TEST_ROOT/.env" \
40-
exec -T linkeddatahub \
41-
grep -q "com/linkeddatahub/packages/skos/layout.xsl" \
42-
/usr/local/tomcat/webapps/ROOT/static/localhost/layout.xsl
27+
curl -k -s "$END_USER_BASE_URL"static/localhost/layout.xsl \
28+
| grep -q "com/linkeddatahub/packages/skos/layout.xsl"
4329

4430
# uninstall package
4531
curl -k -w "%{http_code}\n" -o /dev/null -f -s \
@@ -50,16 +36,11 @@ curl -k -w "%{http_code}\n" -o /dev/null -f -s \
5036
"$ADMIN_BASE_URL"packages/uninstall \
5137
| grep -q "$STATUS_SEE_OTHER"
5238

53-
# verify package was uninstalled
54-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
55-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
56-
--env-file "$HTTP_TEST_ROOT/.env" \
57-
exec -T linkeddatahub \
58-
test ! -f /usr/local/tomcat/webapps/ROOT/static/com/linkeddatahub/packages/skos/layout.xsl
39+
# verify package stylesheet was deleted (should return 404)
40+
curl -k -w "%{http_code}\n" -o /dev/null -s \
41+
"${END_USER_BASE_URL}static/com/linkeddatahub/packages/skos/layout.xsl" \
42+
| grep -q "$STATUS_NOT_FOUND"
5943

6044
# verify master stylesheet no longer includes package
61-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
62-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
63-
--env-file "$HTTP_TEST_ROOT/.env" \
64-
exec -T linkeddatahub \
65-
bash -c '! grep -q "com/linkeddatahub/packages/skos/layout.xsl" /usr/local/tomcat/webapps/ROOT/static/localhost/layout.xsl'
45+
curl -k -s "$END_USER_BASE_URL"static/localhost/layout.xsl \
46+
| grep -v -q "com/linkeddatahub/packages/skos/layout.xsl"

http-tests/admin/packages/uninstall-package-400.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ curl -k -w "%{http_code}\n" -o /dev/null -s \
1212
-E "$OWNER_CERT_FILE":"$OWNER_CERT_PWD" \
1313
-X POST \
1414
-H "Content-Type: application/x-www-form-urlencoded" \
15-
"$ADMIN_BASE_URL"packages/uninstall \
15+
"{$ADMIN_BASE_URL}packages/uninstall" \
1616
| grep -q "$STATUS_BAD_REQUEST"

http-tests/admin/packages/uninstall-package.sh

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,27 @@ curl -k -w "%{http_code}\n" -o /dev/null -f -s \
1616
-X POST \
1717
-H "Content-Type: application/x-www-form-urlencoded" \
1818
--data-urlencode "package-uri=$package_uri" \
19-
"$ADMIN_BASE_URL"packages/install \
19+
"${ADMIN_BASE_URL}packages/install" \
2020
| grep -q "$STATUS_SEE_OTHER"
2121

22-
# verify package stylesheet exists before uninstall
23-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
24-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
25-
--env-file "$HTTP_TEST_ROOT/.env" \
26-
exec -T linkeddatahub \
27-
test -f /usr/local/tomcat/webapps/ROOT/static/com/linkeddatahub/packages/skos/layout.xsl
22+
# verify package stylesheet exists before uninstall (should return 200)
23+
curl -k -f -s -o /dev/null \
24+
"${END_USER_BASE_URL}static/com/linkeddatahub/packages/skos/layout.xsl"
2825

2926
# uninstall package via POST to packages/uninstall endpoint
3027
curl -k -w "%{http_code}\n" -o /dev/null -f -s \
3128
-E "$OWNER_CERT_FILE":"$OWNER_CERT_PWD" \
3229
-X POST \
3330
-H "Content-Type: application/x-www-form-urlencoded" \
3431
--data-urlencode "package-uri=$package_uri" \
35-
"$ADMIN_BASE_URL"packages/uninstall \
32+
"${ADMIN_BASE_URL}packages/uninstall" \
3633
| grep -q "$STATUS_SEE_OTHER"
3734

38-
# verify package stylesheet was deleted
39-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
40-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
41-
--env-file "$HTTP_TEST_ROOT/.env" \
42-
exec -T linkeddatahub \
43-
test ! -f /usr/local/tomcat/webapps/ROOT/static/com/linkeddatahub/packages/skos/layout.xsl
35+
# verify package stylesheet was deleted (should return 404)
36+
curl -k -w "%{http_code}\n" -o /dev/null -s \
37+
"${END_USER_BASE_URL}static/com/linkeddatahub/packages/skos/layout.xsl" \
38+
| grep -q "$STATUS_NOT_FOUND"
4439

4540
# verify master stylesheet was regenerated without package import
46-
docker compose -f "$HTTP_TEST_ROOT/../docker-compose.yml" \
47-
-f "$HTTP_TEST_ROOT/docker-compose.http-tests.yml" \
48-
--env-file "$HTTP_TEST_ROOT/.env" \
49-
exec -T linkeddatahub \
50-
bash -c '! grep -q "com/linkeddatahub/packages/skos/layout.xsl" /usr/local/tomcat/webapps/ROOT/static/localhost/layout.xsl'
41+
curl -k -s "$END_USER_BASE_URL"static/localhost/layout.xsl \
42+
| grep -v -q "com/linkeddatahub/packages/skos/layout.xsl"

src/main/java/com/atomgraph/linkeddatahub/resource/admin/pkg/Install.java

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package com.atomgraph.linkeddatahub.resource.admin.pkg;
1818

19+
import com.atomgraph.client.util.DataManager;
1920
import com.atomgraph.linkeddatahub.apps.model.AdminApplication;
2021
import com.atomgraph.linkeddatahub.apps.model.EndUserApplication;
2122
import com.atomgraph.linkeddatahub.client.LinkedDataClient;
@@ -49,6 +50,7 @@
4950
import java.util.ArrayList;
5051
import java.util.List;
5152
import java.util.Set;
53+
import org.apache.jena.util.FileManager;
5254

5355
/**
5456
* JAX-RS resource that installs a LinkedDataHub package.
@@ -67,6 +69,7 @@ public class Install
6769

6870
private final com.atomgraph.linkeddatahub.apps.model.Application application;
6971
private final com.atomgraph.linkeddatahub.Application system;
72+
private final DataManager dataManager;
7073

7174
@Context ServletContext servletContext;
7275

@@ -75,13 +78,16 @@ public class Install
7578
*
7679
* @param application matched application (admin app)
7780
* @param system system application
81+
* @param dataManager data manager
7882
*/
7983
@Inject
8084
public Install(com.atomgraph.linkeddatahub.apps.model.Application application,
81-
com.atomgraph.linkeddatahub.Application system)
85+
com.atomgraph.linkeddatahub.Application system,
86+
DataManager dataManager)
8287
{
8388
this.application = application;
8489
this.system = system;
90+
this.dataManager = dataManager;
8591
}
8692

8793
/**
@@ -112,14 +118,13 @@ public Response post(@FormParam("package-uri") String packageURI, @HeaderParam("
112118

113119
if (ontology == null) throw new BadRequestException("Package ontology not found");
114120

115-
URI ontologyURI = URI.create(ontology.getURI());
116121
URI stylesheetURI = (stylesheet != null) ? URI.create(stylesheet.getURI()) : null;
117122

118123
String packagePath = UriPath.convert(packageURI);
119124

120125
// 2. Download and install ontology
121-
if (log.isDebugEnabled()) log.debug("Downloading package ontology from: {}", ontologyURI);
122-
Model ontologyModel = downloadOntology(ontologyURI);
126+
if (log.isDebugEnabled()) log.debug("Downloading package ontology from: {}", ontology.getURI());
127+
Model ontologyModel = downloadOntology(ontology.getURI());
123128
installOntology(endUserApp, ontologyModel);
124129

125130
// 3. Download and install stylesheet if present
@@ -164,8 +169,21 @@ private com.atomgraph.linkeddatahub.apps.model.Package getPackage(String package
164169
{
165170
if (log.isDebugEnabled()) log.debug("Loading package from: {}", packageURI);
166171

167-
LinkedDataClient ldc = LinkedDataClient.create(getSystem().getClient(), getSystem().getMediaTypes());
168-
Model model = ldc.getModel(packageURI);
172+
final Model model;
173+
174+
// check if we have the model in the cache first and if yes, return it from there instead making an HTTP request
175+
if (((FileManager)getDataManager()).hasCachedModel(packageURI) ||
176+
(getDataManager().isResolvingMapped() && getDataManager().isMapped(packageURI))) // read mapped URIs (such as system ontologies) from a file
177+
{
178+
if (log.isDebugEnabled()) log.debug("hasCachedModel({}): {}", packageURI, ((FileManager)getDataManager()).hasCachedModel(packageURI));
179+
if (log.isDebugEnabled()) log.debug("isMapped({}): {}", packageURI, getDataManager().isMapped(packageURI));
180+
model = getDataManager().loadModel(packageURI);
181+
}
182+
else
183+
{
184+
LinkedDataClient ldc = LinkedDataClient.create(getSystem().getClient(), getSystem().getMediaTypes());
185+
model = ldc.getModel(packageURI);
186+
}
169187

170188
return model.getResource(packageURI).as(com.atomgraph.linkeddatahub.apps.model.Package.class);
171189
}
@@ -185,12 +203,23 @@ private com.atomgraph.linkeddatahub.apps.model.Package getPackage(String package
185203
/**
186204
* Downloads RDF from a URI using LinkedDataClient.
187205
*/
188-
private Model downloadOntology(URI uri) throws IOException
206+
private Model downloadOntology(String uri) throws IOException
189207
{
190-
if (log.isDebugEnabled()) log.debug("Downloading RDF from: {}", uri);
208+
if (log.isDebugEnabled()) log.debug("Downloading ontology from: {}", uri);
191209

192-
LinkedDataClient ldc = LinkedDataClient.create(getSystem().getClient(), getSystem().getMediaTypes());
193-
return ldc.getModel(uri.toString());
210+
// check if we have the model in the cache first and if yes, return it from there instead making an HTTP request
211+
if (((FileManager)getDataManager()).hasCachedModel(uri) ||
212+
(getDataManager().isResolvingMapped() && getDataManager().isMapped(uri))) // read mapped URIs (such as system ontologies) from a file
213+
{
214+
if (log.isDebugEnabled()) log.debug("hasCachedModel({}): {}", uri, ((FileManager)getDataManager()).hasCachedModel(uri));
215+
if (log.isDebugEnabled()) log.debug("isMapped({}): {}", uri, getDataManager().isMapped(uri));
216+
return getDataManager().loadModel(uri);
217+
}
218+
else
219+
{
220+
LinkedDataClient ldc = LinkedDataClient.create(getSystem().getClient(), getSystem().getMediaTypes());
221+
return ldc.getModel(uri);
222+
}
194223
}
195224

196225
/**
@@ -206,9 +235,7 @@ private String downloadStylesheet(URI uri) throws IOException
206235
try (Response response = target.request("text/xsl", "text/*;q=0.8").get())
207236
{
208237
if (!response.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL))
209-
{
210238
throw new IOException("Failed to download XSLT from " + uri + ": " + response.getStatus());
211-
}
212239

213240
return response.readEntity(String.class);
214241
}
@@ -320,4 +347,14 @@ public ServletContext getServletContext()
320347
return servletContext;
321348
}
322349

350+
/**
351+
* Returns RDF data manager.
352+
*
353+
* @return RDF data manager
354+
*/
355+
public DataManager getDataManager()
356+
{
357+
return dataManager;
358+
}
359+
323360
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE xsl:stylesheet [
3+
<!ENTITY ldh "https://w3id.org/atomgraph/linkeddatahub#">
4+
<!ENTITY ac "https://w3id.org/atomgraph/client#">
5+
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
6+
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">
7+
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
8+
<!ENTITY skos "http://www.w3.org/2004/02/skos/core#">
9+
<!ENTITY srx "http://www.w3.org/2005/sparql-results#">
10+
<!ENTITY foaf "http://xmlns.com/foaf/0.1/">
11+
]>
12+
<xsl:stylesheet version="2.0"
13+
xmlns="http://www.w3.org/1999/xhtml"
14+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
15+
xmlns:xhtml="http://www.w3.org/1999/xhtml"
16+
xmlns:xs="http://www.w3.org/2001/XMLSchema"
17+
xmlns:ldh="&ldh;"
18+
xmlns:ac="&ac;"
19+
xmlns:rdf="&rdf;"
20+
xmlns:rdfs="&rdfs;"
21+
xmlns:xsd="&xsd;"
22+
xmlns:skos="&skos;"
23+
xmlns:srx="&srx;"
24+
xmlns:foaf="&foaf;"
25+
xmlns:bs2="http://graphity.org/xsl/bootstrap/2.3.2"
26+
exclude-result-prefixes="#all">
27+
28+
<xsl:param name="ldh:base" as="xs:anyURI" static="yes"/>
29+
30+
<xsl:import _href="{resolve-uri('static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/layout.xsl', $ldh:base)}"/>
31+
32+
<xsl:param name="foaf:Agent" as="document-node()?"/>
33+
34+
<xsl:template match="rdf:RDF | srx:sparql" mode="xhtml:Style">
35+
<xsl:param name="load-wymeditor" select="exists($foaf:Agent//@rdf:about)" as="xs:boolean"/>
36+
<xsl:param name="load-yasqe" select="true()" as="xs:boolean"/>
37+
38+
<xsl:apply-imports/>
39+
40+
<!-- inject custom Bootstrap theme that overrides the default one -->
41+
<link href="{resolve-uri('static/com/linkeddatahub/demo/skos/css/bootstrap.css', $ac:contextUri)}" rel="stylesheet" type="text/css"/>
42+
<!-- re-apply LinkedDataHub's Bootstrap customizations -->
43+
<link href="{resolve-uri('static/com/atomgraph/linkeddatahub/css/bootstrap.css', $ac:contextUri)}" rel="stylesheet" type="text/css"/>
44+
45+
<xsl:if test="$load-wymeditor">
46+
<link href="{resolve-uri('static/com/atomgraph/linkeddatahub/js/wymeditor/skins/default/skin.css', $ac:contextUri)}" rel="stylesheet" type="text/css"/>
47+
</xsl:if>
48+
<xsl:if test="$load-yasqe">
49+
<link href="{resolve-uri('static/css/yasqe.css', $ac:contextUri)}" rel="stylesheet" type="text/css"/>
50+
</xsl:if>
51+
</xsl:template>
52+
53+
<xsl:template match="rdf:RDF" mode="xhtml:Style">
54+
<xsl:next-match/>
55+
56+
<link href="{resolve-uri('static/com/linkeddatahub/demo/skos/css/bootstrap.css', $ac:contextUri)}" rel="stylesheet" type="text/css"/>
57+
</xsl:template>
58+
59+
<xsl:template match="skos:narrower | skos:broader | skos:related | skos:member" mode="bs2:PropertyList"/>
60+
61+
</xsl:stylesheet>

0 commit comments

Comments
 (0)