/* Copyright 2008-2010 Gephi Authors : Mathieu Bastian <mathieu.bastian@gephi.org> Website : http://www.gephi.org This file is part of Gephi. Gephi is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gephi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Gephi. If not, see <http://www.gnu.org/licenses/>. */ package org.gephi.branding.desktop.reporter; import java.awt.Dimension; import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * * @author Mathieu Bastian */ public class Report { private Date date; private Throwable throwable; private String summary = ""; private String userDescription = ""; private String userEmail = ""; //IDELog private String log = ""; //Version private String version = ""; //Screen private Dimension screenSize; private int screenDevices; //Arch private int numberOfProcessors; private String os = ""; //Memory private String heapMemoryUsage = ""; private String nonHeapMemoryUsage = ""; //Java private String vm = ""; //OpenGL private String glVendor = ""; private String glRenderer = ""; private String glVersion = ""; //Modules private List<String> enabledModules = new ArrayList<String>(); private List<String> disabledModules = new ArrayList<String>(); public Report() { Calendar cal = Calendar.getInstance(); date = cal.getTime(); } public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } public Throwable getThrowable() { return throwable; } public void setThrowable(Throwable throwable) { this.throwable = throwable; } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail; } public String getUserDescription() { return userDescription; } public void setUserDescription(String userDescription) { this.userDescription = userDescription; } public int getNumberOfProcessors() { return numberOfProcessors; } public void setNumberOfProcessors(int numberOfProcessors) { this.numberOfProcessors = numberOfProcessors; } public int getScreenDevices() { return screenDevices; } public void setScreenDevices(int screenDevices) { this.screenDevices = screenDevices; } public Dimension getScreenSize() { return screenSize; } public void setScreenSize(Dimension screenSize) { this.screenSize = screenSize; } public String getOs() { return os; } public void setOs(String os) { this.os = os; } public String getHeapMemoryUsage() { return heapMemoryUsage; } public void setHeapMemoryUsage(String heapMemoryUsage) { this.heapMemoryUsage = heapMemoryUsage; } public String getNonHeapMemoryUsage() { return nonHeapMemoryUsage; } public void setNonHeapMemoryUsage(String nonHeapMemoryUsage) { this.nonHeapMemoryUsage = nonHeapMemoryUsage; } public String getVm() { return vm; } public void setVm(String vm) { this.vm = vm; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getGlRenderer() { return glRenderer; } public void setGlRenderer(String glRenderer) { this.glRenderer = glRenderer; } public String getGlVendor() { return glVendor; } public void setGlVendor(String glVendor) { this.glVendor = glVendor; } public String getGlVersion() { return glVersion; } public void setGlVersion(String glVersion) { this.glVersion = glVersion; } public void addEnabledModule(String str) { enabledModules.add(str); } public void addDisabledModule(String str) { disabledModules.add(str); } public String getLog() { return log; } public void setLog(String log) { this.log = log; } public Element writeXml(Document document) { Element reportE = document.createElement("report"); reportE.setAttribute("version", "0.7"); //Date Element dateE = document.createElement("date"); //LastModifiedDate SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dateE.setTextContent(sdf.format(date)); dateE.appendChild(document.createComment("yyyy-MM-dd HH:mm:ss")); reportE.appendChild(dateE); //Exceptions Element exceptionsE = document.createElement("exceptions"); { Element exceptionE = document.createElement("exception"); //Summary Element titleE = document.createElement("title"); titleE.setTextContent(summary); exceptionE.appendChild(titleE); //Throwable Element throwableE = document.createElement("throwable"); if (throwable != null) { StringWriter wr = new StringWriter(); throwable.printStackTrace(new PrintWriter(wr, true)); throwableE.setTextContent(wr.toString()); } exceptionE.appendChild(throwableE); exceptionsE.appendChild(exceptionE); } reportE.appendChild(exceptionsE); //User description Element userDescriptionE = document.createElement("description"); userDescriptionE.setTextContent(userDescription); reportE.appendChild(userDescriptionE); //User email Element userEmailE = document.createElement("email"); userEmailE.setTextContent(userEmail); reportE.appendChild(userEmailE); //Version Element versionE = document.createElement("version"); versionE.setTextContent(version); reportE.appendChild(versionE); //VM Element vmE = document.createElement("vm"); vmE.setTextContent(vm); reportE.appendChild(vmE); //Os Element osE = document.createElement("os"); osE.setTextContent(os); reportE.appendChild(osE); //CPU Element cpuE = document.createElement("cpucount"); cpuE.setTextContent(String.valueOf(numberOfProcessors)); reportE.appendChild(cpuE); //GL Element glVendorE = document.createElement("glVendor"); glVendorE.setTextContent(glVendor); reportE.appendChild(glVendorE); Element glRendererE = document.createElement("glRenderer"); glRendererE.setTextContent(glRenderer); reportE.appendChild(glRendererE); Element glVersionE = document.createElement("glVersion"); glVersionE.setTextContent(glVersion); reportE.appendChild(glVersionE); //Heap Element heapE = document.createElement("heapmemory"); heapE.setTextContent(heapMemoryUsage); reportE.appendChild(heapE); //NonHeap Element nonHeapE = document.createElement("nonheapmemory"); nonHeapE.setTextContent(nonHeapMemoryUsage); reportE.appendChild(nonHeapE); //Screen size Element screenSizeE = document.createElement("screensize"); screenSizeE.setTextContent("width=" + screenSize.width + " height=" + screenSize.height); reportE.appendChild(screenSizeE); //Screen devices Element devicesE = document.createElement("screendevices"); devicesE.setTextContent(String.valueOf(screenDevices)); reportE.appendChild(devicesE); //Modules Element modulesE = document.createElement("modules"); for (String m : enabledModules) { Element enabledModuleE = document.createElement("enabledmodule"); enabledModuleE.setTextContent(m); modulesE.appendChild(enabledModuleE); } for (String m : disabledModules) { Element disabledModuleE = document.createElement("disabledmodule"); disabledModuleE.setTextContent(m); modulesE.appendChild(disabledModuleE); } reportE.appendChild(modulesE); //Log Element logE = document.createElement("log"); logE.setTextContent(log); reportE.appendChild(logE); document.appendChild(reportE); return reportE; } }