From 6936c34b7532d734190868602fff1a9f214cfe6b Mon Sep 17 00:00:00 2001 From: "nor..67" Date: Tue, 8 Nov 2011 16:30:45 +0000 Subject: [PATCH] - add code for keeping list of additional assets for AssetDataObject (not used anywhere yet) git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8599 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../com/jme3/gde/core/assets/AssetData.java | 9 +++ .../jme3/gde/core/assets/AssetDataObject.java | 76 +++++++++++++++++++ .../gde/core/assets/ProjectAssetManager.java | 40 +++++++++- .../core/assets/SpatialAssetDataObject.java | 2 + .../jme3/gde/ogrexml/OgreSceneDataObject.java | 2 + .../jme3/gde/ogrexml/OgreXMLDataObject.java | 2 + 6 files changed, 128 insertions(+), 3 deletions(-) diff --git a/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetData.java b/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetData.java index f42474bfe..24e70dda4 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetData.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetData.java @@ -36,6 +36,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.List; import java.util.Properties; import org.openide.filesystems.FileAlreadyLockedException; import org.openide.filesystems.FileLock; @@ -76,7 +77,15 @@ public class AssetData extends Properties { public void saveAsset() throws IOException { file.saveAsset(); } + + public List getAssetList(){ + return file.getAssetList(); + } + public List getFailedList() { + return file.getFailedList(); + } + @Override public synchronized String getProperty(String key) { return super.getProperty(key); diff --git a/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetDataObject.java b/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetDataObject.java index c19c1bc39..6381d0e1f 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetDataObject.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/assets/AssetDataObject.java @@ -31,6 +31,7 @@ */ package com.jme3.gde.core.assets; +import com.jme3.asset.AssetEventListener; import com.jme3.asset.AssetKey; import com.jme3.export.Savable; import com.jme3.export.binary.BinaryExporter; @@ -38,6 +39,8 @@ import com.jme3.gde.core.scene.SceneApplication; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; +import java.util.LinkedList; +import java.util.List; import java.util.concurrent.Callable; import java.util.logging.Level; import java.util.logging.Logger; @@ -91,12 +94,16 @@ public class AssetDataObject extends MultiDataObject { protected Savable savable; protected String saveExtension; protected AbstractLookup contentLookup; + protected AssetListListener listListener; + protected List assetList = new LinkedList(); + protected List failedList = new LinkedList(); public AssetDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException { super(pf, loader); contentLookup = new AbstractLookup(getLookupContents()); lookupContents.add(new AssetData(this)); lookup = new ProxyLookup(getCookieSet().getLookup(), contentLookup); + listListener = new AssetListListener(this, assetList, failedList); setSaveCookie(saveCookie); findAssetManager(); } @@ -168,7 +175,9 @@ public class AssetDataObject extends MultiDataObject { FileLock lock = null; try { lock = getPrimaryFile().lock(); + listListener.start(); Savable spatial = (Savable) mgr.loadAsset(getAssetKey()); + listListener.stop(); savable = spatial; lock.releaseLock(); } catch (Exception ex) { @@ -238,4 +247,71 @@ public class AssetDataObject extends MultiDataObject { Exceptions.printStackTrace(ex); } } + + public List getAssetList() { + return assetList; + } + + public List getFailedList() { + return failedList; + } + + protected static class AssetListListener implements AssetEventListener { + + private AssetDataObject obj; + private List assetList; + private List failedList; + private Thread loadingThread; + + public AssetListListener(AssetDataObject obj, List assetList, List failedList) { + this.obj = obj; + this.assetList = assetList; + this.failedList = failedList; + } + + public void assetLoaded(AssetKey ak) { + } + + public void assetRequested(AssetKey ak) { + ProjectAssetManager pm = obj.getLookup().lookup(ProjectAssetManager.class); + if (pm == null || loadingThread != Thread.currentThread()) { + return; + } + FileObject obj = pm.getAssetFolder().getFileObject(ak.getName()); + if (obj != null) { + assetList.add(obj); + } + } + + public void assetDependencyNotFound(AssetKey ak, AssetKey ak1) { + ProjectAssetManager pm = obj.getLookup().lookup(ProjectAssetManager.class); + if (pm == null || loadingThread != Thread.currentThread()) { + return; + } + FileObject obj = pm.getAssetFolder().getFileObject(ak1.getName()); + if (obj != null && assetList.contains(obj)) { + assetList.remove(obj); + failedList.add(ak1); + } + } + + public void start() { + ProjectAssetManager pm = obj.getLookup().lookup(ProjectAssetManager.class); + loadingThread = Thread.currentThread(); + assetList.clear(); + failedList.clear(); + if (pm == null) { + return; + } + pm.addAssetEventListener(this); + } + + public void stop() { + ProjectAssetManager pm = obj.getLookup().lookup(ProjectAssetManager.class); + if (pm == null) { + return; + } + pm.removeAssetEventListener(this); + } + }; } diff --git a/sdk/jme3-core/src/com/jme3/gde/core/assets/ProjectAssetManager.java b/sdk/jme3-core/src/com/jme3/gde/core/assets/ProjectAssetManager.java index 8350de9d5..bb2021b68 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/assets/ProjectAssetManager.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/assets/ProjectAssetManager.java @@ -31,6 +31,8 @@ */ package com.jme3.gde.core.assets; +import com.jme3.asset.AssetEventListener; +import com.jme3.asset.AssetKey; import com.jme3.asset.AssetManager; import com.jme3.asset.DesktopAssetManager; import java.util.ArrayList; @@ -55,6 +57,7 @@ public class ProjectAssetManager extends DesktopAssetManager { private Project project; private List folderNames = new LinkedList(); + private List assetEventListeners = new LinkedList(); public ProjectAssetManager(Project prj, String folderName) { super(true); @@ -73,18 +76,41 @@ public class ProjectAssetManager extends DesktopAssetManager { this.project = new DummyProject(this, path); } String string = project.getProjectDirectory().getPath(); - Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Add locator:{0}", string); - registerLocator(string, - "com.jme3.asset.plugins.FileLocator"); + Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Add locator: {0}", string); + registerLocator(string, "com.jme3.asset.plugins.FileLocator"); for (AssetManagerConfigurator di : Lookup.getDefault().lookupAll(AssetManagerConfigurator.class)) { di.prepareManager(this); } + prepAssetEventListeners(); } public ProjectAssetManager() { this(null); } + private void prepAssetEventListeners() { + setAssetEventListener(new AssetEventListener() { + + public void assetLoaded(AssetKey ak) { + for (AssetEventListener assetEventListener : assetEventListeners) { + assetEventListener.assetLoaded(ak); + } + } + + public void assetRequested(AssetKey ak) { + for (AssetEventListener assetEventListener : assetEventListeners) { + assetEventListener.assetRequested(ak); + } + } + + public void assetDependencyNotFound(AssetKey ak, AssetKey ak1) { + for (AssetEventListener assetEventListener : assetEventListeners) { + assetEventListener.assetDependencyNotFound(ak, ak1); + } + } + }); + } + /** * Adds a locator to a folder within the main project directory */ @@ -238,6 +264,14 @@ public class ProjectAssetManager extends DesktopAssetManager { this.folderNames.add(0, folderName); } + public void addAssetEventListener(AssetEventListener listener) { + assetEventListeners.add(listener); + } + + public void removeAssetEventListener(AssetEventListener listener) { + assetEventListeners.remove(listener); + } + /** * For situations with no Project */ diff --git a/sdk/jme3-core/src/com/jme3/gde/core/assets/SpatialAssetDataObject.java b/sdk/jme3-core/src/com/jme3/gde/core/assets/SpatialAssetDataObject.java index 8eaaab8bf..7c3ce2173 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/assets/SpatialAssetDataObject.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/assets/SpatialAssetDataObject.java @@ -86,7 +86,9 @@ public class SpatialAssetDataObject extends AssetDataObject { try { lock = getPrimaryFile().lock(); mgr.deleteFromCache(getAssetKey()); + listListener.start(); Spatial spatial = mgr.loadModel(getAssetKey()); + listListener.stop(); savable = spatial; lock.releaseLock(); return spatial; diff --git a/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreSceneDataObject.java b/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreSceneDataObject.java index f87b6b0b1..0fdcc90c3 100644 --- a/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreSceneDataObject.java +++ b/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreSceneDataObject.java @@ -85,7 +85,9 @@ public class OgreSceneDataObject extends SpatialAssetDataObject { try { lock = getPrimaryFile().lock(); mgr.deleteFromCache(getAssetKey()); + listListener.start(); Spatial spatial = mgr.loadModel(getAssetKey()); + listListener.stop(); savable = spatial; lock.releaseLock(); return spatial; diff --git a/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java b/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java index 098c9be38..73dd76270 100644 --- a/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java +++ b/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java @@ -109,7 +109,9 @@ public class OgreXMLDataObject extends SpatialAssetDataObject { try { lock = getPrimaryFile().lock(); mgr.deleteFromCache(getAssetKey()); + listListener.start(); Spatial spatial = mgr.loadModel(getAssetKey()); + listListener.stop(); savable = spatial; lock.releaseLock(); return spatial;