class AbstractProgramMetadataToFhirPlanDefinitionTransformer extends AbstractReadOnlyDhisMetadataToTypedFhirTransformer<AccessibleScriptedDhisMetadata, F, ProgramMetadataRule> {

    protected boolean addSubjectResourceType( @Nonnull Program program, @Nonnull IBaseHasExtensions resource )
    {
        final FhirResourceType fhirResourceType = ProgramTrackedEntityTypeUtils.getTrackedEntityFhirResourceType(
            trackedEntityMetadataService, trackedEntityRuleRepository, program );

        ResourceTypeExtensionUtils.setValue( resource, fhirResourceType, getTypeFactory() );

        return program.getTrackedEntityTypeId() == null || fhirResourceType != null;
    }

    public  AbstractProgramMetadataToFhirPlanDefinitionTransformer( @Nonnull ScriptExecutor scriptExecutor, @Nonnull LockManager lockManager, @Nonnull SystemRepository systemRepository, @Nonnull FhirResourceRepository fhirResourceRepository,
        @Nonnull FhirDhisAssignmentRepository fhirDhisAssignmentRepository, @Nonnull OrganizationUnitService organizationUnitService,
        @Nonnull TrackedEntityMetadataService trackedEntityMetadataService, @Nonnull TrackedEntityRuleRepository trackedEntityRuleRepository );

}