Xcos headless: display the right error message on headless 17/8717/2
Clément DAVID [Thu, 16 Aug 2012 13:23:42 +0000 (15:23 +0200)]
Change-Id: I115e5729bbc03690ee92c598594806739cb5eadb

scilab/modules/xcos/src/java/org/scilab/modules/xcos/Xcos.java

index c300b9a..6f768ce 100644 (file)
@@ -14,6 +14,7 @@
 package org.scilab.modules.xcos;
 
 import java.awt.Component;
+import java.awt.GraphicsEnvironment;
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
@@ -100,6 +101,7 @@ public final class Xcos {
     private static final List<String> MXGRAPH_VERSIONS = null;
     private static final List<String> BATIK_VERSIONS = Arrays.asList("1.7");
 
+    private static final String IS_HEADLESS = Messages.gettext("a graphical environnement is needed.");
     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_BATIK = Messages.gettext("Unable to load the Batik library. \nExpecting version %s ; Getting version %s .");
 
@@ -140,7 +142,7 @@ public final class Xcos {
 
     /**
      * Construct an Xcos instance.
-     * 
+     *
      * There must be only one Xcos instance per Scilab application
      */
     private Xcos(final XcosTabFactory factory) {
@@ -193,9 +195,9 @@ public final class Xcos {
 
     /**
      * Check the dependencies and the version dependencies.
-     * 
+     *
      * This method use runtime class loading to handle ClassNotFoundException.
-     * 
+     *
      * This method catch any exception and rethrow it with a well defined
      * message. Thus it doesn't pass the IllegalCatch metrics.
      */
@@ -204,6 +206,11 @@ public final class Xcos {
     private void checkDependencies() {
         final ClassLoader loader = ClassLoader.getSystemClassLoader();
 
+        /* Check not headless */
+        if (GraphicsEnvironment.isHeadless()) {
+            throw new RuntimeException(IS_HEADLESS);
+        }
+
         /* JGraphx */
         String mxGraphVersion = "";
         try {
@@ -277,7 +284,7 @@ public final class Xcos {
 
     /**
      * All Opened diagrams
-     * 
+     *
      * @return the opened diagrams list
      */
     public List<XcosDiagram> openedDiagrams() {
@@ -291,7 +298,7 @@ public final class Xcos {
 
     /**
      * Opened diagrams
-     * 
+     *
      * @param f
      *            the file
      * @return the opened diagrams list
@@ -309,7 +316,7 @@ public final class Xcos {
 
     /**
      * Check if the in memory file representation is modified
-     * 
+     *
      * @param f
      *            the file
      * @return is modified
@@ -333,10 +340,10 @@ public final class Xcos {
 
     /**
      * Open a file from it's filename.
-     * 
+     *
      * This method must be called on the EDT thread. For other use, please use
      * the {@link #xcos(String, String)} method.
-     * 
+     *
      * @param file
      *            the file to open. If null an empty diagram is created.
      * @param variable
@@ -441,7 +448,7 @@ public final class Xcos {
 
     /**
      * Log a loading error
-     * 
+     *
      * @param lastError
      *            the error description
      */
@@ -451,7 +458,7 @@ public final class Xcos {
 
     /**
      * Get an unmodifiable view of the diagrams for a specific file
-     * 
+     *
      * @param f
      *            the file
      * @return the diagram collection
@@ -467,7 +474,7 @@ public final class Xcos {
     /**
      * Add a diagram to the diagram list for a file. Be sure to set the right
      * opened status on the diagram before calling this method.
-     * 
+     *
      * @param f
      *            the file
      * @param diag
@@ -537,7 +544,7 @@ public final class Xcos {
 
     /**
      * Create a diagram collections (sorted List)
-     * 
+     *
      * @return the diagram collection
      */
     @SuppressWarnings("serial")
@@ -551,7 +558,7 @@ public final class Xcos {
             }
 
             @Override
-            public boolean addAll(Collection<? extends XcosDiagram> c) {
+            public boolean addAll(Collection <? extends XcosDiagram > c) {
                 final boolean status = super.addAll(c);
                 DiagramComparator.sort(this);
                 return status;
@@ -561,7 +568,7 @@ public final class Xcos {
 
     /**
      * Try to close the graph (popup save dialog)
-     * 
+     *
      * @param graph
      *            the graph to close
      * @return if we can (or not) close the graph
@@ -578,18 +585,18 @@ public final class Xcos {
 
         if (!canClose) {
             final AnswerOption ans = ScilabModalDialog.show(XcosTab.get(graph), XcosMessages.DIAGRAM_MODIFIED, XcosMessages.XCOS, IconType.QUESTION_ICON,
-                    ButtonType.YES_NO_CANCEL);
+                                     ButtonType.YES_NO_CANCEL);
 
             switch (ans) {
-            case YES_OPTION:
-                canClose = diagrams.get(f).iterator().next().saveDiagram();
-                break;
-            case NO_OPTION:
-                canClose = true; // can close
-                break;
-            default:
-                canClose = false; // operation canceled
-                break;
+                case YES_OPTION:
+                    canClose = diagrams.get(f).iterator().next().saveDiagram();
+                    break;
+                case NO_OPTION:
+                    canClose = true; // can close
+                    break;
+                default:
+                    canClose = false; // operation canceled
+                    break;
             }
         }
 
@@ -605,9 +612,9 @@ public final class Xcos {
 
     /**
      * Close a diagram.
-     * 
+     *
      * This method must be called on the EDT thread.
-     * 
+     *
      * @param graph
      *            the diagram to close
      */
@@ -646,7 +653,7 @@ public final class Xcos {
 
     /**
      * Does Xcos will close or not ?
-     * 
+     *
      * @param list
      *            the list to be closed
      * @return true if all files will be close on tabs close.
@@ -678,7 +685,7 @@ public final class Xcos {
 
     /**
      * Close the current xcos session.
-     * 
+     *
      * This method must be called on the EDT thread. For other use, please use
      * the {@link #closeXcosFromScilab()} method.
      */
@@ -728,22 +735,22 @@ public final class Xcos {
 
     /*
      * Scilab exported methods.
-     * 
+     *
      * All the following methods must use SwingUtilities method to assert that
      * the operations will be called on the EDT thread.
-     * 
+     *
      * @see modules/xcos/src/jni/Xcos.giws.xml
-     * 
+     *
      * @see sci_gateway/xcos_gateway.xml
-     * 
+     *
      * @see modules/xcos/sci_gateway/cpp/sci_*.cpp
      */
 
     /**
      * Main entry point
-     * 
+     *
      * This method invoke Xcos operation on the EDT thread.
-     * 
+     *
      * @param file
      *            The filename (can be null)
      * @param variable
@@ -787,7 +794,7 @@ public final class Xcos {
 
     /**
      * Close the current xcos session from any thread.
-     * 
+     *
      * This method invoke Xcos operation on the EDT thread. Please prefer using
      * {@link #closeSession()} when the caller is on the EDT thread.
      */
@@ -820,9 +827,9 @@ public final class Xcos {
     /**
      * Look in each diagram to find the block corresponding to the given uid and
      * display a warning message.
-     * 
+     *
      * This method invoke Xcos operation on the EDT thread.
-     * 
+     *
      * @param uid
      *            A String as UID.
      * @param message
@@ -994,9 +1001,9 @@ public final class Xcos {
 
     /**
      * This function convert a Xcos diagram to Scilab variable.
-     * 
+     *
      * This method invoke Xcos operation on the EDT thread.
-     * 
+     *
      * @param xcosFile
      *            The xcos diagram file
      * @return Not used (compatibility)
@@ -1058,7 +1065,7 @@ public final class Xcos {
 
     /**
      * Add a menu into xcos
-     * 
+     *
      * @param label
      *            the label to use
      * @param command
@@ -1104,9 +1111,9 @@ public final class Xcos {
 
     /**
      * Open a diagram by uid.
-     * 
+     *
      * This method invoke Xcos operation on the EDT thread.
-     * 
+     *
      * @param uid
      *            UID path to a block.
      */
@@ -1118,9 +1125,9 @@ public final class Xcos {
 
     /**
      * Close a diagram by uid.
-     * 
+     *
      * This method invoke Xcos operation on the EDT thread.
-     * 
+     *
      * @param uid
      *            The diagram id path
      */
@@ -1132,7 +1139,7 @@ public final class Xcos {
 
     /**
      * Look for the parent diagram of the cell in the diagram hierarchy.
-     * 
+     *
      * @param cell
      *            the cell to search for
      * @return the associated diagram
@@ -1187,7 +1194,7 @@ public final class Xcos {
 
         /**
          * Create/restore a tab for a given uuid
-         * 
+         *
          * @param uuid
          *            the specific uuid
          * @return the tab instance
@@ -1278,7 +1285,7 @@ public final class Xcos {
 
         /**
          * Cache the {@link DocumentType} for the specific uuid
-         * 
+         *
          * @param uuid
          *            the uuid
          */