class ProgramObjectBundleHook extends
    AbstractObjectBundleHook {

    @Override
    public <T extends IdentifiableObject> List<ErrorReport> validate( T object, ObjectBundle bundle )
    {
        List<ErrorReport> errors = new ArrayList<>();

        if ( !isProgram( object ) )
        {
            return errors;
        }

        Program program = (Program) object;

        if ( program.getId() != 0 && getProgramInstancesCount( program ) > 1 )
        {
            errors.add( new ErrorReport( Program.class, ErrorCode.E6000, program.getName() ) );
        }

        errors.addAll( validateAttributeSecurity( program, bundle ) );

        return errors;
    }

    public  ProgramObjectBundleHook( ProgramInstanceService programInstanceService, ProgramService programService,
        ProgramStageService programStageService, AclService aclService );

}