1 8 package com.mountainminds.eclemma.internal.core; 9 10 import java.util.ArrayList ; 11 import java.util.Iterator ; 12 import java.util.List ; 13 14 import org.eclipse.core.runtime.CoreException; 15 import org.eclipse.core.runtime.IProgressMonitor; 16 import org.eclipse.core.runtime.IStatus; 17 import org.eclipse.core.runtime.Platform; 18 import org.eclipse.core.runtime.Status; 19 import org.eclipse.core.runtime.jobs.Job; 20 import org.eclipse.osgi.util.NLS; 21 22 import com.mountainminds.eclemma.core.ICoverageSession; 23 import com.mountainminds.eclemma.core.ISessionListener; 24 import com.mountainminds.eclemma.core.ISessionManager; 25 import com.mountainminds.eclemma.core.analysis.IJavaCoverageListener; 26 import com.mountainminds.eclemma.core.analysis.IJavaModelCoverage; 27 import com.mountainminds.eclemma.internal.core.analysis.SessionAnalyzer; 28 29 37 public class JavaCoverageLoader { 38 39 private final ISessionManager sessionManager; 40 41 private ICoverageSession activeSession; 42 43 private IJavaModelCoverage coverage; 44 45 private final List listeners = new ArrayList (); 46 47 private ISessionListener sessionListener = new ISessionListener() { 48 49 public void sessionActivated(ICoverageSession session) { 50 activeSession = session; 51 Platform.getJobManager().cancel(LOADJOB); 53 if (session == null) { 54 coverage = null; 55 fireCoverageChanged(); 56 } else { 57 coverage = IJavaModelCoverage.LOADING; 58 fireCoverageChanged(); 59 new LoadSessionJob(activeSession).schedule(); 60 } 61 } 62 63 public void sessionAdded(ICoverageSession addedSession) { 64 } 65 66 public void sessionRemoved(ICoverageSession removedSession) { 67 } 68 69 }; 70 71 private static final Object LOADJOB = new Object (); 72 73 private class LoadSessionJob extends Job { 74 75 private final ICoverageSession session; 76 77 public LoadSessionJob(ICoverageSession session) { 78 super(NLS.bind(CoreMessages.AnalyzingCoverageSession_task, session.getDescription())); 79 this.session = session; 80 } 81 82 protected IStatus run(IProgressMonitor monitor) { 83 IJavaModelCoverage c; 84 try { 85 c = new SessionAnalyzer().processSession(session, monitor); 86 } catch (CoreException e) { 87 return e.getStatus(); 88 } 89 coverage = monitor.isCanceled() ? null : c; 90 fireCoverageChanged(); 91 return Status.OK_STATUS; 92 } 93 94 public boolean belongsTo(Object family) { 95 return family == LOADJOB; 96 } 97 98 }; 99 100 public JavaCoverageLoader(ISessionManager sessionManager) { 101 this.sessionManager = sessionManager; 102 sessionManager.addSessionListener(sessionListener); 103 } 104 105 public void addJavaCoverageListener(IJavaCoverageListener l) { 106 if (l == null) 107 throw new NullPointerException (); 108 if (!listeners.contains(l)) { 109 listeners.add(l); 110 } 111 } 112 113 public void removeJavaCoverageListener(IJavaCoverageListener l) { 114 listeners.remove(l); 115 } 116 117 protected void fireCoverageChanged() { 118 Iterator i = new ArrayList (listeners).iterator(); 120 while (i.hasNext()) { 121 ((IJavaCoverageListener) i.next()).coverageChanged(); 122 } 123 } 124 125 public IJavaModelCoverage getJavaModelCoverage() { 126 return coverage; 127 } 128 129 public void dispose() { 130 sessionManager.removeSessionListener(sessionListener); 131 } 132 133 } 134 | Popular Tags |