Xcos: get rid of jhdf / java hdf. 33/8633/3
Clément DAVID [Thu, 9 Aug 2012 12:21:15 +0000 (14:21 +0200)]
See http://bugzilla.scilab.org/show_bug.cgi?id=11556 to track the global status

Change-Id: I7254f54eb50742ab44807aa8139dc671d3f8149e

15 files changed:
scilab/modules/xcos/macros/xcosPal.sci
scilab/modules/xcos/macros/xcosPalAdd.sci
scilab/modules/xcos/macros/xcosPalAddBlock.sci
scilab/modules/xcos/sci_gateway/cpp/sci_xcosPalLoad.cpp
scilab/modules/xcos/src/java/org/scilab/modules/xcos/Xcos.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/CompilationEngineStatus.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/XcosFileType.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/H5RWHandler.java [deleted file]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/Palette.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/PreLoadedElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/StyleElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/utils/FileUtils.java
scilab/modules/xcos/src/jni/Palette.cpp
scilab/modules/xcos/src/jni/Palette.giws.xml
scilab/modules/xcos/src/jni/Palette.hxx

index 47ecf85..a30910c 100644 (file)
@@ -79,8 +79,8 @@ function pal = xcosPal(name, scs_m)
     end
     
     // default instance
-    pal = tlist(["palette", "name", "blockNames",  "blocks", "icons", "style"],..
-                            [],     [],            [],       [],      []);
+    pal = tlist(["palette", "name",  "blockNames", "icons", "style"],..
+                                [],        [],      [],      []);
                             
     // find palette name
     if ~isempty(scs_m.objs) then
index b93a15d..bcd3ff0 100644 (file)
@@ -74,18 +74,19 @@ function [status, msg] = xcosPalAdd(pal, category)
         error(msprintf(gettext("%s: Wrong type for input argument ""%s"": string vector expected.\n"), "xcosPalAdd", "pal"));
     end
     
-    if typeof(pal) == "palette" then
-        myPalette = pal;
-        pal = TMPDIR + "/palette.sod";
-        [status, msg] = xcosPalExport(myPalette, pal);
-        if ~status then
-            return;
+    if typeof(pal) == "string" & isfile(pal) then
+        path = pal;
+        
+        clear pal
+        import_from_hdf5(path);
+        if ~exists("pal", 'l') then
+            error(msprintf(gettext("%s: Wrong type for input argument ""%s"": palette type or path expected.\n"), "xcosPalAdd", "pal"));
         end
     end
     
-    // call the gateway with a full path string and the category as
+    // call the gateway with the variable name and the category as
     // a string vector
-    xcosPalLoad(pal, category);
+    xcosPalLoad('pal', category);
     status = %T;
 endfunction
 
index ab18453..9eea27a 100644 (file)
 
 function pal = xcosPalAddBlock(pal, block, pal_block_img, style)
 
-//  Add a block to a Scilab/Xcos palette instance. Some optional properties can be added to customize the palette icon and the style of the block.
-//
-// Calling Sequence
-//  pal = xcosPalAddBlock(pal, block);
-//  pal = xcosPalAddBlock(pal, block, pal_block_img);
-//  pal = xcosPalAddBlock(pal, block, [], style);
-//  pal = xcosPalAddBlock(pal, block, pal_block_img, style);
-//
-// Parameters
-//  pal: the palette to update
-//  block: the block to add to the palette
-//  pal_block_img: the block icon to use on the palette manager.
-//  style: the style to apply to the block
-//
-// Description
-//  This macros add a block instance to a palette. This block parameter can be an instantiated block or a name (interface-function) or a path to a saved instance. Some operations are performed to load this block and check it's availability so it's interface-function must be loaded on Scilab. Some temporary files are also generated without full path arguments.
-//
-//  The optional pal_block_img argument is generated on the <link linkend="TMPDIR">TMPDIR</link> using Scilab graphics if not specified.Be careful that if you use our palette to be persistent you then need to specify it. Otherwise the generated image will be deleted at the end of the Scilab session.
-//
-//  The optional style argument allow the user to determine the kind of style to be used by this block. This argument can be typed as a path <link linkend="string">string</link> or a <link linkend="struct">struct</link>. If it is a string then a default style value is generated and formatted as a style else a struct is wrapped to a key-value jgraphx settings. The <link linkend="jgraphx-style-list">following style</link> correspond to jgraphx version 1.4.0.2. These style keys can change with new version of jgraphx without any warranty.
-//
-//
-// Examples
-//  loadXcosLibs();
-//  pal = xcosPal();
-//
-//  sumPath = TMPDIR + "/sum.sod";
-//  bigSomPath = TMPDIR + "/sum.sod";
-//
-//  scs_m = SUM_f("define");
-//  export_to_hdf5(sumPath, "scs_m");
-//  scs_m = BIGSOM_f("define");
-//  export_to_hdf5(bigSomPath, "scs_m");
-//
-//  pal = xcosPalAddBlock(pal, sumPath);
-//  pal = xcosPalAddBlock(pal, bigSomPath);
-//
-//  xcosPalAdd(pal);
-//
-// See also
-//  xcosPal
-//  xcosPalAdd
-//
-// Authors
-//  Clément DAVID
-//  Yann COLLETTE
+    //  Add a block to a Scilab/Xcos palette instance. Some optional properties can be added to customize the palette icon and the style of the block.
+    //
+    // Calling Sequence
+    //  pal = xcosPalAddBlock(pal, block);
+    //  pal = xcosPalAddBlock(pal, block, pal_block_img);
+    //  pal = xcosPalAddBlock(pal, block, [], style);
+    //  pal = xcosPalAddBlock(pal, block, pal_block_img, style);
+    //
+    // Parameters
+    //  pal: the palette to update
+    //  block: the block to add to the palette
+    //  pal_block_img: the block icon to use on the palette manager.
+    //  style: the style to apply to the block
+    //
+    // Description
+    //  This macros add a block instance to a palette. This block parameter can be an instantiated block or a name (interface-function) or a path to a saved instance. Some operations are performed to load this block and check it's availability so it's interface-function must be loaded on Scilab. Some temporary files are also generated without full path arguments.
+    //
+    //  The optional pal_block_img argument is generated on the <link linkend="TMPDIR">TMPDIR</link> using Scilab graphics if not specified.Be careful that if you use our palette to be persistent you then need to specify it. Otherwise the generated image will be deleted at the end of the Scilab session.
+    //
+    //  The optional style argument allow the user to determine the kind of style to be used by this block. This argument can be typed as a path <link linkend="string">string</link> or a <link linkend="struct">struct</link>. If it is a string then a default style value is generated and formatted as a style else a struct is wrapped to a key-value jgraphx settings. The <link linkend="jgraphx-style-list">following style</link> correspond to jgraphx version 1.4.0.2. These style keys can change with new version of jgraphx without any warranty.
+    //
+    //
+    // Examples
+    //  loadXcosLibs();
+    //  pal = xcosPal();
+    //
+    //  sumPath = TMPDIR + "/sum.sod";
+    //  bigSomPath = TMPDIR + "/sum.sod";
+    //
+    //  scs_m = SUM_f("define");
+    //  export_to_hdf5(sumPath, "scs_m");
+    //  scs_m = BIGSOM_f("define");
+    //  export_to_hdf5(bigSomPath, "scs_m");
+    //
+    //  pal = xcosPalAddBlock(pal, sumPath);
+    //  pal = xcosPalAddBlock(pal, bigSomPath);
+    //
+    //  xcosPalAdd(pal);
+    //
+    // See also
+    //  xcosPal
+    //  xcosPalAdd
+    //
+    // Authors
+    //  Clément DAVID
+    //  Yann COLLETTE
 
     // Checking arguments
     [lhs,rhs] = argn(0)
@@ -72,56 +72,34 @@ function pal = xcosPalAddBlock(pal, block, pal_block_img, style)
     end
 
     // check and tranform block argument
-
     if typeof(block) == "Block" then
-        path = TMPDIR + "/" + block.gui + ".sod";
         scs_m = block;
-        err = export_to_hdf5(path, "scs_m");
-        if err <> %T then
-            error(msprintf(gettext("%s: Unable to export ""%s"" to ""%s"".\n"), "xcosPalAddBlock", "block", path));
+    elseif typeof(block) == "string" & isfile(block) then
+        fd = mopen(block, "rb");
+        [err, msg] = merror(fd);
+        if err <> 0 then
+            error(msg);
         end
+        block = fullpath(block);
+        mclose(fd);
 
-        block = path; // block mute to a full path string.
-    end
-
-    if typeof(block) == "string" then
-        if exists(block) <> 0 & typeof(evstr(block)) == "function" then
-            execstr("scs_m = " + block + "(""define"");");
-            path = TMPDIR + "/" + block + ".sod";
-            err = export_to_hdf5(path, "scs_m");
-            if err <> %T then
-                error(msprintf(gettext("%s: Unable to export ""%s"" to ""%s"".\n"), "xcosPalAddBlock", "block", path));
-            end
-
-            block = path; // block mute to a full path string.
-        else // assume this is a path
-            fd = mopen(block, "rb");
-            [err, msg] = merror(fd);
-            if err <> 0 then
-                error(msg);
-            end
-            block = fullpath(block);
-            mclose(fd);
-
-            // store the block instance if not already saved
-            if exists("scs_m", 'l') == 0 then
-                status = import_from_hdf5(block);
-                if ~status then
-                    error(msprintf(gettext("%s: Unable to load block from ""%s"": hdf5 file expected.\n"), "xcosPalAddBlock", block));
-                end
+        // store the block instance
+        status = import_from_hdf5(block);
+        if ~status then
+            error(msprintf(gettext("%s: Unable to load block from ""%s"": hdf5 file expected.\n"), "xcosPalAddBlock", block));
+        end
 
-                if exists("scs_m", 'l') == 0 then
-                    error(msprintf(gettext("%s: Unable to load block from ""%s"": no `scs_m'' variable found.\n"), "xcosPalAddBlock", block));
-                end
-            end
+        if exists("scs_m", 'l') == 0 then
+            error(msprintf(gettext("%s: Unable to load block from ""%s"": no `scs_m'' variable found.\n"), "xcosPalAddBlock", block));
         end
+    elseif typeof(block) == "string" & exists(block) <> 0 & typeof(evstr(block)) == "function" then
+        execstr("scs_m = " + block + "(""define"");");
     else
         error(msprintf(gettext("%s: Wrong type for input argument ""%s"": function as string or Block type or full path string expected.\n"), "xcosPalAddBlock", "block"));
     end
 
-    // at this point we can assert that `block' is a full path string to a 
-    // saved block reference instance (hdf5 format) also kept into 
-    // `scs_m'.
+    // at this point we can assert that `scs_m' is a full path string to a 
+    // block reference instance.
 
     // now handle pal_block_img argument
     if ~exists("pal_block_img", 'l') | isempty(pal_block_img) then
@@ -149,7 +127,7 @@ function pal = xcosPalAddBlock(pal, block, pal_block_img, style)
         pal_block_img = fullpath(pathconvert(pal_block_img, %f));
     end
 
-    
+
 
     // now handle style argument
     if ~exists("style", 'l') | isempty(style) then
@@ -188,15 +166,14 @@ function pal = xcosPalAddBlock(pal, block, pal_block_img, style)
                     style = "/" + style;
                 end
                 style = "shape=label;image=file://" + style + ";";
-//          else
-//              assume a well formatted string, do nothing
+                //          else
+                //              assume a well formatted string, do nothing
             end
         end
     end
 
     // Store the data into the palette structure
     pal.blockNames($+1) = scs_m.gui // block named class
-    pal.blocks($+1) = block; // reference instance full path string
     pal.icons($+1) = pal_block_img; // palette icon full path string
     pal.style($+1) = style; // block style (linked to style definition)
 
index b1447c5..699c083 100644 (file)
@@ -31,13 +31,13 @@ int sci_xcosPalLoad(char *fname, unsigned long fname_len)
     CheckRhs(1, 2);
     CheckLhs(0, 1);
 
-    char *path = NULL;
+    char *name = NULL;
 
     int lenCategory = 0;
     char **category = NULL;
 
-    /* path setup */
-    if (readSingleString(pvApiCtx, 1, &path, fname))
+    /* name setup */
+    if (readSingleString(pvApiCtx, 1, &name, fname))
     {
         return 0;
     }
@@ -45,7 +45,7 @@ int sci_xcosPalLoad(char *fname, unsigned long fname_len)
     /* category setup */
     if (Rhs == 2 && readVectorString(pvApiCtx, 2, &category, &lenCategory, fname))
     {
-        FREE(path);
+        FREE(name);
         return 0;
     }
 
@@ -56,11 +56,11 @@ int sci_xcosPalLoad(char *fname, unsigned long fname_len)
         // check category emptyness
         if (category == NULL || (lenCategory == 1 && *category == '\0'))
         {
-            Palette::loadPal(getScilabJavaVM(), path);
+            Palette::loadPal(getScilabJavaVM(), name);
         }
         else
         {
-            Palette::loadPal(getScilabJavaVM(), path, category, lenCategory);
+            Palette::loadPal(getScilabJavaVM(), name, category, lenCategory);
         }
     }
     catch (GiwsException::JniCallMethodException &exception)
index 34b101a..46acef7 100644 (file)
@@ -98,13 +98,9 @@ public final class Xcos {
      * Dependencies version
      */
     private static final List<String> MXGRAPH_VERSIONS = null;
-    private static final List<String> HDF5_VERSIONS = Arrays.asList("[1, 8, 4]", "[1, 8, 5]", "[1, 8, 6]", "[1, 8, 7]", "[1, 8, 8]");
     private static final List<String> BATIK_VERSIONS = Arrays.asList("1.7");
 
     private static final String UNABLE_TO_LOAD_JGRAPHX = Messages.gettext("Unable to load the jgraphx library.\nExpecting version %s ; Getting version %s .");
-    private static final String UNABLE_TO_LOAD_JHDF5 = Messages
-            .gettext("Unable to load the hdf5-java (jhdf5) library. \nExpecting version %s ; Getting version %s .");
-    private static final String UNABLE_TO_LOAD_HDF5 = Messages.gettext("Unable to load the native HDF5 library.");
     private static final String UNABLE_TO_LOAD_BATIK = Messages.gettext("Unable to load the Batik library. \nExpecting version %s ; Getting version %s .");
 
     private static final String CALLED_OUTSIDE_THE_EDT_THREAD = "Called outside the EDT thread.";
@@ -221,33 +217,6 @@ public final class Xcos {
             throw new RuntimeException(String.format(UNABLE_TO_LOAD_JGRAPHX, MXGRAPH_VERSIONS.get(0), mxGraphVersion), e);
         }
 
-        /* HDF5 */
-        final int[] libVersion = new int[3];
-        try {
-            final Class<?> klass = loader.loadClass("ncsa.hdf.hdf5lib.H5");
-
-            /* hdf5-java */
-            int ret = (Integer) klass.getMethod("H5get_libversion", libVersion.getClass()).invoke(null, libVersion);
-            if (ret < 0) {
-                throw new Exception();
-            }
-
-            if (!HDF5_VERSIONS.contains(Arrays.toString(libVersion))) {
-                throw new Exception();
-            }
-
-            /* hdf5 */
-            ret = (Integer) klass.getMethod("H5check_version", int.class, int.class, int.class).invoke(null, libVersion[0], libVersion[1], libVersion[2]);
-            if (ret < 0) {
-                throw new RuntimeException(UNABLE_TO_LOAD_HDF5);
-            }
-
-        } catch (final Throwable e) {
-            if (!(e instanceof RuntimeException)) {
-                throw new RuntimeException(String.format(UNABLE_TO_LOAD_JHDF5, HDF5_VERSIONS.get(0), Arrays.toString(libVersion)), e);
-            }
-        }
-
         /* Batik */
         String batikVersion = null;
         try {
index dd0be5d..0ffb5c6 100644 (file)
@@ -14,12 +14,8 @@ package org.scilab.modules.xcos.graph;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.io.File;
-import java.io.IOException;
 import java.util.logging.Logger;
 
-import org.scilab.modules.xcos.utils.FileUtils;
-
 import com.mxgraph.util.mxEventObject;
 import com.mxgraph.util.mxEventSource.mxIEventListener;
 
@@ -30,7 +26,6 @@ public class CompilationEngineStatus implements mxIEventListener, PropertyChange
     private static final Logger LOG = Logger.getLogger(CompilationEngineStatus.class.getName());
 
     private boolean compilationNeeded;
-    private File compilationData;
 
     /**
      * Default constructor.
@@ -57,93 +52,6 @@ public class CompilationEngineStatus implements mxIEventListener, PropertyChange
         return compilationNeeded;
     }
 
-    /**
-     * @param compilationData
-     *            the source and compiled diagram data
-     */
-    public void setCompilationData(File compilationData) {
-        this.compilationData = compilationData;
-
-        /*
-         * When the compiled data change, we remove the previous stored data.
-         */
-        if (compilationData != null) {
-            boolean status = compilationData.delete();
-            if (!status) {
-                LOG.warning("Unable to delete temp file");
-            }
-        }
-    }
-
-    /**
-     * @return the compilationData the source and compiled diagram data
-     */
-    public File getCompilationData() {
-        return compilationData;
-    }
-
-    /**
-     * Get the command used to store the simulated data out of the stack.
-     *
-     * @return the scilab command
-     */
-    public String getStoreSimulationDataCommand() {
-        final StringBuilder command = new StringBuilder();
-
-        /*
-         * Create a data file if needed
-         */
-        if (getCompilationData() == null || !getCompilationData().exists()) {
-            try {
-                setCompilationData(new File(FileUtils.createTempFile()));
-            } catch (IOException e) {
-                LOG.warning(e.toString());
-
-                /*
-                 * Restart compilation next time
-                 */
-                setCompilationNeeded(true);
-            }
-        }
-
-        /*
-         * Create the commands
-         */
-        command.append("path='" + getCompilationData().getAbsolutePath() + "'; ");
-        command.append("if and([exists('%cpr') exists('scs_m')]) <> %t then ");
-        command.append("  deletefile(path);");
-        command.append("else ");
-        command.append("  export_to_hdf5(path, '%cpr', 'scs_m'); ");
-        command.append("end ");
-
-        return command.toString();
-    }
-
-    /**
-     * Get the command used to load the simulated data into the stack.
-     *
-     * @return a Scilab command throws IllegalStateException when the file
-     *         cannot be loaded.
-     */
-    public String getLoadSimulationDataCommand() {
-        final StringBuilder command = new StringBuilder();
-
-        /*
-         * Check state
-         */
-        if (getCompilationData() == null || !getCompilationData().exists()) {
-            throw new IllegalStateException("compilation data doesn't exist.");
-        }
-
-        /*
-         * Create the commands
-         */
-        command.append("path = '" + getCompilationData().getAbsolutePath() + "' ; ");
-        command.append("import_from_hdf5(path); ");
-
-        return command.toString();
-    }
-
     /*
      * Property change listener
      */
index fbdbd53..a7f20b6 100644 (file)
@@ -39,7 +39,6 @@ import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.I
 import org.scilab.modules.commons.xml.ScilabTransformerFactory;
 import org.scilab.modules.xcos.graph.XcosDiagram;
 import org.scilab.modules.xcos.io.codec.XcosCodec;
-import org.scilab.modules.xcos.io.scicos.H5RWHandler;
 import org.scilab.modules.xcos.io.scicos.ScilabDirectHandler;
 import org.scilab.modules.xcos.io.spec.XcosPackage;
 import org.scilab.modules.xcos.utils.XcosMessages;
@@ -144,20 +143,6 @@ public enum XcosFileType {
         public void save(String file, XcosDiagram from) throws Exception {
             throw new UnsupportedOperationException();
         }
-    },
-    /**
-     * Represent the Scilab I/O format.
-     */
-    SOD("sod", XcosMessages.FILE_SOD) {
-        @Override
-        public void load(String file, XcosDiagram into) {
-            new H5RWHandler(file).readDiagram(into);
-        }
-
-        @Override
-        public void save(String file, XcosDiagram from) throws Exception {
-            throw new UnsupportedOperationException();
-        }
     };
 
     private static final String BEFORE_EXT = " (*.";
diff --git a/scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/H5RWHandler.java b/scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/H5RWHandler.java
deleted file mode 100644 (file)
index 6c6219b..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2010 - DIGITEO - 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.scicos;
-
-import java.io.File;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import ncsa.hdf.hdf5lib.exceptions.HDF5Exception;
-
-import org.scilab.modules.graph.utils.StyleMap;
-import org.scilab.modules.hdf5.read.H5Read;
-import org.scilab.modules.hdf5.write.H5Write;
-import org.scilab.modules.types.ScilabList;
-import org.scilab.modules.types.ScilabMList;
-import org.scilab.modules.types.ScilabString;
-import org.scilab.modules.types.ScilabType;
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.graph.XcosDiagram;
-import org.scilab.modules.xcos.io.scicos.ScicosFormatException.VersionMismatchException;
-import org.scilab.modules.xcos.utils.XcosMessages;
-
-/**
- * Implement useful methods to easily import or export Scicos data.
- */
-// CSOFF: ClassDataAbstractionCoupling
-public class H5RWHandler implements Handler {
-    private static final String CONTEXT = "context";
-    private static final String SCS_M = "scs_m";
-    private static final Logger LOG = Logger.getLogger(H5RWHandler.class.getName());
-
-    private final String h5File;
-
-    /**
-     * Constructor a new instance with a file.
-     *
-     * @param hdf5file
-     *            the file path.
-     */
-    public H5RWHandler(File hdf5file) {
-        h5File = hdf5file.getAbsolutePath();
-    }
-
-    /**
-     * Construct a new instance with the file path.
-     *
-     * @param hdf5file
-     *            the file path.
-     */
-    public H5RWHandler(String hdf5file) {
-        h5File = hdf5file;
-    }
-
-    /*
-     * Read methods
-     */
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.scilab.modules.xcos.io.scicos.RWHandler#readBlock()
-     */
-    @Override
-    public BasicBlock readBlock() throws ScicosFormatException {
-        return readBlock(null);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * org.scilab.modules.xcos.io.scicos.RWHandler#readBlock(org.scilab.modules
-     * .xcos.block.BasicBlock)
-     */
-    @Override
-    public BasicBlock readBlock(BasicBlock into) throws ScicosFormatException {
-        final ScilabMList data = new ScilabMList();
-        final BlockElement element = new BlockElement(null);
-        BasicBlock instance;
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("Reading block from " + h5File);
-        }
-
-        try {
-            int fileId = H5Read.openFile(h5File);
-            H5Read.readDataFromFile(fileId, data);
-            H5Read.closeFile(fileId);
-
-            instance = element.decode(data, into);
-            StyleMap style = new StyleMap(instance.getInterfaceFunctionName());
-            style.putAll(instance.getStyle());
-
-            instance.setStyle(style.toString());
-
-        } catch (HDF5Exception e) {
-            LOG.severe(e.toString());
-            instance = null;
-        }
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("End of reading block from " + h5File);
-        }
-
-        return instance;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.scilab.modules.xcos.io.scicos.RWHandler#readContext()
-     */
-    @Override
-    public Map<String, String> readContext() {
-        final ScilabList list = new ScilabList();
-        final Map<String, String> result = new LinkedHashMap<String, String>();
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("Reading context from " + h5File);
-        }
-
-        try {
-            int handle = H5Read.openFile(h5File);
-            if (handle >= 0) {
-                H5Read.readDataFromFile(handle, list);
-            }
-        } catch (HDF5Exception e) {
-            LOG.severe(e.toString());
-            return result;
-        }
-
-        // We are starting at 2 because a struct is composed of
-        // - the fields names (ScilabString)
-        // - the dimension
-        // - variables values...
-        for (int index = 2; index < list.size(); index++) {
-            String key = ((ScilabString) list.get(0)).getData()[0][index];
-            String value = list.get(index).toString();
-
-            result.put(key, value);
-        }
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("End of reading context from " + h5File);
-        }
-
-        return result;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.scilab.modules.xcos.io.scicos.RWHandler#readDiagram()
-     */
-    @Override
-    public XcosDiagram readDiagram() throws VersionMismatchException {
-        return readDiagram(null);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * org.scilab.modules.xcos.io.scicos.RWHandler#readDiagram(org.scilab.modules
-     * .xcos.graph.XcosDiagram)
-     */
-    @Override
-    public XcosDiagram readDiagram(XcosDiagram instance) {
-        final ScilabMList data = new ScilabMList();
-        final DiagramElement element = new DiagramElement();
-
-        XcosDiagram diagram;
-        if (instance == null) {
-            diagram = new XcosDiagram();
-        } else {
-            diagram = instance;
-        }
-
-        diagram.getModel().beginUpdate();
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("Reading diagram from " + h5File);
-        }
-
-        try {
-            int fileId = H5Read.openFile(h5File);
-
-            H5Read.readDataFromFile(fileId, data);
-            H5Read.closeFile(fileId);
-            element.decode(data, diagram);
-        } catch (ScicosFormatException e) {
-            if (e instanceof VersionMismatchException) {
-                /*
-                 * On version mismatch alert the user but the current instance
-                 * contains the partially decoded data so continue.
-                 */
-                diagram.error(XcosMessages.UNKNOW_VERSION + ((VersionMismatchException) e).getWrongVersion() + "\n" + XcosMessages.TRY_TO_CONTINUE);
-            } else {
-                // rethrow
-                throw new RuntimeException(e);
-            }
-        } catch (HDF5Exception e) {
-            throw new RuntimeException(e);
-        } catch (Throwable t) {
-            t.printStackTrace();
-        } finally {
-            diagram.getModel().endUpdate();
-        }
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("End of reading diagram from " + h5File);
-        }
-
-        return diagram;
-    }
-
-    /*
-     * Write methods
-     */
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * org.scilab.modules.xcos.io.scicos.RWHandler#writeBlock(org.scilab.modules
-     * .xcos.block.BasicBlock)
-     */
-    @Override
-    @Deprecated
-    public void writeBlock(BasicBlock block) {
-        final BlockElement element = new BlockElement(null);
-        final ScilabType data = element.encode(block, null);
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("Writing block to " + h5File);
-        }
-
-        try {
-            int fileId = H5Write.createFile(h5File);
-
-            H5Write.writeInDataSet(fileId, SCS_M, data);
-
-            H5Write.closeFile(fileId);
-        } catch (HDF5Exception e) {
-            LOG.severe(e.toString());
-        } catch (java.lang.NullPointerException e) {
-            LOG.severe(e.toString());
-            LOG.warning(data.toString());
-        } catch (java.lang.IndexOutOfBoundsException e) {
-            LOG.severe(e.toString());
-            LOG.warning(data.toString());
-        }
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("End of writing block to " + h5File);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * org.scilab.modules.xcos.io.scicos.RWHandler#writeContext(java.lang.String
-     * [])
-     */
-    @Override
-    @Deprecated
-    public void writeContext(String[] context) {
-        final ScilabString string = new ScilabString(context);
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("Writing context to " + h5File);
-        }
-
-        try {
-            int fileId = H5Write.createFile(h5File);
-
-            H5Write.writeInDataSet(fileId, CONTEXT, string);
-
-            H5Write.closeFile(fileId);
-        } catch (HDF5Exception e) {
-            LOG.severe(e.toString());
-        }
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("End of writing context to " + h5File);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see
-     * org.scilab.modules.xcos.io.scicos.RWHandler#writeDiagram(org.scilab.modules
-     * .xcos.graph.XcosDiagram)
-     */
-    @Override
-    @Deprecated
-    public void writeDiagram(XcosDiagram diagram) {
-        final DiagramElement element = new DiagramElement();
-        final ScilabType data = element.encode(diagram, null);
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("Writing diagram to " + h5File);
-        }
-
-        try {
-            int fileId = H5Write.createFile(h5File);
-
-            H5Write.writeInDataSet(fileId, SCS_M, data);
-
-            H5Write.closeFile(fileId);
-        } catch (HDF5Exception e) {
-            // important error which need a backtrace.
-            LOG.severe(e.toString());
-            e.printStackTrace();
-        } catch (java.lang.NullPointerException e) {
-            LOG.severe(e.toString());
-            LOG.warning(data.toString());
-        } catch (java.lang.IndexOutOfBoundsException e) {
-            LOG.severe(e.toString());
-            LOG.warning(data.toString());
-        }
-
-        if (LOG.isLoggable(Level.FINEST)) {
-            LOG.finest("End of writing diagram to " + h5File);
-        }
-    }
-}
-// CSON: ClassDataAbstractionCoupling
index 9086578..f057e27 100644 (file)
@@ -26,11 +26,10 @@ import java.util.logging.Logger;
 import javax.imageio.ImageIO;
 import javax.swing.SwingUtilities;
 
-import ncsa.hdf.hdf5lib.exceptions.HDF5Exception;
-
 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
 import org.scilab.modules.graph.utils.ScilabExported;
-import org.scilab.modules.hdf5.read.H5Read;
+import org.scilab.modules.javasci.JavasciException;
+import org.scilab.modules.javasci.Scilab;
 import org.scilab.modules.localization.Messages;
 import org.scilab.modules.types.ScilabTList;
 import org.scilab.modules.xcos.Xcos;
@@ -131,25 +130,19 @@ public final class Palette {
     /**
      * Load an xcos palette into the palette manager
      *
-     * @param path
-     *            full path to the scilab exported palette
+     * @param name
+     *            the scilab exported palette variable name
      * @param category
      *            TreePath of the palette
+     * @throws JavasciException
+     *             on invocation error
      */
     @ScilabExported(module = XCOS, filename = PALETTE_GIWS_XML)
-    public static void loadPal(final String path, final String[] category) {
+    public static void loadPal(final String name, final String[] category) throws JavasciException {
         /*
          * Import the palette
          */
-        final ScilabTList data = new ScilabTList();
-        final String file = new File(path).getAbsolutePath();
-        try {
-            final int fileId = H5Read.openFile(file);
-            H5Read.readDataFromFile(fileId, data);
-            H5Read.closeFile(fileId);
-        } catch (final HDF5Exception e) {
-            throw new RuntimeException(String.format(UNABLE_TO_IMPORT, file), e);
-        }
+        final ScilabTList data = (ScilabTList) Scilab.getInCurrentScilabSession(name);
 
         /*
          * handle shared data on the EDT thread
@@ -221,12 +214,14 @@ public final class Palette {
     /**
      * Load an xcos palette into the palette manager at the root category.
      *
-     * @param path
-     *            full path to the scilab exported palette
+     * @param name
+     *            the scilab exported palette variable name
+     * @throws JavasciException
+     *             on invocation error
      */
     @ScilabExported(module = XCOS, filename = PALETTE_GIWS_XML)
-    public static void loadPal(final String path) {
-        loadPal(path, null);
+    public static void loadPal(final String name) throws JavasciException {
+        loadPal(name, null);
     }
 
     /**
index ec87afd..7eb2a0c 100644 (file)
@@ -34,7 +34,7 @@ import org.scilab.modules.xcos.palette.model.VariablePath;
  * Decode a palette into a {@link PreLoaded} palette.
  */
 public class PreLoadedElement extends AbstractElement<PreLoaded> {
-    private static final List<String> DATA_FIELD_NAMES = asList("palette", "name", "blockNames", "blocks", "icons", "style");
+    private static final List<String> DATA_FIELD_NAMES = asList("palette", "name", "blockNames", "icons", "style");
 
     /** Mutable field to easily get the data through methods */
     private ScilabTList data;
@@ -99,9 +99,6 @@ public class PreLoadedElement extends AbstractElement<PreLoaded> {
         String[][] blockNames = ((ScilabString) data.get(field)).getData();
 
         field++;
-        String[][] blocks = ((ScilabString) data.get(field)).getData();
-
-        field++;
         String[][] icons = ((ScilabString) data.get(field)).getData();
 
         /*
@@ -196,19 +193,13 @@ public class PreLoadedElement extends AbstractElement<PreLoaded> {
             throw new WrongTypeException(DATA_FIELD_NAMES, field);
         }
 
-        // the fourth field must contains the block instance path (row column)
-        field++;
-        if (!(data.get(field) instanceof ScilabString) || data.get(field).getWidth() != 1) {
-            throw new WrongTypeException(DATA_FIELD_NAMES, field);
-        }
-
-        // the fifth field must contains the block icon path (row column)
+        // the fourth field must contains the block icon path (row column)
         field++;
         if (!(data.get(field) instanceof ScilabString) || data.get(field).getWidth() != 1) {
             throw new WrongTypeException(DATA_FIELD_NAMES, field);
         }
 
-        // the sixth field is handled by the StyleElement decoder.
+        // the fifth field is handled by the StyleElement decoder.
     }
 
     /**
index fbbd916..1904465 100644 (file)
@@ -39,8 +39,7 @@ import com.mxgraph.view.mxStylesheet;
  * Decode a palette into a {@link mxStylesheet}.
  */
 public class StyleElement extends AbstractElement<mxStylesheet> {
-    private static final List<String> DATA_FIELD_NAMES = asList("palette",
-            "name", "blockNames", "blocks", "icons", "style");
+    private static final List<String> DATA_FIELD_NAMES = asList("palette", "name", "blockNames", "icons", "style");
 
     /** Mutable field to easily get the data through methods */
     private ScilabTList data;
@@ -53,7 +52,7 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
 
     /**
      * Check if the element can be decoded by the current class.
-     * 
+     *
      * @param element
      *            the data
      * @return <code>false</code> if {@link #decode(ScilabType, mxStylesheet)}
@@ -71,7 +70,7 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
 
     /**
      * Decode the current element on the into argument.
-     * 
+     *
      * @param element
      *            the Scilab data
      * @param into
@@ -83,8 +82,7 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
      *      java.lang.Object)
      */
     @Override
-    public mxStylesheet decode(ScilabType element, mxStylesheet into)
-            throws ScicosFormatException {
+    public mxStylesheet decode(ScilabType element, mxStylesheet into) throws ScicosFormatException {
         data = (ScilabTList) element;
         final mxStylesheet styleSheet = into;
 
@@ -103,7 +101,6 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
 
         field++;
         field++;
-        field++;
         String[][] styles = ((ScilabString) data.get(field)).getData();
 
         /*
@@ -122,10 +119,7 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
                 /*
                  * Inherit attributes from the Icon style
                  */
-                final Map<String, Object> style = styleSheet.getCellStyle(
-                        styles[i][j],
-                        styleSheet.getCellStyle("Icon",
-                                styleSheet.getDefaultVertexStyle()));
+                final Map<String, Object> style = styleSheet.getCellStyle(styles[i][j], styleSheet.getCellStyle("Icon", styleSheet.getDefaultVertexStyle()));
 
                 /*
                  * Translate Paths to URLs and check validity
@@ -145,7 +139,7 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
 
     /**
      * Validate the path URI.
-     * 
+     *
      * @param url
      *            the path to validate
      * @return the non-null valid path
@@ -170,18 +164,17 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
         if (f.exists()) {
             return u.toString();
         } else {
-            throw new RuntimeException(String.format(
-                    XcosMessages.IMAGE_URL_DOESNT_EXIST, url));
+            throw new RuntimeException(String.format(XcosMessages.IMAGE_URL_DOESNT_EXIST, url));
         }
     }
 
     /**
      * Validate the current data.
-     * 
+     *
      * This method doesn't pass the metrics because it perform many test.
      * Therefore all these tests are trivial and the conditioned action only
      * throw an exception.
-     * 
+     *
      * @throws ScicosFormatException
      *             when there is a validation error.
      */
@@ -228,28 +221,23 @@ public class StyleElement extends AbstractElement<mxStylesheet> {
 
         // the third field must contains the block name (row column)
         field++;
-        if (!(data.get(field) instanceof ScilabString)
-                || data.get(field).getWidth() != 1) {
+        if (!(data.get(field) instanceof ScilabString) || data.get(field).getWidth() != 1) {
             throw new WrongTypeException(DATA_FIELD_NAMES, field);
         }
 
         // the fourth field is handled by the PreLoadedElement decoder
         field++;
 
-        // the fifth field is handled by the PreLoadedElement decoder
-        field++;
-
-        // the sixth field must contains a valid style
+        // the fifth field must contains a valid style
         field++;
-        if (!(data.get(field) instanceof ScilabString)
-                || data.get(field).getWidth() != 1) {
+        if (!(data.get(field) instanceof ScilabString) || data.get(field).getWidth() != 1) {
             throw new WrongTypeException(DATA_FIELD_NAMES, field);
         }
     }
 
     /**
      * Not used
-     * 
+     *
      * @param from
      *            Not used
      * @param element
index 7e358e8..73d2692 100644 (file)
@@ -24,10 +24,8 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
-import org.scilab.modules.commons.ScilabCommons;
 import org.scilab.modules.commons.ScilabConstants;
 import org.scilab.modules.commons.xml.ScilabDocumentBuilderFactory;
-import org.scilab.modules.xcos.io.XcosFileType;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
@@ -123,17 +121,6 @@ public final class FileUtils {
     }
 
     /**
-     * Create a temporary file with an h5 extension and return it
-     *
-     * @return a new unique temporary file.
-     * @throws IOException
-     *             when an error occurs
-     */
-    public static String createTempFile() throws IOException {
-        return ScilabCommons.createtempfilename("xcos", 1) + XcosFileType.SOD.getDottedExtension();
-    }
-
-    /**
      * Delete the file and log an error message if unable to do so.
      *
      * @param f
index 165eec0..d201f90 100644 (file)
@@ -159,7 +159,7 @@ throw GiwsException::JniMonitorException(getCurrentEnv(), "Palette");
 }
 // Method(s)
 
-void Palette::loadPal (JavaVM * jvm_, char const* path, char const* const* category, int categorySize){
+void Palette::loadPal (JavaVM * jvm_, char const* name, char const* const* category, int categorySize){
 
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
@@ -170,8 +170,8 @@ if (voidloadPaljstringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_Str
 throw GiwsException::JniMethodNotFoundException(curEnv, "loadPal");
 }
 
-jstring path_ = curEnv->NewStringUTF( path );
-if (path != NULL && path_ == NULL)
+jstring name_ = curEnv->NewStringUTF( name );
+if (name != NULL && name_ == NULL)
 {
 throw GiwsException::JniBadAllocException(curEnv);
 }
@@ -199,9 +199,9 @@ curEnv->SetObjectArrayElement( category_, i, TempString);
 // avoid keeping reference on to many strings
 curEnv->DeleteLocalRef(TempString);
 }
-                         curEnv->CallStaticVoidMethod(cls, voidloadPaljstringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID ,path_, category_);
+                         curEnv->CallStaticVoidMethod(cls, voidloadPaljstringjava_lang_StringjobjectArray_java_lang_Stringjava_lang_StringID ,name_, category_);
                         curEnv->DeleteLocalRef(stringArrayClass);
-curEnv->DeleteLocalRef(path_);
+curEnv->DeleteLocalRef(name_);
 curEnv->DeleteLocalRef(category_);
 curEnv->DeleteLocalRef(cls);
 if (curEnv->ExceptionCheck()) {
@@ -209,7 +209,7 @@ throw GiwsException::JniCallMethodException(curEnv);
 }
 }
 
-void Palette::loadPal (JavaVM * jvm_, char const* path){
+void Palette::loadPal (JavaVM * jvm_, char const* name){
 
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
@@ -220,15 +220,15 @@ if (voidloadPaljstringjava_lang_StringID == NULL) {
 throw GiwsException::JniMethodNotFoundException(curEnv, "loadPal");
 }
 
-jstring path_ = curEnv->NewStringUTF( path );
-if (path != NULL && path_ == NULL)
+jstring name_ = curEnv->NewStringUTF( name );
+if (name != NULL && name_ == NULL)
 {
 throw GiwsException::JniBadAllocException(curEnv);
 }
 
 
-                         curEnv->CallStaticVoidMethod(cls, voidloadPaljstringjava_lang_StringID ,path_);
-                        curEnv->DeleteLocalRef(path_);
+                         curEnv->CallStaticVoidMethod(cls, voidloadPaljstringjava_lang_StringID ,name_);
+                        curEnv->DeleteLocalRef(name_);
 curEnv->DeleteLocalRef(cls);
 if (curEnv->ExceptionCheck()) {
 throw GiwsException::JniCallMethodException(curEnv);
index ae0a4cf..a8e5d2d 100644 (file)
@@ -1,30 +1,30 @@
 <package name="org.scilab.modules.xcos.palette">
-  <object name="Palette">
-    <method name="loadPal" returnType="void" modifier="static">
-      <parameter name="path" type="String"/>
-      <parameter name="category" type="String[]"/>
-    </method>
-    <method name="loadPal" returnType="void" modifier="static">
-      <parameter name="path" type="String"/>
-    </method>
-    <method name="addCategory" returnType="void" modifier="static">
-      <parameter name="name" type="String[]"/>
-      <parameter name="visible" type="boolean"/>
-    </method>
-    <method name="remove" returnType="void" modifier="static">
-      <parameter name="name" type="String[]"/>
-    </method>
-    <method name="enable" returnType="void" modifier="static">
-      <parameter name="name" type="String[]"/>
-      <parameter name="status" type="boolean"/>
-    </method>
-    <method name="move" returnType="void" modifier="static">
-      <parameter name="source" type="String[]"/>
-      <parameter name="target" type="String[]"/>
-    </method>
-    <method name="generatePaletteIcon" returnType="void" modifier="static">
-      <parameter name="blockName" type="String"/>
-      <parameter name="iconPath" type="String"/>
-    </method>
-  </object>
+    <object name="Palette">
+        <method name="loadPal" returnType="void" modifier="static">
+            <parameter name="name" type="String"/>
+            <parameter name="category" type="String[]"/>
+        </method>
+        <method name="loadPal" returnType="void" modifier="static">
+            <parameter name="name" type="String"/>
+        </method>
+        <method name="addCategory" returnType="void" modifier="static">
+            <parameter name="name" type="String[]"/>
+            <parameter name="visible" type="boolean"/>
+        </method>
+        <method name="remove" returnType="void" modifier="static">
+            <parameter name="name" type="String[]"/>
+        </method>
+        <method name="enable" returnType="void" modifier="static">
+            <parameter name="name" type="String[]"/>
+            <parameter name="status" type="boolean"/>
+        </method>
+        <method name="move" returnType="void" modifier="static">
+            <parameter name="source" type="String[]"/>
+            <parameter name="target" type="String[]"/>
+        </method>
+        <method name="generatePaletteIcon" returnType="void" modifier="static">
+            <parameter name="blockName" type="String"/>
+            <parameter name="iconPath" type="String"/>
+        </method>
+    </object>
 </package>
index a4c5f35..b9cc0e1 100644 (file)
@@ -143,9 +143,9 @@ void synchronize();
 void endSynchronize();
 
 // Methods
-static void loadPal(JavaVM * jvm_, char const* path, char const* const* category, int categorySize);
+static void loadPal(JavaVM * jvm_, char const* name, char const* const* category, int categorySize);
 
-static void loadPal(JavaVM * jvm_, char const* path);
+static void loadPal(JavaVM * jvm_, char const* name);
 
 static void addCategory(JavaVM * jvm_, char const* const* name, int nameSize, bool visible);