org.ejbca.core.model.log.CsvLogExporter.java Source code

Java tutorial

Introduction

Here is the source code for org.ejbca.core.model.log.CsvLogExporter.java

Source

/*************************************************************************
 *                                                                       *
 *  EJBCA: The OpenSource Certificate Authority                          *
 *                                                                       *
 *  This software is free software; you can redistribute it and/or       *
 *  modify it under the terms of the GNU Lesser General Public           *
 *  License as published by the Free Software Foundation; either         *
 *  version 2.1 of the License, or any later version.                    *
 *                                                                       *
 *  See terms of license at gnu.org.                                     *
 *                                                                       *
 *************************************************************************/

package org.ejbca.core.model.log;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.ejbca.core.ejb.ca.caadmin.CAAdminSession;
import org.ejbca.core.model.ca.caadmin.CADoesntExistsException;
import org.ejbca.core.model.ca.caadmin.extendedcaservices.CmsCAServiceRequest;
import org.ejbca.core.model.ca.caadmin.extendedcaservices.CmsCAServiceResponse;
import org.ejbca.core.model.ca.caadmin.extendedcaservices.ExtendedCAServiceNotActiveException;
import org.ejbca.core.model.ca.caadmin.extendedcaservices.ExtendedCAServiceRequestException;
import org.ejbca.core.model.ca.caadmin.extendedcaservices.IllegalExtendedCAServiceRequestException;
import org.ejbca.core.model.util.EjbLocalHelper;

/**
 * Exports a collection of log entries as, optionally signed, Comma Separated Values (CSV).
 * 
 * Depends on CAAdminSession for use of a CA's extended CMS service.
 * 
 * @version $Id: CsvLogExporter.java 11918 2011-05-06 12:41:00Z jeklund $
 */
public class CsvLogExporter implements ILogExporter {

    private static final long serialVersionUID = 1L;
    private static final Logger log = Logger.getLogger(CsvLogExporter.class);

    private String signingCA = null;

    public CsvLogExporter(final String signingCA) {
        this.signingCA = signingCA;
    }

    /** @see org.ejbca.core.model.log.ILogExporter */
    @Override
    public byte[] export(final Admin admin, final Collection<LogEntry> logentries) throws Exception {
        log.trace(">export");
        byte[] ret = null;
        if (logentries != null) {
            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
            final PrintWriter pw = new PrintWriter(baos);
            try {
                for (final LogEntry next : logentries) {
                    pw.print(next.getTime());
                    pw.print("\t");
                    pw.print(next.getAdminType());
                    pw.print("\t");
                    pw.print(next.getAdminData());
                    pw.print("\t");
                    pw.print(next.getCAId());
                    pw.print("\t");
                    pw.print(next.getModule());
                    pw.print("\t");
                    pw.print(next.getEvent());
                    pw.print("\t");
                    pw.print(next.getEventName());
                    pw.print("\t");
                    pw.print(next.getUsername());
                    pw.print("\t");
                    pw.print(next.getCertificateSNR());
                    pw.print("\t");
                    pw.print(next.getComment());
                    pw.print("\n");
                }
                pw.close();
                if (baos.size() > 0) {
                    ret = baos.toByteArray();
                }
            } finally {
                try {
                    pw.close();
                    baos.close();
                } catch (IOException e) {
                    log.error("Error closing ByteArrayOutputStream: ", e);
                }
            }
        }
        // Sign the result if we have a signing CA
        if (log.isDebugEnabled()) {
            log.debug("Signing CA is '" + signingCA + "'");
        }
        if (ret != null && StringUtils.isNotEmpty(signingCA)) {
            try {
                final int caid = Integer.parseInt(signingCA);
                final CmsCAServiceRequest request = new CmsCAServiceRequest(ret, CmsCAServiceRequest.MODE_SIGN);
                final CAAdminSession caAdminSession = new EjbLocalHelper().getCaAdminSession();
                final CmsCAServiceResponse resp = (CmsCAServiceResponse) caAdminSession.extendedService(admin, caid,
                        request);
                ret = resp.getCmsDocument();
            } catch (IllegalExtendedCAServiceRequestException e) {
                log.error("Bad CA service", e);
            } catch (CADoesntExistsException e) {
                log.error("Bad CA", e);
            } catch (ExtendedCAServiceRequestException e) {
                log.error("", e);
            } catch (ExtendedCAServiceNotActiveException e) {
                throw e;
            }
        }
        if (log.isTraceEnabled()) {
            int no = 0;
            if (logentries != null) {
                no = logentries.size();
            }
            log.trace("<export: " + no + " entries");
        }
        return ret;
    }
}