private boolean reachBlockerByMaxGeneric(keyMap key, int maxReach,int max,int option) {
        if(mapReachBlockerByMaxDate.size() >= intMaxMapSize){
           mapReachBlockerByMaxDate.clear();
        }
        if (mapReachBlockerByMaxDate.containsKey(key)) {
            long elapsedTime  = 0;
            switch (option) {
                case 0:
                    elapsedTime = DateRange.elapsedTimeBtwDatesSeconds(mapReachBlockerByMaxDate.get(key).elapsedDate, new Date());
                    break;
                case 1:
                    elapsedTime = DateRange.elapsedTimeBtwDatesMinutes(mapReachBlockerByMaxDate.get(key).elapsedDate, new Date())+1;
                    break;
                case 2:
                    elapsedTime = DateRange.elapsedTimeBtwDatesHours(mapReachBlockerByMaxDate.get(key).elapsedDate, new Date())+1;
                    break;
                case 3:
                    elapsedTime = DateRange.elapsedTimeBtwDatesDays(mapReachBlockerByMaxDate.get(key).elapsedDate, new Date())+1;
                    break;
                default:
                    elapsedTime = DateRange.elapsedTimeBtwDatesDays(mapReachBlockerByMaxDate.get(key).elapsedDate, new Date())+1;
            }
            
            if ( elapsedTime <= max) {
                if (mapReachBlockerByMaxDate.get(key).reach < maxReach) {
                                ++ mapReachBlockerByMaxDate.get(key).reach;
                    return true;
                } else {
                    System.out.println("reach the limit dude .....................");
                    return false;
                }

            } else {
                mapReachBlockerByMaxDate.put(key, new Obj4Map(1, new Date()));
//                System.out.println("elapse time expired .....................");
                return  true;
            }
        } else {    
            mapReachBlockerByMaxDate.put(key, new Obj4Map(1, new Date()));
            return true;
        }

    }