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; }