/* * This file is part of Applied Energistics 2. * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. * * Applied Energistics 2 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 3 of the License, or * (at your option) any later version. * * Applied Energistics 2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>. */ package appeng.services.export; import java.io.File; import java.util.List; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import net.minecraft.item.Item; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.ModContainer; import net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry; import net.minecraftforge.fml.common.registry.GameData; import appeng.core.AELog; /** * Main entry point for exporting the CSV file * * makes everything threadable * * @author thatsIch * @version rv3 - 14.08.2015 * @since rv3 14.08.2015 */ public class ExportProcess implements Runnable { private static final String FORCE_REFRESH_MESSAGE = "Force Refresh enabled. Will ignore cache and export CSV content."; private static final String CACHE_ENABLED_MESSAGE = "Cache is enabled. Checking for new mod configurations."; private static final String EQUAL_CONTENT_MESSAGE = "Same mod configuration was found. Not updating CSV content."; private static final String UNEQUAL_CONTENT_MESSAGE = "New mod configuration was found. Commencing exporting."; private static final String CACHE_DISABLED_MESSAGE = "Cache is disabled. Commencing exporting."; private static final String EXPORT_START_MESSAGE = "Item Exporting ( started )"; private static final String EXPORT_END_MESSAGE = "Item Exporting ( ended after %s ms)"; @Nonnull private final File exportDirectory; @Nonnull private final Checker<List<ModContainer>> modChecker; @Nonnull private final ExportConfig config; /** * @param exportDirectory directory where the final CSV file will be exported to * @param config configuration to manipulate the export process */ public ExportProcess( @Nonnull final File exportDirectory, @Nonnull final ExportConfig config ) { this.exportDirectory = Preconditions.checkNotNull( exportDirectory ); this.config = Preconditions.checkNotNull( config ); this.modChecker = new ModListChecker( config ); } /** * Will check and export if various config settings will lead to exporting the CSV file. */ @Override public void run() { // no priority to this thread Thread.yield(); // logic when to cancel the export process if( this.config.isForceRefreshEnabled() ) { AELog.info( FORCE_REFRESH_MESSAGE ); } else { if( this.config.isCacheEnabled() ) { AELog.info( CACHE_ENABLED_MESSAGE ); final Loader loader = Loader.instance(); final List<ModContainer> mods = loader.getActiveModList(); if( this.modChecker.isEqual( mods ) == CheckType.EQUAL ) { AELog.info( EQUAL_CONTENT_MESSAGE ); return; } else { AELog.info( UNEQUAL_CONTENT_MESSAGE ); } } else { AELog.info( CACHE_DISABLED_MESSAGE ); } } AELog.info( EXPORT_START_MESSAGE ); final Stopwatch watch = Stopwatch.createStarted(); final FMLControlledNamespacedRegistry<Item> itemRegistry = GameData.getItemRegistry(); final ExportMode mode = this.config.isAdditionalInformationEnabled() ? ExportMode.VERBOSE : ExportMode.MINIMAL; final Exporter exporter = new MinecraftItemCSVExporter( this.exportDirectory, itemRegistry, mode ); exporter.export(); AELog.info( EXPORT_END_MESSAGE, watch.elapsed( TimeUnit.MILLISECONDS ) ); } }