package org.codehaus.mojo.cis.core;
import java.io.File;
import java.io.IOException;
/**
* Base implementation of {@link CisUtils} for deriving concrete
* implementations.
*/
public abstract class AbstractCisUtils implements CisUtils
{
private Long projectFileModified;
public boolean isUpToDate( Resource pSourceFile, Resource pTargetFile )
throws CisCoreException
{
return isUpToDate( pSourceFile, pTargetFile, false );
}
public boolean isUpToDate( Resource pSourceFile, Resource pTargetFile,
boolean pConsiderProjectFile )
throws CisCoreException
{
debug("isUpToDate: -> " + pSourceFile + ", " + pTargetFile + ", " + pConsiderProjectFile);
final long sourceModified;
final long targetModified;
try
{
sourceModified = pSourceFile.getModificationDate();
if ( sourceModified == -1 )
{
debug("isUpToDate: <- false (sourceModified = -1)");
return false;
}
targetModified = pTargetFile.getModificationDate();
if ( targetModified == -1 )
{
debug("isUpToDate: <- false (targetModified = -1)");
return false;
}
}
catch (IOException e)
{
throw new CisCoreException( e );
}
if ( sourceModified >= targetModified )
{
debug("isUpToDate: <- false (sourceModified >= targetModified)");
return false;
}
if ( !pConsiderProjectFile )
{
debug("isUpToDate: <- true (!considerProjectFile)");
return true;
}
final File f = getProjectFile();
if ( f == null )
{
debug("isUpToDate: <- true (projectFile = null)");
return true;
}
if ( projectFileModified == null )
{
projectFileModified = new Long( f.lastModified() );
}
long l = projectFileModified.longValue();
if ( l == -1 )
{
debug("isUpToDate: <- false (projectFileModified = -1)");
return false;
}
final boolean result = l < targetModified;
debug("isUpToDate: <- " + result);
return result;
}
public void makeDirOf( File pTargetFile )
throws CisCoreException
{
final File dir = pTargetFile.getParentFile();
if ( dir != null && !dir.isDirectory() && !dir.mkdirs() )
{
throw new CisCoreException( "Failed to create directory "
+ dir.getPath() );
}
}
}