@ -32,28 +32,12 @@
package com.jme3.gde.ogrexml ;
import com.jme3.asset.ModelKey ;
import com.jme3.export.binary.BinaryExporter ;
import com.jme3.gde.core.assets.AssetData ;
import com.jme3.gde.core.assets.ProjectAssetManager ;
import com.jme3.gde.core.assets.SpatialAssetDataObject ;
import com.jme3.scene.Spatial ;
import com.jme3.scene.plugins.ogre.OgreMeshKey ;
import java.io.IOException ;
import java.io.OutputStream ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import org.netbeans.api.progress.ProgressHandle ;
import org.netbeans.api.progress.ProgressHandleFactory ;
import org.openide.DialogDisplayer ;
import org.openide.NotifyDescriptor ;
import org.openide.NotifyDescriptor.Confirmation ;
import org.openide.awt.StatusDisplayer ;
import org.openide.filesystems.FileLock ;
import org.openide.filesystems.FileObject ;
import org.openide.loaders.DataObject ;
import org.openide.loaders.DataObjectExistsException ;
import org.openide.loaders.MultiFileLoader ;
import org.openide.util.Exceptions ;
public class OgreXMLDataObject extends SpatialAssetDataObject {
@ -69,120 +53,5 @@ public class OgreXMLDataObject extends SpatialAssetDataObject {
assetKey = new OgreMeshKey ( super . getAssetKey ( ) . getName ( ) ) ;
return ( OgreMeshKey ) assetKey ;
}
@Override
public synchronized Spatial loadAsset ( ) {
if ( isModified ( ) & & savable ! = null ) {
return ( Spatial ) savable ;
}
ProjectAssetManager mgr = getLookup ( ) . lookup ( ProjectAssetManager . class ) ;
if ( mgr = = null ) {
DialogDisplayer . getDefault ( ) . notifyLater ( new NotifyDescriptor . Message ( "File is not part of a project!\nCannot load without ProjectAssetManager." ) ) ;
return null ;
}
String name = getPrimaryFile ( ) . getName ( ) ;
int idx = name . toLowerCase ( ) . indexOf ( ".mesh" ) ;
if ( idx ! = - 1 ) {
name = name . substring ( 0 , idx ) ;
}
String matName = ( ( OgreMeshKey ) getAssetKey ( ) ) . getMaterialName ( ) ;
if ( matName = = null ) {
matName = name ;
}
FileObject sourceMatFile = getPrimaryFile ( ) . getParent ( ) . getFileObject ( matName , "material" ) ;
if ( sourceMatFile = = null | | ! sourceMatFile . isValid ( ) ) {
Confirmation msg = new NotifyDescriptor . Confirmation (
"No material file found for " + getPrimaryFile ( ) . getNameExt ( ) + "\n"
+ "A file named " + matName + ".material should be in the same folder.\n"
+ "Press OK to import mesh only." ,
NotifyDescriptor . OK_CANCEL_OPTION ,
NotifyDescriptor . WARNING_MESSAGE ) ;
Object result = DialogDisplayer . getDefault ( ) . notify ( msg ) ;
if ( ! NotifyDescriptor . OK_OPTION . equals ( result ) ) {
return null ;
}
}
FileLock lock = null ;
try {
lock = getPrimaryFile ( ) . lock ( ) ;
mgr . deleteFromCache ( getAssetKey ( ) ) ;
listListener . start ( ) ;
Spatial spatial = mgr . loadModel ( getAssetKey ( ) ) ;
listListener . stop ( ) ;
savable = spatial ;
lock . releaseLock ( ) ;
return spatial ;
} catch ( Exception ex ) {
Exceptions . printStackTrace ( ex ) ;
} finally {
if ( lock ! = null ) {
lock . releaseLock ( ) ;
}
}
return null ;
}
public synchronized void saveAsset ( ) throws IOException {
ProjectAssetManager mgr = getLookup ( ) . lookup ( ProjectAssetManager . class ) ;
if ( mgr = = null ) {
return ;
}
String name = getPrimaryFile ( ) . getName ( ) ;
int idx = name . toLowerCase ( ) . indexOf ( ".mesh" ) ;
if ( idx ! = - 1 ) {
name = name . substring ( 0 , idx ) ;
}
ProgressHandle progressHandle = ProgressHandleFactory . createHandle ( "Saving File.." ) ;
progressHandle . start ( ) ;
BinaryExporter exp = BinaryExporter . getInstance ( ) ;
FileLock lock = null ;
OutputStream out = null ;
try {
if ( saveExtension = = null ) {
out = getPrimaryFile ( ) . getOutputStream ( ) ;
} else {
FileObject outFileObject = getPrimaryFile ( ) . getParent ( ) . getFileObject ( name , saveExtension ) ;
if ( outFileObject = = null ) {
outFileObject = getPrimaryFile ( ) . getParent ( ) . createData ( name , saveExtension ) ;
}
out = outFileObject . getOutputStream ( ) ;
outFileObject . getParent ( ) . refresh ( ) ;
}
exp . save ( savable , out ) ;
} finally {
if ( lock ! = null ) {
lock . releaseLock ( ) ;
}
if ( out ! = null ) {
out . close ( ) ;
}
}
progressHandle . finish ( ) ;
StatusDisplayer . getDefault ( ) . setStatusText ( getPrimaryFile ( ) . getNameExt ( ) + " saved." ) ;
setModified ( false ) ;
FileObject outFile = null ;
if ( saveExtension = = null ) {
outFile = getPrimaryFile ( ) ;
} else {
outFile = getPrimaryFile ( ) . getParent ( ) . getFileObject ( name , saveExtension ) ;
if ( outFile = = null ) {
Logger . getLogger ( SpatialAssetDataObject . class . getName ( ) ) . log ( Level . SEVERE , "Could not locate saved file." ) ;
return ;
}
}
try {
DataObject targetModel = DataObject . find ( outFile ) ;
AssetData properties = targetModel . getLookup ( ) . lookup ( AssetData . class ) ;
if ( properties ! = null ) {
properties . loadProperties ( ) ;
properties . setProperty ( "ORIGINAL_PATH" , mgr . getRelativeAssetPath ( outFile . getPath ( ) ) ) ;
properties . saveProperties ( ) ;
}
} catch ( Exception ex ) {
Exceptions . printStackTrace ( ex ) ;
}
}
}