* against any CodeWriter options that are files, if found.
* Return true if uptodate.
*/
private boolean checkUpToDate( Template pTemplate ) {
PropertySet tmps = pTemplate.getMergedPropertySet();
// assume not uptodate
boolean uptodate = false;
try {
TemplatePath tp = pTemplate.getTemplatePath();
// some properties force regenerate
if( tmps.isYes( Property.main_CompileCodeWriter )
|| tmps.isYes( Property.main_ExecuteCodeWriter )
|| tmps.isNo( Property.main_EnableMeta ) ) {
uptodate = false;
iUserMessageHandler.debug( "Not uptodate:",
Property.main_CompileCodeWriter+":"+tmps.get( Property.main_CompileCodeWriter )
+ " " + Property.main_ExecuteCodeWriter+":"+tmps.get( Property.main_ExecuteCodeWriter )
+ " " + Property.main_EnableMeta+":"+tmps.get( Property.main_EnableMeta ) );
}
// check meta data
else {
PropertySet meta = null;
boolean proceed = true;
// load meta data
if( proceed ) {
try {
meta = MetaUtil.loadMetaData( pTemplate );
}
catch( ProcessException te ) {
if( ProcessException.CODE_load_meta == te.getCode() ) {
// meta data could not be loaded - not an error
}
else {
ErrorUtil.nonFatalMsg( te.getMessage() );
}
uptodate = false;
iUserMessageHandler.debug( "Not uptodate:", "unable to read meta data from previous generate." );
proceed = false;
}
}
// if template properties are different, regenerate
if( proceed ) {
// FIX: props from template only
String ctmps = Tools.normaliseTemplatePropertySet( pTemplate.getPropertySet( Constants.CONF_template ) );
String mtmps = meta.get( Property.jostraca_template_properties );
t.track( "current template ps", ctmps );
t.track( "prev template ps", mtmps );
if( !ctmps.equals( mtmps ) ) {
iUserMessageHandler.debug( "Not uptodate:", "template properties were different from previous generate." );
uptodate = false;
proceed = false;
//System.out.println( "ctmps:["+ctmps+"]" );
//System.out.println( "mtmps:["+mtmps+"]" );
}
}
// if cmd line is different, regenerate
if( proceed ) {
String co = normaliseCmdLine( tmps.get( Property.main_CodeWriterOptions ) );
String mco = normaliseCmdLine( meta.get( Property.main_CodeWriterOptions ) );
t.track( "cmd line", co );
t.track( "prev cmd line", mco );
if( !co.equals( mco ) ) {
iUserMessageHandler.debug( "Not uptodate:", "command line was different from previous generate." );
uptodate = false;
proceed = false;
}
}
// test resource files
if( proceed ) {
RootBuildResource rbr = new RootBuildResource();
String[] generatedFiles = meta.getList( Property.jostraca_GeneratedFiles, Standard.COMMA );
int numGF = generatedFiles.length;
// this assumes that we actually want to generate files, not just compile the template
// however, the CodeBuilder should ensure that no unnecessary compilation is done in any case
// this logic will probably cause unnecessary reparsing of the template, but it's good to err
// on the side of regenerating to avoid false negatives
if( 0 == numGF ) {
iUserMessageHandler.debug( "Not uptodate:", "no files generated previously." );
uptodate = false;
}
// there were previously generated files, so we can test the resources against them for uptodateness
else {
String[] tm_resourceFiles = meta.getList( Property.jostraca_FileBuildResources, Standard.COMMA );
int num_tmRF = tm_resourceFiles.length;
File[] cmd_resourceFiles = parseResourceFiles( tmps.get( Property.main_CodeWriterOptions ),
tmps.get( Property.main_WorkFolder ) );
int num_cmdRF = cmd_resourceFiles.length;