SDPepe/AppArt

View on GitHub
app/src/main/java/ch/epfl/sdp/appart/utils/serializers/UserSerializer.java

Summary

Maintainability
A
0 mins
Test Coverage
A
92%
package ch.epfl.sdp.appart.utils.serializers;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import ch.epfl.sdp.appart.database.firebaselayout.AdLayout;
import ch.epfl.sdp.appart.database.firebaselayout.CardLayout;
import ch.epfl.sdp.appart.database.firebaselayout.UserLayout;
import ch.epfl.sdp.appart.scrolling.card.Card;
import ch.epfl.sdp.appart.user.AppUser;
import ch.epfl.sdp.appart.user.User;

public class UserSerializer {

    //To prevent construction
    private UserSerializer() {
    }

    public static Map<String, Object> serialize(User data) {
        Map<String, Object> docData = new HashMap<>();
        docData.put(UserLayout.AGE, data.getAge());
        docData.put(UserLayout.EMAIL, data.getUserEmail());
        docData.put(UserLayout.GENDER, data.getGender());
        docData.put(UserLayout.NAME, data.getName());
        docData.put(UserLayout.PHONE, data.getPhoneNumber());
        docData.put(UserLayout.PICTURE, data.getProfileImagePathAndName());
        docData.put(UserLayout.FAVORITE_IDS, new ArrayList<String>(data.getFavoritesIds()));
        return docData;
    }

    public static User deserialize(String id, Map<String, Object> data) {
        AppUser user = new AppUser(id, (String) data.get(UserLayout.EMAIL));

        Object rawAge = data.get(UserLayout.AGE);
        if (rawAge != null) {
            user.setAge((long) rawAge);
        }

        Object rawGender = data.get(UserLayout.GENDER);
        if (rawGender != null) {
            user.setGender((String) rawGender);
        }

        Object rawName = data.get(UserLayout.NAME);
        if (rawName != null) {
            user.setName((String) rawName);
        }

        Object rawPhoneNumber = data.get(UserLayout.PHONE);
        if (rawPhoneNumber != null) {
            user.setPhoneNumber((String) rawPhoneNumber);
        }

        Object rawPfpRef = data.get(UserLayout.PICTURE);
        if (rawPfpRef != null) {
            user.setProfileImagePathAndName((String) rawPfpRef); //WARNING WAS "profilePicture" before not matching our actual
        }

        Object rawFavorites = data.get(UserLayout.FAVORITE_IDS);
        if (rawFavorites != null) {
            for (String fav : (List<String>) rawFavorites) {
                user.addFavorite(fav);
            }
        }

        return user;
    }

    public static Map<String, Object> serializeLocal(User data) {
        Map<String, Object> docData = new HashMap<>();
        docData.put(UserLayout.AGE, data.getAge());
        docData.put(UserLayout.EMAIL, data.getUserEmail());
        docData.put(UserLayout.GENDER, data.getGender());
        docData.put(UserLayout.NAME, data.getName());
        docData.put(UserLayout.PHONE, data.getPhoneNumber());
        docData.put(UserLayout.PICTURE, data.getProfileImagePathAndName());
        docData.put(UserLayout.ID, data.getUserId());
        docData.put(UserLayout.FAVORITE_IDS, new ArrayList<String>(data.getFavoritesIds()));
        return docData;
    }

    public static User deserializeLocal(Map<String, Object> data) {

        AppUser user = new AppUser((String)data.get(UserLayout.ID), (String) data.get(UserLayout.EMAIL));

        Object rawAge = data.get(UserLayout.AGE);
        if (rawAge != null) {
            user.setAge((long) rawAge);
        }

        Object rawGender = data.get(UserLayout.GENDER);
        if (rawGender != null) {
            user.setGender((String) rawGender);
        }

        Object rawName = data.get(UserLayout.NAME);
        if (rawName != null) {
            user.setName((String) rawName);
        }

        Object rawPhoneNumber = data.get(UserLayout.PHONE);
        if (rawPhoneNumber != null) {
            user.setPhoneNumber((String) rawPhoneNumber);
        }

        Object rawPfpRef = data.get(UserLayout.PICTURE);
        if (rawPfpRef != null) {
            user.setProfileImagePathAndName((String) rawPfpRef); //WARNING WAS "profilePicture" before not matching our actual
        }

        Object rawFavorites = data.get(UserLayout.FAVORITE_IDS);
        if (rawFavorites != null) {
            for (String fav : (List<String>) rawFavorites) {
                user.addFavorite(fav);
            }
        }

        return user;
    }
}