syncthing.api.model.event.EventDeserializer.java Source code

Java tutorial

Introduction

Here is the source code for syncthing.api.model.event.EventDeserializer.java

Source

/*
 * Copyright (c) 2015 OpenSilk Productions LLC
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 */

package syncthing.api.model.event;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;

import org.joda.time.DateTime;

import java.lang.reflect.Type;

import syncthing.api.model.Config;

/**
 * Created by drew on 10/11/15.
 */
public class EventDeserializer implements JsonDeserializer<Event> {
    @Override
    public Event deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {
        if (!json.isJsonObject()) {
            throw new JsonParseException("Element was not an object");
        }
        JsonObject obj = json.getAsJsonObject();
        long id = context.deserialize(obj.get("id"), long.class);
        EventType type = context.deserialize(obj.get("type"), EventType.class);
        DateTime time = context.deserialize(obj.get("time"), DateTime.class);
        JsonElement data = obj.get("data");
        if (type == null) {
            type = EventType.UNKNOWN;
        }
        switch (type) {
        case CONFIG_SAVED: {
            return new ConfigSaved(id, time, type, context.deserialize(data, Config.class));
        }
        case DEVICE_CONNECTED: {
            return new DeviceConnected(id, time, type, context.deserialize(data, DeviceConnected.Data.class));
        }
        case DEVICE_DISCONNECTED: {
            return new DeviceDisconnected(id, time, type, context.deserialize(data, DeviceDisconnected.Data.class));
        }
        case DEVICE_DISCOVERED: {
            return new DeviceDiscovered(id, time, type, context.deserialize(data, DeviceDiscovered.Data.class));
        }
        case DEVICE_PAUSED: {
            return new DevicePaused(id, time, type, context.deserialize(data, DevicePaused.Data.class));
        }
        case DEVICE_REJECTED: {
            return new DeviceRejected(id, time, type, context.deserialize(data, DeviceRejected.Data.class));
        }
        case DEVICE_RESUMED: {
            return new DeviceResumed(id, time, type, context.deserialize(data, DeviceResumed.Data.class));
        }
        case DOWNLOAD_PROGRESS: {
            return new DownloadProgress(id, time, type, context.deserialize(data, DownloadProgress.Data.class));
        }
        case FOLDER_COMPLETION: {
            return new FolderCompletion(id, time, type, context.deserialize(data, FolderCompletion.Data.class));
        }
        case FOLDER_ERRORS: {
            return new FolderErrors(id, time, type, context.deserialize(data, FolderErrors.Data.class));
        }
        case FOLDER_REJECTED: {
            return new FolderRejected(id, time, type, context.deserialize(data, FolderRejected.Data.class));
        }
        case FOLDER_SCAN_PROGRESS: {
            return new FolderScanProgress(id, time, type, context.deserialize(data, FolderScanProgress.Data.class));
        }
        case FOLDER_SUMMARY: {
            return new FolderSummary(id, time, type, context.deserialize(data, FolderSummary.Data.class));
        }
        case ITEM_FINISHED: {
            return new ItemFinished(id, time, type, context.deserialize(data, ItemFinished.Data.class));
        }
        case ITEM_STARTED: {
            return new ItemStarted(id, time, type, context.deserialize(data, ItemStarted.Data.class));
        }
        case LOCAL_INDEX_UPDATED: {
            return new LocalIndexUpdated(id, time, type, context.deserialize(data, LocalIndexUpdated.Data.class));
        }
        case PING: {
            return new Ping(id, time, type);
        }
        case REMOTE_INDEX_UPDATED: {
            return new RemoteIndexUpdated(id, time, type, context.deserialize(data, RemoteIndexUpdated.Data.class));
        }
        case STARTING: {
            return new Starting(id, time, type, context.deserialize(data, Starting.Data.class));
        }
        case STARTUP_COMPLETE: {
            return new StartupComplete(id, time, type);
        }
        case STATE_CHANGED: {
            return new StateChanged(id, time, type, context.deserialize(data, StateChanged.Data.class));
        }
        default: {
            return new UnknownEvent(id, time, obj.toString());
        }
        }
    }
}