private SetMap<Class<? extends IdentifiableObject>, IdentifiableObject> handleProgram( SetMap<Class<? extends IdentifiableObject>, IdentifiableObject> metadata, Program program )
{
if ( program == null ) return metadata;
metadata.putValue( Program.class, program );
handleAttributes( metadata, program );
handleCategoryCombo( metadata, program.getCategoryCombo() );
handleDataEntryForm( metadata, program.getDataEntryForm() );
handleTrackedEntityType( metadata, program.getTrackedEntityType() );
program.getNotificationTemplates().forEach( template -> handleNotificationTemplate( metadata, template ) );
program.getProgramStages().forEach( programStage -> handleProgramStage( metadata, programStage ) );
program.getProgramAttributes().forEach( programTrackedEntityAttribute -> handleProgramTrackedEntityAttribute( metadata, programTrackedEntityAttribute ) );
program.getProgramIndicators().forEach( programIndicator -> handleProgramIndicator( metadata, programIndicator ) );
List<ProgramRule> programRules = programRuleService.getProgramRule( program );
List<ProgramRuleVariable> programRuleVariables = programRuleVariableService.getProgramRuleVariable( program );
programRules.forEach( programRule -> handleProgramRule( metadata, programRule ) );
programRuleVariables.forEach( programRuleVariable -> handleProgramRuleVariable( metadata, programRuleVariable ) );
return metadata;
}