1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.shared.utils;
20
21 import javax.annotation.Nonnull;
22 import javax.annotation.Nullable;
23
24 import java.io.File;
25 import java.io.FileInputStream;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.net.URL;
29 import java.util.Properties;
30
31 /**
32 * Static utility methods for loading properties.
33 */
34 public class PropertyUtils {
35
36 /**
37 * The constructor.
38 *
39 * @deprecated This is a utility class with only static methods. Don't create instances of it.
40 */
41 @Deprecated
42 public PropertyUtils() {}
43
44 /**
45 * @param url the URL which should be used to load the properties
46 * @return the loaded properties
47 * @deprecated use {@link #loadOptionalProperties(java.net.URL)} instead. This method should not
48 * be used as it suppresses exceptions silently when loading properties fails and returns {@code null}
49 * instead of an empty {@code Properties} instance when the given {@code URL} is {@code null}.
50 */
51 @Deprecated
52 public static java.util.Properties loadProperties(@Nonnull URL url) {
53 try (InputStream in = url.openStream()) {
54 return loadProperties(in);
55 } catch (Exception e) {
56 // ignore
57 }
58 return null;
59 }
60
61 /**
62 * @param file the file from which the properties will be loaded
63 * @return the loaded properties
64 * @deprecated use {@link #loadOptionalProperties(java.io.File)} instead. This method should not
65 * be used as it suppresses exceptions silently when loading properties fails and returns {@code null}
66 * instead of an empty {@code Properties} instance when the given {@code File} is {@code null}.
67 */
68 @Deprecated
69 public static Properties loadProperties(@Nonnull File file) {
70 try (InputStream in = new FileInputStream(file)) {
71 return loadProperties(in);
72 } catch (Exception e) {
73 // ignore
74 }
75 return null;
76 }
77
78 /**
79 * Loads {@code Properties} from an {@code InputStream} and closes the stream.
80 * In a future release, this will no longer close the stream, so callers
81 * should close the stream themselves.
82 *
83 * @param is {@link InputStream}
84 * @return the loaded properties
85 * @deprecated use {@link #loadOptionalProperties(java.io.InputStream)} instead. This method
86 * should not be used as it suppresses exceptions silently when loading properties fails.
87 */
88 @Deprecated
89 public static Properties loadProperties(@Nullable InputStream is) {
90 try {
91 Properties result = new Properties();
92 if (is != null) {
93 try (InputStream in = is) {
94 result.load(in);
95 } catch (IOException e) {
96 // ignore
97 }
98 }
99 return result;
100 } catch (Exception e) {
101 // ignore
102 }
103 return null;
104 }
105
106 /**
107 * Loads {@code Properties} from a given {@code URL}.
108 * <p>
109 * If the given {@code URL} is {@code null} or the properties can't be read, an empty properties object is returned.
110 * </p>
111 *
112 * @param url the {@code URL} of the properties resource to load or {@code null}
113 * @return the loaded properties or an empty {@code Properties} instance if properties fail to load
114 * @since 3.1.0
115 */
116 @Nonnull
117 public static Properties loadOptionalProperties(final @Nullable URL url) {
118
119 Properties properties = new Properties();
120 if (url != null) {
121 try (InputStream in = url.openStream()) {
122 properties.load(in);
123 } catch (IllegalArgumentException | IOException ex) {
124 // ignore and return empty properties
125 }
126 }
127 return properties;
128 }
129
130 /**
131 * Loads {@code Properties} from a {@code File}.
132 * <p>
133 * If the given {@code File} is {@code null} or the properties file can't be read, an empty properties object is
134 * returned.
135 * </p>
136 *
137 * @param file the {@code File} of the properties resource to load or {@code null}
138 * @return the loaded properties or an empty {@code Properties} instance if properties fail to load
139 * @since 3.1.0
140 */
141 @Nonnull
142 public static Properties loadOptionalProperties(final @Nullable File file) {
143 Properties properties = new Properties();
144 if (file != null) {
145 try (InputStream in = new FileInputStream(file)) {
146 properties.load(in);
147 } catch (IllegalArgumentException | IOException ex) {
148 // ignore and return empty properties
149 }
150 }
151
152 return properties;
153 }
154
155 /**
156 * Loads {@code Properties} from an {@code InputStream} and closes the stream.
157 * If the given {@code InputStream} is {@code null} or the properties can't be read, an empty properties object is
158 * returned. In a future release, this will no longer close the stream, so callers
159 * should close the stream themselves.
160 *
161 * @param inputStream the properties resource to load or {@code null}
162 * @return the loaded properties or an empty {@code Properties} instance if properties fail to load
163 * @since 3.1.0
164 */
165 @Nonnull
166 public static Properties loadOptionalProperties(final @Nullable InputStream inputStream) {
167
168 Properties properties = new Properties();
169
170 if (inputStream != null) {
171 try (InputStream in = inputStream) // reassign inputStream to autoclose
172 {
173 properties.load(in);
174 } catch (IllegalArgumentException | IOException ex) {
175 // ignore and return empty properties
176 }
177 }
178
179 return properties;
180 }
181 }