Zcos file: use a binary serialization for ScilabType rather than a xml one 65/7065/6
Calixte DENIZET [Fri, 27 Apr 2012 12:36:46 +0000 (14:36 +0200)]
Change-Id: I86f13cd0057a343a3316cece36b065c11e1cd21c

33 files changed:
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabBooleanCodec.java
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabDoubleCodec.java
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabGraphCodec.java
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabIntegerCodec.java
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabListCodec.java
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabObjectCodec.java
scilab/modules/graph/src/java/org/scilab/modules/graph/io/ScilabStringCodec.java
scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariable.java
scilab/modules/types/src/java/org/scilab/modules/types/GetScilabVariableJNI.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabBoolean.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabBooleanSparse.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabDouble.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabInteger.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabIntegerTypeEnum.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabMList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabPolynomial.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabSparse.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabSparseException.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabString.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabTList.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabType.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabTypeEnum.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabTypeEnumDescription.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariables.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesEvent.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesHandler.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesListener.java
scilab/modules/types/src/java/org/scilab/modules/types/ScilabVariablesRefresh.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/XcosCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/spec/ContentEntry.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/spec/DictionaryEntry.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/spec/XcosPackage.java

index 415e954..53c795e 100644 (file)
@@ -64,6 +64,16 @@ public class ScilabBooleanCodec extends ScilabObjectCodec {
         Node node = enc.getDocument().createElement(name);
 
         ScilabBoolean scilabBoolean = (ScilabBoolean) obj;
+
+        if (binary) {
+            int pos = binaryObjects.size();
+            binaryObjects.add(scilabBoolean);
+            mxCodec.setAttribute(node, BINARY, "true");
+            mxCodec.setAttribute(node, POSITION, pos);
+
+            return node;
+        }
+
         mxCodec.setAttribute(node, WIDTH, scilabBoolean.getWidth());
         mxCodec.setAttribute(node, HEIGHT, scilabBoolean.getHeight());
 
@@ -100,14 +110,19 @@ public class ScilabBooleanCodec extends ScilabObjectCodec {
             if (node.getNodeType() != Node.ELEMENT_NODE) {
                 throw new UnrecognizeFormatException();
             }
-            obj = (ScilabBoolean) cloneTemplate(node);
 
-            // attrs = {"as", "height", "width"}
+            // attrs = {"as", "height", "width", "binary", "position"}
             final NamedNodeMap attrs = node.getAttributes();
             if (attrs == null) {
                 throw new UnrecognizeFormatException();
             }
 
+            if (getBooleanAttribute(attrs, BINARY)) {
+                return binaryObjects.get(getIntegerAttribute(attrs, POSITION));
+            }
+
+            obj = (ScilabBoolean) cloneTemplate(node);
+
             final int height = getHeight(attrs);
             final int width = getWidth(attrs);
 
index bbff7da..6c30249 100644 (file)
@@ -65,6 +65,16 @@ public class ScilabDoubleCodec extends ScilabObjectCodec {
         Node node = enc.getDocument().createElement(name);
 
         ScilabDouble scilabDouble = (ScilabDouble) obj;
+
+        if (binary) {
+            int pos = binaryObjects.size();
+            binaryObjects.add(scilabDouble);
+            mxCodec.setAttribute(node, BINARY, "true");
+            mxCodec.setAttribute(node, POSITION, pos);
+
+            return node;
+        }
+
         mxCodec.setAttribute(node, WIDTH, scilabDouble.getWidth());
         mxCodec.setAttribute(node, HEIGHT, scilabDouble.getHeight());
 
@@ -109,14 +119,19 @@ public class ScilabDoubleCodec extends ScilabObjectCodec {
             if (node.getNodeType() != Node.ELEMENT_NODE) {
                 throw new UnrecognizeFormatException();
             }
-            obj = (ScilabDouble) cloneTemplate(node);
 
-            // attrs = {"as", "height", "width"}
+            // attrs = {"as", "height", "width", "binary", "position"}
             final NamedNodeMap attrs = node.getAttributes();
             if (attrs == null) {
                 throw new UnrecognizeFormatException();
             }
 
+            if (getBooleanAttribute(attrs, BINARY)) {
+                return binaryObjects.get(getIntegerAttribute(attrs, POSITION));
+            }
+
+            obj = (ScilabDouble) cloneTemplate(node);
+
             final int height = getHeight(attrs);
             final int width = getWidth(attrs);
 
index d020ba3..c697820 100644 (file)
@@ -30,7 +30,9 @@ public class ScilabGraphCodec extends mxObjectCodec {
 
     /**
      * Default constructor
-     * @param template the object template
+     *
+     * @param template
+     *            the object template
      */
     public ScilabGraphCodec(Object template) {
         super(template);
@@ -38,28 +40,33 @@ public class ScilabGraphCodec extends mxObjectCodec {
 
     /**
      * The constructor used on for configuration
-     * @param template Prototypical instance of the object to be encoded/decoded.
-     * @param exclude Optional array of fieldnames to be ignored.
-     * @param idrefs Optional array of fieldnames to be converted to/from references.
-     * @param mapping Optional mapping from field- to attributenames.
+     *
+     * @param template
+     *            Prototypical instance of the object to be encoded/decoded.
+     * @param exclude
+     *            Optional array of fieldnames to be ignored.
+     * @param idrefs
+     *            Optional array of fieldnames to be converted to/from
+     *            references.
+     * @param mapping
+     *            Optional mapping from field- to attributenames.
      */
-    public ScilabGraphCodec(Object template, String[] exclude, String[] idrefs,
-                            Map<String, String> mapping) {
+    public ScilabGraphCodec(Object template, String[] exclude, String[] idrefs, Map<String, String> mapping) {
         super(template, exclude, idrefs, mapping);
     }
 
     /**
-    * Trace any msg to the xml document.
-    *
-    * @param enc
-    *            the current encoder
-    * @param node
-    *            the current node
-    * @param msg
-    *            the message
-    * @param format
-    *            the format
-    */
+     * Trace any msg to the xml document.
+     *
+     * @param enc
+     *            the current encoder
+     * @param node
+     *            the current node
+     * @param msg
+     *            the message
+     * @param format
+     *            the format
+     */
     protected void trace(mxCodec enc, Node node, String msg, Object... format) {
         node.appendChild(enc.getDocument().createComment(String.format(msg, format)));
     }
@@ -81,33 +88,33 @@ public class ScilabGraphCodec extends mxObjectCodec {
     public Object beforeEncode(mxCodec enc, Object obj, Node node) {
         final ScilabGraph graph = (ScilabGraph) obj;
         if (graph.getAsComponent() != null) {
-            ((Element) node).setAttribute(BACKGROUND, String.valueOf(graph
-                                          .getAsComponent().getBackground().getRGB()));
+            ((Element) node).setAttribute(BACKGROUND, String.valueOf(graph.getAsComponent().getBackground().getRGB()));
         }
         return super.beforeEncode(enc, obj, node);
     }
 
     /**
      * Apply compatibility pattern to the decoded object
-     * @param dec Codec that controls the decoding process.
-     * @param node XML node to decode the object from.
-     * @param obj Object decoded.
+     *
+     * @param dec
+     *            Codec that controls the decoding process.
+     * @param node
+     *            XML node to decode the object from.
+     * @param obj
+     *            Object decoded.
      * @return The Object transformed
-     * @see org.scilab.modules.xcos.io.codec.XcosObjectCodec#afterDecode(com.mxgraph.io.mxCodec, org.w3c.dom.Node, java.lang.Object)
+     * @see org.scilab.modules.xcos.io.codec.XcosObjectCodec#afterDecode(com.mxgraph.io.mxCodec,
+     *      org.w3c.dom.Node, java.lang.Object)
      */
     @Override
     public Object afterDecode(mxCodec dec, Node node, Object obj) {
         final ScilabGraph graph = (ScilabGraph) obj;
         final Element elem = (Element) node;
-        if (graph.getAsComponent() != null
-                && !elem.getAttribute(BACKGROUND).isEmpty()) {
-            graph.getAsComponent().setBackground(
-                (new Color(Integer.parseInt((((Element) node)
-                                             .getAttribute(BACKGROUND))))));
+        if (graph.getAsComponent() != null && !elem.getAttribute(BACKGROUND).isEmpty()) {
+            graph.getAsComponent().setBackground((new Color(Integer.parseInt((((Element) node).getAttribute(BACKGROUND))))));
         }
 
         return super.afterDecode(dec, node, obj);
     }
 
-
 }
index d12ef11..054bf77 100644 (file)
@@ -71,6 +71,16 @@ public class ScilabIntegerCodec extends ScilabObjectCodec {
         Node node = enc.getDocument().createElement(name);
 
         ScilabInteger scilabInteger = (ScilabInteger) obj;
+
+        if (binary) {
+            int pos = binaryObjects.size();
+            binaryObjects.add(scilabInteger);
+            mxCodec.setAttribute(node, BINARY, "true");
+            mxCodec.setAttribute(node, POSITION, pos);
+
+            return node;
+        }
+
         mxCodec.setAttribute(node, WIDTH, scilabInteger.getWidth());
         mxCodec.setAttribute(node, HEIGHT, scilabInteger.getHeight());
         mxCodec.setAttribute(node, PRECISION, scilabInteger.getPrec().name());
@@ -108,14 +118,19 @@ public class ScilabIntegerCodec extends ScilabObjectCodec {
             if (node.getNodeType() != Node.ELEMENT_NODE) {
                 throw new UnrecognizeFormatException();
             }
-            obj = (ScilabInteger) cloneTemplate(node);
 
-            // attrs = {"as", "height", "width"}
+            // attrs = {"as", "height", "width", "binary", "position"}
             final NamedNodeMap attrs = node.getAttributes();
             if (attrs == null) {
                 throw new UnrecognizeFormatException();
             }
 
+            if (getBooleanAttribute(attrs, BINARY)) {
+                return binaryObjects.get(getIntegerAttribute(attrs, POSITION));
+            }
+
+            obj = (ScilabInteger) cloneTemplate(node);
+
             final int height = getHeight(attrs);
             final int width = getWidth(attrs);
 
index ee2a2b8..8b2cc6e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Scilab (http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Allan SIMON
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
 
 package org.scilab.modules.graph.io;
 
-
 import java.util.Map;
+import java.util.logging.Logger;
 
 import org.scilab.modules.types.ScilabList;
 import org.scilab.modules.types.ScilabMList;
 import org.scilab.modules.types.ScilabTList;
+import org.scilab.modules.types.ScilabType;
+
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
 import com.mxgraph.io.mxCodec;
+import com.mxgraph.io.mxCodecRegistry;
 
 /**
  * Define serialization for a {@link ScilabList} instance.
  */
-public class ScilabListCodec  extends ScilabObjectCodec {
+public class ScilabListCodec extends ScilabObjectCodec {
 
     private static final String SCILAB_CLASS = "scilabClass";
 
     /**
      * Default constructor
-        * @param template Prototypical instance of the object to be encoded/decoded.
-        * @param exclude Optional array of fieldnames to be ignored.
-        * @param idrefs Optional array of fieldnames to be converted to/from references.
-        * @param mapping Optional mapping from field- to attributenames.
+     *
+     * @param template
+     *            Prototypical instance of the object to be encoded/decoded.
+     * @param exclude
+     *            Optional array of fieldnames to be ignored.
+     * @param idrefs
+     *            Optional array of fieldnames to be converted to/from
+     *            references.
+     * @param mapping
+     *            Optional mapping from field- to attributenames.
      */
-    public ScilabListCodec(Object template, String[] exclude, String[] idrefs, Map<String, String> mapping)
-    {
-       super(template, exclude, idrefs, mapping);
+    public ScilabListCodec(Object template, String[] exclude, String[] idrefs, Map<String, String> mapping) {
+        super(template, exclude, idrefs, mapping);
 
     }
 
     /**
      * Add the class name as an attribute.
-     * 
-        * @param enc Codec that controls the encoding process.
-        * @param obj Object to be encoded.
-        * @param node XML node that represents the default encoding.
-        * @return Returns the resulting node of the encoding.
-     * @see com.mxgraph.io.mxObjectCodec#beforeEncode(com.mxgraph.io.mxCodec, java.lang.Object, org.w3c.dom.Node)
+     *
+     * @param enc
+     *            Codec that controls the encoding process.
+     * @param obj
+     *            Object to be encoded.
+     * @param node
+     *            XML node that represents the default encoding.
+     * @return Returns the resulting node of the encoding.
+     * @see com.mxgraph.io.mxObjectCodec#beforeEncode(com.mxgraph.io.mxCodec,
+     *      java.lang.Object, org.w3c.dom.Node)
      */
-       public Object beforeEncode(mxCodec enc, Object obj, Node node) {
-               String type = "";
-               for (Class< ? extends Object> klass = obj.getClass(); klass != Object.class; klass = klass
-                               .getSuperclass()) {
-                       if (klass == ScilabMList.class || klass == ScilabTList.class
-                                       || klass == ScilabList.class || klass.isArray()) {
-                               type = klass.getSimpleName();
-                               break;
-                       }
-               }
-
-               assert !type.equals("");
-               mxCodec.setAttribute(node, SCILAB_CLASS, type);
-               return obj;
-       }
-       
-       /**
-        * Instantiate defined class for the attribute 
-        * 
-        * @param node the node we are working on
-        * @return the instance of the node.
-        * @see com.mxgraph.io.mxObjectCodec#cloneTemplate(org.w3c.dom.Node)
-        */
-       public Object cloneTemplate(Node node) {
-               Object obj = null;
-               if (node.getAttributes().getNamedItem(SCILAB_CLASS) != null) { 
-                       String scilabClass = node.getAttributes().getNamedItem(SCILAB_CLASS).getNodeValue();
-                       if (scilabClass.equalsIgnoreCase("ScilabMList")) { 
-                               obj = new ScilabMList();
-                       } else if (scilabClass.equalsIgnoreCase("ScilabTList")) { 
-                               obj = new ScilabTList();
-                       } else if (scilabClass.equalsIgnoreCase("ScilabList")) { 
-                               obj = new ScilabList();
-                       } else {
-                               
-                               obj = super.cloneTemplate(node);
-                       }
-                       
-               } else {
-                       obj = super.cloneTemplate(node);
-               }
-
-               return obj;
-       }
-       
-       /**
-        * Workaround for a jgraphx bug on deserialization with a possible abstract
-        * array and default value.
-        * 
-        * @param dec
-        *            the current decoder instance
-        * @param node
-        *            the current node
-        * @param into
-        *            the object decode into (may be a wrongly typed instance)
-        * @return a valid (right typed) instance
-        * @see com.mxgraph.io.mxObjectCodec#decode(com.mxgraph.io.mxCodec,
-        *      org.w3c.dom.Node, java.lang.Object)
-        * @see http://www.jgraph.org/bugzilla/show_bug.cgi?id=55
-        * @see http://bugzilla.scilab.org/show_bug.cgi?id=8141
-        */
-       @Override
-       public Object decode(mxCodec dec, Node node, Object into) {
-               // Workaround case selection :
-               // - node is an "Array"
-               // - into (the default template) is not.
-               if (node.getNodeName().equals("Array") && into != null
-                               && !into.getClass().isArray()) {
-                       return super.decode(dec, node, null);
-               } else {
-                       return super.decode(dec, node, into);
-               }
-       }
+    public Object beforeEncode(mxCodec enc, Object obj, Node node) {
+        if (!binary) {
+            String type = "";
+            for (Class <? extends Object > klass = obj.getClass(); klass != Object.class; klass = klass.getSuperclass()) {
+                if (klass == ScilabMList.class || klass == ScilabTList.class || klass == ScilabList.class || klass.isArray()) {
+                    type = klass.getSimpleName();
+                    break;
+                }
+            }
+
+            assert !type.equals("");
+            mxCodec.setAttribute(node, SCILAB_CLASS, type);
+        }
+
+        return obj;
+    }
+
+    /**
+     * Instantiate defined class for the attribute
+     *
+     * @param node
+     *            the node we are working on
+     * @return the instance of the node.
+     * @see com.mxgraph.io.mxObjectCodec#cloneTemplate(org.w3c.dom.Node)
+     */
+    public Object cloneTemplate(Node node) {
+        Object obj = null;
+        if (node.getAttributes().getNamedItem(SCILAB_CLASS) != null) {
+            String scilabClass = node.getAttributes().getNamedItem(SCILAB_CLASS).getNodeValue();
+            if (scilabClass.equalsIgnoreCase("ScilabMList")) {
+                obj = new ScilabMList();
+            } else if (scilabClass.equalsIgnoreCase("ScilabTList")) {
+                obj = new ScilabTList();
+            } else if (scilabClass.equalsIgnoreCase("ScilabList")) {
+                obj = new ScilabList();
+            } else {
+
+                obj = super.cloneTemplate(node);
+            }
+
+        } else {
+            obj = super.cloneTemplate(node);
+        }
+
+        return obj;
+    }
+
+    /**
+     * Encodes the specified object and returns a node representing then given
+     * object. Calls beforeEncode after creating the node and afterEncode with
+     * the resulting node after processing.
+     *
+     * @param enc
+     *            Codec that controls the encoding process.
+     * @param obj
+     *            Object to be encoded.
+     * @return Returns the resulting XML node that represents the given object.
+     */
+    @Override
+    public Node encode(mxCodec enc, Object obj) {
+        String name = mxCodecRegistry.getName(obj);
+        Node node = enc.getDocument().createElement(name);
+
+        if (binary && (obj instanceof ScilabType)) {
+            int pos = binaryObjects.size();
+            binaryObjects.add((ScilabType) obj);
+            mxCodec.setAttribute(node, BINARY, "true");
+            mxCodec.setAttribute(node, POSITION, pos);
+
+            return node;
+        }
+
+        return super.encode(enc, obj);
+    }
+
+    /**
+     * Workaround for a jgraphx bug on deserialization with a possible abstract
+     * array and default value.
+     *
+     * @param dec
+     *            the current decoder instance
+     * @param node
+     *            the current node
+     * @param into
+     *            the object decode into (may be a wrongly typed instance)
+     * @return a valid (right typed) instance
+     * @see com.mxgraph.io.mxObjectCodec#decode(com.mxgraph.io.mxCodec,
+     *      org.w3c.dom.Node, java.lang.Object)
+     * @see http://www.jgraph.org/bugzilla/show_bug.cgi?id=55
+     * @see http://bugzilla.scilab.org/show_bug.cgi?id=8141
+     */
+    @Override
+    public Object decode(mxCodec dec, Node node, Object into) {
+        try {
+            final NamedNodeMap attrs = node.getAttributes();
+            if (attrs != null && getBooleanAttribute(attrs, BINARY)) {
+                return binaryObjects.get(getIntegerAttribute(attrs, POSITION));
+            }
+        } catch (UnrecognizeFormatException e) {
+            Logger.getLogger(ScilabDoubleCodec.class.getName()).severe(e.toString());
+        }
+
+        // Workaround case selection :
+        // - node is an "Array"
+        // - into (the default template) is not.
+        if (node.getNodeName().equals("Array") && into != null && !into.getClass().isArray()) {
+            return super.decode(dec, node, null);
+        } else {
+            return super.decode(dec, node, into);
+        }
+    }
 }
index 7b7d44f..f325cd0 100644 (file)
@@ -22,6 +22,7 @@ import org.scilab.modules.types.ScilabDouble;
 import org.scilab.modules.types.ScilabInteger;
 import org.scilab.modules.types.ScilabList;
 import org.scilab.modules.types.ScilabString;
+import org.scilab.modules.types.ScilabType;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
@@ -43,6 +44,13 @@ public abstract class ScilabObjectCodec extends mxObjectCodec {
     /** Data field */
     protected static final String DATA = "data";
 
+    protected static final String POSITION = "position";
+    protected static final String BINARY = "binary";
+
+    protected static boolean binary;
+    protected static ScilabList binaryObjects;
+    protected static final Object LOCK = new Object();;
+
     /**
      * Throw when we cannot load the XML.
      */
@@ -87,6 +95,33 @@ public abstract class ScilabObjectCodec extends mxObjectCodec {
 
     }
 
+    public static Object enableBinarySerialization(ScilabList list) {
+        synchronized (LOCK) {
+            binary = true;
+            if (list == null) {
+                binaryObjects = new ScilabList();
+            } else {
+                binaryObjects = list;
+            }
+
+            return LOCK;
+        }
+    }
+
+    public static ScilabList disableBinarySerialization() {
+        synchronized (LOCK) {
+            binary = false;
+            ScilabList ret = binaryObjects;
+            binaryObjects = null;
+
+            return ret;
+        }
+    }
+
+    public static ScilabList getBinaryObjects() {
+        return binaryObjects;
+    }
+
     /**
      * Register all known codecs on the {@link mxCodecRegistry}.
      */
@@ -141,7 +176,7 @@ public abstract class ScilabObjectCodec extends mxObjectCodec {
      * @throws UnrecognizeFormatException
      *             when the key is not valid.
      */
-    private int getIntegerAttribute(final NamedNodeMap dataAttrs, final String attribute) throws UnrecognizeFormatException {
+    protected int getIntegerAttribute(final NamedNodeMap dataAttrs, final String attribute) throws UnrecognizeFormatException {
         final Node node = dataAttrs.getNamedItem(attribute);
         if (node == null) {
             throw new UnrecognizeFormatException();
@@ -157,6 +192,26 @@ public abstract class ScilabObjectCodec extends mxObjectCodec {
     }
 
     /**
+     * get an integer value from a attributes.
+     *
+     * @param dataAttrs
+     *            the attributes
+     * @param attribute
+     *            the key to search
+     * @return the value
+     * @throws UnrecognizeFormatException
+     *             when the key is not valid.
+     */
+    protected boolean getBooleanAttribute(final NamedNodeMap dataAttrs, final String attribute) {
+        final Node node = dataAttrs.getNamedItem(attribute);
+        if (node == null) {
+            return false;
+        }
+
+        return Boolean.parseBoolean(node.getNodeValue());
+    }
+
+    /**
      * Get the height of the data attributes.
      *
      * @param attrs
index c57897f..3749e16 100644 (file)
@@ -64,6 +64,16 @@ public class ScilabStringCodec extends ScilabObjectCodec {
         Node node = enc.getDocument().createElement(name);
 
         ScilabString scilabString = (ScilabString) obj;
+
+        if (binary) {
+            int pos = binaryObjects.size();
+            binaryObjects.add(scilabString);
+            mxCodec.setAttribute(node, BINARY, "true");
+            mxCodec.setAttribute(node, POSITION, pos);
+
+            return node;
+        }
+
         mxCodec.setAttribute(node, WIDTH, scilabString.getWidth());
         mxCodec.setAttribute(node, HEIGHT, scilabString.getHeight());
 
@@ -100,14 +110,19 @@ public class ScilabStringCodec extends ScilabObjectCodec {
             if (node.getNodeType() != Node.ELEMENT_NODE) {
                 throw new UnrecognizeFormatException();
             }
-            obj = (ScilabString) cloneTemplate(node);
 
-            // attrs = {"as", "height", "width"}
+            // attrs = {"as", "height", "width", "binary", "position"}
             final NamedNodeMap attrs = node.getAttributes();
             if (attrs == null) {
                 throw new UnrecognizeFormatException();
             }
 
+            if (getBooleanAttribute(attrs, BINARY)) {
+                return binaryObjects.get(getIntegerAttribute(attrs, POSITION));
+            }
+
+            obj = (ScilabString) cloneTemplate(node);
+
             final int height = getHeight(attrs);
             final int width = getWidth(attrs);
 
index 45e4ea7..73b2b4e 100644 (file)
@@ -8,23 +8,23 @@
 
 package org.scilab.modules.types;
 
-
- /**
-   * Connector for Javasci v2.
-   * This class should <b>not</b> be used directly
-   * @see org.scilab.modules.javasci.Scilab
-   * @author DIGITEO - Sylvestre LEDRU
-   */
+/**
+ * Connector for Javasci v2. This class should <b>not</b> be used directly
+ *
+ * @see org.scilab.modules.javasci.Scilab
+ * @author DIGITEO - Sylvestre LEDRU
+ */
 public class GetScilabVariable {
 
- /**
-   * Constructor
-   */
- protected GetScilabVariable() {
-    throw new UnsupportedOperationException();
- }
-  public static void getScilabVariable(String variableName, int arg1, int arg2) {
-    GetScilabVariableJNI.getScilabVariable(variableName, arg1, arg2);
-  }
+    /**
+     * Constructor
+     */
+    protected GetScilabVariable() {
+        throw new UnsupportedOperationException();
+    }
+
+    public static void getScilabVariable(String variableName, int arg1, int arg2) {
+        GetScilabVariableJNI.getScilabVariable(variableName, arg1, arg2);
+    }
 
 }
index 667b465..0f7eb00 100644 (file)
@@ -8,39 +8,38 @@
 
 package org.scilab.modules.types;
 
-
 /* It is generated code. Disable checkstyle */
 //CHECKSTYLE:OFF
- /**
-   * Connector for Javasci v2.
-   * This class should <b>not</b> be used directly
-   * @see org.scilab.modules.javasci.Scilab
-   * @author DIGITEO - Sylvestre LEDRU
-   */
+/**
+ * Connector for Javasci v2. This class should <b>not</b> be used directly
+ *
+ * @see org.scilab.modules.javasci.Scilab
+ * @author DIGITEO - Sylvestre LEDRU
+ */
 class GetScilabVariableJNI {
 
-  /**
-    * Constructor
-    */
-  protected GetScilabVariableJNI() {
-    throw new UnsupportedOperationException();
-  }
+    /**
+     * Constructor
+     */
+    protected GetScilabVariableJNI() {
+        throw new UnsupportedOperationException();
+    }
 
-  static {
-    try {
-        if (System.getProperty("os.name").toLowerCase().contains("windows")) {
-           System.loadLibrary("scitypes");
-        } else {
-           System.loadLibrary("scilab");
+    static {
+        try {
+            if (System.getProperty("os.name").toLowerCase().contains("windows")) {
+                System.loadLibrary("scitypes");
+            } else {
+                System.loadLibrary("scilab");
+            }
+        } catch (SecurityException e) {
+            System.err.println("A security manager exists and does not allow the loading of the specified dynamic library :");
+            e.printStackTrace(System.err);
+        } catch (UnsatisfiedLinkError e) {
+            System.err.println("The native library libscilab does not exist or cannot be found.");
+            e.printStackTrace(System.err);
         }
-    } catch (SecurityException e) {
-        System.err.println("A security manager exists and does not allow the loading of the specified dynamic library :");
-        e.printStackTrace(System.err);
-    } catch (UnsatisfiedLinkError e)    {
-        System.err.println("The native library libscilab does not exist or cannot be found.");
-        e.printStackTrace(System.err);
     }
-  }
 
-  public final static native void getScilabVariable(String jarg1, int jarg2, int jarg3);
+    public final static native void getScilabVariable(String jarg1, int jarg2, int jarg3);
 }
index afbb328..f4727fc 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Arrays;
 
 /**
  * This class provides a representation on the Scilab boolean datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
  * boolean [][]a={{true,false,true}, {true,true,true}};<br />
  * ScilabBoolean aMatrix = new ScilabBoolean(a);
  * </code>
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabBoolean implements ScilabType {
@@ -34,6 +38,8 @@ public class ScilabBoolean implements ScilabType {
     private static final long serialVersionUID = 6511497080095473901L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_boolean;
 
+    private static final int VERSION = 0;
+
     /* the boolean data */
     private boolean[][] data;
     private String varName;
@@ -49,7 +55,8 @@ public class ScilabBoolean implements ScilabType {
     /**
      * Create an object from an array of array of boolean
      *
-     * @param data the array of boolean
+     * @param data
+     *            the array of boolean
      */
     public ScilabBoolean(boolean[][] data) {
         this.data = data;
@@ -58,7 +65,8 @@ public class ScilabBoolean implements ScilabType {
     /**
      * Create an object from an array of array of boolean
      *
-     * @param data the array of boolean
+     * @param data
+     *            the array of boolean
      */
     public ScilabBoolean(String varName, boolean[][] data, boolean swaped) {
         this.varName = varName;
@@ -69,7 +77,8 @@ public class ScilabBoolean implements ScilabType {
     /**
      * Create a scalar boolean from a boolean
      *
-     * @param value the boolean
+     * @param value
+     *            the boolean
      */
     public ScilabBoolean(boolean value) {
         this.data = new boolean[1][1];
@@ -79,7 +88,8 @@ public class ScilabBoolean implements ScilabType {
     /**
      * Change the value with the provided data
      *
-     * @param data array of boolean
+     * @param data
+     *            array of boolean
      */
     public void setData(boolean[][] data) {
         this.data = data;
@@ -110,6 +120,7 @@ public class ScilabBoolean implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -154,7 +165,6 @@ public class ScilabBoolean implements ScilabType {
         return (data == null);
     }
 
-
     /**
      * @see org.scilab.modules.types.ScilabType#equals(Object)
      */
@@ -174,6 +184,28 @@ public class ScilabBoolean implements ScilabType {
         return data;
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                data = (boolean[][]) in.readObject();
+                varName = (String) in.readObject();
+                swaped = in.readBoolean();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabBoolean with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeObject(data);
+        out.writeObject(varName);
+        out.writeBoolean(swaped);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
index e8b4e99..bd7dfd9 100644 (file)
@@ -12,6 +12,9 @@
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -19,10 +22,11 @@ import java.util.List;
 /**
  * This class provides a representation on the Scilab Boolean Sparse datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * //TODO Sly : ajouter de la doc
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabBooleanSparse implements ScilabType {
@@ -30,6 +34,8 @@ public class ScilabBooleanSparse implements ScilabType {
     private static final long serialVersionUID = 879625048944109684L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_boolean_sparse;
 
+    private static final int VERSION = 0;
+
     private int rows;
     private int cols;
     private int nbItem;
@@ -40,30 +46,39 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Default constructor
      */
-    public ScilabBooleanSparse() { }
+    public ScilabBooleanSparse() {
+    }
 
     /**
      * Constructor with a unique value.
-     * @param data the unique value
+     *
+     * @param data
+     *            the unique value
      */
     public ScilabBooleanSparse(boolean data) {
         if (data) {
             nbItem = 1;
             rows = cols = 1;
-            nbItemRow = new int[] {1};
-            colPos = new int[] {0};
+            nbItemRow = new int[] { 1 };
+            colPos = new int[] { 0 };
         }
     }
 
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of true items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each true
-     * @param check if true the parameters validity is checked
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of true items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each true
+     * @param check
+     *            if true the parameters validity is checked
      */
     public ScilabBooleanSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, boolean check) throws ScilabSparseException {
         this(rows, cols, nbItem, nbItemRow, colPos);
@@ -75,11 +90,16 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of true items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each true
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of true items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each true
      */
     public ScilabBooleanSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos) {
         this.rows = rows;
@@ -92,7 +112,8 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Constructor with a matrix of real data.
      *
-     * @param data the data
+     * @param data
+     *            the data
      */
     public ScilabBooleanSparse(boolean[][] data) {
         if (data.length != 0 && data[0].length != 0) {
@@ -122,12 +143,18 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param varName the variable name
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of true items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each true
+     * @param varName
+     *            the variable name
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of true items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each true
      */
     public ScilabBooleanSparse(String varName, int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos) {
         this(rows, cols, nbItem, nbItemRow, colPos);
@@ -136,6 +163,7 @@ public class ScilabBooleanSparse implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -146,6 +174,7 @@ public class ScilabBooleanSparse implements ScilabType {
 
     /**
      * Check the emptiness of the associated data.
+     *
      * @return true, if the associated data array is empty.
      */
     @Override
@@ -165,7 +194,8 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Set the real part of the data.
      *
-     * @param nbItem the real part.
+     * @param nbItem
+     *            the real part.
      */
     public void setNbNonNullItems(int nbItem) {
         this.nbItem = nbItem;
@@ -183,7 +213,8 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Set the real part of the data.
      *
-     * @param nbItemRow the real part.
+     * @param nbItemRow
+     *            the real part.
      */
     public void setNbItemRow(int[] nbItemRow) {
         this.nbItemRow = nbItemRow;
@@ -214,7 +245,8 @@ public class ScilabBooleanSparse implements ScilabType {
     /**
      * Set the real part of the data.
      *
-     * @param colPos the real part.
+     * @param colPos
+     *            the real part.
      */
     public void setColPos(int[] colPos) {
         this.colPos = colPos;
@@ -263,7 +295,6 @@ public class ScilabBooleanSparse implements ScilabType {
         return new boolean[0];
     }
 
-
     /**
      * @return the height of the data matrix
      * @see org.scilab.modules.types.ScilabType#getHeight()
@@ -289,9 +320,8 @@ public class ScilabBooleanSparse implements ScilabType {
     public boolean equals(Object obj) {
         if (obj instanceof ScilabBooleanSparse) {
             ScilabBooleanSparse sciSparse = (ScilabBooleanSparse) obj;
-            return this.getNbNonNullItems() == sciSparse.getNbNonNullItems() &&
-                   ScilabSparse.compareNbItemRow(this.getNbItemRow(), sciSparse.getNbItemRow()) &&
-                   Arrays.equals(this.getColPos(), sciSparse.getColPos());
+            return this.getNbNonNullItems() == sciSparse.getNbNonNullItems() && ScilabSparse.compareNbItemRow(this.getNbItemRow(), sciSparse.getNbItemRow())
+                   && Arrays.equals(this.getColPos(), sciSparse.getColPos());
         } else {
             return false;
         }
@@ -301,7 +331,35 @@ public class ScilabBooleanSparse implements ScilabType {
      * {@inheritDoc}
      */
     public Object getSerializedObject() {
-        return new Object[]{new int[]{rows, cols}, nbItemRow, getScilabColPos()};
+        return new Object[] { new int[] { rows, cols }, nbItemRow, getScilabColPos() };
+    }
+
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                rows = in.readInt();
+                cols = in.readInt();
+                nbItem = in.readInt();
+                nbItemRow = (int[]) in.readObject();
+                colPos = (int[]) in.readObject();
+                varName = (String) in.readObject();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabBooleanSparse with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeInt(rows);
+        out.writeInt(cols);
+        out.writeInt(nbItem);
+        out.writeObject(nbItemRow);
+        out.writeObject(colPos);
+        out.writeObject(varName);
     }
 
     /**
index 1c249e3..9a23e51 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Arrays;
 
 /**
  * This class provides a representation on the Scilab Double datatype<br>
  * Note that double is the default datatype in Scilab.<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example (real):<br />
  * <code>
@@ -42,6 +45,8 @@ public class ScilabDouble implements ScilabType {
     private static final long serialVersionUID = 879624048944109684L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_matrix;
 
+    private static final int VERSION = 0;
+
     private double[][] realPart;
     private double[][] imaginaryPart;
     private String varName;
@@ -57,7 +62,9 @@ public class ScilabDouble implements ScilabType {
 
     /**
      * Constructor with a unique value.
-     * @param data the unique value
+     *
+     * @param data
+     *            the unique value
      */
     public ScilabDouble(double data) {
         realPart = new double[1][1];
@@ -68,8 +75,10 @@ public class ScilabDouble implements ScilabType {
     /**
      * Constructor with a unique complex value.
      *
-     * @param realData the real part
-     * @param imagData the complex part
+     * @param realData
+     *            the real part
+     * @param imagData
+     *            the complex part
      */
     public ScilabDouble(double realData, double imagData) {
         realPart = new double[1][1];
@@ -81,7 +90,8 @@ public class ScilabDouble implements ScilabType {
     /**
      * Constructor with a matrix of real data.
      *
-     * @param data the data
+     * @param data
+     *            the data
      */
     public ScilabDouble(double[][] data) {
         this(data, new double[0][]);
@@ -90,8 +100,10 @@ public class ScilabDouble implements ScilabType {
     /**
      * Constructor with a matrix of complex numbers
      *
-     * @param realData the real part of the data
-     * @param imagData the imaginary part of the data
+     * @param realData
+     *            the real part of the data
+     * @param imagData
+     *            the imaginary part of the data
      */
     public ScilabDouble(double[][] realData, double[][] imagData) {
         if (realData == null) {
@@ -110,8 +122,10 @@ public class ScilabDouble implements ScilabType {
     /**
      * Constructor with a matrix of complex numbers
      *
-     * @param realData the real part of the data
-     * @param imagData the imaginary part of the data
+     * @param realData
+     *            the real part of the data
+     * @param imagData
+     *            the imaginary part of the data
      */
     public ScilabDouble(String varName, double[][] realData, double[][] imagData, boolean swaped) {
         this(realData, imagData);
@@ -121,6 +135,7 @@ public class ScilabDouble implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -131,6 +146,7 @@ public class ScilabDouble implements ScilabType {
 
     /**
      * Check the emptiness of the associated data.
+     *
      * @return true, if the associated data array is empty.
      */
     @Override
@@ -159,7 +175,8 @@ public class ScilabDouble implements ScilabType {
     /**
      * Set the real part of the data.
      *
-     * @param realPart the real part.
+     * @param realPart
+     *            the real part.
      */
     public void setRealPart(double[][] realPart) {
         this.realPart = realPart;
@@ -177,7 +194,8 @@ public class ScilabDouble implements ScilabType {
     /**
      * Set the imaginary part of the data.
      *
-     * @param imaginaryPart the imaginary part.
+     * @param imaginaryPart
+     *            the imaginary part.
      */
     public void setImaginaryPart(double[][] imaginaryPart) {
         this.imaginaryPart = imaginaryPart;
@@ -204,11 +222,11 @@ public class ScilabDouble implements ScilabType {
      */
     public double[] getSerializedComplexMatrix() {
         int size = this.getHeight() * this.getWidth();
-        double [] serializedComplexMatrix = new double[size * 2];
+        double[] serializedComplexMatrix = new double[size * 2];
         for (int i = 0; i < this.getHeight(); i++) {
             for (int j = 0; j < this.getWidth(); j++) {
                 serializedComplexMatrix[j * this.getHeight() + i] = realPart[i][j];
-                serializedComplexMatrix[size+j * this.getHeight() + i] = imaginaryPart[i][j];
+                serializedComplexMatrix[size + j * this.getHeight() + i] = imaginaryPart[i][j];
             }
         }
 
@@ -220,9 +238,9 @@ public class ScilabDouble implements ScilabType {
      */
     public Object getSerializedObject() {
         if (isReal()) {
-            return new Object[]{realPart};
+            return new Object[] { realPart };
         } else {
-            return new Object[]{realPart, imaginaryPart};
+            return new Object[] { realPart, imaginaryPart };
         }
     }
 
@@ -257,7 +275,7 @@ public class ScilabDouble implements ScilabType {
     @Override
     public boolean equals(Object obj) {
         if (obj instanceof ScilabDouble) {
-            ScilabDouble sciDouble = ((ScilabDouble)obj);
+            ScilabDouble sciDouble = ((ScilabDouble) obj);
             if (isEmpty() && sciDouble.isEmpty()) {
                 return true;
             }
@@ -266,13 +284,37 @@ public class ScilabDouble implements ScilabType {
                 return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart());
             } else {
                 /* Complex */
-                return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart()) && Arrays.deepEquals(this.getImaginaryPart(), sciDouble.getImaginaryPart());
+                return Arrays.deepEquals(this.getRealPart(), sciDouble.getRealPart())
+                       && Arrays.deepEquals(this.getImaginaryPart(), sciDouble.getImaginaryPart());
             }
         } else {
             return false;
         }
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                realPart = (double[][]) in.readObject();
+                imaginaryPart = (double[][]) in.readObject();
+                varName = (String) in.readObject();
+                swaped = in.readBoolean();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabDouble with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeObject(realPart);
+        out.writeObject(imaginaryPart);
+        out.writeObject(varName);
+        out.writeBoolean(swaped);
+    }
 
     /**
      * Display the representation in the Scilab language of the type<br />
@@ -286,17 +328,19 @@ public class ScilabDouble implements ScilabType {
         StringBuilder result = new StringBuilder();
 
         if (isEmpty()) {
-            result.append("[]");
-            return result.toString();
+            return "[]";
         }
 
         result.append("[");
         for (int i = 0; i < getHeight(); ++i) {
             for (int j = 0; j < getWidth(); ++j) {
                 if (isReal()) {
-                    result.append(getRealPart()[i][j]);
+                    result.append(Double.toString(realPart[i][j]));
                 } else {
-                    result.append(getRealPart()[i][j] + " + " + getImaginaryPart()[i][j] + " * %i");
+                    result.append(Double.toString(realPart[i][j]));
+                    result.append(" + ");
+                    result.append(Double.toString(imaginaryPart[i][j]));
+                    result.append(" * %i");
                 }
                 if (j != getWidth() - 1) {
                     result.append(", ");
index fa47e1b..4671197 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Arrays;
 
 /**
  * This class provides a representation on the Scilab Integer datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
  * byte [][]a={{32,42,41}, {12,13,32}};<br />
  * ScilabInteger aMatrix = new ScilabInteger(a, true); // true = unsigned
  * </code>
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabInteger implements ScilabType {
@@ -33,6 +37,8 @@ public class ScilabInteger implements ScilabType {
     private static final long serialVersionUID = 1759633801332932450L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_ints;
 
+    private static final int VERSION = 0;
+
     private long[][] longData = null;
     private short[][] shortData = null;
     private int[][] intData = null;
@@ -51,8 +57,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(byte[][] data, boolean bUnsigned) {
         this.setData(data, bUnsigned);
@@ -61,8 +69,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(short[][] data, boolean bUnsigned) {
         this.setData(data, bUnsigned);
@@ -71,8 +81,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(int[][] data, boolean bUnsigned) {
         this.setData(data, bUnsigned);
@@ -81,8 +93,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(long[][] data, boolean bUnsigned) {
         this.setData(data, bUnsigned);
@@ -91,8 +105,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(String varName, byte[][] data, boolean bUnsigned, boolean swaped) {
         this.setData(data, bUnsigned);
@@ -103,8 +119,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(String varName, short[][] data, boolean bUnsigned, boolean swaped) {
         this.setData(data, bUnsigned);
@@ -115,8 +133,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(String varName, int[][] data, boolean bUnsigned, boolean swaped) {
         this.setData(data, bUnsigned);
@@ -127,8 +147,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with values
      *
-     * @param data the values
-     * @param bUnsigned true, if the values are unsigned; false if they are signed.
+     * @param data
+     *            the values
+     * @param bUnsigned
+     *            true, if the values are unsigned; false if they are signed.
      */
     public ScilabInteger(String varName, long[][] data, boolean bUnsigned, boolean swaped) {
         this.setData(data, bUnsigned);
@@ -139,7 +161,8 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with single signed value
      *
-     * @param value the unique value
+     * @param value
+     *            the unique value
      */
     public ScilabInteger(byte value) {
         this.byteData = new byte[1][1];
@@ -150,7 +173,8 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with single signed value
      *
-     * @param value the unique value
+     * @param value
+     *            the unique value
      */
     public ScilabInteger(short value) {
         this.shortData = new short[1][1];
@@ -161,7 +185,8 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with single signed value
      *
-     * @param value the unique value
+     * @param value
+     *            the unique value
      */
     public ScilabInteger(int value) {
         this.intData = new int[1][1];
@@ -172,7 +197,8 @@ public class ScilabInteger implements ScilabType {
     /**
      * Constructor with single signed value
      *
-     * @param value the unique value
+     * @param value
+     *            the unique value
      */
     public ScilabInteger(long value) {
         this.longData = new long[1][1];
@@ -183,8 +209,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Set the current values
      *
-     * @param data the values to set
-     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     * @param data
+     *            the values to set
+     * @param bUnsigned
+     *            true, if these values are unsigned; false otherwise.
      */
     public void setData(byte[][] data, boolean bUnsigned) {
         this.byteData = data;
@@ -198,8 +226,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Set the current values
      *
-     * @param data the values to set
-     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     * @param data
+     *            the values to set
+     * @param bUnsigned
+     *            true, if these values are unsigned; false otherwise.
      */
     public void setData(short[][] data, boolean bUnsigned) {
         this.shortData = data;
@@ -213,8 +243,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Set the current values
      *
-     * @param data the values to set
-     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     * @param data
+     *            the values to set
+     * @param bUnsigned
+     *            true, if these values are unsigned; false otherwise.
      */
     public void setData(int[][] data, boolean bUnsigned) {
         this.intData = data;
@@ -228,8 +260,10 @@ public class ScilabInteger implements ScilabType {
     /**
      * Set the current values
      *
-     * @param data the values to set
-     * @param bUnsigned true, if these values are unsigned; false otherwise.
+     * @param data
+     *            the values to set
+     * @param bUnsigned
+     *            true, if these values are unsigned; false otherwise.
      */
     public void setData(long[][] data, boolean bUnsigned) {
         this.longData = data;
@@ -242,6 +276,7 @@ public class ScilabInteger implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -252,48 +287,49 @@ public class ScilabInteger implements ScilabType {
 
     /**
      * If the precision is not 64, all values will be converted to long
-     * (attention, the convertion can be long)
-     * if precision is 64, just return the data
+     * (attention, the convertion can be long) if precision is 64, just return
+     * the data
+     *
      * @return the values
      */
     public long[][] getData() {
         long[][] convertedMatrix = new long[this.getHeight()][this.getWidth()];
         switch (this.getPrec()) {
 
-        case sci_int8:
-        case sci_uint8:
-            for (int i = 0; i < this.getHeight(); i++) {
-                for (int j = 0; j < this.getWidth(); j++) {
-                    convertedMatrix[i][j] = Long.valueOf(byteData[i][j]);
+            case sci_int8:
+            case sci_uint8:
+                for (int i = 0; i < this.getHeight(); i++) {
+                    for (int j = 0; j < this.getWidth(); j++) {
+                        convertedMatrix[i][j] = Long.valueOf(byteData[i][j]);
+                    }
                 }
-            }
-            return convertedMatrix;
-        case sci_int16:
-        case sci_uint16:
-            for (int i = 0; i < this.getHeight(); i++) {
-                for (int j = 0; j < this.getWidth(); j++) {
-                    convertedMatrix[i][j] = Long.valueOf(shortData[i][j]);
+                return convertedMatrix;
+            case sci_int16:
+            case sci_uint16:
+                for (int i = 0; i < this.getHeight(); i++) {
+                    for (int j = 0; j < this.getWidth(); j++) {
+                        convertedMatrix[i][j] = Long.valueOf(shortData[i][j]);
+                    }
                 }
-            }
-            return convertedMatrix;
-        case sci_int32:
-        case sci_uint32:
-            for (int i = 0; i < this.getHeight(); i++) {
-                for (int j = 0; j < this.getWidth(); j++) {
-                    convertedMatrix[i][j] = Long.valueOf(intData[i][j]);
+                return convertedMatrix;
+            case sci_int32:
+            case sci_uint32:
+                for (int i = 0; i < this.getHeight(); i++) {
+                    for (int j = 0; j < this.getWidth(); j++) {
+                        convertedMatrix[i][j] = Long.valueOf(intData[i][j]);
+                    }
                 }
-            }
-            return convertedMatrix;
-        case sci_int64:
-        case sci_uint64:
-            return longData;
+                return convertedMatrix;
+            case sci_int64:
+            case sci_uint64:
+                return longData;
         }
         return null;
     }
 
-
     /**
      * Returns the value as the form of short
+     *
      * @return the values as short
      */
     public short[][] getDataAsShort() {
@@ -302,6 +338,7 @@ public class ScilabInteger implements ScilabType {
 
     /**
      * Returns the value as the form of byte
+     *
      * @return the values as byte
      */
     public byte[][] getDataAsByte() {
@@ -310,6 +347,7 @@ public class ScilabInteger implements ScilabType {
 
     /**
      * Returns the value as the form of int
+     *
      * @return the values as int
      */
     public int[][] getDataAsInt() {
@@ -317,8 +355,8 @@ public class ScilabInteger implements ScilabType {
     }
 
     /**
-     * Returns the value as the form of long
-     * Only for Scilab 6.X
+     * Returns the value as the form of long Only for Scilab 6.X
+     *
      * @return the values as long
      */
     public long[][] getDataAsLong() {
@@ -337,28 +375,31 @@ public class ScilabInteger implements ScilabType {
      */
     public boolean isUnsigned() {
         switch (precision) {
-        case sci_int8:
-        case sci_int16:
-        case sci_int32:
-        case sci_int64:
-            return false;
-        case sci_uint8:
-        case sci_uint16:
-        case sci_uint32:
-        case sci_uint64:
-            return true;
+            case sci_int8:
+            case sci_int16:
+            case sci_int32:
+            case sci_int64:
+                return false;
+            case sci_uint8:
+            case sci_uint16:
+            case sci_uint32:
+            case sci_uint64:
+                return true;
         }
         return false;
     }
 
     /**
      * Manage the old representation of IntegerType
-     * @param typeName the typeName (TYPE8, TYPE16, TYPE32, TYPE64)
-     * @param unsigned unsigned or not
-     * @return the converted type to ScilabIntegerTypeEnum. null is cannot convert
+     *
+     * @param typeName
+     *            the typeName (TYPE8, TYPE16, TYPE32, TYPE64)
+     * @param unsigned
+     *            unsigned or not
+     * @return the converted type to ScilabIntegerTypeEnum. null is cannot
+     *         convert
      */
     public static ScilabIntegerTypeEnum convertOldType(String typeName, boolean unsigned) {
-
         if (typeName.equals("TYPE8")) {
             if (unsigned) {
                 return ScilabIntegerTypeEnum.sci_uint8;
@@ -391,7 +432,6 @@ public class ScilabInteger implements ScilabType {
 
     }
 
-
     /**
      * @return the height of the value matrix
      * @see org.scilab.modules.types.ScilabType#getHeight()
@@ -402,32 +442,32 @@ public class ScilabInteger implements ScilabType {
             return 0;
         }
         switch (this.getPrec()) {
-        case sci_int8:
-        case sci_uint8:
-            if (byteData == null) {
-                return 0;
-            }
-            return byteData.length;
-        case sci_int16:
-        case sci_uint16:
-            if (shortData == null) {
-                return 0;
-            }
-            return shortData.length;
-        case sci_int32:
-        case sci_uint32:
-            if (intData == null) {
-                return 0;
-            }
-            return intData.length;
-        case sci_int64:
-        case sci_uint64:
-            if (longData == null) {
+            case sci_int8:
+            case sci_uint8:
+                if (byteData == null) {
+                    return 0;
+                }
+                return byteData.length;
+            case sci_int16:
+            case sci_uint16:
+                if (shortData == null) {
+                    return 0;
+                }
+                return shortData.length;
+            case sci_int32:
+            case sci_uint32:
+                if (intData == null) {
+                    return 0;
+                }
+                return intData.length;
+            case sci_int64:
+            case sci_uint64:
+                if (longData == null) {
+                    return 0;
+                }
+                return longData.length;
+            default:
                 return 0;
-            }
-            return longData.length;
-        default:
-            return 0;
         }
     }
 
@@ -441,37 +481,37 @@ public class ScilabInteger implements ScilabType {
             return 0;
         }
         switch (this.getPrec()) {
-        case sci_int8:
-        case sci_uint8:
-            if (byteData == null) {
-                return 0;
-            }
-            return byteData[0].length;
-        case sci_int16:
-        case sci_uint16:
-            if (shortData == null) {
-                return 0;
-            }
-            return shortData[0].length;
-        case sci_int32:
-        case sci_uint32:
-            if (intData == null) {
-                return 0;
-            }
-            return intData[0].length;
-        case sci_int64:
-        case sci_uint64:
-            if (longData == null) {
+            case sci_int8:
+            case sci_uint8:
+                if (byteData == null) {
+                    return 0;
+                }
+                return byteData[0].length;
+            case sci_int16:
+            case sci_uint16:
+                if (shortData == null) {
+                    return 0;
+                }
+                return shortData[0].length;
+            case sci_int32:
+            case sci_uint32:
+                if (intData == null) {
+                    return 0;
+                }
+                return intData[0].length;
+            case sci_int64:
+            case sci_uint64:
+                if (longData == null) {
+                    return 0;
+                }
+                return longData[0].length;
+            default:
                 return 0;
-            }
-            return longData[0].length;
-        default:
-            return 0;
         }
     }
 
     // int32(X), int8(x) , int16([x,x,x;x,x,x])
-    //   uint32(X), uint8(x) , uint16([x,x,x;x,x,x])
+    // uint32(X), uint8(x) , uint16([x,x,x;x,x,x])
 
     /**
      * @return true, if there is no values; false otherwise.
@@ -482,20 +522,20 @@ public class ScilabInteger implements ScilabType {
             return true;
         }
         switch (this.getPrec()) {
-        case sci_int8:
-        case sci_uint8:
-            return byteData == null;
-        case sci_int16:
-        case sci_uint16:
-            return shortData == null;
-        case sci_int32:
-        case sci_uint32:
-            return intData == null;
-        case sci_int64:
-        case sci_uint64:
-            return longData == null;
-        default:
-            return true;
+            case sci_int8:
+            case sci_uint8:
+                return byteData == null;
+            case sci_int16:
+            case sci_uint16:
+                return shortData == null;
+            case sci_int32:
+            case sci_uint32:
+                return intData == null;
+            case sci_int64:
+            case sci_uint64:
+                return longData == null;
+            default:
+                return true;
         }
     }
 
@@ -519,35 +559,81 @@ public class ScilabInteger implements ScilabType {
     @Override
     public boolean equals(Object obj) {
         if (obj instanceof ScilabInteger) {
-            return Arrays.deepEquals(this.getData(), ((ScilabInteger)obj).getData());
+            return Arrays.deepEquals(this.getData(), ((ScilabInteger) obj).getData());
         } else {
             return false;
         }
     }
 
+    private Object getCorrectData() {
+        switch (this.getPrec()) {
+            case sci_int8:
+                return byteData;
+            case sci_uint8:
+                return byteData;
+            case sci_int16:
+                return shortData;
+            case sci_uint16:
+                return shortData;
+            case sci_int32:
+                return intData;
+            case sci_uint32:
+                return intData;
+            case sci_int64:
+                return longData;
+            case sci_uint64:
+                return longData;
+        }
+        return null;
+    }
+
     /**
      * {@inheritDoc}
      */
     public Object getSerializedObject() {
-        switch (this.getPrec()) {
-        case sci_int8:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, byteData};
-        case sci_uint8:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, byteData};
-        case sci_int16:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, shortData};
-        case sci_uint16:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, shortData};
-        case sci_int32:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, intData};
-        case sci_uint32:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, intData};
-        case sci_int64:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, longData};
-        case sci_uint64:
-            return new Object[]{new int[]{this.getPrec().swigValue()}, longData};
+        return new Object[] { new int[] { this.getPrec().swigValue() }, getCorrectData() };
+    }
+
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                precision = ScilabIntegerTypeEnum.swigToEnum(in.readInt());
+                Object data = in.readObject();
+                switch (precision) {
+                    case sci_int8:
+                    case sci_uint8:
+                        byteData = (byte[][]) data;
+                        break;
+                    case sci_int16:
+                    case sci_uint16:
+                        shortData = (short[][]) data;
+                        break;
+                    case sci_int32:
+                    case sci_uint32:
+                        intData = (int[][]) data;
+                        break;
+                    case sci_int64:
+                    case sci_uint64:
+                        longData = (long[][]) data;
+                        break;
+                }
+                varName = (String) in.readObject();
+                swaped = in.readBoolean();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabInteger with a version " + version + " does not exists");
         }
-        return null;
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeInt(getPrec().swigValue());
+        out.writeObject(getCorrectData());
+        out.writeObject(varName);
+        out.writeBoolean(swaped);
     }
 
     /**
@@ -561,7 +647,6 @@ public class ScilabInteger implements ScilabType {
     public String toString() {
         StringBuilder result = new StringBuilder();
 
-
         if (isEmpty()) {
             result.append("int([])");
             return result.toString();
@@ -573,28 +658,28 @@ public class ScilabInteger implements ScilabType {
         result.append("int");
 
         switch (this.getPrec()) {
-        case sci_int8:
-        case sci_uint8:
-            result.append("8");
-            break;
-
-        case sci_int16:
-        case sci_uint16:
-            result.append("16");
-            break;
-
-        case sci_int32:
-        case sci_uint32:
-            result.append("32");
-            break;
-
-        case sci_int64:
-        case sci_uint64:
-            result.append("64");
-            break;
-
-        default:
-            break;
+            case sci_int8:
+            case sci_uint8:
+                result.append("8");
+                break;
+
+            case sci_int16:
+            case sci_uint16:
+                result.append("16");
+                break;
+
+            case sci_int32:
+            case sci_uint32:
+                result.append("32");
+                break;
+
+            case sci_int64:
+            case sci_uint64:
+                result.append("64");
+                break;
+
+            default:
+                break;
         }
 
         result.append("([");
@@ -607,7 +692,8 @@ public class ScilabInteger implements ScilabType {
     /**
      * Put each value on the buffer.
      *
-     * @param result the current buffer
+     * @param result
+     *            the current buffer
      */
     private void appendData(StringBuilder result) {
         for (int i = 0; i < getHeight(); ++i) {
@@ -615,7 +701,6 @@ public class ScilabInteger implements ScilabType {
 
                 result.append(getData()[i][j]);
 
-
                 if (j != getWidth() - 1) {
                     result.append(", ");
                 }
index 4fa0936..9dcdfd0 100644 (file)
@@ -9,50 +9,42 @@
 package org.scilab.modules.types;
 
 public enum ScilabIntegerTypeEnum {
-  sci_int8(1),
-  sci_int16(2),
-  sci_int32(4),
-  sci_int64(8),
-  sci_uint8(11),
-  sci_uint16(12),
-  sci_uint32(14),
-  sci_uint64(18);
-
-  public final int swigValue() {
-    return swigValue;
-  }
-
-  public static ScilabIntegerTypeEnum swigToEnum(int swigValue) {
-    ScilabIntegerTypeEnum[] swigValues = ScilabIntegerTypeEnum.class.getEnumConstants();
-    if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
-      return swigValues[swigValue];
-    for (ScilabIntegerTypeEnum swigEnum : swigValues)
-      if (swigEnum.swigValue == swigValue)
-        return swigEnum;
-    throw new IllegalArgumentException("No enum " + ScilabIntegerTypeEnum.class + " with value " + swigValue);
-  }
-
-  @SuppressWarnings("unused")
-  private ScilabIntegerTypeEnum() {
-    this.swigValue = SwigNext.next++;
-  }
-
-  @SuppressWarnings("unused")
-  private ScilabIntegerTypeEnum(int swigValue) {
-    this.swigValue = swigValue;
-    SwigNext.next = swigValue+1;
-  }
-
-  @SuppressWarnings("unused")
-  private ScilabIntegerTypeEnum(ScilabIntegerTypeEnum swigEnum) {
-    this.swigValue = swigEnum.swigValue;
-    SwigNext.next = this.swigValue+1;
-  }
-
-  private final int swigValue;
-
-  private static class SwigNext {
-    private static int next = 0;
-  }
+    sci_int8(1), sci_int16(2), sci_int32(4), sci_int64(8), sci_uint8(11), sci_uint16(12), sci_uint32(14), sci_uint64(18);
+
+    public final int swigValue() {
+        return swigValue;
+    }
+
+    public static ScilabIntegerTypeEnum swigToEnum(int swigValue) {
+        ScilabIntegerTypeEnum[] swigValues = ScilabIntegerTypeEnum.class.getEnumConstants();
+        if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
+            return swigValues[swigValue];
+        for (ScilabIntegerTypeEnum swigEnum : swigValues)
+            if (swigEnum.swigValue == swigValue)
+                return swigEnum;
+        throw new IllegalArgumentException("No enum " + ScilabIntegerTypeEnum.class + " with value " + swigValue);
+    }
+
+    @SuppressWarnings("unused")
+    private ScilabIntegerTypeEnum() {
+        this.swigValue = SwigNext.next++;
+    }
+
+    @SuppressWarnings("unused")
+    private ScilabIntegerTypeEnum(int swigValue) {
+        this.swigValue = swigValue;
+        SwigNext.next = swigValue + 1;
+    }
+
+    @SuppressWarnings("unused")
+    private ScilabIntegerTypeEnum(ScilabIntegerTypeEnum swigEnum) {
+        this.swigValue = swigEnum.swigValue;
+        SwigNext.next = this.swigValue + 1;
+    }
+
+    private final int swigValue;
+
+    private static class SwigNext {
+        private static int next = 0;
+    }
 }
-
index 9fa0383..f8a5129 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Collection;
 
 /**
  * This class provides a representation on the Scilab List datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
@@ -28,6 +31,7 @@ import java.util.Collection;
  * data.add(new ScilabString("hello"));<br />
  * data.add(new ScilabDouble(2));<br />
  * </code>
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
@@ -35,6 +39,8 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
     private static final long serialVersionUID = 6884293176289980909L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_list;
 
+    private static final int VERSION = 0;
+
     private String varName;
 
     /**
@@ -49,9 +55,9 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
      * the order that they are returned by the specified collection's iterator.
      *
      * @param c
-     *                  the collection whose elements are to be placed into this list.
+     *            the collection whose elements are to be placed into this list.
      */
-    public ScilabList(Collection< ? extends ScilabType> c) {
+    public ScilabList(Collection <? extends ScilabType > c) {
         super(c);
     }
 
@@ -85,7 +91,7 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
      * @see org.scilab.modules.types.ScilabType#getHeight()
      */
     @Override
-        public int getHeight() {
+    public int getHeight() {
         if (isEmpty()) {
             return 0;
         }
@@ -94,11 +100,12 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-        public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
@@ -107,7 +114,7 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
      * @see org.scilab.modules.types.ScilabType#getWidth()
      */
     @Override
-        public int getWidth() {
+    public int getWidth() {
         if (isEmpty()) {
             return 0;
         }
@@ -115,10 +122,11 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
     }
 
     /**
-     * Get a serialized list;
-     * The format is the following:
-     *   i) returned[0] is an array of integers containing the Scilab type (ScilabTypeEunm) of the different elements of the list.
-     *   ii) returned[i] for i&gt;=1 contains the serialized form of each items.
+     * Get a serialized list; The format is the following: i) returned[0] is an
+     * array of integers containing the Scilab type (ScilabTypeEunm) of the
+     * different elements of the list. ii) returned[i] for i&gt;=1 contains the
+     * serialized form of each items.
+     *
      * @return a serialized SiclabList/
      */
     public Object[] getSerializedObject() {
@@ -135,6 +143,34 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
         return items;
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                int size = in.readInt();
+                ensureCapacity(size + 1);
+                ArrayList list = (ArrayList) this;
+                for (int i = 0; i < size; i++) {
+                    list.add(in.readObject());
+                }
+                varName = (String) in.readObject();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabList with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeInt(size());
+        for (Object var : (ArrayList) this) {
+            out.writeObject(var);
+        }
+        out.writeObject(varName);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
@@ -143,8 +179,7 @@ public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
      * @see java.util.AbstractCollection#toString()
      */
     @Override
-        public String toString() {
-
+    public String toString() {
         StringBuffer result = new StringBuffer();
         if (isEmpty()) {
             result.append("list()");
index 0139933..0043306 100644 (file)
@@ -13,6 +13,9 @@
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -21,8 +24,8 @@ import java.util.Map;
 /**
  * This class provides a representation on the Scilab MList datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
@@ -30,6 +33,7 @@ import java.util.Map;
  * data.add(new ScilabString("hello"));<br />
  * data.add(new ScilabDouble(2));<br />
  * </code>
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
@@ -37,7 +41,9 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
     private static final long serialVersionUID = 3224510024213901841L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_mlist;
 
-    private String varName;
+    private static final int VERSION = 0;
+
+    private String varName = "";
 
     /**
      * Construct an empty mlist.
@@ -63,11 +69,12 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
     /**
      * Construct an mlist with a specified header.
      *
-     * @param types field names used by the accessors.
+     * @param types
+     *            field names used by the accessors.
      */
-    public ScilabMList(String []types) {
+    public ScilabMList(String[] types) {
         super();
-        String [][] typesData = new String[1][types.length];
+        String[][] typesData = new String[1][types.length];
         typesData[0] = types;
         add(new ScilabString(typesData));
     }
@@ -77,12 +84,12 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
      * the order that they are returned by the specified collection's iterator.
      *
      * @param names
-     *                  field names, used by the accessors.
+     *            field names, used by the accessors.
      * @param c
-     *                  the collection whose elements are to be placed into this
-     *                  mlist.
+     *            the collection whose elements are to be placed into this
+     *            mlist.
      */
-    public ScilabMList(String[] names, Collection< ? extends ScilabType> c) {
+    public ScilabMList(String[] names, Collection <? extends ScilabType > c) {
         super(c.size() + 1);
 
         String[][] namesData = new String[1][names.length];
@@ -157,7 +164,7 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
      * @see org.scilab.modules.types.ScilabType#getHeight()
      */
     @Override
-        public int getHeight() {
+    public int getHeight() {
         if (isEmpty()) {
             return 0;
         }
@@ -166,11 +173,12 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-        public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
@@ -179,7 +187,7 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
      * @see org.scilab.modules.types.ScilabType#getWidth()
      */
     @Override
-        public int getWidth() {
+    public int getWidth() {
         if (isEmpty()) {
             return 0;
         }
@@ -187,10 +195,11 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
     }
 
     /**
-     * Get a serialized list;
-     * The format is the following:
-     *   i) returned[0] is an array of integers containing the Scilab type (ScilabTypeEunm) of the different elements of the list.
-     *   ii) returned[i] for i&gt;=1 contains the serialized form of each items.
+     * Get a serialized list; The format is the following: i) returned[0] is an
+     * array of integers containing the Scilab type (ScilabTypeEunm) of the
+     * different elements of the list. ii) returned[i] for i&gt;=1 contains the
+     * serialized form of each items.
+     *
      * @return a serialized SiclabList/
      */
     public Object[] getSerializedObject() {
@@ -207,6 +216,34 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
         return items;
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                int size = in.readInt();
+                ensureCapacity(size + 1);
+                ArrayList list = (ArrayList) this;
+                for (int i = 0; i < size; i++) {
+                    list.add(in.readObject());
+                }
+                varName = (String) in.readObject();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabMList with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeInt(size());
+        for (Object var : (ArrayList) this) {
+            out.writeObject(var);
+        }
+        out.writeObject(varName);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
@@ -215,7 +252,7 @@ public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
      * @see java.util.AbstractCollection#toString()
      */
     @Override
-        public String toString() {
+    public String toString() {
 
         StringBuffer result = new StringBuffer();
         if (isEmpty()) {
index 9f4af64..a7c7d08 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Arrays;
 
 /**
  * This class provides a representation on the Scilab Polynomial datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * TODO Sly: faire de la doc
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabPolynomial implements ScilabType {
@@ -28,6 +32,8 @@ public class ScilabPolynomial implements ScilabType {
     private static final long serialVersionUID = 870624048944109684L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_poly;
 
+    private static final int VERSION = 0;
+
     private double[][][] realPart;
     private double[][][] imaginaryPart;
 
@@ -46,7 +52,8 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a unique polynomial.
      *
-     * @param data the unique polynomial
+     * @param data
+     *            the unique polynomial
      */
     public ScilabPolynomial(double[] data) {
         realPart = new double[1][1][];
@@ -57,7 +64,8 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a unique polynomial.
      *
-     * @param data the unique polynomial
+     * @param data
+     *            the unique polynomial
      */
     public ScilabPolynomial(double[] data, String polyVarName) {
         this(data);
@@ -67,8 +75,10 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a unique complex polynomial.
      *
-     * @param realData the real part
-     * @param imagData the complex part
+     * @param realData
+     *            the real part
+     * @param imagData
+     *            the complex part
      */
     public ScilabPolynomial(double[] realData, double[] imagData) {
         realPart = new double[1][1][];
@@ -80,8 +90,10 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a unique complex polynomial.
      *
-     * @param realData the real part
-     * @param imagData the complex part
+     * @param realData
+     *            the real part
+     * @param imagData
+     *            the complex part
      */
     public ScilabPolynomial(double[] realData, double[] imagData, String polyVarName) {
         this(realData, imagData);
@@ -91,7 +103,8 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a matrix of real polynomials.
      *
-     * @param data the data
+     * @param data
+     *            the data
      */
     public ScilabPolynomial(double[][][] data) {
         realPart = data;
@@ -101,7 +114,8 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a matrix of real polynomials.
      *
-     * @param data the data
+     * @param data
+     *            the data
      */
     public ScilabPolynomial(double[][][] data, String polyVarName) {
         this(data);
@@ -111,8 +125,10 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a matrix of complex polynomials
      *
-     * @param realData the real part of the data
-     * @param imagData the imaginary part of the data
+     * @param realData
+     *            the real part of the data
+     * @param imagData
+     *            the imaginary part of the data
      */
     public ScilabPolynomial(double[][][] realData, double[][][] imagData) {
         realPart = realData;
@@ -122,10 +138,12 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a matrix of complex polynomials
      *
-     * @param realData the real part of the data
-     * @param imagData the imaginary part of the data
+     * @param realData
+     *            the real part of the data
+     * @param imagData
+     *            the imaginary part of the data
      */
-    public ScilabPolynomial(double[][][] realData, double[][][] imagData, String polyVarName)  {
+    public ScilabPolynomial(double[][][] realData, double[][][] imagData, String polyVarName) {
         this(realData, imagData);
         setPolyVarName(polyVarName);
     }
@@ -133,11 +151,16 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Constructor with a matrix of complex polynomials
      *
-     * @param varName the variable name
-     * @param polyVarName the polynomial variable name
-     * @param realData the real part of the data
-     * @param imagData the imaginary part of the data
-     * @param swaped if true the matrix is stored row by row
+     * @param varName
+     *            the variable name
+     * @param polyVarName
+     *            the polynomial variable name
+     * @param realData
+     *            the real part of the data
+     * @param imagData
+     *            the imaginary part of the data
+     * @param swaped
+     *            if true the matrix is stored row by row
      */
     public ScilabPolynomial(String varName, String polyVarName, double[][][] realData, double[][][] imagData, boolean swaped) {
         this.varName = varName;
@@ -149,6 +172,7 @@ public class ScilabPolynomial implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -159,6 +183,7 @@ public class ScilabPolynomial implements ScilabType {
 
     /**
      * Check the emptiness of the associated data.
+     *
      * @return true, if the associated data array is empty.
      */
     @Override
@@ -187,7 +212,8 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Set the real part of the data.
      *
-     * @param realPart the real part.
+     * @param realPart
+     *            the real part.
      */
     public void setRealPart(double[][][] realPart) {
         this.realPart = realPart;
@@ -205,7 +231,8 @@ public class ScilabPolynomial implements ScilabType {
     /**
      * Set the imaginary part of the data.
      *
-     * @param imaginaryPart the imaginary part.
+     * @param imaginaryPart
+     *            the imaginary part.
      */
     public void setImaginaryPart(double[][][] imaginaryPart) {
         this.imaginaryPart = imaginaryPart;
@@ -243,12 +270,11 @@ public class ScilabPolynomial implements ScilabType {
      *
      * @return the serialized matrix with complex values
      */
-    // TODO Sly :  serializer ce machin
+    // TODO Sly : serializer ce machin
     public double[][] getSerializedComplexPolynomial() {
         return new double[0][0];
     }
 
-
     /**
      * @return the height of the data matrix
      * @see org.scilab.modules.types.ScilabType#getHeight()
@@ -267,7 +293,7 @@ public class ScilabPolynomial implements ScilabType {
      */
     @Override
     public int getWidth() {
-        if (isEmpty() || realPart.length  == 0) {
+        if (isEmpty() || realPart.length == 0) {
             return 0;
         }
 
@@ -286,7 +312,8 @@ public class ScilabPolynomial implements ScilabType {
                     return Arrays.deepEquals(this.getRealPart(), sciPoly.getRealPart());
                 } else {
                     /* Complex */
-                    return Arrays.deepEquals(this.getRealPart(), sciPoly.getRealPart()) && Arrays.deepEquals(this.getImaginaryPart(), sciPoly.getImaginaryPart());
+                    return Arrays.deepEquals(this.getRealPart(), sciPoly.getRealPart())
+                           && Arrays.deepEquals(this.getImaginaryPart(), sciPoly.getImaginaryPart());
                 }
             } else {
                 return false;
@@ -301,12 +328,38 @@ public class ScilabPolynomial implements ScilabType {
      */
     public Object getSerializedObject() {
         if (isReal()) {
-            return new Object[]{polyVarName, realPart};
+            return new Object[] { polyVarName, realPart };
         } else {
-            return new Object[]{polyVarName, realPart, imaginaryPart};
+            return new Object[] { polyVarName, realPart, imaginaryPart };
+        }
+    }
+
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                realPart = (double[][][]) in.readObject();
+                imaginaryPart = (double[][][]) in.readObject();
+                varName = (String) in.readObject();
+                polyVarName = in.readUTF();
+                swaped = in.readBoolean();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabPolynomial with a version " + version + " does not exists");
         }
     }
 
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeObject(realPart);
+        out.writeObject(imaginaryPart);
+        out.writeObject(varName);
+        out.writeUTF(polyVarName);
+        out.writeBoolean(swaped);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
index 5fddc58..6c8e045 100644 (file)
@@ -12,6 +12,9 @@
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -19,10 +22,11 @@ import java.util.List;
 /**
  * This class provides a representation on the Scilab Sparse datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * //TODO Sly : ajouter de la doc
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabSparse implements ScilabType {
@@ -30,6 +34,8 @@ public class ScilabSparse implements ScilabType {
     private static final long serialVersionUID = 879625048944109684L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_sparse;
 
+    private static final int VERSION = 0;
+
     private int rows;
     private int cols;
     private int nbItem;
@@ -42,18 +48,21 @@ public class ScilabSparse implements ScilabType {
     /**
      * Default constructor
      */
-    public ScilabSparse() { }
+    public ScilabSparse() {
+    }
 
     /**
      * Constructor with a unique value.
-     * @param data the unique value
+     *
+     * @param data
+     *            the unique value
      */
     public ScilabSparse(double data) {
         if (data != 0) {
             nbItem = 1;
             rows = cols = 1;
-            nbItemRow = new int[] {1};
-            colPos = new int[] {0};
+            nbItemRow = new int[] { 1 };
+            colPos = new int[] { 0 };
             realPart = new double[] { data };
         }
     }
@@ -61,15 +70,17 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor with a unique complex value.
      *
-     * @param realData the real part
-     * @param imagData the complex part
+     * @param realData
+     *            the real part
+     * @param imagData
+     *            the complex part
      */
     public ScilabSparse(double realData, double imagData) {
         if (realData != 0 || imagData != 0) {
             nbItem = 1;
             rows = cols = 1;
-            nbItemRow = new int[] {1};
-            colPos = new int[] {0};
+            nbItemRow = new int[] { 1 };
+            colPos = new int[] { 0 };
             realPart = new double[] { realData };
             imaginaryPart = new double[] { imagData };
         }
@@ -78,13 +89,20 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of non null items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each non null item
-     * @param data the non null data
-     * @param check if true the parameters validity is checked
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of non null items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each non null item
+     * @param data
+     *            the non null data
+     * @param check
+     *            if true the parameters validity is checked
      */
     public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] data, boolean check) throws ScilabSparseException {
         this(rows, cols, nbItem, nbItemRow, colPos, data);
@@ -100,12 +118,18 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of non null items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each non null item
-     * @param real the non null real data
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of non null items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each non null item
+     * @param real
+     *            the non null real data
      */
     public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real) {
         this.rows = rows;
@@ -119,16 +143,25 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of non null items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each non null item
-     * @param real the non null real data
-     * @param imag the non null imaginary data
-     * @param check if true the parameters validity is checked
-     */
-    public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag, boolean check) throws ScilabSparseException {
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of non null items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each non null item
+     * @param real
+     *            the non null real data
+     * @param imag
+     *            the non null imaginary data
+     * @param check
+     *            if true the parameters validity is checked
+     */
+    public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag, boolean check)
+    throws ScilabSparseException {
         this(rows, cols, nbItem, nbItemRow, colPos, real, imag);
         if (check) {
             checkValidity(rows, cols, nbItem, nbItemRow, colPos);
@@ -146,13 +179,20 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of non null items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each non null item
-     * @param real the non null real data
-     * @param imag the non null imaginary data
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of non null items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each non null item
+     * @param real
+     *            the non null real data
+     * @param imag
+     *            the non null imaginary data
      */
     public ScilabSparse(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag) {
         this(rows, cols, nbItem, nbItemRow, colPos, real);
@@ -162,11 +202,16 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of non null items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each non null item
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of non null items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each non null item
      */
     static final void checkValidity(int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos) throws ScilabSparseException {
         if (nbItem > rows * cols || nbItem < 0) {
@@ -203,7 +248,8 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor with a matrix of real data.
      *
-     * @param data the data
+     * @param data
+     *            the data
      */
     public ScilabSparse(double[][] data) {
         if (data.length != 0 && data[0].length != 0) {
@@ -240,8 +286,10 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor with a matrix of complex numbers
      *
-     * @param realData the real part of the data
-     * @param imagData the imaginary part of the data
+     * @param realData
+     *            the real part of the data
+     * @param imagData
+     *            the imaginary part of the data
      */
     public ScilabSparse(double[][] realData, double[][] imagData) {
         if (realData.length != 0 && realData[0].length != 0) {
@@ -285,14 +333,22 @@ public class ScilabSparse implements ScilabType {
     /**
      * Constructor
      *
-     * @param varName the variable name
-     * @param rows the number of rows
-     * @param cols the number of cols
-     * @param nbItem the number of non null items
-     * @param nbItemRow contains the number of true in each rows
-     * @param colPos the column position of each non null item
-     * @param real the non null real data
-     * @param imag the non null imaginary data
+     * @param varName
+     *            the variable name
+     * @param rows
+     *            the number of rows
+     * @param cols
+     *            the number of cols
+     * @param nbItem
+     *            the number of non null items
+     * @param nbItemRow
+     *            contains the number of true in each rows
+     * @param colPos
+     *            the column position of each non null item
+     * @param real
+     *            the non null real data
+     * @param imag
+     *            the non null imaginary data
      */
     public ScilabSparse(String varName, int rows, int cols, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag) {
         this(rows, cols, nbItem, nbItemRow, colPos, real, imag);
@@ -301,6 +357,7 @@ public class ScilabSparse implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -311,6 +368,7 @@ public class ScilabSparse implements ScilabType {
 
     /**
      * Check the emptiness of the associated data.
+     *
      * @return true, if the associated data array is empty.
      */
     @Override
@@ -339,7 +397,8 @@ public class ScilabSparse implements ScilabType {
     /**
      * Set the real part of the data.
      *
-     * @param realPart the real part.
+     * @param realPart
+     *            the real part.
      */
     public void setRealPart(double[] realPart) {
         this.realPart = realPart;
@@ -357,7 +416,8 @@ public class ScilabSparse implements ScilabType {
     /**
      * Set the imaginary part of the data.
      *
-     * @param imaginaryPart the imaginary part.
+     * @param imaginaryPart
+     *            the imaginary part.
      */
     public void setImaginaryPart(double[] imaginaryPart) {
         this.imaginaryPart = imaginaryPart;
@@ -375,7 +435,8 @@ public class ScilabSparse implements ScilabType {
     /**
      * Set the number of non null items in the matrix.
      *
-     * @param nbItem the number of non null items.
+     * @param nbItem
+     *            the number of non null items.
      */
     public void setNbNonNullItems(int nbItem) {
         this.nbItem = nbItem;
@@ -393,7 +454,8 @@ public class ScilabSparse implements ScilabType {
     /**
      * Set the number of non null items by row.
      *
-     * @param nbItemRow an integer array.
+     * @param nbItemRow
+     *            an integer array.
      */
     public void setNbItemRow(int[] nbItemRow) {
         this.nbItemRow = nbItemRow;
@@ -424,7 +486,8 @@ public class ScilabSparse implements ScilabType {
     /**
      * Set the column positions of the non null items.
      *
-     * @param colPos an integer array.
+     * @param colPos
+     *            an integer array.
      */
     public void setColPos(int[] colPos) {
         this.colPos = colPos;
@@ -483,8 +546,9 @@ public class ScilabSparse implements ScilabType {
     }
 
     /**
-     * Get the full sparse matrix representation as an array 2 x rows x cols
-     * If d = getFullMatrix(), then d[0] contains realpart and d[1] the imaginary one.
+     * Get the full sparse matrix representation as an array 2 x rows x cols If
+     * d = getFullMatrix(), then d[0] contains realpart and d[1] the imaginary
+     * one.
      *
      * @return the full matrix components
      */
@@ -513,7 +577,6 @@ public class ScilabSparse implements ScilabType {
         return new double[0];
     }
 
-
     /**
      * @return the height of the data matrix
      * @see org.scilab.modules.types.ScilabType#getHeight()
@@ -539,9 +602,8 @@ public class ScilabSparse implements ScilabType {
     public boolean equals(Object obj) {
         if (obj instanceof ScilabSparse) {
             ScilabSparse sciSparse = (ScilabSparse) obj;
-            if (this.getNbNonNullItems() == sciSparse.getNbNonNullItems() &&
-                    compareNbItemRow(this.getNbItemRow(), sciSparse.getNbItemRow()) &&
-                    Arrays.equals(this.getColPos(), sciSparse.getColPos())) {
+            if (this.getNbNonNullItems() == sciSparse.getNbNonNullItems() && compareNbItemRow(this.getNbItemRow(), sciSparse.getNbItemRow())
+                    && Arrays.equals(this.getColPos(), sciSparse.getColPos())) {
                 if (this.isReal() && sciSparse.isReal()) {
                     return Arrays.equals(this.getRealPart(), sciSparse.getRealPart());
                 } else {
@@ -557,10 +619,13 @@ public class ScilabSparse implements ScilabType {
     }
 
     /**
-     * Compare two arrays containing the number of items by row.
-     * For example {1, 2, 3, 4} is equal to {1, 2, 3, 4, 0, 0, 0, 0}/
-     * @param a an array
-     * @param b an other array
+     * Compare two arrays containing the number of items by row. For example {1,
+     * 2, 3, 4} is equal to {1, 2, 3, 4, 0, 0, 0, 0}/
+     *
+     * @param a
+     *            an array
+     * @param b
+     *            an other array
      * @return true if the arrays are equal
      */
     static final boolean compareNbItemRow(final int[] a, final int[] b) {
@@ -602,12 +667,44 @@ public class ScilabSparse implements ScilabType {
      */
     public Object getSerializedObject() {
         if (isReal()) {
-            return new Object[]{new int[]{getHeight(), getWidth()}, nbItemRow, getScilabColPos(), realPart};
+            return new Object[] { new int[] { getHeight(), getWidth() }, nbItemRow, getScilabColPos(), realPart };
         } else {
-            return new Object[]{new int[]{getHeight(), getWidth()}, nbItemRow, getScilabColPos(), realPart, imaginaryPart};
+            return new Object[] { new int[] { getHeight(), getWidth() }, nbItemRow, getScilabColPos(), realPart, imaginaryPart };
         }
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                rows = in.readInt();
+                cols = in.readInt();
+                nbItem = in.readInt();
+                nbItemRow = (int[]) in.readObject();
+                colPos = (int[]) in.readObject();
+                realPart = (double[]) in.readObject();
+                imaginaryPart = (double[]) in.readObject();
+                varName = (String) in.readObject();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabSparse with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeInt(rows);
+        out.writeInt(cols);
+        out.writeInt(nbItem);
+        out.writeObject(nbItemRow);
+        out.writeObject(colPos);
+        out.writeObject(realPart);
+        out.writeObject(imaginaryPart);
+        out.writeObject(varName);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
index 78a0ac2..0dcb623 100644 (file)
@@ -19,7 +19,9 @@ public class ScilabSparseException extends Exception {
 
     /**
      * Constructor
-     * @param msg the error message
+     *
+     * @param msg
+     *            the error message
      */
     public ScilabSparseException(String msg) {
         super(msg);
index b623ec7..53b40ed 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Arrays;
 
 /**
  * This class provides a representation on the Scilab String datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
  * String [][]a={{"This","is","my","string"},{"and","I want to", "compare"," them"}};<br />
  * ScilabString aMatrix = new ScilabString(a);
  * </code>
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabString implements ScilabType {
@@ -33,6 +37,8 @@ public class ScilabString implements ScilabType {
     private static final long serialVersionUID = 359802519980180085L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_strings;
 
+    private static final int VERSION = 0;
+
     private String[][] data;
     private String varName;
     private boolean swaped;
@@ -47,7 +53,8 @@ public class ScilabString implements ScilabType {
     /**
      * Constructor with data.
      *
-     * @param data the associated data.
+     * @param data
+     *            the associated data.
      */
     public ScilabString(String[][] data) {
         this.data = data;
@@ -56,7 +63,8 @@ public class ScilabString implements ScilabType {
     /**
      * Constructor with data.
      *
-     * @param data the associated data.
+     * @param data
+     *            the associated data.
      */
     public ScilabString(String varName, String[][] data, boolean swaped) {
         this.varName = varName;
@@ -67,7 +75,8 @@ public class ScilabString implements ScilabType {
     /**
      * Constructor with vector data.
      *
-     * @param data the column vector data
+     * @param data
+     *            the column vector data
      */
     public ScilabString(String[] data) {
         if (data == null || data.length == 0) {
@@ -84,7 +93,8 @@ public class ScilabString implements ScilabType {
     /**
      * Constructor with a unique value
      *
-     * @param string the value
+     * @param string
+     *            the value
      */
     public ScilabString(String string) {
         if (string == null) {
@@ -97,7 +107,8 @@ public class ScilabString implements ScilabType {
     /**
      * Set the values.
      *
-     * @param data the values
+     * @param data
+     *            the values
      */
     public void setData(String[][] data) {
         this.data = data;
@@ -105,6 +116,7 @@ public class ScilabString implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -160,6 +172,7 @@ public class ScilabString implements ScilabType {
 
     /**
      * Check the emptiness of the associated data.
+     *
      * @return true, if the associated data array is empty.
      */
     @Override
@@ -173,7 +186,7 @@ public class ScilabString implements ScilabType {
     @Override
     public boolean equals(Object obj) {
         if (obj instanceof ScilabString) {
-            return Arrays.deepEquals(this.getData(), ((ScilabString)obj).getData());
+            return Arrays.deepEquals(this.getData(), ((ScilabString) obj).getData());
         } else {
             return false;
         }
@@ -186,6 +199,28 @@ public class ScilabString implements ScilabType {
         return data;
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                data = (String[][]) in.readObject();
+                varName = (String) in.readObject();
+                swaped = in.readBoolean();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabString with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeObject(data);
+        out.writeObject(varName);
+        out.writeBoolean(swaped);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
@@ -195,18 +230,16 @@ public class ScilabString implements ScilabType {
      */
     @Override
     public String toString() {
-        StringBuffer result = new StringBuffer();
+        StringBuilder result = new StringBuilder();
         if (isEmpty()) {
-            result.append("[]");
-            return result.toString();
+            return "[]";
         }
 
         result.append("[");
         for (int i = 0; i < getHeight(); ++i) {
             for (int j = 0; j < getWidth(); ++j) {
-
                 result.append('"');
-                result.append(getData()[i][j].replaceAll("\"", "\"\"").replaceAll("\'", "\'\'"));
+                result.append(data[i][j].replaceAll("[\"\']", "\"\""));
                 result.append('"');
 
                 if (j != getWidth() - 1) {
index 479164c..8568d29 100644 (file)
@@ -13,6 +13,9 @@
 
 package org.scilab.modules.types;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -21,8 +24,8 @@ import java.util.Map;
 /**
  * This class provides a representation on the Scilab TList datatype<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  * Example:<br />
  * <code>
@@ -30,6 +33,7 @@ import java.util.Map;
  * data.add(new ScilabString("hello"));<br />
  * data.add(new ScilabDouble(2));<br />
  * </code>
+ *
  * @see org.scilab.modules.javasci.Scilab
  */
 public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
@@ -37,6 +41,8 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
     private static final long serialVersionUID = 8080160982092586620L;
     private static final ScilabTypeEnum type = ScilabTypeEnum.sci_tlist;
 
+    private static final int VERSION = 0;
+
     private String varName;
 
     /**
@@ -63,11 +69,12 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
     /**
      * Construct a tlist with a specified header.
      *
-     * @param types type names of the fields.
+     * @param types
+     *            type names of the fields.
      */
-    public ScilabTList(String []types) {
+    public ScilabTList(String[] types) {
         super();
-        String [][] typesData = new String[1][types.length];
+        String[][] typesData = new String[1][types.length];
         typesData[0] = types;
         add(new ScilabString(typesData));
     }
@@ -77,12 +84,12 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
      * the order that they are returned by the specified collection's iterator.
      *
      * @param types
-     *                  type names of the fields.
+     *            type names of the fields.
      * @param c
-     *                  the collection whose elements are to be placed into this
-     *                  tlist.
+     *            the collection whose elements are to be placed into this
+     *            tlist.
      */
-    public ScilabTList(String[] types, Collection< ? extends ScilabType> c) {
+    public ScilabTList(String[] types, Collection <? extends ScilabType > c) {
         super(c.size() + 1);
 
         String[][] typesData = new String[1][types.length];
@@ -106,11 +113,11 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
         return false;
     }
 
-/**
- * Get a map between the fields name and the associated ScilabType objects
- *
- * @return the map
- */
+    /**
+     * Get a map between the fields name and the associated ScilabType objects
+     *
+     * @return the map
+     */
     public Map<String, ScilabType> getTListFields() {
         Map<String, ScilabType> map = new HashMap<String, ScilabType>();
         if (isEmpty()) {
@@ -154,11 +161,12 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
     @Override
-        public ScilabTypeEnum getType() {
+    public ScilabTypeEnum getType() {
         return type;
     }
 
@@ -167,7 +175,7 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
      * @see org.scilab.modules.types.ScilabType#getHeight()
      */
     @Override
-        public int getHeight() {
+    public int getHeight() {
         if (isEmpty()) {
             return 0;
         }
@@ -179,7 +187,7 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
      * @see org.scilab.modules.types.ScilabType#getWidth()
      */
     @Override
-        public int getWidth() {
+    public int getWidth() {
         if (isEmpty()) {
             return 0;
         }
@@ -187,10 +195,11 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
     }
 
     /**
-     * Get a serialized list;
-     * The format is the following:
-     *   i) returned[0] is an array of integers containing the Scilab type (ScilabTypeEunm) of the different elements of the list.
-     *   ii) returned[i] for i&gt;=1 contains the serialized form of each items.
+     * Get a serialized list; The format is the following: i) returned[0] is an
+     * array of integers containing the Scilab type (ScilabTypeEunm) of the
+     * different elements of the list. ii) returned[i] for i&gt;=1 contains the
+     * serialized form of each items.
+     *
      * @return a serialized SiclabList/
      */
     public Object[] getSerializedObject() {
@@ -207,6 +216,34 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
         return items;
     }
 
+    @Override
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        int version = in.readInt();
+        switch (version) {
+            case 0:
+                int size = in.readInt();
+                ensureCapacity(size + 1);
+                ArrayList list = (ArrayList) this;
+                for (int i = 0; i < size; i++) {
+                    list.add(in.readObject());
+                }
+                varName = (String) in.readObject();
+                break;
+            default:
+                throw new ClassNotFoundException("A class ScilabTList with a version " + version + " does not exists");
+        }
+    }
+
+    @Override
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(VERSION);
+        out.writeInt(size());
+        for (Object var : (ArrayList) this) {
+            out.writeObject(var);
+        }
+        out.writeObject(varName);
+    }
+
     /**
      * Display the representation in the Scilab language of the type<br />
      * Note that the representation can be copied/pasted straight into Scilab
@@ -215,8 +252,7 @@ public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
      * @see java.util.AbstractCollection#toString()
      */
     @Override
-        public String toString() {
-
+    public String toString() {
         StringBuffer result = new StringBuffer();
         if (isEmpty()) {
             result.append("tlist()");
index 23fd1ad..2d40826 100644 (file)
 
 package org.scilab.modules.types;
 
+import java.io.Externalizable;
 import java.io.Serializable;
 
 /**
  * This interface specifies what is a Scilab types<br>
  * <br>
- * This class is {@link java.io.Serializable} and any modification could
- * impact load and store of data (Xcos files, Javasci saved data, etc...).<br>
+ * This class is {@link java.io.Serializable} and any modification could impact
+ * load and store of data (Xcos files, Javasci saved data, etc...).<br>
  * <br>
  */
-public interface ScilabType extends Serializable, Cloneable {
+public interface ScilabType extends Externalizable, Serializable, Cloneable {
 
     /**
      * Return the type of Scilab
+     *
      * @return the type of Scilab
      * @since 5.4.0
      */
@@ -67,13 +69,17 @@ public interface ScilabType extends Serializable, Cloneable {
 
     /**
      * Compare if obj is the same object or not
-     * @param obj the object we want to compare
+     *
+     * @param obj
+     *            the object we want to compare
      * @return true if the two objects are equals, false otherwise
      */
     public boolean equals(Object obj);
 
     /**
-     * Get a single object used to easily rebuild a Scilab variable from the Java ScilabType
+     * Get a single object used to easily rebuild a Scilab variable from the
+     * Java ScilabType
+     *
      * @return an very simple object reflecting this ScilabType.
      */
     public Object getSerializedObject();
index f2b18c5..21356c6 100644 (file)
@@ -9,60 +9,44 @@
 package org.scilab.modules.types;
 
 public enum ScilabTypeEnum {
-  sci_matrix(1),
-  sci_poly(2),
-  sci_boolean(4),
-  sci_sparse(5),
-  sci_boolean_sparse(6),
-  sci_matlab_sparse(7),
-  sci_ints(8),
-  sci_handles(9),
-  sci_strings(10),
-  sci_u_function(11),
-  sci_c_function(13),
-  sci_lib(14),
-  sci_list(15),
-  sci_tlist(16),
-  sci_mlist(17),
-  sci_pointer(128),
-  sci_implicit_poly(129),
-  sci_intrinsic_function(130);
-
-  public final int swigValue() {
-    return swigValue;
-  }
-
-  public static ScilabTypeEnum swigToEnum(int swigValue) {
-    ScilabTypeEnum[] swigValues = ScilabTypeEnum.class.getEnumConstants();
-    if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
-      return swigValues[swigValue];
-    for (ScilabTypeEnum swigEnum : swigValues)
-      if (swigEnum.swigValue == swigValue)
-        return swigEnum;
-    throw new IllegalArgumentException("No enum " + ScilabTypeEnum.class + " with value " + swigValue);
-  }
-
-  @SuppressWarnings("unused")
-  private ScilabTypeEnum() {
-    this.swigValue = SwigNext.next++;
-  }
-
-  @SuppressWarnings("unused")
-  private ScilabTypeEnum(int swigValue) {
-    this.swigValue = swigValue;
-    SwigNext.next = swigValue+1;
-  }
-
-  @SuppressWarnings("unused")
-  private ScilabTypeEnum(ScilabTypeEnum swigEnum) {
-    this.swigValue = swigEnum.swigValue;
-    SwigNext.next = this.swigValue+1;
-  }
-
-  private final int swigValue;
-
-  private static class SwigNext {
-    private static int next = 0;
-  }
+    sci_matrix(1), sci_poly(2), sci_boolean(4), sci_sparse(5), sci_boolean_sparse(6), sci_matlab_sparse(7), sci_ints(8), sci_handles(9), sci_strings(10), sci_u_function(
+        11), sci_c_function(13), sci_lib(14), sci_list(15), sci_tlist(16), sci_mlist(17), sci_pointer(128), sci_implicit_poly(129), sci_intrinsic_function(
+            130);
+
+    public final int swigValue() {
+        return swigValue;
+    }
+
+    public static ScilabTypeEnum swigToEnum(int swigValue) {
+        ScilabTypeEnum[] swigValues = ScilabTypeEnum.class.getEnumConstants();
+        if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
+            return swigValues[swigValue];
+        for (ScilabTypeEnum swigEnum : swigValues)
+            if (swigEnum.swigValue == swigValue)
+                return swigEnum;
+        throw new IllegalArgumentException("No enum " + ScilabTypeEnum.class + " with value " + swigValue);
+    }
+
+    @SuppressWarnings("unused")
+    private ScilabTypeEnum() {
+        this.swigValue = SwigNext.next++;
+    }
+
+    @SuppressWarnings("unused")
+    private ScilabTypeEnum(int swigValue) {
+        this.swigValue = swigValue;
+        SwigNext.next = swigValue + 1;
+    }
+
+    @SuppressWarnings("unused")
+    private ScilabTypeEnum(ScilabTypeEnum swigEnum) {
+        this.swigValue = swigEnum.swigValue;
+        SwigNext.next = this.swigValue + 1;
+    }
+
+    private final int swigValue;
+
+    private static class SwigNext {
+        private static int next = 0;
+    }
 }
-
index 8267d18..26d06e6 100644 (file)
@@ -2,18 +2,19 @@
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2011-2011 - DIGITEO - Sylvestre LEDRU
  *  Copyright (C) 2012 - Scilab Enterprises - Sylvestre LEDRU
- * 
+ *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *  you should have received as part of this distribution.  The terms
  *  are also available at
  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- * 
+ *
  */
 
 package org.scilab.modules.types;
+
 import org.scilab.modules.localization.Messages;
+
 public class ScilabTypeEnumDescription {
 
     public static String getTypeDescriptionFromId(int type) {
@@ -37,7 +38,7 @@ public class ScilabTypeEnumDescription {
                     return Messages.gettext("Graphic handle");
                 case sci_strings:
                     return Messages.gettext("String");
-                case  sci_u_function:
+                case sci_u_function:
                     return Messages.gettext("User function");
                 case sci_c_function:
                     return Messages.gettext("Compiled function");
@@ -46,7 +47,7 @@ public class ScilabTypeEnumDescription {
                 case sci_list:
                     return Messages.gettext("List");
                 case sci_tlist:
-                    return Messages.gettext("Tlist");                
+                    return Messages.gettext("Tlist");
                 case sci_mlist:
                     return Messages.gettext("Mlist");
                 case sci_pointer:
index 23e8825..dc60ff2 100644 (file)
@@ -21,12 +21,14 @@ import java.util.Vector;
 import javax.swing.event.EventListenerList;
 
 /**
- * Class to handle the Scilab data retrievment and conversion to a ScilabType object.
- * All the functions sendFoo are used from C++ and should not be used on the Java side.
+ * Class to handle the Scilab data retrievment and conversion to a ScilabType
+ * object. All the functions sendFoo are used from C++ and should not be used on
+ * the Java side.
  *
- * An handler which implements ScilabVariablesHandler must be used to achieve the retrievment.
- * The id returned by addScilabVariablesHandler must be passed from C/C++ to functions in the
- * class org_modules_types::ScilabToJava to guarantee that the correct handler would receive its datas.
+ * An handler which implements ScilabVariablesHandler must be used to achieve
+ * the retrievment. The id returned by addScilabVariablesHandler must be passed
+ * from C/C++ to functions in the class org_modules_types::ScilabToJava to
+ * guarantee that the correct handler would receive its datas.
  */
 public final class ScilabVariables {
 
@@ -35,7 +37,9 @@ public final class ScilabVariables {
 
     /**
      * Register a new handler
-     * @param handler the handler
+     *
+     * @param handler
+     *            the handler
      * @return the id to use from C/C++
      */
     public static final int addScilabVariablesHandler(ScilabVariablesHandler handler) {
@@ -56,7 +60,9 @@ public final class ScilabVariables {
 
     /**
      * Unregister an handler (the id must be considered as lost !!)
-     * @param handler the handler to remove
+     *
+     * @param handler
+     *            the handler to remove
      */
     public static final void removeScilabVariablesHandler(ScilabVariablesHandler handler) {
         if (handler != null) {
@@ -69,8 +75,11 @@ public final class ScilabVariables {
     }
 
     /**
-     * Unregister an handler with a given id (the id must be considered as lost !!)
-     * @param id the handler id to remove
+     * Unregister an handler with a given id (the id must be considered as lost
+     * !!)
+     *
+     * @param id
+     *            the handler id to remove
      */
     public static final void removeScilabVariablesHandler(int id) {
         if (id >= 0 && id < handlers.size()) {
@@ -80,11 +89,18 @@ public final class ScilabVariables {
 
     /**
      * Send double matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, double[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -96,12 +112,20 @@ public final class ScilabVariables {
 
     /**
      * Send complex matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param real the real data
-     * @param img the imaginary data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param real
+     *            the real data
+     * @param img
+     *            the imaginary data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, double[][] real, double[][] img, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -113,11 +137,18 @@ public final class ScilabVariables {
 
     /**
      * Send int32 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, int[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -129,11 +160,18 @@ public final class ScilabVariables {
 
     /**
      * Send uint16 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendUnsignedData(String varName, int[] indexes, short[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -145,11 +183,18 @@ public final class ScilabVariables {
 
     /**
      * Send int16 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, short[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -161,11 +206,18 @@ public final class ScilabVariables {
 
     /**
      * Send uint8 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendUnsignedData(String varName, int[] indexes, byte[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -177,11 +229,18 @@ public final class ScilabVariables {
 
     /**
      * Send boolean matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, boolean[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -193,11 +252,18 @@ public final class ScilabVariables {
 
     /**
      * Send int8 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, byte[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -209,11 +275,18 @@ public final class ScilabVariables {
 
     /**
      * Send int64 or uint64 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, long[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -225,11 +298,18 @@ public final class ScilabVariables {
 
     /**
      * Send uint32 matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendUnsignedData(String varName, int[] indexes, int[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -241,11 +321,18 @@ public final class ScilabVariables {
 
     /**
      * Send string matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, String[][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -257,15 +344,26 @@ public final class ScilabVariables {
 
     /**
      * Send double sparse matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param row the row number
-     * @param col the col number
-     * @param nbItem the number of non null elements
-     * @param nbItemRow the number by row of non null elements
-     * @param colPos the column position of the non null elements
-     * @param data the data
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param row
+     *            the row number
+     * @param col
+     *            the col number
+     * @param nbItem
+     *            the number of non null elements
+     * @param nbItemRow
+     *            the number by row of non null elements
+     * @param colPos
+     *            the column position of the non null elements
+     * @param data
+     *            the data
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, double[] data, int handlerId) {
         if (indexes.length != 0) {
@@ -277,18 +375,31 @@ public final class ScilabVariables {
 
     /**
      * Send double sparse matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param row the row number
-     * @param col the col number
-     * @param nbItem the number of non null elements
-     * @param nbItemRow the number by row of non null elements
-     * @param colPos the column position of the non null elements
-     * @param real the real data
-     * @param imag the imaginary data
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param row
+     *            the row number
+     * @param col
+     *            the col number
+     * @param nbItem
+     *            the number of non null elements
+     * @param nbItemRow
+     *            the number by row of non null elements
+     * @param colPos
+     *            the column position of the non null elements
+     * @param real
+     *            the real data
+     * @param imag
+     *            the imaginary data
+     * @param handlerId
+     *            the handler id
      */
-    public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag, int handlerId) {
+    public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, double[] real, double[] imag,
+                                      int handlerId) {
         if (indexes.length != 0) {
             addElement(indexes, new ScilabSparse(null, row, col, nbItem, nbItemRow, colPos, real, imag));
         } else {
@@ -298,14 +409,24 @@ public final class ScilabVariables {
 
     /**
      * Send boolean sparse matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param row the row number
-     * @param col the col number
-     * @param nbItem the number of true elements
-     * @param nbItemRow the number by row of true elements
-     * @param colPos the column position of the true elements
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param row
+     *            the row number
+     * @param col
+     *            the col number
+     * @param nbItem
+     *            the number of true elements
+     * @param nbItemRow
+     *            the number by row of true elements
+     * @param colPos
+     *            the column position of the true elements
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, int row, int col, int nbItem, int[] nbItemRow, int[] colPos, int handlerId) {
         if (indexes.length != 0) {
@@ -317,12 +438,20 @@ public final class ScilabVariables {
 
     /**
      * Send double polynomial matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param polyVarName the polynomial variable name
-     * @param data the data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param polyVarName
+     *            the polynomial variable name
+     * @param data
+     *            the data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendPolynomial(String varName, int[] indexes, String polyVarName, double[][][] data, boolean swaped, int handlerId) {
         if (indexes.length != 0) {
@@ -334,15 +463,25 @@ public final class ScilabVariables {
 
     /**
      * Send complex polynomial matrix
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param polyVarName the polynomial variable name
-     * @param real the real data
-     * @param img the imaginary data
-     * @param swaped true if the matrix is stored row by row
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param polyVarName
+     *            the polynomial variable name
+     * @param real
+     *            the real data
+     * @param img
+     *            the imaginary data
+     * @param swaped
+     *            true if the matrix is stored row by row
+     * @param handlerId
+     *            the handler id
      */
-    public static final void sendPolynomial(String varName, int[] indexes, String polyVarName, double[][][] real, double[][][] img, boolean swaped, int handlerId) {
+    public static final void sendPolynomial(String varName, int[] indexes, String polyVarName, double[][][] real, double[][][] img, boolean swaped,
+                                            int handlerId) {
         if (indexes.length != 0) {
             addElement(indexes, new ScilabPolynomial(null, polyVarName, real, img, swaped));
         } else {
@@ -352,10 +491,17 @@ public final class ScilabVariables {
 
     /**
      * Send list, tlist and mlist
-     * @param varName the variable name
-     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param type a char which must take the values 'l' for list or 'm' for mlist or 't' for tlist
-     * @param handlerId the handler id
+     *
+     * @param varName
+     *            the variable name
+     * @param indexes
+     *            an integer array with the indexes of the (sub)*-list which
+     *            will contain the data
+     * @param type
+     *            a char which must take the values 'l' for list or 'm' for
+     *            mlist or 't' for tlist
+     * @param handlerId
+     *            the handler id
      */
     public static final void sendData(String varName, int[] indexes, char type, int handlerId) {
         String name = null;
@@ -365,13 +511,13 @@ public final class ScilabVariables {
 
         ScilabType var = null;
         switch (type) {
-            case 'l' :
+            case 'l':
                 var = new ScilabList(name);
                 break;
-            case 'm' :
+            case 'm':
                 var = new ScilabMList(name);
                 break;
-            case 't' :
+            case 't':
                 var = new ScilabTList(name);
                 break;
         }
@@ -384,9 +530,11 @@ public final class ScilabVariables {
     }
 
     /**
-     * Call when the list filling is finished
-    a     * @param indexes an integer array with the indexes of the (sub)*-list which will contain the data
-     * @param handlerId the handler id
+     * Call when the list filling is finished a * @param indexes an integer
+     * array with the indexes of the (sub)*-list which will contain the data
+     *
+     * @param handlerId
+     *            the handler id
      */
     public static final void closeList(int[] indexes, int handlerId) {
         Thread t = Thread.currentThread();
@@ -399,8 +547,11 @@ public final class ScilabVariables {
 
     /**
      * Add an element to the list
-     * @param indexes the indexes where to put the variable
-     * @param var the variable to put
+     *
+     * @param indexes
+     *            the indexes where to put the variable
+     * @param var
+     *            the variable to put
      */
     private static final void addElement(int[] indexes, ScilabType data) {
         ArrayList<ScilabType> list = lists.get(Thread.currentThread());
index 802b550..050f07d 100644 (file)
@@ -21,7 +21,9 @@ public class ScilabVariablesEvent {
 
     /**
      * Constructor
-     * @param var the new refreshed variable
+     *
+     * @param var
+     *            the new refreshed variable
      */
     public ScilabVariablesEvent(ScilabType var) {
         this.var = var;
index 2b87172..ea6d612 100644 (file)
@@ -19,7 +19,9 @@ public interface ScilabVariablesHandler {
 
     /**
      * Handle a Scilab variable
-     * @param var the variable
+     *
+     * @param var
+     *            the variable
      */
     public void handle(ScilabType var);
 }
index 538543c..1f87df5 100644 (file)
@@ -22,12 +22,15 @@ public interface ScilabVariablesListener extends EventListener {
 
     /**
      * Prevent the listener that a variable has been updated
-     * @param event the event
+     *
+     * @param event
+     *            the event
      */
     public void scilabVariableUpdated(ScilabVariablesEvent event);
 
     /**
      * Gets the listened variables
+     *
      * @return the listened variables name
      */
     public Set<String> getListenedVariables();
index e11565a..a2e0420 100644 (file)
@@ -29,7 +29,8 @@ public final class ScilabVariablesRefresh implements ScilabVariablesHandler {
     /**
      * Constructor
      */
-    private ScilabVariablesRefresh() { }
+    private ScilabVariablesRefresh() {
+    }
 
     /**
      * {@inheritDoc}
@@ -49,6 +50,7 @@ public final class ScilabVariablesRefresh implements ScilabVariablesHandler {
 
     /**
      * Get the id to use to send data from C/C++ to this Java handler
+     *
      * @return the handler id
      */
     public static final int getScilabVariablesRefreshId() {
@@ -61,8 +63,10 @@ public final class ScilabVariablesRefresh implements ScilabVariablesHandler {
     }
 
     /**
-     * Get all the listened variables from the different listeners
-     * This function is used from C++ to retrieve exactly what is needed and should not be used from Java.
+     * Get all the listened variables from the different listeners This function
+     * is used from C++ to retrieve exactly what is needed and should not be
+     * used from Java.
+     *
      * @return all the listened variables
      */
     public static final String[] getAllListenedVariables() {
@@ -82,7 +86,9 @@ public final class ScilabVariablesRefresh implements ScilabVariablesHandler {
 
     /**
      * Add a new ScilabVariablesListener
-     * @param listener the listener to add
+     *
+     * @param listener
+     *            the listener to add
      */
     public static final void addScilabVariablesListener(ScilabVariablesListener listener) {
         eventListeners.add(ScilabVariablesListener.class, listener);
@@ -90,7 +96,9 @@ public final class ScilabVariablesRefresh implements ScilabVariablesHandler {
 
     /**
      * Remove a ScilabVariablesListener
-     * @param listener the listener to remove
+     *
+     * @param listener
+     *            the listener to remove
      */
     public static final void removeScilabVariablesListener(ScilabVariablesListener listener) {
         eventListeners.remove(ScilabVariablesListener.class, listener);
index 92893d6..90acf95 100644 (file)
@@ -13,7 +13,9 @@
 package org.scilab.modules.xcos.io.codec;
 
 import org.scilab.modules.graph.io.ScilabObjectCodec;
+import org.scilab.modules.types.ScilabList;
 import org.w3c.dom.Document;
+import org.w3c.dom.Node;
 
 import com.mxgraph.io.mxCodec;
 import com.mxgraph.io.mxCodecRegistry;
@@ -35,10 +37,10 @@ public class XcosCodec extends mxCodec {
         mxCodecRegistry.addPackage("org.scilab.modules.xcos.graph");
         mxCodecRegistry.addPackage("org.scilab.modules.xcos.block");
         mxCodecRegistry
-        .addPackage("org.scilab.modules.xcos.block.positionning");
+            .addPackage("org.scilab.modules.xcos.block.positionning");
         mxCodecRegistry.addPackage("org.scilab.modules.xcos.link");
         mxCodecRegistry
-        .addPackage("org.scilab.modules.xcos.link.commandcontrol");
+            .addPackage("org.scilab.modules.xcos.link.commandcontrol");
         mxCodecRegistry.addPackage("org.scilab.modules.xcos.link.explicit");
         mxCodecRegistry.addPackage("org.scilab.modules.xcos.link.implicit");
         mxCodecRegistry.addPackage("org.scilab.modules.xcos.port");
@@ -91,4 +93,11 @@ public class XcosCodec extends mxCodec {
         super(document);
     }
 
+    public static Object enableBinarySerialization(ScilabList dictionary) {
+       return ScilabObjectCodec.enableBinarySerialization(dictionary);
+    }
+
+    public static ScilabList disableBinarySerialization() {
+       return ScilabObjectCodec.disableBinarySerialization();
+    }
 }
index 0a9e46b..e24eac9 100644 (file)
@@ -1,3 +1,15 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Clement DAVID
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
 package org.scilab.modules.xcos.io.spec;
 
 import java.io.IOException;
@@ -16,6 +28,7 @@ import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
 import org.scilab.modules.commons.xml.ScilabTransformerFactory;
+import org.scilab.modules.types.ScilabList;
 import org.scilab.modules.xcos.graph.XcosDiagram;
 import org.scilab.modules.xcos.io.codec.XcosCodec;
 import org.w3c.dom.Document;
@@ -27,6 +40,12 @@ public class ContentEntry implements Entry {
 
     private Document manifest;
     private XcosDiagram content;
+    private XcosPackage pack;
+    private ScilabList dictionary;
+
+    public void setDictionary(ScilabList dictionary) {
+        this.dictionary = dictionary;
+    }
 
     @Override
     public String getMediaType() {
@@ -40,6 +59,7 @@ public class ContentEntry implements Entry {
 
     @Override
     public void setup(XcosPackage p) {
+        pack = p;
         manifest = p.getManifest();
         content = p.getContent();
     }
@@ -59,7 +79,13 @@ public class ContentEntry implements Entry {
             LOG.exiting("Transformer", "transform");
 
             LOG.entering("XcosCodec", "decode");
-            codec.decode(result.getNode().getFirstChild(), content);
+            if (dictionary == null) {
+                codec.decode(result.getNode().getFirstChild(), content);
+            } else {
+                XcosCodec.enableBinarySerialization(dictionary);
+                codec.decode(result.getNode().getFirstChild(), content);
+                XcosCodec.disableBinarySerialization();
+            }
             LOG.exiting("XcosCodec", "decode");
 
         } catch (TransformerConfigurationException e) {
@@ -87,7 +113,13 @@ public class ContentEntry implements Entry {
             final Transformer aTransformer = tranFactory.newTransformer();
 
             LOG.entering("XcosCodec", "encode");
-            final Node doc = codec.encode(content);
+            Object lock = XcosCodec.enableBinarySerialization(null);
+            final Node doc;
+            final ScilabList dictionary;
+            synchronized (lock) {
+                doc = codec.encode(content);
+                dictionary = XcosCodec.disableBinarySerialization();
+            }
             LOG.exiting("XcosCodec", "encode");
 
             final DOMSource src = new DOMSource(doc);
@@ -97,6 +129,10 @@ public class ContentEntry implements Entry {
             aTransformer.transform(src, result);
             LOG.exiting("Transformer", "transform");
 
+            DictionaryEntry dictEntry = new DictionaryEntry(dictionary);
+            dictEntry.setup(pack);
+            dictEntry.store(stream);
+
             /*
              * Add an entry to the manifest file
              */
@@ -104,7 +140,6 @@ public class ContentEntry implements Entry {
             e.setAttribute("manifest:media-type", getMediaType());
             e.setAttribute("manifest:full-path", getFullPath());
             manifest.getFirstChild().appendChild(e);
-
         } catch (TransformerConfigurationException e) {
             Logger.getLogger(ContentEntry.class.getName()).severe(e.getMessageAndLocation());
         } catch (TransformerException e) {
index c11977a..1d5d14a 100644 (file)
 
 package org.scilab.modules.xcos.io.spec;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.logging.Logger;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+import org.scilab.modules.types.ScilabList;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
 public class DictionaryEntry implements Entry {
+    private static final Logger LOG = Logger.getLogger(DictionaryEntry.class.getName());
+
+    private Document manifest;
+    private ScilabList dict;
+
+    public DictionaryEntry() {
+    }
+
+    public DictionaryEntry(ScilabList dict) {
+        this.dict = dict;
+    }
+
+    public ScilabList getDictionary() {
+        return dict;
+    }
 
     @Override
     public String getMediaType() {
-        // TODO Auto-generated method stub
-        return null;
+        return "bin/ser";
     }
 
     @Override
     public String getFullPath() {
-        // TODO Auto-generated method stub
-        return null;
+        return "dictionary/dictionary.ser";
     }
 
     @Override
     public void setup(XcosPackage p) {
-        // TODO Auto-generated method stub
-
+        manifest = p.getManifest();
     }
 
     @Override
-    public void load(ZipEntry entry, InputStream stream) {
-        // TODO Auto-generated method stub
-
+    public void load(ZipEntry entry, InputStream stream) throws IOException {
+        ObjectInputStream ois = null;
+        try {
+            ois = new ObjectInputStream(new BufferedInputStream(stream));
+            dict = (ScilabList) ois.readObject();
+        } catch (IOException e) {
+            Logger.getLogger(DictionaryEntry.class.getName()).severe(e.getMessage());
+        } catch (ClassNotFoundException e) {
+            Logger.getLogger(DictionaryEntry.class.getName()).severe(e.getMessage());
+        } finally {
+            ois.close();
+        }
     }
 
     @Override
-    public void store(ZipOutputStream stream) {
-        // TODO Auto-generated method stub
+    public void store(ZipOutputStream stream) throws IOException {
+        /*
+         * Append a ZipEntry
+         */
+        final ZipEntry entry = new ZipEntry(getFullPath());
+        stream.putNextEntry(entry);
 
-    }
+        /*
+         * Store content
+         */
+        LOG.entering("ObjectOutputStream", "writeObject");
+        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(stream));
+        oos.writeObject(dict);
+        oos.flush();
+        LOG.exiting("ObjectOutputStream", "writeObject");
 
+        /*
+         * Add an entry to the manifest file
+         */
+        final Element e = manifest.createElement("manifest:file-entry");
+        e.setAttribute("manifest:media-type", getMediaType());
+        e.setAttribute("manifest:full-path", getFullPath());
+        manifest.getFirstChild().appendChild(e);
+    }
 }
index ba3f4ca..ede364f 100644 (file)
 
 package org.scilab.modules.xcos.io.spec;
 
+import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
+import java.util.logging.Logger;
 import java.util.zip.CRC32;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
@@ -41,6 +43,7 @@ import javax.xml.xpath.XPathFactory;
 
 import org.scilab.modules.commons.xml.ScilabDocumentBuilderFactory;
 import org.scilab.modules.commons.xml.ScilabTransformerFactory;
+import org.scilab.modules.types.ScilabList;
 import org.scilab.modules.xcos.graph.XcosDiagram;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -53,15 +56,17 @@ import org.xml.sax.SAXException;
  * You can load/save from/to a file a specific package without storing any data.
  */
 public class XcosPackage {
+    private static final Logger LOG = Logger.getLogger(XcosPackage.class.getName());
     private static final String MIMETYPE = "mimetype";
     private static final String META_INF_MANIFEST_XML = "META-INF/manifest.xml";
 
-    private static final String VERSION = "0.1";
+    private static final String VERSION = "0.2";
     private static final String MIME = "application/x-scilab-xcos";
     private static final byte[] MIME_BYTES = MIME.getBytes();
 
     private static final String INVALID_MIMETYPE = "Invalid mimetype";
-    private static final Entry[] AVAILABLE_ENTRIES = { new ContentEntry(), new DictionaryEntry() };
+
+    private static final String DICTIONARY_PATH = "dictionary/dictionary.ser";
 
     /**
      * Specific InputStream implementation to use entry closing instead of
@@ -111,10 +116,16 @@ public class XcosPackage {
     private final File file;
     private Document manifest;
 
+    /**
+     * Entries encoder/decoder stored in the encoding order
+     */
+    private Entry[] availableEntries;
+
     /*
      * Data to store or load into
      */
     private XcosDiagram content;
+    private ScilabList dictionary;
 
     /*
      * External methods, to save/load a file
@@ -135,6 +146,9 @@ public class XcosPackage {
         manifest = ScilabDocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
         final Element root = manifest.createElementNS("urn:scilab:xcos:xmlns:manifest:0.1", "manifest:manifest");
         manifest.appendChild(root);
+
+        // take care: the order is the encoding order
+        availableEntries = new Entry[] { new ContentEntry() };
     }
 
     private boolean hasInvalidManifest() {
@@ -157,6 +171,8 @@ public class XcosPackage {
             checkHeader();
         }
 
+        final ScilabList dictionary = getDictionary();
+
         final FileInputStream fis = new FileInputStream(file);
         final ZipInputStream zin = new ZipInputStream(fis);
         // input stream without close operation
@@ -179,13 +195,16 @@ public class XcosPackage {
                     final String path = n.getAttributes().getNamedItem("manifest:full-path").getNodeValue();
 
                     // path should be the entry one, if not continue
-                    if (!path.equals(entry.getName())) {
+                    if (!path.equals(entry.getName()) || path.equals(DICTIONARY_PATH)) {
                         continue;
                     }
 
                     // select the right entry decoder
-                    for (final Entry e : AVAILABLE_ENTRIES) {
+                    for (final Entry e : availableEntries) {
                         if (media.equals(e.getMediaType()) && path.matches(e.getFullPath())) {
+                            if (dictionary != null) {
+                                ((ContentEntry) e).setDictionary(dictionary);
+                            }
                             e.setup(this);
                             e.load(entry, ein);
                             break;
@@ -197,7 +216,34 @@ public class XcosPackage {
         } finally {
             zin.close();
         }
+    }
+
+    public ScilabList getDictionary() throws IOException {
+        LOG.entering("XcosPackage", "getDictionary");
+        final FileInputStream fis = new FileInputStream(file);
+        final ZipInputStream zin = new ZipInputStream(fis);
+
+        ZipEntry entry;
+        BufferedInputStream bis = new BufferedInputStream(zin);
+
+        try {
+            while ((entry = zin.getNextEntry()) != null) {
+                final String name = entry.getName();
+                if (name.equals(DICTIONARY_PATH)) {
+                    DictionaryEntry e = new DictionaryEntry();
+                    e.setup(this);
+                    e.load(entry, bis);
+                    return e.getDictionary();
+                }
+            }
+        } finally {
+            bis.close();
+            zin.close();
+
+            LOG.exiting("XcosPackage", "getDictionary");
+        }
 
+        return null;
     }
 
     /**
@@ -261,12 +307,11 @@ public class XcosPackage {
             // add the header (standard package)
             storeHeader(zout);
 
-            Entry entry;
-
-            // store the content
-            entry = new ContentEntry();
-            entry.setup(this);
-            entry.store(zout);
+            // store the entries in encoding order
+            for (final Entry entry : availableEntries) {
+                entry.setup(this);
+                entry.store(zout);
+            }
 
             // store the manifest file
             storeTrailer(zout);