/******************************************************************************* * Copyright (c) 2005-2008 Polarion Software. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alexander Gurov - Initial API and implementation *******************************************************************************/ package org.eclipse.team.svn.ui.debugmail; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.util.Properties; import org.eclipse.core.runtime.IStatus; import org.eclipse.team.svn.core.extension.CoreExtensionsManager; import org.eclipse.team.svn.core.extension.factory.ISVNConnectorFactory; import org.eclipse.team.svn.ui.extension.factory.IReportingDescriptor; /** * Mail reporter. Should implement only mail sending (non-UI part) * * @author Alexander Gurov */ public class ReportPartsFactory { public static interface IStatusVisitor { public boolean visit(IStatus status); } public static boolean checkStatus(IStatus status, IStatusVisitor visitor) { if (!status.isMultiStatus()) { return visitor.visit(status); } IStatus []children = status.getChildren(); for (int i = 0; i < children.length; i++) { if (ReportPartsFactory.checkStatus(children[i], visitor)) { return true; } } return false; } public static String getStackTrace(IStatus operationStatus) { final String []stackTrace = new String[] {""}; //$NON-NLS-1$ ReportPartsFactory.checkStatus(operationStatus, new IStatusVisitor() { public boolean visit(IStatus status) { String trace = ReportPartsFactory.getOutput(status); stackTrace[0] += trace + "\n"; //$NON-NLS-1$ return false; } }); return stackTrace[0]; } public static String getOutput(IStatus status) { Throwable t = status.getException(); String message = ""; //$NON-NLS-1$ if (t != null) { ByteArrayOutputStream output = new ByteArrayOutputStream(); PrintWriter writer = new PrintWriter(output); try { t.printStackTrace(writer); } finally { writer.close(); } message = output.toString(); } return message; } public static String removeHTMLTags(String report) { report = report.replaceAll("", ""); //$NON-NLS-1$ //$NON-NLS-2$ report = report.replaceAll(" ", "\t"); //$NON-NLS-1$ //$NON-NLS-2$ report = report.replaceAll("", ""); //$NON-NLS-1$ //$NON-NLS-2$ report = report.replaceAll("", ""); //$NON-NLS-1$ //$NON-NLS-2$ report = report.replaceAll("", ""); //$NON-NLS-1$ //$NON-NLS-2$ report = report.replaceAll("
", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ return report; } public static String getStatusPart(IStatus status) { String retVal = ""; //$NON-NLS-1$ String []stackTraces = ReportPartsFactory.getStackTrace(status).split("\n\n"); //$NON-NLS-1$ for (int i = 0; i < stackTraces.length; i++) { int idx = stackTraces[i].indexOf('\n'); if (idx == -1) { retVal += stackTraces[i] + "

"; //$NON-NLS-1$ } else { retVal += "" + stackTraces[i].substring(0, idx) + "
" + stackTraces[i] + "

"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } retVal += "
"; //$NON-NLS-1$ return retVal; } public static String getReportIdPart(String id) { return "" + id + "

"; //$NON-NLS-1$ //$NON-NLS-2$ } public static String getProductPart(IReportingDescriptor provider) { return "Product: " + provider.getProductName() + "

"; //$NON-NLS-2$ } public static String getVersionPart(IReportingDescriptor provider) { return "Version: " + provider.getProductVersion() + "

"; //$NON-NLS-2$ } public static String getAuthorPart(String email, String name) { String author = (name != null ? name : "") + (email != null && email.trim().length() > 0 ? " <" + email + ">" : ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ author = author.trim().length() > 0 ? author : "[not specified]"; return "From: " + author + "

"; //$NON-NLS-2$ } public static String getUserCommentPart(String userComment) { userComment = (userComment != null && userComment.trim().length() > 0) ? userComment : "[empty]"; return "User comment:
" + userComment + "

"; //$NON-NLS-2$ } public static String getSVNClientPart() { ISVNConnectorFactory factory = CoreExtensionsManager.instance().getSVNConnectorFactory(); return "SVN Client: " + factory.getId() + " " + factory.getVersion() + " " + factory.getClientVersion() + "

"; //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } public static String getJVMPropertiesPart() { Properties props = (Properties)System.getProperties().clone(); props.remove("org.osgi.framework.system.packages"); //$NON-NLS-1$ props.remove("sun.boot.class.path"); //$NON-NLS-1$ props.remove("osgi.bundles"); //$NON-NLS-1$ return "JVM Properties:
" + props.toString().replace('\n', ' ') + "

"; //$NON-NLS-2$ } }