/* * 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; } }