KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mountainminds > eclemma > internal > core > JavaCoverageLoader


1 /*******************************************************************************
2  * Copyright (c) 2006 Mountainminds GmbH & Co. KG
3  * This software is provided under the terms of the Eclipse Public License v1.0
4  * See http://www.eclipse.org/legal/epl-v10.html.
5  *
6  * $Id: JavaCoverageLoader.java 199 2006-12-18 14:49:40Z mtnminds $
7  ******************************************************************************/

8 package com.mountainminds.eclemma.internal.core;
9
10 import java.util.ArrayList JavaDoc;
11 import java.util.Iterator JavaDoc;
12 import java.util.List JavaDoc;
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 /**
30  * Internal utility class that loads the coverage data asynchronously, holds the
31  * current {@link IJavaModelCoverage} object and sends out events in case of
32  * changed coverage information.
33  *
34  * @author Marc R. Hoffmann
35  * @version $Revision: 199 $
36  */

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 JavaDoc listeners = new ArrayList JavaDoc();
46
47   private ISessionListener sessionListener = new ISessionListener() {
48
49     public void sessionActivated(ICoverageSession session) {
50       activeSession = session;
51       // TODO Looks like this has no effect
52
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 JavaDoc LOADJOB = new Object JavaDoc();
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 JavaDoc 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 JavaDoc();
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     // avoid concurrent modification issues
119
Iterator JavaDoc i = new ArrayList JavaDoc(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