e1ec2d94de41593b5ecfb663735aebcd2f78167c
[scilab.git] / scilab / modules / commons / src / java / org / scilab / modules / commons / ScilabCommonsUtils.java
1 /*
2  * Scilab (http://www.scilab.org/) - This file is part of Scilab
3  * Copyright (C) 2011 - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.commons;
14
15 import java.io.File;
16 import java.io.FileInputStream;
17 import java.io.FileOutputStream;
18 import java.io.IOException;
19 import java.lang.reflect.Method;
20 import java.math.BigInteger;
21 import java.security.MessageDigest;
22 import java.security.NoSuchAlgorithmException;
23
24 /**
25  * Basic utils
26  * @author Calixte DENIZET
27  */
28 public final class ScilabCommonsUtils {
29
30     private static final int BUFFERSIZE = 8192;
31     private static Thread scilabThread;
32
33     private static MessageDigest MD5;
34     static {
35         try {
36             MD5 = MessageDigest.getInstance("MD5");
37         } catch (NoSuchAlgorithmException e) {
38             System.err.println(e);
39             MD5 = null;
40         }
41     }
42
43     /**
44      * Get a MD5 string of the input string
45      * @param str the string to convert
46      * @return the MD5 representation of str
47      */
48     public static String getMD5(String str) {
49         if (MD5 == null) {
50             return null;
51         }
52
53         byte[] bytes = MD5.digest(str.getBytes());
54         return new BigInteger(1, bytes).toString(16);
55     }
56
57     /**
58      * Copy a file
59      * @param inFile src file
60      * @param outFile dest file
61      * @return true if the operation succeeded
62      */
63     public static boolean copyFile(File inFile, File outFile) {
64         FileInputStream in = null;
65         FileOutputStream out = null;
66         boolean success = false;
67
68         try {
69             in = new FileInputStream(inFile);
70             out = new FileOutputStream(outFile);
71             byte[] buffer = new byte[BUFFERSIZE];
72             int n;
73
74             while ((n = in.read(buffer)) != -1) {
75                 out.write(buffer, 0, n);
76             }
77             out.flush();
78             success = true;
79         } catch (IOException e) {
80             System.err.println("Error in copying file " + inFile.getAbsolutePath() + " to " + outFile.getAbsolutePath());
81             System.err.println(e);
82         } finally {
83             if (in != null) {
84                 try {
85                     in.close();
86                 } catch (IOException e) {
87                     System.err.println(e);
88                 }
89             }
90             if (out != null) {
91                 try {
92                     out.close();
93                 } catch (IOException e) {
94                     System.err.println(e);
95                 }
96             }
97         }
98
99         return success;
100     }
101
102     /**
103      * Load on use
104      * @param str the action
105      */
106     public static void loadOnUse(String str) {
107         try {
108             Class jvmLoadClassPathClass = Class.forName("org.scilab.modules.jvm.LoadClassPath");
109             Method loadOnUseMethod = jvmLoadClassPathClass.getDeclaredMethod("loadOnUse", new Class[] { String.class });
110             loadOnUseMethod.invoke(null, str);
111         } catch (java.lang.ClassNotFoundException ex) {
112             System.err.println("Could not find the Scilab class to load the export dependencies: " + ex);
113         } catch (java.lang.NoSuchMethodException ex) {
114             System.err.println("Could not find the Scilab method to load the export dependencies: " + ex);
115         } catch (java.lang.IllegalAccessException ex) {
116             System.err.println("Could not access to the Scilab method to load the export dependencies: " + ex);
117         } catch (java.lang.reflect.InvocationTargetException ex) {
118             System.err.println("Could not invoke the Scilab method to load the export dependencies: " + ex);
119         }
120     }
121
122     /**
123      * Set the scilab thread as the current thread
124      * Called from org.scilab.modules.core.Scilab::executeInitialHooks called itself
125      * in GetCommandLine.c just after the first display of the prompt.
126      */
127     public static void registerScilabThread() {
128         scilabThread = Thread.currentThread();
129     }
130
131     /**
132      * @return true if Thread.currentThread() is the main Scilab thread
133      */
134     public static boolean isScilabThread() {
135         return scilabThread != null && scilabThread == Thread.currentThread();
136     }
137 }