Browse Source

SDK:
- extend UberAssetLocator

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10197 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

nor..67 12 years ago
parent
commit
2478e17aae

+ 66 - 1
jme3-model-importer/src/com/jme3/gde/modelimporter/UberAssetLocator.java

@@ -38,6 +38,8 @@ import com.jme3.asset.AssetManager;
 import java.io.File;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileFilter;
 import org.openide.filesystems.FileChooserBuilder;
 import org.openide.filesystems.FileChooserBuilder;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileObject;
@@ -45,15 +47,74 @@ import org.openide.filesystems.FileUtil;
 import org.openide.util.Exceptions;
 import org.openide.util.Exceptions;
 
 
 /**
 /**
+ * Asset locator that tries to find a file across the filesystem or get user
+ * input on where the file is.
  *
  *
  * @author normenhansen
  * @author normenhansen
  */
  */
 public class UberAssetLocator implements AssetLocator {
 public class UberAssetLocator implements AssetLocator {
+    //ugly static due to Locator instantiation
+
+    private static final List<UberAssetInfo> locatedAssets = new ArrayList<UberAssetInfo>();
+    private String rootPath;
+
+    public static void resetLocatedList() {
+        locatedAssets.clear();
+    }
+
+    public static List<UberAssetInfo> getLocatedList() {
+        return new ArrayList<UberAssetInfo>(locatedAssets);
+    }
+
+    private static UberAssetInfo getInfo(AssetKey key) {
+        for (UberAssetInfo uberAssetInfo : locatedAssets) {
+            if (uberAssetInfo.getKey().getName().equals(key.getName())) {
+                return uberAssetInfo;
+            }
+        }
+        return null;
+    }
+
+    public UberAssetLocator() {
+    }
 
 
     public void setRootPath(String rootPath) {
     public void setRootPath(String rootPath) {
+        this.rootPath = rootPath;
     }
     }
 
 
     public AssetInfo locate(AssetManager manager, AssetKey key) {
     public AssetInfo locate(AssetManager manager, AssetKey key) {
+        AssetInfo existing = getInfo(key);
+        if (existing != null) {
+            return existing;
+        }
+        FileObject file = findFile(key);
+        if (file == null) {
+            return null;
+        }
+        UberAssetInfo info = new UberAssetInfo(file, manager, key);
+        locatedAssets.add(info);
+        return info;
+    }
+
+    private FileObject findFile(AssetKey key) {
+        //TODO: better attempt to actually find file.. :)
+        String rootPath = this.rootPath != null ? this.rootPath.replace("\\", "/") : null;
+        if (rootPath != null) {
+            File file = new File(rootPath + "/" + key.getName());
+            FileObject fileObject = FileUtil.toFileObject(file);
+            if (fileObject != null) {
+                return fileObject;
+            }
+        }
+        File file = new File(key.getName());
+        FileObject fileObject = FileUtil.toFileObject(file);
+        if (fileObject != null) {
+            return fileObject;
+        }
+        return getUserPath(key);
+    }
+
+    private FileObject getUserPath(AssetKey key) {
         final String ext = key.getExtension();
         final String ext = key.getExtension();
         FileChooserBuilder fcb = new FileChooserBuilder(this.getClass());
         FileChooserBuilder fcb = new FileChooserBuilder(this.getClass());
         fcb.setTitle("Locate " + key.getName());
         fcb.setTitle("Locate " + key.getName());
@@ -77,7 +138,7 @@ public class UberAssetLocator implements AssetLocator {
         if (file == null) {
         if (file == null) {
             return null;
             return null;
         }
         }
-        return new UberAssetInfo(FileUtil.toFileObject(file), manager, key);
+        return FileUtil.toFileObject(file);
     }
     }
 
 
     public static class UberAssetInfo extends AssetInfo {
     public static class UberAssetInfo extends AssetInfo {
@@ -89,6 +150,10 @@ public class UberAssetLocator implements AssetLocator {
             this.file = file;
             this.file = file;
         }
         }
 
 
+        public FileObject getFileObject() {
+            return file;
+        }
+
         @Override
         @Override
         public InputStream openStream() {
         public InputStream openStream() {
             try {
             try {