Changing method signature of Savable

In Savable.read()/write(), we always need InputCapsule/OutputCapsule instead of JmeImporter/JmeExporter.

So read(), write() method always starts with importer.getCapsule(this) / exporter.getCapsule(this).

If we send Capsules instead of importer/exporter, useless code will be removed.



savable patch

By the way, is there a way to upload patch file at this forum?

The exact structure of things is still a little undecided, but why don’t you try upload your patch here:

http://hub.jmonkeyengine.org/groups/contribution-depot-jme3/snippets/add/

No, the code is not useless, sometimes you need the JmeImporter. The JmeImporter contains the link to the AssetManager, in AssetLinkNode for example it is used. This is different than in jme2 because there is no “global” way of accessing assets. This way each load process can use its own assetManager to load data. This link to the AssetManager would be placed wrongly in InputCapsule.



Cheers,

Normen



P.S. Patches can be easily posted using the “patch” tags of the forum (see button when posting)

thank you for the answer.

I already found sometimes AssetManager is needed.

InputCapsule contains JmeImporter. So my patch gets AssetManager from InputCapsule.getJmeImporter().getAssetManager()

Although you could retrieve the importer this way, its not following the logic imo. You have an importer and its got the input capsule which is responsible for storing the data. Other things might be integrated into the loader system and the JmeImporter/Exporter is one logical instance where those can be integrated. So you are right one could save some lines of code but I think its kind of cheating to wrap a “main object” into a “sub-object”.

Cheers,

Normen

okay, now I see what you say. :slight_smile:

Maybe we could have save(JmeExporter exp, OutputCapsule capsule)

Why? Its fine, you can get the capsule from the importer and all is good.

Momoko_Fan said:
Maybe we could have `save(JmeExporter exp, OutputCapsule capsule)` ...

I also think it's not a good idea. Thank you and sorry hehe.
I understand the keeping the design philosophy is more important than saving codes.

As an alternative, I think Importer/Exporter may have Input/OutputCapsule's interface.
Actually user doesn't need to know why he has to get capsules.
Importer/Exporter have to handle it internally.

This is another alternative.

If JmeImporter/Exporter implements Input/OutputCapsule, user don’t have to get capsules,

and no need to change exisiting code.



[patch]

Index: src/core/com/jme3/export/JmeImporter.java

===================================================================

— src/core/com/jme3/export/JmeImporter.java (revision 5849)

+++ src/core/com/jme3/export/JmeImporter.java (working copy)

@@ -35,7 +35,7 @@

import com.jme3.asset.AssetLoader;

import com.jme3.asset.AssetManager;



-public interface JmeImporter extends AssetLoader {

+public interface JmeImporter extends AssetLoader, InputCapsule {

public InputCapsule getCapsule(Savable id);

public AssetManager getAssetManager();

}

Index: src/core/com/jme3/export/JmeExporter.java

===================================================================

— src/core/com/jme3/export/JmeExporter.java (revision 5849)

+++ src/core/com/jme3/export/JmeExporter.java (working copy)

@@ -36,7 +36,7 @@

import java.io.IOException;

import java.io.OutputStream;



-public interface JmeExporter {

+public interface JmeExporter extends OutputCapsule {



public boolean save(Savable object, OutputStream f) throws IOException;

public boolean save(Savable object, File f) throws IOException;

Index: src/xml/com/jme3/export/xml/XMLExporter.java

===================================================================

— src/xml/com/jme3/export/xml/XMLExporter.java (revision 5849)

+++ src/xml/com/jme3/export/xml/XMLExporter.java (working copy)

@@ -35,10 +35,20 @@

import com.jme3.export.JmeExporter;

import com.jme3.export.OutputCapsule;

import com.jme3.export.Savable;

+import com.jme3.util.IntMap;

+

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

+import java.nio.ByteBuffer;

+import java.nio.FloatBuffer;

+import java.nio.IntBuffer;

+import java.nio.ShortBuffer;

+import java.util.ArrayList;

+import java.util.BitSet;

+import java.util.Map;

+

import javax.xml.parsers.DocumentBuilderFactory;



/**

@@ -88,5 +98,211 @@

public static XMLExporter getInstance() {

return new XMLExporter();

}

+

  • @Override
  • public void write(byte value, String name, byte defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(byte[] value, String name, byte[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(byte[][] value, String name, byte[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(int value, String name, int defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(int[] value, String name, int[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(int[][] value, String name, int[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(float value, String name, float defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(float[] value, String name, float[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(float[][] value, String name, float[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(double value, String name, double defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(double[] value, String name, double[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(double[][] value, String name, double[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(long value, String name, long defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(long[] value, String name, long[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(long[][] value, String name, long[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(short value, String name, short defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(short[] value, String name, short[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(short[][] value, String name, short[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(boolean value, String name, boolean defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(boolean[] value, String name, boolean[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(boolean[][] value, String name, boolean[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(String value, String name, String defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(String[] value, String name, String[] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(String[][] value, String name, String[][] defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(BitSet value, String name, BitSet defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Savable object, String name, Savable defVal) throws IOException {
  •   domOut.write(object, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Savable[] objects, String name, Savable[] defVal) throws IOException {
  •   domOut.write(objects, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Savable[][] objects, String name, Savable[][] defVal) throws IOException {
  •   domOut.write(objects, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeSavableArrayList(ArrayList array, String name, ArrayList defVal) throws IOException {
  •   domOut.writeSavableArrayList(array, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeSavableArrayListArray(ArrayList[] array, String name, ArrayList[] defVal) throws IOException {
  •   domOut.writeSavableArrayListArray(array, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeSavableArrayListArray2D(ArrayList[][] array, String name, ArrayList[][] defVal) throws IOException {
  •   domOut.writeSavableArrayListArray2D(array, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeFloatBufferArrayList(ArrayList array, String name, ArrayList defVal)
  •   	throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeByteBufferArrayList(ArrayList array, String name, ArrayList defVal)
  •   	throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeSavableMap(Map<? extends Savable, ? extends Savable> map, String name,
  •   	Map<? extends Savable, ? extends Savable> defVal) throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeStringSavableMap(Map<String, ? extends Savable> map, String name,
  •   	Map<String, ? extends Savable> defVal) throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeIntSavableMap(IntMap<? extends Savable> map, String name, IntMap<? extends Savable> defVal)
  •   	throws IOException {<br />
    
  •   domOut.writeIntSavableMap(map, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(FloatBuffer value, String name, FloatBuffer defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(IntBuffer value, String name, IntBuffer defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(ByteBuffer value, String name, ByteBuffer defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(ShortBuffer value, String name, ShortBuffer defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Enum value, String name, Enum defVal) throws IOException {
  •   domOut.write(value, name, defVal);<br />
    
  • }



    }

    Index: src/xml/com/jme3/export/xml/XMLImporter.java

    ===================================================================

    — src/xml/com/jme3/export/xml/XMLImporter.java (revision 5849)

    +++ src/xml/com/jme3/export/xml/XMLImporter.java (working copy)

    @@ -37,8 +37,18 @@

    import com.jme3.export.JmeImporter;

    import com.jme3.export.InputCapsule;

    import com.jme3.export.Savable;

    +import com.jme3.util.IntMap;

    +

    import java.io.IOException;

    import java.io.InputStream;

    +import java.nio.ByteBuffer;

    +import java.nio.FloatBuffer;

    +import java.nio.IntBuffer;

    +import java.nio.ShortBuffer;

    +import java.util.ArrayList;

    +import java.util.BitSet;

    +import java.util.Map;

    +

    import javax.xml.parsers.DocumentBuilderFactory;

    import javax.xml.parsers.ParserConfigurationException;

    import org.xml.sax.SAXException;

    @@ -98,5 +108,214 @@

    public static XMLImporter getInstance() {

    return new XMLImporter();

    }

    +
  • @Override
  • public byte readByte(String name, byte defVal) throws IOException {
  •   return domIn.readByte(name, defVal);<br />
    
  • }

    +
  • @Override
  • public byte[] readByteArray(String name, byte[] defVal) throws IOException {
  •   return domIn.readByteArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public byte[][] readByteArray2D(String name, byte[][] defVal) throws IOException {
  •   return domIn.readByteArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public int readInt(String name, int defVal) throws IOException {
  •   return domIn.readInt(name, defVal);<br />
    
  • }

    +
  • @Override
  • public int[] readIntArray(String name, int[] defVal) throws IOException {
  •   return domIn.readIntArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public int[][] readIntArray2D(String name, int[][] defVal) throws IOException {
  •   return domIn.readIntArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public float readFloat(String name, float defVal) throws IOException {
  •   return domIn.readFloat(name, defVal);<br />
    
  • }

    +
  • @Override
  • public float[] readFloatArray(String name, float[] defVal) throws IOException {
  •   return domIn.readFloatArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public float[][] readFloatArray2D(String name, float[][] defVal) throws IOException {
  •   return domIn.readFloatArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public double readDouble(String name, double defVal) throws IOException {
  •   return domIn.readDouble(name, defVal);<br />
    
  • }

    +
  • @Override
  • public double[] readDoubleArray(String name, double[] defVal) throws IOException {
  •   return domIn.readDoubleArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public double[][] readDoubleArray2D(String name, double[][] defVal) throws IOException {
  •   return domIn.readDoubleArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public long readLong(String name, long defVal) throws IOException {
  •   return domIn.readLong(name, defVal);<br />
    
  • }

    +
  • @Override
  • public long[] readLongArray(String name, long[] defVal) throws IOException {
  •   return domIn.readLongArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public long[][] readLongArray2D(String name, long[][] defVal) throws IOException {
  •   return domIn.readLongArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public short readShort(String name, short defVal) throws IOException {
  •   return domIn.readShort(name, defVal);<br />
    
  • }

    +
  • @Override
  • public short[] readShortArray(String name, short[] defVal) throws IOException {
  •   return domIn.readShortArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public short[][] readShortArray2D(String name, short[][] defVal) throws IOException {
  •   return domIn.readShortArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public boolean readBoolean(String name, boolean defVal) throws IOException {
  •   return domIn.readBoolean(name, defVal);<br />
    
  • }

    +
  • @Override
  • public boolean[] readBooleanArray(String name, boolean[] defVal) throws IOException {
  •   return domIn.readBooleanArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public boolean[][] readBooleanArray2D(String name, boolean[][] defVal) throws IOException {
  •   return domIn.readBooleanArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public String readString(String name, String defVal) throws IOException {
  •   return domIn.readString(name, defVal);<br />
    
  • }

    +
  • @Override
  • public String[] readStringArray(String name, String[] defVal) throws IOException {
  •   return domIn.readStringArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public String[][] readStringArray2D(String name, String[][] defVal) throws IOException {
  •   return domIn.readStringArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public BitSet readBitSet(String name, BitSet defVal) throws IOException {
  •   return domIn.readBitSet(name, defVal);<br />
    
  • }

    +
  • @Override
  • public Savable readSavable(String name, Savable defVal) throws IOException {
  •   return domIn.readSavable(name, defVal);<br />
    
  • }

    +
  • @Override
  • public Savable[] readSavableArray(String name, Savable[] defVal) throws IOException {
  •   return domIn.readSavableArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public Savable[][] readSavableArray2D(String name, Savable[][] defVal) throws IOException {
  •   return domIn.readSavableArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ArrayList readSavableArrayList(String name, ArrayList defVal) throws IOException {
  •   return domIn.readSavableArrayList(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ArrayList[] readSavableArrayListArray(String name, ArrayList[] defVal) throws IOException {
  •   return domIn.readSavableArrayListArray(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ArrayList[][] readSavableArrayListArray2D(String name, ArrayList[][] defVal) throws IOException {
  •   return domIn.readSavableArrayListArray2D(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ArrayList readFloatBufferArrayList(String name, ArrayList defVal)
  •   	throws IOException {<br />
    
  •   return domIn.readFloatBufferArrayList(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ArrayList readByteBufferArrayList(String name, ArrayList defVal) throws IOException {
  •   return domIn.readByteBufferArrayList(name, defVal);<br />
    
  • }

    +
  • @Override
  • public Map<? extends Savable, ? extends Savable> readSavableMap(String name,
  •   	Map<? extends Savable, ? extends Savable> defVal) throws IOException {<br />
    
  •   return domIn.readSavableMap(name, defVal);<br />
    
  • }

    +
  • @Override
  • public Map<String, ? extends Savable> readStringSavableMap(String name, Map<String, ? extends Savable> defVal)
  •   	throws IOException {<br />
    
  •   return domIn.readStringSavableMap(name, defVal);<br />
    
  • }

    +
  • @Override
  • public IntMap<? extends Savable> readIntSavableMap(String name, IntMap<? extends Savable> defVal)
  •   	throws IOException {<br />
    
  •   return domIn.readIntSavableMap(name, defVal);<br />
    
  • }

    +
  • @Override
  • public FloatBuffer readFloatBuffer(String name, FloatBuffer defVal) throws IOException {
  •   return domIn.readFloatBuffer(name, defVal);<br />
    
  • }

    +
  • @Override
  • public IntBuffer readIntBuffer(String name, IntBuffer defVal) throws IOException {
  •   return domIn.readIntBuffer(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ByteBuffer readByteBuffer(String name, ByteBuffer defVal) throws IOException {
  •   return domIn.readByteBuffer(name, defVal);<br />
    
  • }

    +
  • @Override
  • public ShortBuffer readShortBuffer(String name, ShortBuffer defVal) throws IOException {
  •   return domIn.readShortBuffer(name, defVal);<br />
    
  • }

    +
  • @Override
  • public <T extends Enum> T readEnum(String name, Class enumType, T defVal) throws IOException {
  •   return domIn.readEnum(name, enumType, defVal);<br />
    
  • }



    }

    Index: src/core-plugins/com/jme3/export/binary/BinaryExporter.java

    ===================================================================

    — src/core-plugins/com/jme3/export/binary/BinaryExporter.java (revision 5849)

    +++ src/core-plugins/com/jme3/export/binary/BinaryExporter.java (working copy)

    @@ -40,11 +40,22 @@

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.OutputStream;

    +import java.nio.ByteBuffer;

    +import java.nio.FloatBuffer;

    +import java.nio.IntBuffer;

    +import java.nio.ShortBuffer;

    import java.util.ArrayList;

    +import java.util.BitSet;

    +import java.util.Deque;

    import java.util.HashMap;

    import java.util.IdentityHashMap;

    +import java.util.LinkedList;

    +import java.util.Map;

    import java.util.logging.Logger;



    +import com.jme3.export.OutputCapsule;

    +import com.jme3.util.IntMap;

    +

    /**
  • Exports to the jME Binary Format. Format descriptor: (each numbered item
  • denotes a series of bytes that follows sequentially one after the next.)

    @@ -159,6 +170,8 @@

    = new HashMap<String, BinaryClassObject>();



    private ArrayList contentKeys = new ArrayList();

    +
  • private transient Deque capsule = new LinkedList();



    public static boolean debug = false;

    public static boolean useFastBufs = true;

    @@ -353,7 +366,9 @@

    if (old == null) {

    contentKeys.add(object);

    }
  •    capsule.addFirst(getCapsule(object));<br />
    

object.write(this);

  •    capsule.removeFirst();<br />
    

newPair.getContent().finish();

return newPair.getId();



@@ -378,4 +393,214 @@

new BinaryOutputCapsule(this, bco));

return pair;

}

+

  • private OutputCapsule getCapsule() {
  •   return capsule.getFirst();<br />
    
  • }

    +
  • @Override
  • public void write(byte value, String name, byte defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(byte[] value, String name, byte[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(byte[][] value, String name, byte[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(int value, String name, int defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(int[] value, String name, int[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(int[][] value, String name, int[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(float value, String name, float defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(float[] value, String name, float[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(float[][] value, String name, float[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(double value, String name, double defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(double[] value, String name, double[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(double[][] value, String name, double[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(long value, String name, long defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(long[] value, String name, long[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(long[][] value, String name, long[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(short value, String name, short defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(short[] value, String name, short[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(short[][] value, String name, short[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(boolean value, String name, boolean defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(boolean[] value, String name, boolean[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(boolean[][] value, String name, boolean[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(String value, String name, String defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(String[] value, String name, String[] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(String[][] value, String name, String[][] defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(BitSet value, String name, BitSet defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Savable object, String name, Savable defVal) throws IOException {
  •   getCapsule().write(object, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Savable[] objects, String name, Savable[] defVal) throws IOException {
  •   getCapsule().write(objects, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Savable[][] objects, String name, Savable[][] defVal) throws IOException {
  •   getCapsule().write(objects, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeSavableArrayList(ArrayList array, String name, ArrayList defVal) throws IOException {
  •   getCapsule().writeSavableArrayList(array, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeSavableArrayListArray(ArrayList[] array, String name, ArrayList[] defVal) throws IOException {
  •   getCapsule().writeSavableArrayListArray(array, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeSavableArrayListArray2D(ArrayList[][] array, String name, ArrayList[][] defVal) throws IOException {
  •   getCapsule().writeSavableArrayListArray2D(array, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void writeFloatBufferArrayList(ArrayList array, String name, ArrayList defVal)
  •   	throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeByteBufferArrayList(ArrayList array, String name, ArrayList defVal)
  •   	throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeSavableMap(Map<? extends Savable, ? extends Savable> map, String name,
  •   	Map<? extends Savable, ? extends Savable> defVal) throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeStringSavableMap(Map<String, ? extends Savable> map, String name,
  •   	Map<String, ? extends Savable> defVal) throws IOException {<br />
    
  • }

    +
  • @Override
  • public void writeIntSavableMap(IntMap<? extends Savable> map, String name, IntMap<? extends Savable> defVal)
  •   	throws IOException {<br />
    
  •   getCapsule().writeIntSavableMap(map, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(FloatBuffer value, String name, FloatBuffer defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(IntBuffer value, String name, IntBuffer defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(ByteBuffer value, String name, ByteBuffer defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(ShortBuffer value, String name, ShortBuffer defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    +
  • @Override
  • public void write(Enum value, String name, Enum defVal) throws IOException {
  •   getCapsule().write(value, name, defVal);<br />
    
  • }

    }

    No newline at end of file

    Index: src/core-plugins/com/jme3/export/binary/BinaryImporter.java

    ===================================================================

    — src/core-plugins/com/jme3/export/binary/BinaryImporter.java (revision 5849)

    +++ src/core-plugins/com/jme3/export/binary/BinaryImporter.java (working copy)

    @@ -34,10 +34,13 @@



    import com.jme3.asset.AssetInfo;

    import com.jme3.asset.AssetManager;

    +import com.jme3.export.InputCapsule;

    import com.jme3.export.JmeImporter;

    import com.jme3.export.ReadListener;

    import com.jme3.export.Savable;

    import com.jme3.math.FastMath;

    +import com.jme3.util.IntMap;

    +

    import java.io.BufferedInputStream;

    import java.io.ByteArrayInputStream;

    import java.io.ByteArrayOutputStream;

    @@ -46,9 +49,18 @@

    import java.io.IOException;

    import java.io.InputStream;

    import java.net.URL;

    +import java.nio.ByteBuffer;

    import java.nio.ByteOrder;

    +import java.nio.FloatBuffer;

    +import java.nio.IntBuffer;

    +import java.nio.ShortBuffer;

    +import java.util.ArrayList;

    +import java.util.BitSet;

    +import java.util.Deque;

    import java.util.HashMap;

    import java.util.IdentityHashMap;

    +import java.util.LinkedList;

    +import java.util.Map;

    import java.util.logging.Level;

    import java.util.logging.Logger;



    @@ -78,6 +90,7 @@



    private byte[] dataArray;

    private int aliasWidth;
  • private transient Deque capsule = new LinkedList();



    private static final boolean fastRead = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN;



    @@ -285,7 +298,9 @@

    capsuleTable.put(out, cap);

    contentTable.put(id, out);


  •        capsule.addFirst(getCapsule(out));<br />
    

out.read(this);

  •        capsule.removeFirst();<br />
    

capsuleTable.remove(out);

@@ -305,4 +320,217 @@
return null;
}
}
+
+ private InputCapsule getCapsule() {
+ return capsule.getFirst();
+ }
+
+ @Override
+ public byte readByte(String name, byte defVal) throws IOException {
+ return getCapsule().readByte(name, defVal);
+ }
+
+ @Override
+ public byte[] readByteArray(String name, byte[] defVal) throws IOException {
+ return getCapsule().readByteArray(name, defVal);
+ }
+
+ @Override
+ public byte[][] readByteArray2D(String name, byte[][] defVal) throws IOException {
+ return getCapsule().readByteArray2D(name, defVal);
+ }
+
+ @Override
+ public int readInt(String name, int defVal) throws IOException {
+ return getCapsule().readInt(name, defVal);
+ }
+
+ @Override
+ public int[] readIntArray(String name, int[] defVal) throws IOException {
+ return getCapsule().readIntArray(name, defVal);
+ }
+
+ @Override
+ public int[][] readIntArray2D(String name, int[][] defVal) throws IOException {
+ return getCapsule().readIntArray2D(name, defVal);
+ }
+
+ @Override
+ public float readFloat(String name, float defVal) throws IOException {
+ return getCapsule().readFloat(name, defVal);
+ }
+
+ @Override
+ public float[] readFloatArray(String name, float[] defVal) throws IOException {
+ return getCapsule().readFloatArray(name, defVal);
+ }
+
+ @Override
+ public float[][] readFloatArray2D(String name, float[][] defVal) throws IOException {
+ return getCapsule().readFloatArray2D(name, defVal);
+ }
+
+ @Override
+ public double readDouble(String name, double defVal) throws IOException {
+ return getCapsule().readDouble(name, defVal);
+ }
+
+ @Override
+ public double[] readDoubleArray(String name, double[] defVal) throws IOException {
+ return getCapsule().readDoubleArray(name, defVal);
+ }
+
+ @Override
+ public double[][] readDoubleArray2D(String name, double[][] defVal) throws IOException {
+ return getCapsule().readDoubleArray2D(name, defVal);
+ }
+
+ @Override
+ public long readLong(String name, long defVal) throws IOException {
+ return getCapsule().readLong(name, defVal);
+ }
+
+ @Override
+ public long[] readLongArray(String name, long[] defVal) throws IOException {
+ return getCapsule().readLongArray(name, defVal);
+ }
+
+ @Override
+ public long[][] readLongArray2D(String name, long[][] defVal) throws IOException {
+ return getCapsule().readLongArray2D(name, defVal);
+ }
+
+ @Override
+ public short readShort(String name, short defVal) throws IOException {
+ return getCapsule().readShort(name, defVal);
+ }
+
+ @Override
+ public short[] readShortArray(String name, short[] defVal) throws IOException {
+ return getCapsule().readShortArray(name, defVal);
+ }
+
+ @Override
+ public short[][] readShortArray2D(String name, short[][] defVal) throws IOException {
+ return getCapsule().readShortArray2D(name, defVal);
+ }
+
+ @Override
+ public boolean readBoolean(String name, boolean defVal) throws IOException {
+ return getCapsule().readBoolean(name, defVal);
+ }
+
+ @Override
+ public boolean[] readBooleanArray(String name, boolean[] defVal) throws IOException {
+ return getCapsule().readBooleanArray(name, defVal);
+ }
+
+ @Override
+ public boolean[][] readBooleanArray2D(String name, boolean[][] defVal) throws IOException {
+ return getCapsule().readBooleanArray2D(name, defVal);
+ }
+
+ @Override
+ public String readString(String name, String defVal) throws IOException {
+ return getCapsule().readString(name, defVal);
+ }
+
+ @Override
+ public String[] readStringArray(String name, String[] defVal) throws IOException {
+ return getCapsule().readStringArray(name, defVal);
+ }
+
+ @Override
+ public String[][] readStringArray2D(String name, String[][] defVal) throws IOException {
+ return getCapsule().readStringArray2D(name, defVal);
+ }
+
+ @Override
+ public BitSet readBitSet(String name, BitSet defVal) throws IOException {
+ return getCapsule().readBitSet(name, defVal);
+ }
+
+ @Override
+ public Savable readSavable(String name, Savable defVal) throws IOException {
+ return getCapsule().readSavable(name, defVal);
+ }
+
+ @Override
+ public Savable[] readSavableArray(String name, Savable[] defVal) throws IOException {
+ return getCapsule().readSavableArray(name, defVal);
+ }
+
+ @Override
+ public Savable[][] readSavableArray2D(String name, Savable[][] defVal) throws IOException {
+ return getCapsule().readSavableArray2D(name, defVal);
+ }
+
+ @Override
+ public ArrayList readSavableArrayList(String name, ArrayList defVal) throws IOException {
+ return getCapsule().readSavableArrayList(name, defVal);
+ }
+
+ @Override
+ public ArrayList[] readSavableArrayListArray(String name, ArrayList[] defVal) throws IOException {
+ return getCapsule().readSavableArrayListArray(name, defVal);
+ }
+
+ @Override
+ public ArrayList[][] readSavableArrayListArray2D(String name, ArrayList[][] defVal) throws IOException {
+ return getCapsule().readSavableArrayListArray2D(name, defVal);
+ }
+
+ @Override
+ public ArrayList readFloatBufferArrayList(String name, ArrayList defVal)
+ throws IOException {
+ return getCapsule().readFloatBufferArrayList(name, defVal);
+ }
+
+ @Override
+ public ArrayList readByteBufferArrayList(String name, ArrayList defVal) throws IOException {
+ return getCapsule().readByteBufferArrayList(name, defVal);
+ }
+
+ @Override
+ public Map<? extends Savable, ? extends Savable> readSavableMap(String name,
+ Map<? extends Savable, ? extends Savable> defVal) throws IOException {
+ return getCapsule().readSavableMap(name, defVal);
+ }
+
+ @Override
+ public Map readStringSavableMap(String name, Map defVal)
+ throws IOException {
+ return getCapsule().readStringSavableMap(name, defVal);
+ }
+
+ @Override
+ public IntMap<? extends Savable> readIntSavableMap(String name, IntMap<? extends Savable> defVal)
+ throws IOException {
+ return getCapsule().readIntSavableMap(name, defVal);
+ }
+
+ @Override
+ public FloatBuffer readFloatBuffer(String name, FloatBuffer defVal) throws IOException {
+ return getCapsule().readFloatBuffer(name, defVal);
+ }
+
+ @Override
+ public IntBuffer readIntBuffer(String name, IntBuffer defVal) throws IOException {
+ return getCapsule().readIntBuffer(name, defVal);
+ }
+
+ @Override
+ public ByteBuffer readByteBuffer(String name, ByteBuffer defVal) throws IOException {
+ return getCapsule().readByteBuffer(name, defVal);
+ }
+
+ @Override
+ public ShortBuffer readShortBuffer(String name, ShortBuffer defVal) throws IOException {
+ return getCapsule().readShortBuffer(name, defVal);
+ }
+
+ @Override
+ public <T extends Enum> T readEnum(String name, Class enumType, T defVal) throws IOException {
+ return getCapsule().readEnum(name, enumType, defVal);
+ }
}

[/patch]

The alternative patch uses JmeImport/Exporter as a proxy of Input/OutputCapsule.

No need to use ‘getCapsule()’ anymore.

Is it ugly or good idea?

I think its a lot of duplicate code. Having to use getCapsule() really isn’t that much of an issue I think, really.