00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030  
00031 package org.objectweb.proactive.ext.scilab.test;
00032 
00033 import java.io.File;
00034 import java.util.HashMap;
00035 import java.util.Vector;
00036 
00037 import javasci.SciData;
00038 import javasci.SciDoubleMatrix;
00039 
00040 import org.objectweb.proactive.ProActive;
00041 import org.objectweb.proactive.core.ProActiveException;
00042 import org.objectweb.proactive.core.node.Node;
00043 import org.objectweb.proactive.core.util.wrapper.BooleanWrapper;
00044 import org.objectweb.proactive.ext.scilab.SciDeployEngine;
00045 import org.objectweb.proactive.ext.scilab.SciEngine;
00046 import org.objectweb.proactive.ext.scilab.SciResult;
00047 import org.objectweb.proactive.ext.scilab.SciTask;
00048 import org.objectweb.proactive.filetransfer.FileTransfer;
00049 import org.objectweb.proactive.filetransfer.FileVector;
00050 
00051 
00052 public class SciTestLibrary {
00053     private HashMap mapEngine;
00054 
00055     public SciTestLibrary(String nameVN, String pathDescriptor,
00056         String[] arrayEngine, String localSource, String remoteDest)
00057         throws ProActiveException {
00058 
00059         
00060          mapEngine = SciDeployEngine.deploy(nameVN, pathDescriptor, arrayEngine);
00061 
00062           
00063           Vector<BooleanWrapper> listStateEngine = new Vector<BooleanWrapper>();
00064               for(int i=0; i<mapEngine.size(); i++){
00065                       listStateEngine.add(((SciEngine) mapEngine.get(arrayEngine[i])).activate());
00066               }
00067 
00068           ProActive.waitForAll(listStateEngine);
00069           
00070           Object[] arrayKey = mapEngine.keySet().toArray();
00071           try{
00072                   FileVector fv;
00073                   for(int i=0; i<arrayKey.length; i++){
00074                           Node node = SciDeployEngine.getEngineNode((String)arrayKey[i]);
00075                           System.out.println("Sending file to:"+node.getNodeInformation().getURL());
00076                           fv=FileTransfer.pushFile(node, new File(localSource), new File(remoteDest));
00077                           fv.waitForAll();
00078                   }
00079           }catch(Exception e){
00080                   System.out.println("Printing exception");
00081                   e.printStackTrace();
00082           }
00083 
00084 
00085           
00086           SciTask sciTaskEnv;
00087           SciEngine sciEngine;
00088           for(int i=0; i<arrayKey.length; i++){
00089                   sciTaskEnv = new SciTask("sciEnv" + arrayKey[i]);
00090                       sciTaskEnv.setJob("exec('" + remoteDest + "');");
00091                       sciEngine = (SciEngine) this.mapEngine.get(arrayKey[i]);
00092                       sciEngine.execute(sciTaskEnv);
00093           }
00094 
00095           
00096               SciTask sciTaskCallFun;
00097               SciResult sciResult;
00098               SciData dataIn;
00099               SciData dataOut;
00100               for(int i=0; i<arrayKey.length; i++){
00101                       sciTaskCallFun = new SciTask("sciCallFun" + arrayKey[i]);
00102                       dataIn = new SciDoubleMatrix("x", 1, 1, new double[]{i});
00103                       dataOut = new SciData("z");
00104                       sciTaskCallFun.addDataIn(dataIn);
00105                       sciTaskCallFun.addDataOut(dataOut);
00106                       sciTaskCallFun.setJob(dataOut.getName() + "= mult(" + dataIn.getName() + "," +  dataIn.getName() + ");");
00107                       sciEngine = (SciEngine) this.mapEngine.get(arrayKey[i]);
00108                       sciResult = sciEngine.execute(sciTaskCallFun);
00109                       System.out.println(sciResult.get(dataOut.getName()));
00110               }
00111               
00112               for(int i=0; i<arrayKey.length; i++){
00113                   sciEngine = (SciEngine) this.mapEngine.get(arrayKey[i]);
00114                         try{
00115                                 sciEngine.exit();
00116                         }catch(RuntimeException e ){
00117                         }
00118               }
00119               System.exit(0);
00120     }
00121 
00122     public static void main(String[] args) throws ProActiveException {
00123         if (args.length != 5) {
00124             System.out.println("Invalid number of parameter : " + args.length);
00125             return;
00126         }
00127 
00128         int nbEngine = Integer.parseInt(args[2]);
00129         String[] arrayId = new String[nbEngine];
00130 
00131         for (int i = 0; i < nbEngine; i++) {
00132             arrayId[i] = "Scilab" + i;
00133         }
00134 
00135         new SciTestLibrary(args[0], args[1], arrayId, args[3], args[4]);
00136     }
00137 }