Applied-Energistics-2-tiler.../src/main/java/appeng/services/export/ModListChecker.java

93 lines
2.7 KiB
Java
Raw Normal View History

/*
* 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.util.List;
import javax.annotation.Nonnull;
import com.google.common.base.Preconditions;
import org.apache.commons.codec.digest.DigestUtils;
import cpw.mods.fml.common.ModContainer;
/**
* Checks the cached digest against the current mods including their versions.
* Use the config to manipulate the process
*
* @author thatsIch
* @version rv3 - 01.09.2015
* @since rv3 - 01.09.2015
*/
final class ModListChecker implements Checker<List<ModContainer>>
{
private final String configHashValue;
@Nonnull
private final ExportConfig config;
/**
* @param config uses the config to retrieve the old hash of the mod list
*/
ModListChecker( @Nonnull final ExportConfig config )
{
this.config = Preconditions.checkNotNull( config );
this.configHashValue = Preconditions.checkNotNull( config.getCache() );
}
/**
* Compiles a list of all mods and their versions to a digest which is updated, if it differs from the config. This is used to elevate the need to export
* the csv once again, if no change was detected.
*
* @param modContainers all mods and their versions to check if a difference exists between the current instance and the previous instance
*
* @return CheckType.EQUAL if no change was detected
*/
@Nonnull
@Override
public CheckType isEqual( @Nonnull final List<ModContainer> modContainers )
{
Preconditions.checkNotNull( modContainers );
final StringBuilder builder = new StringBuilder();
for( final ModContainer container : modContainers )
{
builder.append( container.getModId() );
builder.append( container.getVersion() );
}
final String allModsAndVersions = builder.toString();
final String hex = DigestUtils.md5Hex( allModsAndVersions );
if( hex.equals( this.configHashValue ) )
{
return CheckType.EQUAL;
}
else
{
this.config.setCache( hex );
return CheckType.UNEQUAL;
}
}
}