movemeet/movemeet

View on GitHub
app/src/main/java/com/sdp/movemeet/backend/firebase/firebaseDB/FirebaseDBManager.java

Summary

Maintainability
A
0 mins
Test Coverage
B
80%
package com.sdp.movemeet.backend.firebase.firebaseDB;

import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.sdp.movemeet.backend.BackendManager;
import com.sdp.movemeet.backend.providers.BackendInstanceProvider;
import com.sdp.movemeet.backend.serialization.BackendSerializer;
import com.sdp.movemeet.models.FirebaseObject;

import java.util.Map;

/**
 * A class capable of interacting with the Firebase Realtime Database to handle storage
 * operations on objects of type T
 *
 * @param <T> The type of object handled by this FirebaseDBManager
 */
abstract class FirebaseDBManager<T extends FirebaseObject> implements BackendManager<T> {

    private final BackendSerializer<T> serializer;
    private final FirebaseDatabase db;

    /**
     * Creates a new FirebaseDBManager.
     *
     * @param serializer a BackendSerializer capable of de(serializing) objects of type T
     * @param <T>        the type of object handled by this FirebaseDBManager
     */
    public <T> FirebaseDBManager(BackendSerializer serializer) {
        if (serializer == null) throw new IllegalArgumentException();

        this.db = BackendInstanceProvider.getDatabaseInstance();
        this.serializer = serializer;
    }

    @Override
    public Task<?> add(T object, String path) {
        if (object == null || path == null || path.isEmpty()) throw new IllegalArgumentException();

        Map<String, Object> data = serializer.serialize(object);
        DatabaseReference newChild = db.getReference(path).push();
        return newChild.setValue(data);
    }

    @Override
    public Task<?> set(T object, String path) {
        if (object == null || path == null || path.isEmpty()) throw new IllegalArgumentException();

        Map<String, Object> data = serializer.serialize(object);
        DatabaseReference newChild = db.getReference(path);
        newChild.setValue(data);
        return newChild.setValue(data);
    }

    @Override
    public Task<?> update(String path, String field, String value, String method) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Task<?> delete(String path) {
        if (path == null || path.isEmpty()) throw new IllegalArgumentException();
        return db.getReference(path).removeValue();
    }

    @Override
    public Task<?> get(String path) {
        if (path == null || path.isEmpty()) throw new IllegalArgumentException();
        return db.getReference(path).get();
    }

    @Override
    public Task<?> search(String field, Object value) {
        throw new UnsupportedOperationException();
    }
}