BaseThreadDumpManager.java 3.37 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  org.apache.sling.commons.osgi.OsgiUtil
 *  org.osgi.service.component.ComponentContext
 */
package com.adobe.granite.threaddump.impl;

import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.util.Dictionary;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.sling.commons.osgi.OsgiUtil;
import org.osgi.service.component.ComponentContext;

abstract class BaseThreadDumpManager {
    private static final String THREADDUMPS_DIRECTORY_NAME = "threaddumps";
    private static final String CRX_WORKSPACE_DIRECTORY_NAME = "crx-quickstart";
    private static final String SLING_HOME_PROPERTY = "sling.home";
    private static final String USER_DIR_SYSTEM_PROPERTY = "user.dir";
    private static final int DEFAULT_BUFFER_SIZE = 1024;
    private File storingDirectory;

    BaseThreadDumpManager() {
    }

    protected void activate(ComponentContext context) {
        File userDir;
        Dictionary contextProperties = context.getProperties();
        String storingDirectoryName = OsgiUtil.toString(contextProperties.get("sling.home"), (String)null);
        File home = storingDirectoryName == null || storingDirectoryName.length() == 0 ? ("crx-quickstart".equals((userDir = new File(System.getProperty("user.dir"))).getName()) ? userDir : new File(userDir, "crx-quickstart")) : new File(storingDirectoryName);
        this.storingDirectory = new File(home, "threaddumps");
    }

    protected final File getStoringDirectory() {
        return this.storingDirectory;
    }

    protected static void addToZip(ZipOutputStream os, File base, File file) throws IOException {
        String name = base.toURI().relativize(file.toURI()).getPath();
        if (file.isDirectory()) {
            name = name.endsWith("/") ? name : name + "/";
        }
        ZipEntry entry = new ZipEntry(name);
        entry.setSize(file.length());
        os.putNextEntry(entry);
        if (file.isDirectory()) {
            for (File kid : file.listFiles()) {
                BaseThreadDumpManager.addToZip(os, base, kid);
            }
        } else {
            BaseThreadDumpManager.copyContent(file, os, false);
        }
        os.closeEntry();
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    protected static void copyContent(File source, OutputStream targetStream, boolean closeTargetStream) throws IOException {
        FileInputStream sourceStream = null;
        try {
            int bytesRead;
            sourceStream = new FileInputStream(source);
            byte[] buffer = new byte[1024];
            while ((bytesRead = sourceStream.read(buffer)) > 0) {
                targetStream.write(buffer, 0, bytesRead);
            }
            targetStream.flush();
        }
        finally {
            BaseThreadDumpManager.closeQuietly(sourceStream);
            if (closeTargetStream) {
                BaseThreadDumpManager.closeQuietly(targetStream);
            }
        }
    }

    protected static void closeQuietly(Closeable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            }
            catch (IOException e) {
                // empty catch block
            }
        }
    }
}