load a invalid file as palette does not add a empty palette
antoine ELIAS [Tue, 15 Dec 2009 09:09:35 +0000 (10:09 +0100)]
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/PaletteDiagram.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/XcosDiagram.java

index 28ff2fc..2907908 100644 (file)
@@ -50,7 +50,10 @@ public class PaletteDiagram extends XcosDiagram {
        //int windowHeight = getAsComponent().getHeight();
        
        if (theFile.exists()) {
-           transformAndLoadFile(theFile, true);
+           boolean loaded = transformAndLoadFile(theFile, true);
+           if(loaded == false) {
+               return false;
+           }
            setName(theFile.getName());
            setFileName(theFile.getAbsolutePath());
            getRubberBand().setEnabled(false);
index 448ff23..0dd2a0a 100644 (file)
@@ -32,6 +32,9 @@ import java.util.List;
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 
 import org.scilab.modules.graph.ScilabGraph;
 import org.scilab.modules.graph.actions.PasteAction;
@@ -94,6 +97,7 @@ import org.scilab.modules.xcos.utils.XcosEvent;
 import org.scilab.modules.xcos.utils.XcosFileType;
 import org.scilab.modules.xcos.utils.XcosMessages;
 import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
 
 import com.mxgraph.io.mxCodec;
 import com.mxgraph.model.mxCell;
@@ -1752,10 +1756,10 @@ public class XcosDiagram extends ScilabGraph {
      * Load a file with different method depending on it extension 
      * @param theFile File to load
      */
-    protected void transformAndLoadFile(File theFile, boolean wait) {
+    protected boolean transformAndLoadFile(File theFile, boolean wait) {
        final File fileToLoad = theFile;
        final XcosFileType filetype = XcosFileType.findFileType(fileToLoad);
-
+       boolean result = false;
 
        switch (filetype) {
        case COSF:
@@ -1763,7 +1767,7 @@ public class XcosDiagram extends ScilabGraph {
            if(wait) {
                File newFile;
                newFile = filetype.exportToHdf5(fileToLoad);
-               transformAndLoadFile(newFile, wait);
+               result = transformAndLoadFile(newFile, wait);
            } else {
                Thread transformAction = new Thread() {
                    public void run() {
@@ -1772,16 +1776,17 @@ public class XcosDiagram extends ScilabGraph {
                        transformAndLoadFile(newFile, false);
                    }
                };
-               transformAction.start();        
+               transformAction.start();
+               result = true;
            }
            break;
 
        case XCOS:
-           Document document = null;
-           try {
-               document = mxUtils.parse(mxUtils.readFile(theFile.getAbsolutePath()));
-           } catch (IOException e1) {
-               e1.printStackTrace();
+           
+           Document document = loadXcosDocument(theFile.getAbsolutePath());
+           if(document == null) {
+               XcosDialogs.couldNotLoadFile(this);
+               return false;
            }
 
            XcosCodec codec = new XcosCodec(document);
@@ -1804,20 +1809,39 @@ public class XcosDiagram extends ScilabGraph {
                XcosTab.showTabFromDiagram(xcosDiagram);
                xcosDiagram.generateUID();
            }
+           
+           result = true;
            break;
 
        case HDF5:
            openDiagram(BlockReader.readDiagramFromFile(fileToLoad.getAbsolutePath()));
            generateUID();
            setModified(false);
+           result = true;
            break;
 
        default:
            XcosDialogs.couldNotLoadFile(this);
            break;
        }
+       return result;
     }
 
+    static Document loadXcosDocument(String xcosFile) {
+       DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+       DocumentBuilder docBuilder;
+       try {
+           docBuilder = docBuilderFactory.newDocumentBuilder();
+           return docBuilder.parse(xcosFile);
+       } catch (ParserConfigurationException e) {
+           return null;
+       } catch (SAXException e) {
+           return null;
+       } catch (IOException e) {
+           return null;
+       }
+    }
+    
     public void generateUID() {
        for (int i = 0; i < getModel().getChildCount(getDefaultParent()); ++i) {
            if (getModel().getChildAt(getDefaultParent(), i) instanceof BasicBlock) {