1616import static java .util .Arrays .asList ;
1717import static java .util .Collections .emptyList ;
1818import static java .util .Objects .isNull ;
19+ import static java .util .Optional .empty ;
1920import static java .util .Optional .of ;
2021import static java .util .ServiceLoader .load ;
2122import static org .apache .jena .query .DatasetFactory .createTxnMem ;
2223import static org .apache .jena .query .DatasetFactory .wrap ;
2324import static org .apache .jena .rdfconnection .RDFConnectionFactory .connect ;
2425import static org .apache .jena .tdb2 .DatabaseMgr .connectDatasetGraph ;
2526
26-
2727import java .util .Collection ;
2828import java .util .Iterator ;
29+ import java .util .Optional ;
2930import java .util .function .Supplier ;
3031
3132import org .apache .jena .rdfconnection .RDFConnection ;
33+ import org .apache .tamaya .Configuration ;
34+ import org .apache .tamaya .ConfigurationProvider ;
3235import org .trellisldp .api .RuntimeTrellisException ;
36+ import org .trellisldp .http .CacheControlFilter ;
37+ import org .trellisldp .http .CrossOriginResourceSharingFilter ;
3338
3439final class AppUtils {
3540
41+ private static final Configuration config = ConfigurationProvider .getConfiguration ();
42+
3643 public static <T > T loadFirst (final Class <T > service ) {
3744 return of (load (service ).iterator ()).filter (Iterator ::hasNext ).map (Iterator ::next )
3845 .orElseThrow (() -> new RuntimeTrellisException ("No loadable " + service .getName () + " on the classpath" ));
@@ -46,6 +53,29 @@ public static Collection<String> asCollection(final String value) {
4653 return isNull (value ) ? emptyList () : asList (value .trim ().split ("\\ s*,\\ s*" ));
4754 }
4855
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+
4979 public static RDFConnection getRDFConnection (final String location ) {
5080 if (isNull (location )) {
5181 return connect (createTxnMem ());
0 commit comments