de.chaosfisch.services.ExportPostProcessor.java Source code

Java tutorial

Introduction

Here is the source code for de.chaosfisch.services.ExportPostProcessor.java

Source

/*
 * Copyright (c) 2014 Dennis Fischer.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0+
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 *
 * Contributors: Dennis Fischer
 */

package de.chaosfisch.services;

import com.google.common.base.Charsets;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.inject.Inject;
import de.chaosfisch.google.account.Account;
import de.chaosfisch.google.youtube.upload.Upload;
import de.chaosfisch.google.youtube.upload.UploadPostProcessor;
import de.chaosfisch.uploader.ApplicationData;
import de.chaosfisch.util.DateTimeTypeConverter;
import org.apache.commons.configuration.Configuration;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class ExportPostProcessor implements UploadPostProcessor {
    private static final Logger LOGGER = LoggerFactory.getLogger(ExportPostProcessor.class);
    public static final String JSON_LOGFILES = "json_logfiles_export";

    @Inject
    private Configuration config;

    @Override
    public Upload process(final Upload upload) {
        if (!config.getBoolean(ExportPostProcessor.JSON_LOGFILES, false)) {
            return upload;
        }

        LOGGER.info("Running export postprocessor");
        final Gson gson = new GsonBuilder().setPrettyPrinting()
                .addSerializationExclusionStrategy(new ExclusionStrategy() {
                    @Override
                    public boolean shouldSkipField(final FieldAttributes f) {
                        return f.getDeclaringClass().isAssignableFrom(Account.class);
                    }

                    @Override
                    public boolean shouldSkipClass(final Class<?> clazz) {
                        return clazz.isAssignableFrom(Account.class);
                    }
                }).registerTypeAdapter(DateTime.class, new DateTimeTypeConverter()).serializeNulls().create();

        try {
            final Upload copy = gson.fromJson(gson.toJson(upload), Upload.class);

            try {
                Files.createDirectories(Paths.get(ApplicationData.DATA_DIR + "/uploads/"));
                Files.write(
                        Paths.get(String.format("%s/uploads/%s.json", ApplicationData.DATA_DIR, copy.getVideoid())),
                        gson.toJson(copy).getBytes(Charsets.UTF_8));
            } catch (final IOException e) {
                LOGGER.warn("Couldn't write json log.", e);
            }
            LOGGER.info("Finished export postprocessor");
        } catch (final Exception e) {
            e.printStackTrace();
        }

        return upload;
    }
}