Skip to content

Commit

Permalink
fix #241 and #242
Browse files Browse the repository at this point in the history
  • Loading branch information
Gelin Luo committed Dec 25, 2020
1 parent 2a59944 commit 987523e
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 22 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# OSGL Tool Change Log

1.26.1 - 26/Dec/2020
* Drop `javax.xml.bind` dependency #242
* OS util cannot detect `Mac OS X` #241

1.26.0 - 21/Dec/2020
* XML to JSON conversion - convert attributes #240

Expand Down
65 changes: 55 additions & 10 deletions src/main/java/org/osgl/util/Codec.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
* Copyright (C) 2013 The Java Tool project
* Gelin Luo <greenlaw110(at)gmail.com>
*
Expand All @@ -8,15 +8,15 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
*/
package org.osgl.util;

/*-
Expand All @@ -28,9 +28,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -47,7 +47,6 @@
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.util.UUID;
import javax.xml.bind.DatatypeConverter;

/**
* Utility class for encoding and decoding
Expand All @@ -66,6 +65,7 @@ public static String UUID() {

/**
* Alias of {@link #UUID()}
*
* @return an UUID string
*/
public static String uuid() {
Expand Down Expand Up @@ -96,6 +96,7 @@ public static String encodeBase64(String value) {

/**
* Encode a String to base64 using variant URL safe encode scheme
*
* @param value the plain string
* @return the base64 encoded String that is URL safe
*/
Expand All @@ -108,7 +109,7 @@ public static String encodeUrlSafeBase64(String value) {
*
* @param value The binary data
* @return The base64 encoded String
* @deprecated Use {@link #encodeBase64(byte[])} instead
* @deprecated Use {@link #encodeBase64(byte[])} instead
*/
@Deprecated
public static String encodeBASE64(byte[] value) {
Expand Down Expand Up @@ -203,21 +204,65 @@ public static String hexSHA1(String value) {
}
}

private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();

public static int hexToByte(char ch) {
if ('0' <= ch && ch <= '9') return ch - '0';
if ('A' <= ch && ch <= 'F') return ch - 'A' + 10;
if ('a' <= ch && ch <= 'f') return ch - 'a' + 10;
return -1;
}

private static final String[] byteToHexTable = new String[]{
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F",
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F",
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F",
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F",
"40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F",
"50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F",
"60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F",
"70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "7F",
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8A", "8B", "8C", "8D", "8E", "8F",
"90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F",
"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE", "AF",
"B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF",
"C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CE", "CF",
"D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF",
"E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", "ED", "EE", "EF",
"F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF"
};

/**
* Write a byte array as hexadecimal String.
*
* @return bytes
*/
public static String byteToHexString(byte[] bytes) {
return DatatypeConverter.printHexBinary(bytes);
if (bytes == null || bytes.length == 0) {
return "";
}
S.Buffer sb = S.buffer();
for (byte b : bytes) {
sb.append(byteToHexTable[b & 0xFF]);
}
return sb.toString();
}

/**
* Transform an hexadecimal String to a byte array.
*
* @param hexString the string
* @return the byte array of the hex string
*/
public static byte[] hexStringToByte(String hexString) {
return DatatypeConverter.parseHexBinary(hexString);
if (hexString == null || hexString.length() == 0) {
return new byte[]{};
}
byte[] byteArray = new byte[hexString.length() / 2];
for (int i = 0; i < hexString.length(); i += 2) {
byteArray[i / 2] = (byte) (hexToByte(hexString.charAt(i)) * 16 + hexToByte(hexString.charAt(i + 1)));
}
return byteArray;
}

public static String encodeUrl(String s, Charset enc) {
Expand Down
89 changes: 77 additions & 12 deletions src/main/java/org/osgl/util/OS.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,87 @@
* Operating system enum
*/
public enum OS {
WINDOWS, MAC_OS_X, LINUX, OS2, HP_UX, AIX, IRIX, SOLARIS, SUN_OS, MPE_IX, OS_390, FREEBSD, DIGITAL_UNIX, OSF1, UNKNOWN;
WINDOWS,
MAC_OS() {
@Override
public String toString() {
return "macOS";
}
},
LINUX,
OS_2() {
@Override
public String toString() {
return "OS/2";
}
},
HP_UX() {
@Override
public String toString() {
return "HP-UX";
}
},
AIX() {
@Override
public String toString() {
return "AIX";
}
},
IRIX() {
@Override
public String toString() {
return "IRIX";
}
},
SOLARIS,
SUN_OS() {
@Override
public String toString() {
return "SunOS";
}
},
MPE_IX() {
@Override
public String toString() {
return "MPE/iX";
}
},
OS_390() {
@Override
public String toString() {
return "OS/390";
}
},
FREEBSD() {
@Override
public String toString() {
return "FreeBSD";
}
},
DIGITAL_UNIX() {
@Override
public String toString() {
return "Digital UNIX";
}
},
OSF_1() {
@Override
public String toString() {
return "OSF/1";
}
},
UNKNOWN;

private static OS os = null; static {
String s = System.getProperty("os.name").toUpperCase();
String s = Keyword.of(System.getProperty("os.name")).snakeCase().toUpperCase();
for (OS x: OS.values()) {
if (s.startsWith(x.name())) {
os = x;
break;
}
}
if (null == os) {
if (s.startsWith("OS/2")) {
os = OS2;
} else if (s.startsWith("OS/390")) {
os = OS_390;
} else if (s.startsWith("DIGITAL UNIX")) {
os = DIGITAL_UNIX;
} else {
os = UNKNOWN;
}
os = UNKNOWN;
}
}

Expand All @@ -55,7 +116,7 @@ public boolean isWindows() {
return WINDOWS == this;
}
public boolean isMacOsX() {
return MAC_OS_X == this;
return MAC_OS == this;
}
public boolean isLinux() {
return LINUX == this;
Expand All @@ -76,6 +137,10 @@ public String fileSeparator() {
return fileSeparator;
}

public String toString() {
return Keyword.of(name()).readable();
}

public static OS get() {
return os;
}
Expand Down

0 comments on commit 987523e

Please sign in to comment.