View Javadoc
1   package org.metricshub.ssh;
2   
3   /*-
4    * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5    * SSH Java Client
6    * ჻჻჻჻჻჻
7    * Copyright 2023 Metricshub
8    * ჻჻჻჻჻჻
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   *
13   *      http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
21   */
22  
23  import java.nio.charset.Charset;
24  import java.nio.charset.IllegalCharsetNameException;
25  import java.nio.charset.StandardCharsets;
26  import java.nio.charset.UnsupportedCharsetException;
27  
28  /**
29   * Utility Class (static), to be used anywhere in  Matsya, including in
30   * standalone JARs (in CLI mode)
31   *
32   * @author Bertrand
33   */
34  public class Utils {
35  
36  	private Utils() {}
37  
38  	/**
39  	 * Returns the proper Charset that can decode/encode the specified locale
40  	 *
41  	 * @param locale The locale we're dealing with, as formatted in the LANG environment variable (e.g. zh_CN.utf8)
42  	 * @param defaultCharset The default Charset to use if the specified locale doesn't match any supported Charset
43  	 * @return The appropriate Charset instance
44  	 */
45  	public static Charset getCharsetFromLocale(final String locale, final Charset defaultCharset) {
46  		// What charset will we be dealing with coming from and going to the PATROL Agent
47  		Charset charset = defaultCharset;
48  		if (locale != null && !locale.isEmpty()) {
49  			final String[] localeElements = locale.split("\\.");
50  			if (localeElements.length > 0) {
51  				String charsetName = localeElements[localeElements.length - 1];
52  				if (charsetName != null) {
53  					charsetName = charsetName.trim();
54  					if (!charsetName.isEmpty() && !"c".equalsIgnoreCase(charsetName)) {
55  						if ("gb".equalsIgnoreCase(charsetName)) {
56  							charsetName = "GBK";
57  						}
58  						try {
59  							charset = Charset.forName(charsetName);
60  						} catch (IllegalCharsetNameException | UnsupportedCharsetException e) {
61  							/* Unfortunately, there is nothing we can do here, as debug is not even set yet */
62  						}
63  					}
64  				}
65  			}
66  		}
67  
68  		return charset;
69  	}
70  
71  	/**
72  	 * Returns the proper Charset that can decode/encode the specified locale, or UTF-8 if specified locale
73  	 * cannot be converted to a Charset.
74  	 *
75  	 * @param locale The locale we're dealing with, as formatted in the LANG environment variable (e.g. zh_CN.utf8)
76  	 * @return The appropriate Charset instance
77  	 */
78  	public static Charset getCharsetFromLocale(final String locale) {
79  		return getCharsetFromLocale(locale, StandardCharsets.UTF_8);
80  	}
81  
82  	/**
83  	 * Check if the required field is not null.
84  	 *
85  	 * @param field
86  	 * @param name
87  	 * @throws IllegalStateException if the argument is null
88  	 */
89  	public static <T> void checkNonNullField(final T field, final String name) {
90  		if (field == null) {
91  			throw new IllegalStateException(name + " must not be null.");
92  		}
93  	}
94  
95  	/**
96  	 * Check if the required argument is not negative or zero.
97  	 *
98  	 * @param argument
99  	 * @param name
100 	 * @throws IllegalArgumentException if the argument is null
101 	 */
102 	public static void checkArgumentNotZeroOrNegative(final long argument, final String name) {
103 		if (argument <= 0) {
104 			throw new IllegalArgumentException(String.format("%s=%d must not be negative or zero.", name, argument));
105 		}
106 	}
107 }