KickJava   Java API By Example, From Geeks To Geeks.

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


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: SessionExporter.java 185 2006-11-23 12:09:23Z mtnminds $
7  ******************************************************************************/

8 package com.mountainminds.eclemma.internal.core;
9
10 import java.io.File JavaDoc;
11 import java.io.IOException JavaDoc;
12 import java.util.ArrayList JavaDoc;
13 import java.util.List JavaDoc;
14 import java.util.Properties JavaDoc;
15
16 import org.eclipse.core.runtime.CoreException;
17 import org.eclipse.core.runtime.IPath;
18 import org.eclipse.core.runtime.IProgressMonitor;
19 import org.eclipse.core.runtime.SubProgressMonitor;
20 import org.eclipse.osgi.util.NLS;
21
22 import com.mountainminds.eclemma.core.EclEmmaStatus;
23 import com.mountainminds.eclemma.core.ICoverageSession;
24 import com.mountainminds.eclemma.core.IInstrumentation;
25 import com.mountainminds.eclemma.core.ISessionExporter;
26 import com.mountainminds.eclemma.core.ISourceLocation;
27 import com.vladium.emma.data.DataFactory;
28 import com.vladium.emma.data.ICoverageData;
29 import com.vladium.emma.data.IMergeable;
30 import com.vladium.emma.data.IMetaData;
31 import com.vladium.emma.data.ISessionData;
32 import com.vladium.emma.data.SessionData;
33 import com.vladium.emma.report.IReportProperties;
34 import com.vladium.emma.report.ReportProcessor;
35
36 /**
37  * Implementation of ISessionExporter.
38  *
39  * @author Marc R. Hoffmann
40  * @version $Revision: 185 $
41  */

42 public class SessionExporter implements ISessionExporter {
43
44   private static final String JavaDoc PROP_OUT_FILE = IReportProperties.PREFIX + IReportProperties.OUT_FILE;
45   
46   private final ICoverageSession session;
47   private int format;
48   private String JavaDoc destination;
49   private Properties JavaDoc options;
50
51   public SessionExporter(ICoverageSession session) {
52     this.session = session;
53   }
54
55   public void setFormat(int format) {
56     this.format = format;
57   }
58
59   public void setDestination(String JavaDoc filename) {
60     this.destination = filename;
61   }
62
63   public void setReportOptions(Properties JavaDoc options) {
64     this.options = options;
65   }
66
67   public void export(IProgressMonitor monitor) throws CoreException {
68     if (format == EMMA_FORMAT) {
69       createSessionFile(monitor);
70     } else {
71       createReport(monitor);
72     }
73   }
74
75   private void createReport(IProgressMonitor monitor) throws CoreException {
76     IInstrumentation[] instrs = session.getInstrumentations();
77     IPath[] coveragefiles = session.getCoverageDataFiles();
78     monitor.beginTask(NLS.bind(CoreMessages.ExportingSession_task, session.getDescription()),
79        instrs.length + coveragefiles.length + 1);
80     List JavaDoc datapath = new ArrayList JavaDoc();
81     List JavaDoc sourcepath = new ArrayList JavaDoc();
82     for (int i = 0; i < instrs.length; i++) {
83       if (instrs[i].getMetaDataFile().toFile().exists()) {
84         datapath.add(instrs[i].getMetaDataFile().toOSString());
85         if (format == HTML_FORMAT) {
86           ISourceLocation[] srcs = instrs[i].getClassFiles().getSourceLocations();
87           IProgressMonitor srcmonitor = new SubProgressMonitor(monitor, 1);
88           srcmonitor.beginTask("", srcs.length); //$NON-NLS-1$
89
for (int j = 0; j < srcs.length; j++) {
90             srcs[j].extract(new SubProgressMonitor(srcmonitor, 1));
91             sourcepath.add(srcs[j].getPath().toOSString());
92           }
93           srcmonitor.done();
94         } else {
95           monitor.worked(1);
96         }
97       } else {
98         monitor.worked(1);
99       }
100     }
101     for (int i = 0; i < coveragefiles.length; i++) {
102       datapath.add(coveragefiles[i].toOSString());
103       monitor.worked(1);
104     }
105     ReportProcessor processor = ReportProcessor.create();
106     processor.setDataPath((String JavaDoc[]) datapath.toArray(new String JavaDoc[0]));
107     processor.setSourcePath((String JavaDoc[]) sourcepath.toArray(new String JavaDoc[0]));
108     processor.setReportTypes(new String JavaDoc[] { DEFAULT_EXTENSIONS[format] });
109     Properties JavaDoc props = new Properties JavaDoc(options);
110     props.setProperty(PROP_OUT_FILE, destination);
111     processor.setPropertyOverrides(props);
112     processor.run();
113     monitor.done();
114   }
115
116   private void createSessionFile(IProgressMonitor monitor) throws CoreException {
117     IInstrumentation[] instrs = session.getInstrumentations();
118     IPath[] coveragefiles = session.getCoverageDataFiles();
119     monitor.beginTask(NLS.bind(CoreMessages.ExportingSession_task, session.getDescription()),
120       instrs.length + coveragefiles.length + 1);
121     IMergeable metadata = null;
122     for (int i = 0; i < instrs.length; i++) {
123       metadata = loadDataFile(metadata, DataFactory.TYPE_METADATA, instrs[i].getMetaDataFile());
124       monitor.worked(1);
125     }
126     IMergeable coveragedata = null;
127     for (int i = 0; i < coveragefiles.length; i++) {
128       coveragedata = loadDataFile(coveragedata, DataFactory.TYPE_COVERAGEDATA, coveragefiles[i]);
129       monitor.worked(1);
130     }
131     ISessionData sessiondata = new SessionData((IMetaData) metadata, (ICoverageData) coveragedata);
132     try {
133       DataFactory.persist(sessiondata, new File JavaDoc(destination), false);
134     } catch (IOException JavaDoc e) {
135       throw new CoreException(EclEmmaStatus.COVERAGEDATA_FILE_READ_ERROR
136           .getStatus(destination, e));
137     }
138     monitor.done();
139   }
140
141   private IMergeable loadDataFile(IMergeable data, int type, IPath path)
142       throws CoreException {
143     try {
144       File JavaDoc f = path.toFile();
145       if (f.exists()) {
146         IMergeable newdata = DataFactory.load(f)[type];
147         data = data == null ? newdata : data.merge(newdata);
148       }
149       return data;
150     } catch (IOException JavaDoc e) {
151       if (type == DataFactory.TYPE_COVERAGEDATA) {
152         throw new CoreException(EclEmmaStatus.COVERAGEDATA_FILE_READ_ERROR
153           .getStatus(path, e));
154       } else {
155         throw new CoreException(EclEmmaStatus.METADATA_FILE_READ_ERROR
156           .getStatus(path, e));
157       }
158     }
159   }
160
161 }
162
Popular Tags