1 8 package com.mountainminds.eclemma.internal.core; 9 10 import java.io.File ; 11 import java.io.FileInputStream ; 12 import java.io.FileOutputStream ; 13 import java.io.IOException ; 14 import java.io.InputStream ; 15 import java.io.OutputStream ; 16 17 import org.eclipse.core.runtime.CoreException; 18 import org.eclipse.core.runtime.IPath; 19 import org.eclipse.core.runtime.IProgressMonitor; 20 import org.eclipse.core.runtime.Path; 21 import org.eclipse.core.runtime.SubProgressMonitor; 22 23 import com.mountainminds.eclemma.core.CoverageTools; 24 import com.mountainminds.eclemma.core.EclEmmaStatus; 25 import com.mountainminds.eclemma.core.IClassFiles; 26 import com.mountainminds.eclemma.core.ICoverageSession; 27 import com.mountainminds.eclemma.core.IInstrumentation; 28 import com.mountainminds.eclemma.core.ISessionImporter; 29 30 36 public class SessionImporter implements ISessionImporter { 37 38 private String description; 39 private String coveragefile; 40 private IClassFiles[] classfiles; 41 private boolean copy; 42 43 public void setDescription(String description) { 44 this.description = description; 45 } 46 47 public void setCoverageFile(String file) { 48 this.coveragefile = file; 49 } 50 51 public void setClassFiles(IClassFiles[] classfiles) { 52 this.classfiles = classfiles; 53 } 54 55 public void setCopy(boolean copy) { 56 this.copy = copy; 57 } 58 59 public void importSession(IProgressMonitor monitor) throws CoreException { 60 monitor.beginTask(CoreMessages.ImportingSession_task, 2); 61 IInstrumentation[] instr = instrument(new SubProgressMonitor(monitor, 1)); 62 IPath[] cfiles = new IPath[1]; 63 cfiles[0] = createCopy(new SubProgressMonitor(monitor, 1)); 64 ICoverageSession s = CoverageTools.createCoverageSession(description, instr, cfiles, null); 65 CoverageTools.getSessionManager().addSession(s, true, null); 66 monitor.done(); 67 } 68 69 private IInstrumentation[] instrument(IProgressMonitor monitor) throws CoreException { 70 monitor.beginTask("", classfiles.length); IInstrumentation[] instr = new IInstrumentation[classfiles.length]; 72 for (int i = 0; i < classfiles.length; i++) { 73 instr[i] = classfiles[i].instrument(false, new SubProgressMonitor(monitor, 1)); 74 monitor.worked(1); 75 } 76 monitor.done(); 77 return instr; 78 } 79 80 private IPath createCopy(IProgressMonitor monitor) throws CoreException { 81 IPath file = new Path(coveragefile); 82 if (copy) { 83 file = EclEmmaCorePlugin.getInstance().getStateFiles().getImportSessionFile(file); 84 File source = new File (coveragefile); 85 monitor.beginTask("", (int) source.length()); byte[] buffer = new byte[0x1000]; 87 try { 88 InputStream in = new FileInputStream (source); 89 OutputStream out = new FileOutputStream (file.toFile()); 90 int l; 91 while ((l = in.read(buffer)) != -1) { 92 out.write(buffer, 0, l); 93 monitor.worked(l); 94 } 95 in.close(); 96 out.close(); 97 } catch (IOException e) { 98 throw new CoreException(EclEmmaStatus.IMPORT_ERROR.getStatus(e)); 99 } 100 } 101 monitor.done(); 102 return file; 103 } 104 105 } 106 | Popular Tags |