1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.discovery.jdk;
18
19 import java.io.IOException;
20 import java.net.URL;
21 import java.util.Enumeration;
22
23 /**
24 * JDK Hooks to extract properties/resources.
25 */
26 public abstract class JDKHooks {
27
28 private static final JDKHooks jdkHooks;
29
30 static {
31 jdkHooks = new JDK12Hooks();
32 }
33
34 /**
35 * Hidden constructor, this class can't be directly instantiated.
36 */
37 protected JDKHooks() { }
38
39 /**
40 * Return singleton object representing JVM hooks/tools.
41 *
42 * TODO: add logic to detect JDK level.
43 *
44 * @return The detected {@code JDKHooks}
45 */
46 public static final JDKHooks getJDKHooks() {
47 return jdkHooks;
48 }
49
50 /**
51 * Get the system property
52 *
53 * @param propName name of the property
54 * @return value of the property
55 */
56 public abstract String getSystemProperty(final String propName);
57
58 /**
59 * The thread context class loader is available for JDK 1.2
60 * or later, if certain security conditions are met.
61 *
62 * @return The thread context class loader, if available.
63 * Otherwise return null.
64 */
65 public abstract ClassLoader getThreadContextClassLoader();
66
67 /**
68 * The system class loader is available for JDK 1.2
69 * or later, if certain security conditions are met.
70 *
71 * @return The system class loader, if available.
72 * Otherwise return null.
73 */
74 public abstract ClassLoader getSystemClassLoader();
75
76 /**
77 * Resolve resource with given names and make them available in
78 * the returned iterator.
79 *
80 * @param loader The class loader used to resolve resources
81 * @param resourceName The resource name to resolve
82 * @return The iterator over the URL resolved resources
83 * @throws IOException if any error occurs while loading the resource
84 */
85 public abstract Enumeration<URL> getResources(ClassLoader loader, String resourceName) throws IOException;
86
87 }