|
|
|
@ -38,6 +38,9 @@ import com.jme3.export.InputCapsule; |
|
|
|
|
import com.jme3.export.OutputCapsule; |
|
|
|
|
import com.jme3.export.Savable; |
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.util.LinkedList; |
|
|
|
|
import java.util.logging.Level; |
|
|
|
|
import java.util.logging.Logger; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* <code>AssetKey</code> is a key that is used to |
|
|
|
@ -51,8 +54,8 @@ public class AssetKey<T> implements Savable { |
|
|
|
|
protected transient String extension; |
|
|
|
|
|
|
|
|
|
public AssetKey(String name){ |
|
|
|
|
this.name = name; |
|
|
|
|
this.extension = getExtension(name); |
|
|
|
|
this.name = reducePath(name); |
|
|
|
|
this.extension = getExtension(this.name); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public AssetKey(){ |
|
|
|
@ -138,6 +141,42 @@ public class AssetKey<T> implements Savable { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Removes all relative elements of a path (A/B/../C.png and A/./C.png). |
|
|
|
|
* @param path The path containing relative elements |
|
|
|
|
* @return A path without relative elements |
|
|
|
|
*/ |
|
|
|
|
public static String reducePath(String path) { |
|
|
|
|
if (path == null || path.indexOf("./") == -1) { |
|
|
|
|
return path; |
|
|
|
|
} |
|
|
|
|
String[] parts = path.split("/"); |
|
|
|
|
LinkedList<String> list = new LinkedList<String>(); |
|
|
|
|
for (int i = 0; i < parts.length; i++) { |
|
|
|
|
String string = parts[i]; |
|
|
|
|
if (string.length() == 0 || string.equals(".")) { |
|
|
|
|
//do nothing
|
|
|
|
|
} else if (string.equals("..")) { |
|
|
|
|
if (list.size() > 0) { |
|
|
|
|
list.removeLast(); |
|
|
|
|
} else { |
|
|
|
|
throw new IllegalStateException("Relative path is outside assetmanager root!"); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
list.add(string); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
StringBuilder builder = new StringBuilder(); |
|
|
|
|
for (int i = 0; i < list.size(); i++) { |
|
|
|
|
String string = list.get(i); |
|
|
|
|
if (i != 0) { |
|
|
|
|
builder.append("/"); |
|
|
|
|
} |
|
|
|
|
builder.append(string); |
|
|
|
|
} |
|
|
|
|
return builder.toString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean equals(Object other){ |
|
|
|
|
if (!(other instanceof AssetKey)){ |
|
|
|
@ -163,7 +202,7 @@ public class AssetKey<T> implements Savable { |
|
|
|
|
|
|
|
|
|
public void read(JmeImporter im) throws IOException { |
|
|
|
|
InputCapsule ic = im.getCapsule(this); |
|
|
|
|
name = ic.readString("name", null); |
|
|
|
|
name = reducePath(ic.readString("name", null)); |
|
|
|
|
extension = getExtension(name); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|