diff --git a/src/org/atriasoft/etk/Uri.java b/src/org/atriasoft/etk/Uri.java index 967fd66..1d93292 100644 --- a/src/org/atriasoft/etk/Uri.java +++ b/src/org/atriasoft/etk/Uri.java @@ -20,7 +20,7 @@ import org.atriasoft.etk.internal.Log; public class Uri { private record LibraryElement( Class<?> klass, - String basePath) {}; + String basePath) {} private static Map<String, String> genericMap = new HashMap<>(); private static Map<String, LibraryElement> libraries = new HashMap<>(); @@ -28,10 +28,10 @@ public class Uri { private static String applicationBasePath = ""; static { - genericMap.put("DATA", "data/"); - genericMap.put("THEME", "theme/"); - genericMap.put("FONTS", "fonts/"); - genericMap.put("TRANSLATE", "translate/"); + Uri.genericMap.put("DATA", "data/"); + Uri.genericMap.put("THEME", "theme/"); + Uri.genericMap.put("FONTS", "fonts/"); + Uri.genericMap.put("TRANSLATE", "translate/"); } public static void addLibrary(final String libName, final Class<?> classHandle, String basePath) { @@ -45,11 +45,11 @@ public class Uri { if (basePath.charAt(0) != '/') { basePath = "/" + basePath; } - libraries.put(libName.toLowerCase(), new LibraryElement(classHandle, basePath)); + Uri.libraries.put(libName.toLowerCase(), new LibraryElement(classHandle, basePath)); } public static byte[] getAllData(final Uri resourceName) { - final InputStream out = getStream(resourceName); + final InputStream out = Uri.getStream(resourceName); if (out == null) { return null; } @@ -98,14 +98,13 @@ public class Uri { private static List<String> getResourceFiles(final Class<?> clazz, final String path) throws IOException { List<String> filenames = new ArrayList<>(); - try (InputStream in = clazz.getResourceAsStream(path); BufferedReader br = new BufferedReader(new InputStreamReader(in))) { + try (InputStream in = clazz.getResourceAsStream(path); + BufferedReader br = new BufferedReader(new InputStreamReader(in))) { String resource; - while ((resource = br.readLine()) != null) { filenames.add(resource); } } - return filenames; } @@ -124,26 +123,26 @@ public class Uri { } } Log.warning(" find group: " + uri.group); - final String ret = genericMap.get(uri.group); + final String ret = Uri.genericMap.get(uri.group); if (ret != null) { Log.warning(" ==> " + ret); offsetGroup = ret; } } InputStream out = null; - if (applicationClass == null) { + if (Uri.applicationClass == null) { Log.warning(" !! Application data class is not defined ..."); } else { - String tmpPath = applicationBasePath + offsetGroup + uri.path; + String tmpPath = Uri.applicationBasePath + offsetGroup + uri.path; tmpPath = tmpPath.replace("//", "/"); - Log.info("(appl) Try to load '" + tmpPath + "' in " + applicationClass.getCanonicalName());// + " ==> " + applicationClass.getProtectionDomain().getCodeSource().getLocation().getPath()); - URL realFileName = applicationClass.getClassLoader().getResource(tmpPath); + Log.info("(appl) Try to load '" + tmpPath + "' in " + Uri.applicationClass.getCanonicalName());// + " ==> " + applicationClass.getProtectionDomain().getCodeSource().getLocation().getPath()); + URL realFileName = Uri.applicationClass.getClassLoader().getResource(tmpPath); if (realFileName != null) { Log.info("(appl) >>> " + realFileName.getFile()); } else { - Log.info("(appl) ??? base folder:" + applicationClass.getProtectionDomain().getCodeSource().getLocation().getPath() + applicationBasePath + offsetGroup + uri.path); + Log.info("(appl) ??? base folder:" + Uri.applicationClass.getProtectionDomain().getCodeSource().getLocation().getPath() + Uri.applicationBasePath + offsetGroup + uri.path); } - out = applicationClass.getResourceAsStream(tmpPath); + out = Uri.applicationClass.getResourceAsStream(tmpPath); if (out == null) { Log.info("(appl) ==> element does not exist ..."); @@ -160,31 +159,30 @@ public class Uri { if (uri.properties.get("lib") == null) { Log.warning(" !! No library specified"); return null; + } + LibraryElement libraryElement = Uri.libraries.get(uri.properties.get("lib")); + if (libraryElement == null) { + Log.warning(" Can not get element in library"); + return null; + } + // try { + // Log.warning("elements: " + getResourceFiles(libraryElement.klass, libraryElement.basePath + offsetGroup + "/")); + // } catch (IOException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + String tmpPath = libraryElement.basePath + offsetGroup + uri.path; + tmpPath = tmpPath.replace("//", "/"); + Log.info("(lib) Try to load '" + tmpPath + "' in " + libraryElement.klass.getCanonicalName()); + URL realFileName = libraryElement.klass.getClassLoader().getResource(tmpPath); + if (realFileName != null) { + Log.info("(lib) >>> " + realFileName.getFile()); } else { - LibraryElement libraryElement = libraries.get(uri.properties.get("lib")); - if (libraryElement == null) { - Log.warning(" Can not get element in library"); - return null; - } - // try { - // Log.warning("elements: " + getResourceFiles(libraryElement.klass, libraryElement.basePath + offsetGroup + "/")); - // } catch (IOException e) { - // // TODO Auto-generated catch block - // e.printStackTrace(); - // } - String tmpPath = libraryElement.basePath + offsetGroup + uri.path; - tmpPath = tmpPath.replace("//", "/"); - Log.info("(lib) Try to load '" + tmpPath + "' in " + libraryElement.klass.getCanonicalName()); - URL realFileName = libraryElement.klass.getClassLoader().getResource(tmpPath); - if (realFileName != null) { - Log.info("(lib) >>> " + realFileName.getFile()); - } else { - Log.info("(lib) ??? base folder:" + libraryElement.klass.getProtectionDomain().getCodeSource().getLocation().getPath() + libraryElement.basePath + offsetGroup + uri.path); - } - out = libraryElement.klass.getResourceAsStream(tmpPath); - if (out == null) { - Log.info("(lib) ==> element does not exist ..."); - } + Log.info("(lib) ??? base folder:" + libraryElement.klass.getProtectionDomain().getCodeSource().getLocation().getPath() + libraryElement.basePath + offsetGroup + uri.path); + } + out = libraryElement.klass.getResourceAsStream(tmpPath); + if (out == null) { + Log.info("(lib) ==> element does not exist ..."); } } @@ -203,12 +201,12 @@ public class Uri { } public static void setApplication(final Class<?> classHandle) { - setApplication(classHandle, ""); + Uri.setApplication(classHandle, ""); } public static void setApplication(final Class<?> classHandle, String basePath) { Log.info("Set application reference : " + classHandle.getCanonicalName() + " base path=" + basePath); - applicationClass = classHandle; + Uri.applicationClass = classHandle; if (basePath == null || basePath.isEmpty()) { basePath = "/"; } @@ -218,7 +216,7 @@ public class Uri { if (basePath.charAt(0) != '/') { basePath = "/" + basePath; } - applicationBasePath = basePath; + Uri.applicationBasePath = basePath; } public static void setGroup(final String groupName, String basePath) { @@ -229,7 +227,7 @@ public class Uri { if (basePath.charAt(basePath.length() - 1) != '/') { basePath += "/"; } - genericMap.put(groupName.toUpperCase(), basePath); + Uri.genericMap.put(groupName.toUpperCase(), basePath); } public static Uri valueOf(String value) { @@ -336,7 +334,7 @@ public class Uri { } public boolean exist() { - InputStream stream = getStream(this); + InputStream stream = Uri.getStream(this); if (stream == null) { return false; } @@ -361,11 +359,27 @@ public class Uri { public String getGroup() { return this.group; } - + public Uri getParent() { String path = this.path.substring(0, this.path.lastIndexOf("/")); return new Uri(getGroup(), path, this.properties); } + + /** + * Get the filename of the URI with the extension "plop.txt" + * @return simple filename + */ + public String getFileName() { + return this.path.substring(this.path.lastIndexOf("/")+1); + } + /** + * Get the filename of the URI without the extension "plop" + * @return simple filename + */ + public String getFileNameNoExt() { + String ext = getExtention(); + return this.path.substring(this.path.lastIndexOf("/")+1, this.path.length()-ext.length()+1); + } public String getPath() { return this.path; @@ -390,12 +404,11 @@ public class Uri { public Uri pathAdd(final String value) { if (this.path.charAt(this.path.length() - 1) == '/') { return withPath(this.path + value); - } else { - return withPath(this.path + "/" + value); } + return withPath(this.path + "/" + value); } - public void setproperty(final String key, final String value) { + public void setProperty(final String key, final String value) { this.properties.put(key, value); }