1. Java / Говнокод #8613

    +80

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    private static final char DELIM = '_';
    
    public String createDocName() {
        ...
        final String sDelim = Character.toString(DELIM);
        String res = stringWithDelimiter(docType) + stringWithDelimiter(docNumber) + stringWithDelimiter(docDate) + stringWithDelimiter(documentReceiptDate);
        res = res.length() < sDelim.length() ? "" : res.substring(0, res.length() - sDelim.length());
        res = res.replace(sDelim + sDelim + sDelim, sDelim);
        res = res.replace(sDelim + sDelim, sDelim);
    
        if (res.charAt(0) == DELIM)
          res = res.substring(1);
    
        if (res.charAt(res.length() - 1) == DELIM)
          res.substring(0, res.length() - sDelim.length());
        
        return res;
    }
    private String stringWithDelimiter(Object o) {
        final String sDelim = Character.toString(DELIM);
        String s = (String) o;
        return StringUtils.isNotEmpty(s) ? s + sDelim : sDelim;
    }

    метод createDocName должен из нескольких полей документа составить имя документа, используя в качестве разделителя "_".
    Сначала я не мог предположить что делает этот код, но подсказал коллега по работе:
    потензицально, вызов String res = stringWithDelimiter(docType) + stringWithDelimiter(docNumber) + stringWithDelimiter(docDate) + stringWithDelimiter(documentReceiptDate) ; может давать запись например такую: "docType___" - в случае если docNumber, docDate и documentReceiptDate будут пустыми строками (а можно получить и "___documentReceiptDate".
    НО, предусмотрительный разработчик позаботился об это проблеме!
    Он заменяет, "___" и "__" с помощью:
    res = res.replace(sDelim + sDelim + sDelim, sDelim);
    res = res.replace(sDelim + sDelim, sDelim);
    Затем удаляет знаки подчеркиваний в начале и в конце строки:
    if (res.charAt(0) == DELIM)
    res = res.substring(1);
    if (res.charAt(res.length() - 1) == DELIM)
    res.substring(0, res.length() - sDelim.length());

    Отличное решение, можно было бы конечно переписать метод stringWithDelimiter, чтобы он не дописывал "_" для пустых строк, но это ведь не так круто правда? Жаль только что придется этот класный код снова переписывать если вдруг измениться число параметров, или поменяется разделитель...

    LexeY4eg, 23 Ноября 2011

    Комментарии (0)
  2. Java / Говнокод #8610

    +81

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Date date = (Date)value.getParam("DocReceiptDate");
        if (date.getHours() == 24) {
          date.setHours(0);
        }
        String documentReceiptDate = (new SimpleDateFormat("dd.MM.yyyy.kk.mm")).format(date);

    Элегантная попытка форматирования даты.
    Задача было вместо 24 часов писать 00, например не "24.11.2011.24.23", а "24.11.2011.00.23".
    Как все уже догадались, следовало просто использовать формат "dd.MM.yyyy.HH.mm".

    LexeY4eg, 23 Ноября 2011

    Комментарии (1)
  3. Java / Говнокод #8593

    +80

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Calendar startCal = Calendar.getInstance();
    startCal.setTime(DateUtils.truncateDateAndTimeToDateOnly(startDate));
    Date strtDt = startCal.getTime();
    
    Calendar endCal = Calendar.getInstance();
    endCal.setTime(DateUtils.truncateDateAndTimeToDateOnly(endDate));
    Date endDt = endCal.getTime();

    Далее по тексту strtDt и endDt используются ровно один раз, startCal и endCal не используются больше вообще. Утилитный метод возвращает требуемый экземпляр класса Date.

    roman-kashitsyn, 21 Ноября 2011

    Комментарии (27)
  4. Java / Говнокод #8582

    +80

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    if((remoteMachineName == null || remoteMachineName == "")){
          result = new Result(false,"Invalid Remote Machine Name..!!");     
        }else{
         CheckOrTerminateProcInstanceTask task = new CheckOrTerminateProcInstanceTask
         (processName, argList, oper,  username, password,remoteMachineName,chkTer,chkTerMatch);
         if (remoteMachineName != null && remoteMachineName.length() > 0) {
         ....
         }else{
         ....
         }
        }

    Суровые индийские проверки

    Desperate, 20 Ноября 2011

    Комментарии (5)
  5. Java / Говнокод #8563

    +80

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    m_scrabblerProperties = Utils.loadPropertiesFile(m_args[1]);
    if (null != m_scrabblerProperties)
    {
    	System.out.println("Executing DBScrubber with properties file " + m_args[1] + " loaded from the classpath");
    }
    else
    {
    	try
    	{
    		m_scrabblerProperties.load(new FileInputStream(m_args[1]));
    		System.out.println("Executing DBScrubber with properties file " + m_args[1] + " loaded from the file system");
    	}
    	catch (IOException e)
    	{
    		System.err.println("Failed to load " + m_args[1] + " from the classpath or the file system");
    	}
    }

    Utils.loadPropertiesFile - какая то хитрая поделуха которая ищет файл в кэше. Если он не найден в кэше, то автор видимо хотел попробовать считать файл с диска, но судя по всему оказался оказался дебилом.

    askell, 18 Ноября 2011

    Комментарии (4)
  6. Java / Говнокод #8525

    +121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    // This is de facto a Map<Integer, Long> because SUM() returns longs, but
    // QueryDSL's type inference makes a fluke here and thinks sum() is an Integer.
    // So the return type is Map<Integer, Integer>. Aren't generics fun?
    final Map<Integer, ? extends Number> map =
    		dsl.from(q).where(q.department.eq(params.getDepartment()), q.quantity.ne(0),
    		q.action.in(UserAction.ORDER_ENGRAVE, UserAction.ORDER_STOCK_WASTAGE,
    				UserAction.ORDER_INVOICE, UserAction.ORDER_STOCK_ADJUSTMENT),
    		QueryDsl.subFrom(q2).where(q2.order.eq(q.order), q2.timestamp.goe(interval.getA()),
    				q2.timestamp.lt(interval.getB()),
    				q2.action.in(UserAction.ORDER_ENGRAVE, UserAction.ORDER_STOCK_WASTAGE,
    						UserAction.ORDER_INVOICE, UserAction.ORDER_STOCK_ADJUSTMENT)).exists())
    	.groupBy(q.order.id).having(q.quantity.sum().gt(0)).map(q.order.id, q.quantity.sum());

    someone, 15 Ноября 2011

    Комментарии (1)
  7. Java / Говнокод #8513

    +71

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    public class AuthorizedUserObservervable implements Runnable {
    
        private long sleepTime = 1000;
        private HashMap<AuthorizedUserObserver, HashMap<AuthorizedUser, Integer>> observers = new HashMap<AuthorizedUserObserver, HashMap<AuthorizedUser, Integer>>();
        
        
        private void setSleepTime(long sleepTime) {
            this.sleepTime = sleepTime;
        }
        
        
        public void add(AuthorizedUserObserver auo) {
            HashMap<AuthorizedUser, Integer> userCache = new HashMap<AuthorizedUser, Integer>();
            for (AuthorizedUser user : auo.getUsers()) {
                userCache.put(user, null);
            }
            observers.put(auo, userCache);
        }
    
        public void beginObservation() {
            new Thread(this).start();
        }
    
        @Override
        public void run() {
            while (true) {
                try {
                    for (Map.Entry<AuthorizedUserObserver, HashMap<AuthorizedUser, Integer>> observer : observers.entrySet()) {
                        for (Map.Entry<AuthorizedUser, Integer> user : observer.getValue().entrySet()) {
                            int newPostsCount = user.getKey().getNewPostsCount();
                            if (user.getValue() == null || newPostsCount != user.getValue()) {
                                HashMap<AuthorizedUser, Integer> userCache = new HashMap<AuthorizedUser, Integer>();
                                userCache.put(user.getKey(), newPostsCount);
                                observers.put(observer.getKey(), userCache);
                                observer.getKey().notify(user.getKey(), newPostsCount);
                            }
                        }
                    }
    
    
                    Thread.sleep(sleepTime);
                } catch (InterruptedException ex) {
                    Logger.getLogger(UserObservervable.class.getName()).log(Level.SEVERE, null, ex);
                } catch (AuthenticationException e) {
                    Thread.currentThread().stop(e);
                }
            }
        }
    }

    Чего стоит гибкость.

    manyrus, 13 Ноября 2011

    Комментарии (2)
  8. Java / Говнокод #8493

    +73

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    Credential credential = (Credential) getCurrentObject();
    if(isNew(credential)) {
    	CredentialDetails details=credential.getCurrentDetails();
    	if(details == null)
    		throw new NullPointerException("Credential details object is null");
    
    	CredentialDetails updatedDetails = credential.getCurrentDetails();
    	updatedDetails.setStartDate(getCurrentDate());
    	updatedDetails.setExternalID(credential.getExternalID());
    }
    if(isNew(credential)==false) {
    		
    	CredentialDetails details=credential.getCurrentDetails();
    	if(details == null)
    		throw new NullPointerException("Credential details object is null");
    	CredentialDetails updatedDetails = credential.getCurrentDetails();
    	updatedDetails.setStartDate(getCurrentDate());
    	updatedDetails.setExternalID(credential.getExternalID());
    	m_existingDetailsClone.setEndDate(updatedDetails.getStartDate());
    	updatedDetails.setPreviousDetails(m_existingDetailsClone);
    			
    	getModCol().addModified( m_existingDetailsClone );
    }

    Такое впечатление что автор кода клинический идиот. Зачем так насиловать несчастные POJO Credential и CredentialDetailsю

    askell, 11 Ноября 2011

    Комментарии (21)
  9. Java / Говнокод #8489

    +74

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    public class User extends HttpApiDealer{
        private int id = 347;
        private Date lustUpdate;
        private long refreshTime = 10;
        private boolean onlineStatus;
        
        
        public boolean isOnline() {
            Date timeForRefresh = new Date();
            timeForRefresh.setTime(new Date().getTime() - refreshTime);
            if(lustUpdate == null) {
                lustUpdate = new Date();
            }else if(lustUpdate.after(timeForRefresh)) {
                
            }
            
            return true; //заглушка
        }
        
    }

    Хм, смущает меня работа с датами в этом коде.

    manyrus, 11 Ноября 2011

    Комментарии (10)
  10. Java / Говнокод #8483

    +80

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    public static java.util.Date getPreviousMonth () throws ParseException {
            Date currentDate = new Date(System.currentTimeMillis());
            Calendar currentCalendar = Calendar.getInstance();
            currentCalendar.setTimeInMillis(currentDate.getTime());
            
            SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
            //currentCalendar.set(Calendar.MONTH, currentCalendar.get(Calendar.MONTH) - 1);
            currentCalendar.set(Calendar.DAY_OF_MONTH, currentCalendar.get(Calendar.DAY_OF_MONTH) - 30);
            //currentCalendar.set(Calendar.DATE, currentCalendar.getActualMinimum(Calendar.DAY_OF_MONTH));
            format.format(currentCalendar.getTime());
            java.util.Date resultDate = null;
            resultDate = format.parse(format.format(currentCalendar.getTime()));
            return resultDate;
        }

    Занимаюсь рефакторингом. Особо радует предпоследняя строчка.

    MAK, 11 Ноября 2011

    Комментарии (7)