[Demonstration 1]

[Buggy Method]
public static void resume(final DataUpdatedCallback callback) throws InterruptedException {
    debug("[Control] resume() begin");
    pause();
    _isPaused = false;
    //debug("[Control] resume() waiting semaphore");
    //_connectSemaphore.acquire();
    //debug("[Control] resume() semaphore acquired");
    debug("[Control] resume() getGroupModules");
    Control.getGroupModules("", new GroupModulesRequestCallback() {

        @Override
        public void onRequestSuccess(ArrayList<Module> modules) {
            debug("[Control] resume() getGroupModules -> onRequestSuccess");
            // update modules
            if (modules != null) {
                if (_modules == null)
                    _modules = new ArrayList<Module>();
                for (Module m : modules) {
                    Module cm = getModule(m.Domain, m.Address);
                    if (cm != null) {
                        cm.Name = m.Name;
                        for (ModuleParameter p : m.Properties) {
                            ModuleParameter cp = cm.getParameter(p.Name);
                            if (cp == null || !cp.UpdateTime.equals(p.UpdateTime))
                                cm.setParameter(p.Name, p.Value, p.UpdateTime);
                        }
                    } else {
                        _modules.add(m);
                    }
                }
            }
            if (!_isPaused)
                _sseTask = new EventSourceTask(getHgBaseHttpAddress() + "api/HomeAutomation.HomeGenie/Logging/RealTime.EventStream/", _disableAutoreconnect);
            //_connectSemaphore.release();
            //debug("[Control] resume() getGroupModules semaphore released");
            callback.onRequestSuccess();
        }

        @Override
        public void onRequestError(ApiRequestResult result) {
            debug("[Control] resume() getGroupModules -> onRequestError");
            //_connectSemaphore.release();
            //debug("[Control] resume() getGroupModules semaphore released");
            callback.onRequestError(result);
        }
    });
    debug("[Control] resume() end");
}

[Buggy Hunk]
if (cp == null || !cp.UpdateTime.equals(p.UpdateTime))

[Patch]
if (cp == null || cp.UpdateTime == null || !cp.UpdateTime.equals(p.UpdateTime))

[Demonstration 2]

[Buggy Method]
private static Date dateParse(String date) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    return df.parse(date);
}

[Buggy Hunk]
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");

[Patch]
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

[Demonstration 3]

[Buggy Method]
public static String compareDate(String date1, String date2) {
    SimpleDateFormat sdf = new SimpleDateFormat(MultiTenancyUtil.getTenantConstants().DISPLAY_FORMAT);
    try {
        Date dateFirst = sdf.parse(date1);
        Date dateSecond = sdf.parse(date2);
        if (dateFirst.after(dateSecond)) {
            return "1";
        } else if (dateFirst.before(dateSecond)) {
            return "2";
        } else if (dateFirst.equals(dateSecond)) {
            return "0";
        }
    } catch (Exception e) {
        logger.error("\nException in com/appnetix/app/util/DateUtil.java-->compareDate", e);
    }
    return "";
}

[Buggy Hunk]
SimpleDateFormat sdf = new SimpleDateFormat(MultiTenancyUtil.getTenantConstants().DISPLAY_FORMAT);

[Patch]
SimpleDateFormat sdf = new SimpleDateFormat(Constants.DISPLAY_FORMAT);