diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/SystemPanel.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/SystemPanel.java
index 68cabb3c12..da71d74f2a 100644
--- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/SystemPanel.java
+++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/SystemPanel.java
@@ -32,6 +32,7 @@ import javax.swing.border.LineBorder;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.GameServer;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
+import com.l2jmobius.gameserver.util.Locator;
/**
* @author Mobius
diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/util/Locator.java
similarity index 56%
rename from L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/Locator.java
rename to L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/util/Locator.java
index e891609b67..346be08926 100644
--- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/ui/Locator.java
+++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/util/Locator.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see file:
URI.
+ *
+ * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 */ - private static String fromURI(String uri) + public static String fromURI(String uri) { URL url = null; - try { url = new URL(uri); } catch (MalformedURLException emYouEarlEx) { - // empty catch clause + // Ignore malformed exception } - - if ((url == null) || !"file".equals(url.getProtocol())) + if ((url == null) || !("file".equals(url.getProtocol()))) { throw new IllegalArgumentException("Can only handle valid file: URIs"); } - - StringBuilder buf = new StringBuilder(url.getHost()); - + StringBuffer buf = new StringBuffer(url.getHost()); if (buf.length() > 0) { buf.insert(0, File.separatorChar).insert(0, File.separatorChar); } - String file = url.getFile(); int queryPos = file.indexOf('?'); - buf.append(queryPos < 0 ? file : file.substring(0, queryPos)); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + uri = buf.toString().replace('/', File.separatorChar); if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) { uri = uri.substring(1); } - String path = decodeUri(uri); return path; } /** - * Method decodeUri. - * @param uri String - * @return String + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri */ private static String decodeUri(String uri) { @@ -144,21 +147,17 @@ final class Locator { return uri; } - - StringBuilder sb = new StringBuilder(); + StringBuffer sb = new StringBuffer(); CharacterIterator iter = new StringCharacterIterator(uri); - for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) { if (c == '%') { char c1 = iter.next(); - if (c1 != CharacterIterator.DONE) { int i1 = Character.digit(c1, 16); char c2 = iter.next(); - if (c2 != CharacterIterator.DONE) { int i2 = Character.digit(c2, 16); @@ -171,21 +170,21 @@ final class Locator sb.append(c); } } - String path = sb.toString(); return path; } /** - * Method getToolsJar. - * @return File + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. */ - static File getToolsJar() + public static File getToolsJar() { + // firstly check if the tools jar is already in the classpath boolean toolsJarAvailable = false; - try { + // just check whether this throws an exception Class.forName("com.sun.tools.javac.Main"); toolsJarAvailable = true; } @@ -198,40 +197,36 @@ final class Locator } catch (Exception e2) { - // empty catch clause + // ignore } } - if (toolsJarAvailable) { return null; } - + // couldn't find compiler - try to find tools.jar + // based on java.home setting String javaHome = System.getProperty("java.home"); - if (javaHome.toLowerCase(Locale.US).endsWith("jre")) { javaHome = javaHome.substring(0, javaHome.length() - 4); } - File toolsJar = new File(javaHome + "/lib/tools.jar"); - if (!toolsJar.exists()) { System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); return null; } - return toolsJar; } /** - * Method getLocationURLs. - * @param location File - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. */ - static URL[] getLocationURLs(File location) throws MalformedURLException + public static URL[] getLocationURLs(File location) throws MalformedURLException { return getLocationURLs(location, new String[] { @@ -240,26 +235,25 @@ final class Locator } /** - * Method getLocationURLs. - * @param location File - * @param extensions String[] - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. */ - private static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException { + URL[] urls = new URL[0]; if (!location.exists()) { return urls; } - if (!location.isDirectory()) { urls = new URL[1]; String path = location.getPath(); - for (String extension : extensions) { if (path.toLowerCase().endsWith(extension)) @@ -268,10 +262,8 @@ final class Locator break; } } - return urls; } - File[] matches = location.listFiles((FilenameFilter) (dir, name) -> { for (String extension : extensions) @@ -284,12 +276,10 @@ final class Locator return false; }); urls = new URL[matches.length]; - for (int i = 0; i < matches.length; ++i) { urls[i] = matches[i].toURI().toURL(); } - return urls; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/SystemPanel.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/SystemPanel.java index 68cabb3c12..da71d74f2a 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/SystemPanel.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/SystemPanel.java @@ -32,6 +32,7 @@ import javax.swing.border.LineBorder; import com.l2jmobius.Config; import com.l2jmobius.gameserver.GameServer; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; +import com.l2jmobius.gameserver.util.Locator; /** * @author Mobius diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/util/Locator.java similarity index 56% rename from L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/Locator.java rename to L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/util/Locator.java index e891609b67..346be08926 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/ui/Locator.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/util/Locator.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 */ - private static String fromURI(String uri) + public static String fromURI(String uri) { URL url = null; - try { url = new URL(uri); } catch (MalformedURLException emYouEarlEx) { - // empty catch clause + // Ignore malformed exception } - - if ((url == null) || !"file".equals(url.getProtocol())) + if ((url == null) || !("file".equals(url.getProtocol()))) { throw new IllegalArgumentException("Can only handle valid file: URIs"); } - - StringBuilder buf = new StringBuilder(url.getHost()); - + StringBuffer buf = new StringBuffer(url.getHost()); if (buf.length() > 0) { buf.insert(0, File.separatorChar).insert(0, File.separatorChar); } - String file = url.getFile(); int queryPos = file.indexOf('?'); - buf.append(queryPos < 0 ? file : file.substring(0, queryPos)); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + uri = buf.toString().replace('/', File.separatorChar); if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) { uri = uri.substring(1); } - String path = decodeUri(uri); return path; } /** - * Method decodeUri. - * @param uri String - * @return String + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri */ private static String decodeUri(String uri) { @@ -144,21 +147,17 @@ final class Locator { return uri; } - - StringBuilder sb = new StringBuilder(); + StringBuffer sb = new StringBuffer(); CharacterIterator iter = new StringCharacterIterator(uri); - for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) { if (c == '%') { char c1 = iter.next(); - if (c1 != CharacterIterator.DONE) { int i1 = Character.digit(c1, 16); char c2 = iter.next(); - if (c2 != CharacterIterator.DONE) { int i2 = Character.digit(c2, 16); @@ -171,21 +170,21 @@ final class Locator sb.append(c); } } - String path = sb.toString(); return path; } /** - * Method getToolsJar. - * @return File + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. */ - static File getToolsJar() + public static File getToolsJar() { + // firstly check if the tools jar is already in the classpath boolean toolsJarAvailable = false; - try { + // just check whether this throws an exception Class.forName("com.sun.tools.javac.Main"); toolsJarAvailable = true; } @@ -198,40 +197,36 @@ final class Locator } catch (Exception e2) { - // empty catch clause + // ignore } } - if (toolsJarAvailable) { return null; } - + // couldn't find compiler - try to find tools.jar + // based on java.home setting String javaHome = System.getProperty("java.home"); - if (javaHome.toLowerCase(Locale.US).endsWith("jre")) { javaHome = javaHome.substring(0, javaHome.length() - 4); } - File toolsJar = new File(javaHome + "/lib/tools.jar"); - if (!toolsJar.exists()) { System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); return null; } - return toolsJar; } /** - * Method getLocationURLs. - * @param location File - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. */ - static URL[] getLocationURLs(File location) throws MalformedURLException + public static URL[] getLocationURLs(File location) throws MalformedURLException { return getLocationURLs(location, new String[] { @@ -240,26 +235,25 @@ final class Locator } /** - * Method getLocationURLs. - * @param location File - * @param extensions String[] - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. */ - private static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException { + URL[] urls = new URL[0]; if (!location.exists()) { return urls; } - if (!location.isDirectory()) { urls = new URL[1]; String path = location.getPath(); - for (String extension : extensions) { if (path.toLowerCase().endsWith(extension)) @@ -268,10 +262,8 @@ final class Locator break; } } - return urls; } - File[] matches = location.listFiles((FilenameFilter) (dir, name) -> { for (String extension : extensions) @@ -284,12 +276,10 @@ final class Locator return false; }); urls = new URL[matches.length]; - for (int i = 0; i < matches.length; ++i) { urls[i] = matches[i].toURI().toURL(); } - return urls; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/SystemPanel.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/SystemPanel.java index 68cabb3c12..da71d74f2a 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/SystemPanel.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/SystemPanel.java @@ -32,6 +32,7 @@ import javax.swing.border.LineBorder; import com.l2jmobius.Config; import com.l2jmobius.gameserver.GameServer; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; +import com.l2jmobius.gameserver.util.Locator; /** * @author Mobius diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/util/Locator.java similarity index 56% rename from L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/Locator.java rename to L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/util/Locator.java index e891609b67..346be08926 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/ui/Locator.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/util/Locator.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 */ - private static String fromURI(String uri) + public static String fromURI(String uri) { URL url = null; - try { url = new URL(uri); } catch (MalformedURLException emYouEarlEx) { - // empty catch clause + // Ignore malformed exception } - - if ((url == null) || !"file".equals(url.getProtocol())) + if ((url == null) || !("file".equals(url.getProtocol()))) { throw new IllegalArgumentException("Can only handle valid file: URIs"); } - - StringBuilder buf = new StringBuilder(url.getHost()); - + StringBuffer buf = new StringBuffer(url.getHost()); if (buf.length() > 0) { buf.insert(0, File.separatorChar).insert(0, File.separatorChar); } - String file = url.getFile(); int queryPos = file.indexOf('?'); - buf.append(queryPos < 0 ? file : file.substring(0, queryPos)); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + uri = buf.toString().replace('/', File.separatorChar); if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) { uri = uri.substring(1); } - String path = decodeUri(uri); return path; } /** - * Method decodeUri. - * @param uri String - * @return String + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri */ private static String decodeUri(String uri) { @@ -144,21 +147,17 @@ final class Locator { return uri; } - - StringBuilder sb = new StringBuilder(); + StringBuffer sb = new StringBuffer(); CharacterIterator iter = new StringCharacterIterator(uri); - for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) { if (c == '%') { char c1 = iter.next(); - if (c1 != CharacterIterator.DONE) { int i1 = Character.digit(c1, 16); char c2 = iter.next(); - if (c2 != CharacterIterator.DONE) { int i2 = Character.digit(c2, 16); @@ -171,21 +170,21 @@ final class Locator sb.append(c); } } - String path = sb.toString(); return path; } /** - * Method getToolsJar. - * @return File + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. */ - static File getToolsJar() + public static File getToolsJar() { + // firstly check if the tools jar is already in the classpath boolean toolsJarAvailable = false; - try { + // just check whether this throws an exception Class.forName("com.sun.tools.javac.Main"); toolsJarAvailable = true; } @@ -198,40 +197,36 @@ final class Locator } catch (Exception e2) { - // empty catch clause + // ignore } } - if (toolsJarAvailable) { return null; } - + // couldn't find compiler - try to find tools.jar + // based on java.home setting String javaHome = System.getProperty("java.home"); - if (javaHome.toLowerCase(Locale.US).endsWith("jre")) { javaHome = javaHome.substring(0, javaHome.length() - 4); } - File toolsJar = new File(javaHome + "/lib/tools.jar"); - if (!toolsJar.exists()) { System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); return null; } - return toolsJar; } /** - * Method getLocationURLs. - * @param location File - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. */ - static URL[] getLocationURLs(File location) throws MalformedURLException + public static URL[] getLocationURLs(File location) throws MalformedURLException { return getLocationURLs(location, new String[] { @@ -240,26 +235,25 @@ final class Locator } /** - * Method getLocationURLs. - * @param location File - * @param extensions String[] - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. */ - private static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException { + URL[] urls = new URL[0]; if (!location.exists()) { return urls; } - if (!location.isDirectory()) { urls = new URL[1]; String path = location.getPath(); - for (String extension : extensions) { if (path.toLowerCase().endsWith(extension)) @@ -268,10 +262,8 @@ final class Locator break; } } - return urls; } - File[] matches = location.listFiles((FilenameFilter) (dir, name) -> { for (String extension : extensions) @@ -284,12 +276,10 @@ final class Locator return false; }); urls = new URL[matches.length]; - for (int i = 0; i < matches.length; ++i) { urls[i] = matches[i].toURI().toURL(); } - return urls; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/SystemPanel.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/SystemPanel.java index 68cabb3c12..da71d74f2a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/SystemPanel.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/SystemPanel.java @@ -32,6 +32,7 @@ import javax.swing.border.LineBorder; import com.l2jmobius.Config; import com.l2jmobius.gameserver.GameServer; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; +import com.l2jmobius.gameserver.util.Locator; /** * @author Mobius diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/util/Locator.java similarity index 56% rename from L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/Locator.java rename to L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/util/Locator.java index e891609b67..346be08926 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/ui/Locator.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/util/Locator.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 */ - private static String fromURI(String uri) + public static String fromURI(String uri) { URL url = null; - try { url = new URL(uri); } catch (MalformedURLException emYouEarlEx) { - // empty catch clause + // Ignore malformed exception } - - if ((url == null) || !"file".equals(url.getProtocol())) + if ((url == null) || !("file".equals(url.getProtocol()))) { throw new IllegalArgumentException("Can only handle valid file: URIs"); } - - StringBuilder buf = new StringBuilder(url.getHost()); - + StringBuffer buf = new StringBuffer(url.getHost()); if (buf.length() > 0) { buf.insert(0, File.separatorChar).insert(0, File.separatorChar); } - String file = url.getFile(); int queryPos = file.indexOf('?'); - buf.append(queryPos < 0 ? file : file.substring(0, queryPos)); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + uri = buf.toString().replace('/', File.separatorChar); if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) { uri = uri.substring(1); } - String path = decodeUri(uri); return path; } /** - * Method decodeUri. - * @param uri String - * @return String + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri */ private static String decodeUri(String uri) { @@ -144,21 +147,17 @@ final class Locator { return uri; } - - StringBuilder sb = new StringBuilder(); + StringBuffer sb = new StringBuffer(); CharacterIterator iter = new StringCharacterIterator(uri); - for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) { if (c == '%') { char c1 = iter.next(); - if (c1 != CharacterIterator.DONE) { int i1 = Character.digit(c1, 16); char c2 = iter.next(); - if (c2 != CharacterIterator.DONE) { int i2 = Character.digit(c2, 16); @@ -171,21 +170,21 @@ final class Locator sb.append(c); } } - String path = sb.toString(); return path; } /** - * Method getToolsJar. - * @return File + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. */ - static File getToolsJar() + public static File getToolsJar() { + // firstly check if the tools jar is already in the classpath boolean toolsJarAvailable = false; - try { + // just check whether this throws an exception Class.forName("com.sun.tools.javac.Main"); toolsJarAvailable = true; } @@ -198,40 +197,36 @@ final class Locator } catch (Exception e2) { - // empty catch clause + // ignore } } - if (toolsJarAvailable) { return null; } - + // couldn't find compiler - try to find tools.jar + // based on java.home setting String javaHome = System.getProperty("java.home"); - if (javaHome.toLowerCase(Locale.US).endsWith("jre")) { javaHome = javaHome.substring(0, javaHome.length() - 4); } - File toolsJar = new File(javaHome + "/lib/tools.jar"); - if (!toolsJar.exists()) { System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); return null; } - return toolsJar; } /** - * Method getLocationURLs. - * @param location File - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. */ - static URL[] getLocationURLs(File location) throws MalformedURLException + public static URL[] getLocationURLs(File location) throws MalformedURLException { return getLocationURLs(location, new String[] { @@ -240,26 +235,25 @@ final class Locator } /** - * Method getLocationURLs. - * @param location File - * @param extensions String[] - * @return URL[] * @throws MalformedURLException - * @throws MalformedURLException + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. */ - private static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException { + URL[] urls = new URL[0]; if (!location.exists()) { return urls; } - if (!location.isDirectory()) { urls = new URL[1]; String path = location.getPath(); - for (String extension : extensions) { if (path.toLowerCase().endsWith(extension)) @@ -268,10 +262,8 @@ final class Locator break; } } - return urls; } - File[] matches = location.listFiles((FilenameFilter) (dir, name) -> { for (String extension : extensions) @@ -284,12 +276,10 @@ final class Locator return false; }); urls = new URL[matches.length]; - for (int i = 0; i < matches.length; ++i) { urls[i] = matches[i].toURI().toURL(); } - return urls; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_C6_Interlude/java/com/l2jmobius/gameserver/ui/Locator.java deleted file mode 100644 index e891609b67..0000000000 --- a/L2J_Mobius_C6_Interlude/java/com/l2jmobius/gameserver/ui/Locator.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 + */ + public static String fromURI(String uri) + { + URL url = null; + try + { + url = new URL(uri); + } + catch (MalformedURLException emYouEarlEx) + { + // Ignore malformed exception + } + if ((url == null) || !("file".equals(url.getProtocol()))) + { + throw new IllegalArgumentException("Can only handle valid file: URIs"); + } + StringBuffer buf = new StringBuffer(url.getHost()); + if (buf.length() > 0) + { + buf.insert(0, File.separatorChar).insert(0, File.separatorChar); + } + String file = url.getFile(); + int queryPos = file.indexOf('?'); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + + uri = buf.toString().replace('/', File.separatorChar); + + if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) + { + uri = uri.substring(1); + } + String path = decodeUri(uri); + return path; + } + + /** + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri + */ + private static String decodeUri(String uri) + { + if (uri.indexOf('%') == -1) + { + return uri; + } + StringBuffer sb = new StringBuffer(); + CharacterIterator iter = new StringCharacterIterator(uri); + for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) + { + if (c == '%') + { + char c1 = iter.next(); + if (c1 != CharacterIterator.DONE) + { + int i1 = Character.digit(c1, 16); + char c2 = iter.next(); + if (c2 != CharacterIterator.DONE) + { + int i2 = Character.digit(c2, 16); + sb.append((char) ((i1 << 4) + i2)); + } + } + } + else + { + sb.append(c); + } + } + String path = sb.toString(); + return path; + } + + /** + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. + */ + public static File getToolsJar() + { + // firstly check if the tools jar is already in the classpath + boolean toolsJarAvailable = false; + try + { + // just check whether this throws an exception + Class.forName("com.sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e) + { + try + { + Class.forName("sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e2) + { + // ignore + } + } + if (toolsJarAvailable) + { + return null; + } + // couldn't find compiler - try to find tools.jar + // based on java.home setting + String javaHome = System.getProperty("java.home"); + if (javaHome.toLowerCase(Locale.US).endsWith("jre")) + { + javaHome = javaHome.substring(0, javaHome.length() - 4); + } + File toolsJar = new File(javaHome + "/lib/tools.jar"); + if (!toolsJar.exists()) + { + System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); + return null; + } + return toolsJar; + } + + /** + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. + */ + public static URL[] getLocationURLs(File location) throws MalformedURLException + { + return getLocationURLs(location, new String[] + { + ".jar" + }); + } + + /** + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. + */ + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + { + + URL[] urls = new URL[0]; + + if (!location.exists()) + { + return urls; + } + if (!location.isDirectory()) + { + urls = new URL[1]; + String path = location.getPath(); + for (String extension : extensions) + { + if (path.toLowerCase().endsWith(extension)) + { + urls[0] = location.toURI().toURL(); + break; + } + } + return urls; + } + File[] matches = location.listFiles((FilenameFilter) (dir, name) -> + { + for (String extension : extensions) + { + if (name.toLowerCase().endsWith(extension)) + { + return true; + } + } + return false; + }); + urls = new URL[matches.length]; + for (int i = 0; i < matches.length; ++i) + { + urls[i] = matches[i].toURI().toURL(); + } + return urls; + } +} \ No newline at end of file diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ui/Locator.java deleted file mode 100644 index e891609b67..0000000000 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/ui/Locator.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 + */ + public static String fromURI(String uri) + { + URL url = null; + try + { + url = new URL(uri); + } + catch (MalformedURLException emYouEarlEx) + { + // Ignore malformed exception + } + if ((url == null) || !("file".equals(url.getProtocol()))) + { + throw new IllegalArgumentException("Can only handle valid file: URIs"); + } + StringBuffer buf = new StringBuffer(url.getHost()); + if (buf.length() > 0) + { + buf.insert(0, File.separatorChar).insert(0, File.separatorChar); + } + String file = url.getFile(); + int queryPos = file.indexOf('?'); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + + uri = buf.toString().replace('/', File.separatorChar); + + if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) + { + uri = uri.substring(1); + } + String path = decodeUri(uri); + return path; + } + + /** + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri + */ + private static String decodeUri(String uri) + { + if (uri.indexOf('%') == -1) + { + return uri; + } + StringBuffer sb = new StringBuffer(); + CharacterIterator iter = new StringCharacterIterator(uri); + for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) + { + if (c == '%') + { + char c1 = iter.next(); + if (c1 != CharacterIterator.DONE) + { + int i1 = Character.digit(c1, 16); + char c2 = iter.next(); + if (c2 != CharacterIterator.DONE) + { + int i2 = Character.digit(c2, 16); + sb.append((char) ((i1 << 4) + i2)); + } + } + } + else + { + sb.append(c); + } + } + String path = sb.toString(); + return path; + } + + /** + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. + */ + public static File getToolsJar() + { + // firstly check if the tools jar is already in the classpath + boolean toolsJarAvailable = false; + try + { + // just check whether this throws an exception + Class.forName("com.sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e) + { + try + { + Class.forName("sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e2) + { + // ignore + } + } + if (toolsJarAvailable) + { + return null; + } + // couldn't find compiler - try to find tools.jar + // based on java.home setting + String javaHome = System.getProperty("java.home"); + if (javaHome.toLowerCase(Locale.US).endsWith("jre")) + { + javaHome = javaHome.substring(0, javaHome.length() - 4); + } + File toolsJar = new File(javaHome + "/lib/tools.jar"); + if (!toolsJar.exists()) + { + System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); + return null; + } + return toolsJar; + } + + /** + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. + */ + public static URL[] getLocationURLs(File location) throws MalformedURLException + { + return getLocationURLs(location, new String[] + { + ".jar" + }); + } + + /** + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. + */ + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + { + + URL[] urls = new URL[0]; + + if (!location.exists()) + { + return urls; + } + if (!location.isDirectory()) + { + urls = new URL[1]; + String path = location.getPath(); + for (String extension : extensions) + { + if (path.toLowerCase().endsWith(extension)) + { + urls[0] = location.toURI().toURL(); + break; + } + } + return urls; + } + File[] matches = location.listFiles((FilenameFilter) (dir, name) -> + { + for (String extension : extensions) + { + if (name.toLowerCase().endsWith(extension)) + { + return true; + } + } + return false; + }); + urls = new URL[matches.length]; + for (int i = 0; i < matches.length; ++i) + { + urls[i] = matches[i].toURI().toURL(); + } + return urls; + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ui/Locator.java deleted file mode 100644 index e891609b67..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/ui/Locator.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 + */ + public static String fromURI(String uri) + { + URL url = null; + try + { + url = new URL(uri); + } + catch (MalformedURLException emYouEarlEx) + { + // Ignore malformed exception + } + if ((url == null) || !("file".equals(url.getProtocol()))) + { + throw new IllegalArgumentException("Can only handle valid file: URIs"); + } + StringBuffer buf = new StringBuffer(url.getHost()); + if (buf.length() > 0) + { + buf.insert(0, File.separatorChar).insert(0, File.separatorChar); + } + String file = url.getFile(); + int queryPos = file.indexOf('?'); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + + uri = buf.toString().replace('/', File.separatorChar); + + if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) + { + uri = uri.substring(1); + } + String path = decodeUri(uri); + return path; + } + + /** + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri + */ + private static String decodeUri(String uri) + { + if (uri.indexOf('%') == -1) + { + return uri; + } + StringBuffer sb = new StringBuffer(); + CharacterIterator iter = new StringCharacterIterator(uri); + for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) + { + if (c == '%') + { + char c1 = iter.next(); + if (c1 != CharacterIterator.DONE) + { + int i1 = Character.digit(c1, 16); + char c2 = iter.next(); + if (c2 != CharacterIterator.DONE) + { + int i2 = Character.digit(c2, 16); + sb.append((char) ((i1 << 4) + i2)); + } + } + } + else + { + sb.append(c); + } + } + String path = sb.toString(); + return path; + } + + /** + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. + */ + public static File getToolsJar() + { + // firstly check if the tools jar is already in the classpath + boolean toolsJarAvailable = false; + try + { + // just check whether this throws an exception + Class.forName("com.sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e) + { + try + { + Class.forName("sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e2) + { + // ignore + } + } + if (toolsJarAvailable) + { + return null; + } + // couldn't find compiler - try to find tools.jar + // based on java.home setting + String javaHome = System.getProperty("java.home"); + if (javaHome.toLowerCase(Locale.US).endsWith("jre")) + { + javaHome = javaHome.substring(0, javaHome.length() - 4); + } + File toolsJar = new File(javaHome + "/lib/tools.jar"); + if (!toolsJar.exists()) + { + System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); + return null; + } + return toolsJar; + } + + /** + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. + */ + public static URL[] getLocationURLs(File location) throws MalformedURLException + { + return getLocationURLs(location, new String[] + { + ".jar" + }); + } + + /** + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. + */ + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + { + + URL[] urls = new URL[0]; + + if (!location.exists()) + { + return urls; + } + if (!location.isDirectory()) + { + urls = new URL[1]; + String path = location.getPath(); + for (String extension : extensions) + { + if (path.toLowerCase().endsWith(extension)) + { + urls[0] = location.toURI().toURL(); + break; + } + } + return urls; + } + File[] matches = location.listFiles((FilenameFilter) (dir, name) -> + { + for (String extension : extensions) + { + if (name.toLowerCase().endsWith(extension)) + { + return true; + } + } + return false; + }); + urls = new URL[matches.length]; + for (int i = 0; i < matches.length; ++i) + { + urls[i] = matches[i].toURI().toURL(); + } + return urls; + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ui/Locator.java b/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ui/Locator.java deleted file mode 100644 index e891609b67..0000000000 --- a/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/gameserver/ui/Locator.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, seefile:
URI.
+ * + * Will be an absolute path if the given URI is absolute. + *
+ *+ * Swallows '%' that are not followed by two characters, doesn't deal with non-ASCII characters. + *
+ * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @since Ant 1.6 + */ + public static String fromURI(String uri) + { + URL url = null; + try + { + url = new URL(uri); + } + catch (MalformedURLException emYouEarlEx) + { + // Ignore malformed exception + } + if ((url == null) || !("file".equals(url.getProtocol()))) + { + throw new IllegalArgumentException("Can only handle valid file: URIs"); + } + StringBuffer buf = new StringBuffer(url.getHost()); + if (buf.length() > 0) + { + buf.insert(0, File.separatorChar).insert(0, File.separatorChar); + } + String file = url.getFile(); + int queryPos = file.indexOf('?'); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + + uri = buf.toString().replace('/', File.separatorChar); + + if ((File.pathSeparatorChar == ';') && uri.startsWith("\\") && (uri.length() > 2) && Character.isLetter(uri.charAt(1)) && (uri.lastIndexOf(':') > -1)) + { + uri = uri.substring(1); + } + String path = decodeUri(uri); + return path; + } + + /** + * Decodes an Uri with % characters. + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri + */ + private static String decodeUri(String uri) + { + if (uri.indexOf('%') == -1) + { + return uri; + } + StringBuffer sb = new StringBuffer(); + CharacterIterator iter = new StringCharacterIterator(uri); + for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) + { + if (c == '%') + { + char c1 = iter.next(); + if (c1 != CharacterIterator.DONE) + { + int i1 = Character.digit(c1, 16); + char c2 = iter.next(); + if (c2 != CharacterIterator.DONE) + { + int i2 = Character.digit(c2, 16); + sb.append((char) ((i1 << 4) + i2)); + } + } + } + else + { + sb.append(c); + } + } + String path = sb.toString(); + return path; + } + + /** + * Get the File necessary to load the Sun compiler tools. If the classes are available to this class, then no additional URL is required and null is returned. This may be because the classes are explicitly in the class path or provided by the JVM directly. + * @return the tools jar as a File if required, null otherwise. + */ + public static File getToolsJar() + { + // firstly check if the tools jar is already in the classpath + boolean toolsJarAvailable = false; + try + { + // just check whether this throws an exception + Class.forName("com.sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e) + { + try + { + Class.forName("sun.tools.javac.Main"); + toolsJarAvailable = true; + } + catch (Exception e2) + { + // ignore + } + } + if (toolsJarAvailable) + { + return null; + } + // couldn't find compiler - try to find tools.jar + // based on java.home setting + String javaHome = System.getProperty("java.home"); + if (javaHome.toLowerCase(Locale.US).endsWith("jre")) + { + javaHome = javaHome.substring(0, javaHome.length() - 4); + } + File toolsJar = new File(javaHome + "/lib/tools.jar"); + if (!toolsJar.exists()) + { + System.out.println("Unable to locate tools.jar. " + "Expected to find it in " + toolsJar.getPath()); + return null; + } + return toolsJar; + } + + /** + * Get an array of URLs representing all of the jar files in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for jar files. + * @param location the location to scan for Jars. + * @return an array of URLs for all jars in the given location. + * @exception MalformedURLException if the URLs for the jars cannot be formed. + */ + public static URL[] getLocationURLs(File location) throws MalformedURLException + { + return getLocationURLs(location, new String[] + { + ".jar" + }); + } + + /** + * Get an array of URLs representing all of the files of a given set of extensions in the given location. If the location is a file, it is returned as the only element of the array. If the location is a directory, it is scanned for matching files. + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the directory search. + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be formed. + */ + public static URL[] getLocationURLs(File location, final String[] extensions) throws MalformedURLException + { + + URL[] urls = new URL[0]; + + if (!location.exists()) + { + return urls; + } + if (!location.isDirectory()) + { + urls = new URL[1]; + String path = location.getPath(); + for (String extension : extensions) + { + if (path.toLowerCase().endsWith(extension)) + { + urls[0] = location.toURI().toURL(); + break; + } + } + return urls; + } + File[] matches = location.listFiles((FilenameFilter) (dir, name) -> + { + for (String extension : extensions) + { + if (name.toLowerCase().endsWith(extension)) + { + return true; + } + } + return false; + }); + urls = new URL[matches.length]; + for (int i = 0; i < matches.length; ++i) + { + urls[i] = matches[i].toURI().toURL(); + } + return urls; + } +} \ No newline at end of file