private static GCWebLogRequest createLogRequest(final LogEntry logEntry, @Nullable final Map<String, Trackable> inventory) {

        final OfflineLogEntry offlineLogEntry = logEntry instanceof OfflineLogEntry ? (OfflineLogEntry) logEntry : null;

        final GCWebLogRequest logEntryRequest = new GCWebLogRequest();
        logEntryRequest.images = CollectionStream.of(logEntry.logImages).filter(img -> img.serviceImageId != null).map(img -> getGuidFrom(img.serviceImageId)).toArray(String.class);
        logEntryRequest.logDate = new Date(logEntry.date);
        logEntryRequest.logType = logEntry.logType.id;
        logEntryRequest.logText = logEntry.log;
        logEntryRequest.trackables = offlineLogEntry == null ? new GCWebLogTrackable[0] : CollectionStream.of(offlineLogEntry.inventoryActions.entrySet())
            .filter(a ->
                inventory != null && inventory.containsKey(a.getKey()) && inventory.get(a.getKey()).getBrand() == TrackableBrand.TRAVELBUG)
            .map(entry -> {
                final GCWebLogTrackable tLog = new GCWebLogTrackable();
                tLog.trackableCode = entry.getKey();
                tLog.trackableLogTypeId = entry.getValue().gcApiId;
                return tLog;
        }).toArray(GCWebLogTrackable.class);
        logEntryRequest.usedFavoritePoint = !Settings.isGCPremiumMember() ? null :
                (offlineLogEntry != null && offlineLogEntry.favorite); //not used by web page, but seems to work

        return logEntryRequest;
    }
Provides methods to handle all aspects of creating, editing and deleting Log entries for GC.com (both caches and trackables)
main/src/main/java/cgeo/geocaching/connector/gc/GCLogAPI.java