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.util;
00032 
00033 import javasci.SciDoubleMatrix;
00034 
00035 import org.objectweb.proactive.ext.scilab.SciResult;
00036 import org.objectweb.proactive.ext.scilab.monitor.SciEvent;
00037 import org.objectweb.proactive.ext.scilab.monitor.SciEventListener;
00038 import org.objectweb.proactive.ext.scilab.monitor.SciTaskInfo;
00039 import org.objectweb.proactive.ext.scilab.monitor.ScilabService;
00040 
00046 public class MultEventListener implements SciEventListener{
00047         private FutureDoubleMatrix res;
00048         private ScilabService service;
00049         private int count;
00050         private double matrixResult[];
00051         private int nbTask;
00052         private int sizeSubMatrix;
00053         
00054         public MultEventListener(ScilabService service, FutureDoubleMatrix res){
00055                 this.service = service;
00056                 this.res = res;
00057                 this.nbTask = service.getNbEngine();
00058                 matrixResult = new double[res.getNbRow() * res.getNbCol()];
00059                 sizeSubMatrix = res.getNbRow() * res.getNbCol()/nbTask;
00060         }
00061         
00062         public void actionPerformed(SciEvent evt){
00063                 SciTaskInfo sciTaskInfo = (SciTaskInfo) evt.getSource();
00064                 if(sciTaskInfo.getState() != SciTaskInfo.SUCCEEDED){
00065                         if(sciTaskInfo.getState() == SciTaskInfo.ABORTED){
00066                                 System.out.println("---------------- Task:" + sciTaskInfo.getIdTask() + " ABORT -----------------");
00067                         }
00068                         return;
00069                 }
00070                 
00071                 System.out.println("IDTASK: " + sciTaskInfo.getIdTask() + " IDRES: " + res.getName());
00072                 if(!sciTaskInfo.getIdTask().startsWith(res.getName())){
00073                         return;
00074                 }
00075                 
00076                 service.removeTask(sciTaskInfo.getIdTask());
00077                 
00078                 System.out.println("---------------- Task:" + sciTaskInfo.getIdTask() +" SUCCESS -----------------");
00079                 
00080                 SciResult sciResult = sciTaskInfo.getSciResult();
00081                 
00082                 
00083                 SciDoubleMatrix sciSubMatrix = (SciDoubleMatrix) sciResult.getList().get(0);
00084                 int iTask = Integer.parseInt(sciSubMatrix.getName().substring(1));
00085                 double [] subMatrix = sciSubMatrix.getData();
00086                 
00087                 for(int i=0; i<sizeSubMatrix ; i++){
00088                         matrixResult[i + iTask * sizeSubMatrix] = subMatrix[i];
00089                 }
00090                 
00091                 count++;
00092         
00093                 if(count == nbTask){
00094                         res.set(matrixResult);
00095                         service.removeEventListenerEngine(this);
00096                 }
00097         }
00098 }