|
@@ -33,6 +33,9 @@ package com.jme3.asset;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
import java.io.InputStream;
|
|
|
|
|
+import java.net.URISyntaxException;
|
|
|
|
|
+import java.net.URL;
|
|
|
|
|
+import java.util.Locale;
|
|
|
import java.util.Scanner;
|
|
import java.util.Scanner;
|
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Level;
|
|
|
import java.util.logging.Logger;
|
|
import java.util.logging.Logger;
|
|
@@ -42,97 +45,77 @@ import java.util.logging.Logger;
|
|
|
* <br/><br/>
|
|
* <br/><br/>
|
|
|
* The config file is specified with the following format:
|
|
* The config file is specified with the following format:
|
|
|
* <code>
|
|
* <code>
|
|
|
|
|
+ * "INCLUDE" <path>
|
|
|
* "LOADER" <class> : (<extension> ",")* <extension>
|
|
* "LOADER" <class> : (<extension> ",")* <extension>
|
|
|
- * "LOCATOR" <path> <class> : (<extension> ",")* <extension>
|
|
|
|
|
|
|
+ * "LOCATOR" <path> <class>
|
|
|
* </code>
|
|
* </code>
|
|
|
*
|
|
*
|
|
|
* @author Kirill Vainer
|
|
* @author Kirill Vainer
|
|
|
*/
|
|
*/
|
|
|
-public class AssetConfig {
|
|
|
|
|
|
|
+public final class AssetConfig {
|
|
|
|
|
|
|
|
- private AssetManager manager;
|
|
|
|
|
-
|
|
|
|
|
- public AssetConfig(AssetManager manager){
|
|
|
|
|
- this.manager = manager;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void loadText(InputStream in) throws IOException{
|
|
|
|
|
- Scanner scan = new Scanner(in);
|
|
|
|
|
- while (scan.hasNext()){
|
|
|
|
|
- String cmd = scan.next();
|
|
|
|
|
- if (cmd.equals("LOADER")){
|
|
|
|
|
- String loaderClass = scan.next();
|
|
|
|
|
- String colon = scan.next();
|
|
|
|
|
- if (!colon.equals(":")){
|
|
|
|
|
- throw new IOException("Expected ':', got '"+colon+"'");
|
|
|
|
|
- }
|
|
|
|
|
- String extensionsList = scan.nextLine();
|
|
|
|
|
- String[] extensions = extensionsList.split(",");
|
|
|
|
|
- for (int i = 0; i < extensions.length; i++){
|
|
|
|
|
- extensions[i] = extensions[i].trim();
|
|
|
|
|
- }
|
|
|
|
|
- Class clazz = acquireClass(loaderClass);
|
|
|
|
|
- if (clazz != null) {
|
|
|
|
|
- manager.registerLoader(clazz, extensions);
|
|
|
|
|
- } else {
|
|
|
|
|
- Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot find loader {0}", loaderClass);
|
|
|
|
|
- }
|
|
|
|
|
- } else if (cmd.equals("LOCATOR")) {
|
|
|
|
|
- String rootPath = scan.next();
|
|
|
|
|
- String locatorClass = scan.nextLine().trim();
|
|
|
|
|
- Class clazz = acquireClass(locatorClass);
|
|
|
|
|
- if (clazz != null) {
|
|
|
|
|
- manager.registerLocator(rootPath, clazz);
|
|
|
|
|
- } else {
|
|
|
|
|
- Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot find locator {0}", locatorClass);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- throw new IOException("Expected command, got '" + cmd + "'");
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ private static final Logger logger = Logger.getLogger(AssetConfig.class.getName());
|
|
|
|
|
|
|
|
- private Class acquireClass(String name) {
|
|
|
|
|
|
|
+ private AssetConfig() { }
|
|
|
|
|
+
|
|
|
|
|
+ private static Class acquireClass(String name) {
|
|
|
try {
|
|
try {
|
|
|
- Class clazz = Class.forName(name);
|
|
|
|
|
- return clazz;
|
|
|
|
|
|
|
+ return Class.forName(name);
|
|
|
} catch (ClassNotFoundException ex) {
|
|
} catch (ClassNotFoundException ex) {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /*
|
|
|
|
|
- private static String readString(DataInput dataIn) throws IOException{
|
|
|
|
|
- int length = dataIn.readUnsignedShort();
|
|
|
|
|
- char[] chrs = new char[length];
|
|
|
|
|
- for (int i = 0; i < length; i++){
|
|
|
|
|
- chrs[i] = (char) dataIn.readUnsignedByte();
|
|
|
|
|
- }
|
|
|
|
|
- return String.valueOf(chrs);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void loadBinary(DataInput dataIn) throws IOException{
|
|
|
|
|
- // read signature and version
|
|
|
|
|
-
|
|
|
|
|
- // how many locator entries?
|
|
|
|
|
- int locatorEntries = dataIn.readUnsignedShort();
|
|
|
|
|
- for (int i = 0; i < locatorEntries; i++){
|
|
|
|
|
- String locatorClazz = readString(dataIn);
|
|
|
|
|
- String rootPath = readString(dataIn);
|
|
|
|
|
- manager.registerLocator(rootPath, locatorClazz);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- int loaderEntries = dataIn.readUnsignedShort();
|
|
|
|
|
- for (int i = 0; i < loaderEntries; i++){
|
|
|
|
|
- String loaderClazz = readString(dataIn);
|
|
|
|
|
- int numExtensions = dataIn.readUnsignedByte();
|
|
|
|
|
- String[] extensions = new String[numExtensions];
|
|
|
|
|
- for (int j = 0; j < numExtensions; j++){
|
|
|
|
|
- extensions[j] = readString(dataIn);
|
|
|
|
|
|
|
+ public static void loadText(AssetManager assetManager, URL configUrl) throws IOException{
|
|
|
|
|
+ InputStream in = configUrl.openStream();
|
|
|
|
|
+ try {
|
|
|
|
|
+ Scanner scan = new Scanner(in);
|
|
|
|
|
+ scan.useLocale(Locale.US); // Fix commas / periods ??
|
|
|
|
|
+ while (scan.hasNext()){
|
|
|
|
|
+ String cmd = scan.next();
|
|
|
|
|
+ if (cmd.equals("LOADER")){
|
|
|
|
|
+ String loaderClass = scan.next();
|
|
|
|
|
+ String colon = scan.next();
|
|
|
|
|
+ if (!colon.equals(":")){
|
|
|
|
|
+ throw new IOException("Expected ':', got '"+colon+"'");
|
|
|
|
|
+ }
|
|
|
|
|
+ String extensionsList = scan.nextLine();
|
|
|
|
|
+ String[] extensions = extensionsList.split(",");
|
|
|
|
|
+ for (int i = 0; i < extensions.length; i++){
|
|
|
|
|
+ extensions[i] = extensions[i].trim();
|
|
|
|
|
+ }
|
|
|
|
|
+ Class clazz = acquireClass(loaderClass);
|
|
|
|
|
+ if (clazz != null) {
|
|
|
|
|
+ assetManager.registerLoader(clazz, extensions);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ logger.log(Level.WARNING, "Cannot find loader {0}", loaderClass);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (cmd.equals("LOCATOR")) {
|
|
|
|
|
+ String rootPath = scan.next();
|
|
|
|
|
+ String locatorClass = scan.nextLine().trim();
|
|
|
|
|
+ Class clazz = acquireClass(locatorClass);
|
|
|
|
|
+ if (clazz != null) {
|
|
|
|
|
+ assetManager.registerLocator(rootPath, clazz);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ logger.log(Level.WARNING, "Cannot find locator {0}", locatorClass);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (cmd.equals("INCLUDE")) {
|
|
|
|
|
+ String includedCfg = scan.nextLine().trim();
|
|
|
|
|
+ URL includedCfgUrl = Thread.currentThread().getContextClassLoader().getResource(includedCfg);
|
|
|
|
|
+ if (includedCfgUrl != null) {
|
|
|
|
|
+ loadText(assetManager, includedCfgUrl);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ logger.log(Level.WARNING, "Cannot find config include {0}", includedCfg);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (cmd.trim().startsWith("#")) {
|
|
|
|
|
+ scan.nextLine();
|
|
|
|
|
+ continue;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new IOException("Expected command, got '" + cmd + "'");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- manager.registerLoader(loaderClazz, extensions);
|
|
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ if (in != null) in.close();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- */
|
|
|
|
|
}
|
|
}
|