public boolean hasSaveRelevantChanges(final LogEntry prev) {

        // Do not erase the saved log if the user has removed all the characters
        // without using "Clear". This may be a manipulation mistake, and erasing
        // again will be easy using "Clear" while retyping the text may not be.
        boolean changed = StringUtils.isNotEmpty(log) && !StringUtils.equals(log, prev.log);
        //other changes however lead to save anyway
        changed |= !Objects.equals(logType, prev.logType);
        changed |= !Objects.equals(reportProblem, prev.reportProblem);
        changed |= !Objects.equals(date, prev.date);
        changed |= logImages.size() != prev.logImages.size() || !new HashSet<>(logImages).equals(new HashSet<>(prev.logImages));

        if (prev instanceof OfflineLogEntry) {
            final OfflineLogEntry prevOffline = (OfflineLogEntry) prev;
            changed |= favorite != prevOffline.favorite;
            changed |= !equalsFloat(rating, prevOffline.rating, 0.2f);
            changed |= !Objects.equals(password, prevOffline.password);
            changed |= !Objects.equals(imageScale, prevOffline.imageScale);
            changed |= !Objects.equals(imageTitlePraefix, prevOffline.imageTitlePraefix);

            //inventory: add/remove is NOT save-relevant! Only value changes for common keys are relevant
            final Set<String> commonInventoryKeys = new HashSet<>(inventoryActions.keySet());
            commonInventoryKeys.retainAll(prevOffline.inventoryActions.keySet());
            for (String key : commonInventoryKeys) {
                changed |= !Objects.equals(inventoryActions.get(key), prevOffline.inventoryActions.get(key));
            }
        }

        return changed;

    }
Checks whether this instance contains changes relevant for saving the log
compared to a given previous instance
Note that this is NOT a hidden {@link #equals(Object)}-method!
main/src/main/java/cgeo/geocaching/log/OfflineLogEntry.java