16
16
import static java .util .Arrays .asList ;
17
17
import static java .util .Collections .emptyList ;
18
18
import static java .util .Objects .isNull ;
19
+ import static java .util .Optional .empty ;
19
20
import static java .util .Optional .of ;
20
21
import static java .util .ServiceLoader .load ;
21
22
import static org .apache .jena .query .DatasetFactory .createTxnMem ;
22
23
import static org .apache .jena .query .DatasetFactory .wrap ;
23
24
import static org .apache .jena .rdfconnection .RDFConnectionFactory .connect ;
24
25
import static org .apache .jena .tdb2 .DatabaseMgr .connectDatasetGraph ;
25
26
26
-
27
27
import java .util .Collection ;
28
28
import java .util .Iterator ;
29
+ import java .util .Optional ;
29
30
import java .util .function .Supplier ;
30
31
31
32
import org .apache .jena .rdfconnection .RDFConnection ;
33
+ import org .apache .tamaya .Configuration ;
34
+ import org .apache .tamaya .ConfigurationProvider ;
32
35
import org .trellisldp .api .RuntimeTrellisException ;
36
+ import org .trellisldp .http .CacheControlFilter ;
37
+ import org .trellisldp .http .CrossOriginResourceSharingFilter ;
33
38
34
39
final class AppUtils {
35
40
41
+ private static final Configuration config = ConfigurationProvider .getConfiguration ();
42
+
36
43
public static <T > T loadFirst (final Class <T > service ) {
37
44
return of (load (service ).iterator ()).filter (Iterator ::hasNext ).map (Iterator ::next )
38
45
.orElseThrow (() -> new RuntimeTrellisException ("No loadable " + service .getName () + " on the classpath" ));
@@ -46,6 +53,29 @@ public static Collection<String> asCollection(final String value) {
46
53
return isNull (value ) ? emptyList () : asList (value .trim ().split ("\\ s*,\\ s*" ));
47
54
}
48
55
56
+ public static Optional <CacheControlFilter > getCacheControlFilter () {
57
+ if (config .getOrDefault ("trellis.cache.enabled" , Boolean .class , false )) {
58
+ return of (new CacheControlFilter (
59
+ config .getOrDefault ("trellis.cache.maxAge" , Integer .class , 86400 ),
60
+ config .getOrDefault ("trellis.cache.mustRevalidate" , Boolean .class , true ),
61
+ config .getOrDefault ("trellis.cache.noCache" , Boolean .class , false )));
62
+ }
63
+ return empty ();
64
+ }
65
+
66
+ public static Optional <CrossOriginResourceSharingFilter > getCORSFilter () {
67
+ if (config .getOrDefault ("trellis.cors.enabled" , Boolean .class , false )) {
68
+ return of (new CrossOriginResourceSharingFilter (
69
+ AppUtils .asCollection (config .get ("trellis.cors.allowOrigin" )),
70
+ AppUtils .asCollection (config .get ("trellis.cors.allowMethods" )),
71
+ AppUtils .asCollection (config .get ("trellis.cors.allowHeaders" )),
72
+ AppUtils .asCollection (config .get ("trellis.cors.exposeHeaders" )),
73
+ false , // <- Allow-Credentials not supported
74
+ config .getOrDefault ("trellis.cors.maxAge" , Integer .class , 180 )));
75
+ }
76
+ return empty ();
77
+ }
78
+
49
79
public static RDFConnection getRDFConnection (final String location ) {
50
80
if (isNull (location )) {
51
81
return connect (createTxnMem ());
0 commit comments