org.escoladeltreball.arcowabungaproject.dao.DAOAndroid.java Source code

Java tutorial

Introduction

Here is the source code for org.escoladeltreball.arcowabungaproject.dao.DAOAndroid.java

Source

/*
 *  DAOAndroid.java
 *  
 *  This file is part of ARcowabungaproject.
 *  
 *  Copyright 2014    Bernabe Gonzalez Garcia <bernagonzga@gmail.com>
 *           Marc Sabate Piol <masapim@hotmail.com>
 *           Victor Purcallas Marchesi <vpurcallas@gmail.com>
 *           Joaquim Dalmau Torva <jdalmaut@gmail.com>
 *
 *   ARcowabungaproject is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   ARcowabungaproject is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with ARcowabungaproject.  If not, see <http://www.gnu.org/licenses/>. 
 */

package org.escoladeltreball.arcowabungaproject.dao;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import org.escoladeltreball.arcowabungaproject.model.Address;
import org.escoladeltreball.arcowabungaproject.model.Drink;
import org.escoladeltreball.arcowabungaproject.model.Ingredient;
import org.escoladeltreball.arcowabungaproject.model.Ingredients;
import org.escoladeltreball.arcowabungaproject.model.Offer;
import org.escoladeltreball.arcowabungaproject.model.Order;
import org.escoladeltreball.arcowabungaproject.model.Pizza;
import org.escoladeltreball.arcowabungaproject.model.Product;
import org.escoladeltreball.arcowabungaproject.model.ShoppingCart;
import org.escoladeltreball.arcowabungaproject.model.dao.DAOFactory;
import org.escoladeltreball.arcowabungaproject.model.system.Pizzeria;
import org.joda.time.DateTime;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;

public class DAOAndroid extends DAOFactory {

    // ====================
    // CONSTANTS
    // ====================

    // ====================
    // ATTRIBUTES
    // ====================

    private SQLiteDatabase database;
    private DataBaseHelper dbHepler;

    private Map<Integer, String> resources;
    private Map<Integer, Drawable> drawables;

    // ====================
    // CONSTRUCTORS
    // ====================

    protected DAOAndroid(Context context) {
        super(Pizzeria.ROLE_CLIENT);
        dbHepler = new DataBaseHelper(context);
        resources = new HashMap<Integer, String>();
        drawables = new HashMap<Integer, Drawable>();
    }

    // ====================
    // PUBLIC METHODS
    // ====================

    public Drawable getDrawableFromAssets(Activity activity, String path) {
        Drawable drawable = null;
        try {
            drawable = Drawable.createFromStream(activity.getAssets().open(path), null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return drawable;
    }

    public Drawable getDrawableFromAssets(Activity activity, int resourceId) {
        Drawable drawable = drawables.get(resourceId);
        if (drawable == null) {
            drawable = getDrawableFromAssets(activity, getResourcePath(resourceId));
            if (drawable != null) {
                drawables.put(resourceId, drawable);
            }
        }
        return drawable;
    }

    public String getResourcePath(int resourceId) {
        return resources.get(resourceId);
    }

    public static DAOAndroid getInstance() {
        return (DAOAndroid) instance;
    }

    public static DAOAndroid getInstance(Context context) {
        if (instance == null) {
            instance = new DAOAndroid(context);
        }
        return (DAOAndroid) instance;
    }

    public void open() throws SQLException {
        database = dbHepler.getWritableDatabase();
    }

    public void close() {
        dbHepler.close();
    }

    // ====================
    // PROTECTED METHODS
    // ====================

    // ====================
    // PRIVATE METHODS
    // ====================

    // ====================
    // OVERRIDE METHODS
    // ====================

    @Override
    public boolean loadDemo() {
        resources = new HashMap<Integer, String>();
        // Activity basic images
        resources.put(150, "images/pizzita.png");
        resources.put(151, "images/pizzita.png");
        resources.put(152, "images/pizzita.png");
        resources.put(153, "images/pizzita.png");
        resources.put(154, "images/pizzita.png");

        // AR ingredient textures
        resources.put(200, "data/models/ingredients/mushroom_texture.png");
        resources.put(201, "data/models/ingredients/redpepper_texture.png");
        resources.put(202, "data/models/ingredients/greenpepper_texture.png");
        // resources.put(203, "data/models/ingredients/tuna_texture.png");
        resources.put(204, "data/models/ingredients/ham_texture.png");
        // resources.put(205, "data/models/ingredients/bacon_texture.png");
        // resources.put(206, "data/models/ingredients/bluecheese_texture.png");
        // resources.put(207, "data/models/ingredients/gouda_texture.png");
        // resources.put(208, "data/models/ingredients/gorgonzola_texture.png");
        // resources.put(209, "data/models/ingredients/emental_texture.png");
        // resources.put(210, "data/models/ingredients/parmesan_texture.png");
        // resources.put(211, "datamodels/ingredients/onion_texture.png");
        // resources.put(212, "data/models/ingredients/bearsjena_texture.png");
        resources.put(213, "data/models/ingredients/corn_texture.png");
        // resources.put(214, "data/models/ingredients/chicken_texture.png");
        // resources.put(215, "data/models/ingredients/mince_texture.png");
        resources.put(216, "data/models/ingredients/egg_texture.png");
        // resources.put(217, "data/models/ingredients/marjoram_texture.png");
        // resources.put(218, "data/models/ingredients/artichoke_texture.png");
        resources.put(219, "data/models/ingredients/goatcheese_texture.png");

        // provisional ingredient textures
        resources.put(203, "data/models/ingredients/mushroom_texture.png");
        resources.put(205, "data/models/ingredients/mushroom_texture.png");
        resources.put(206, "data/models/ingredients/mushroom_texture.png");
        resources.put(207, "data/models/ingredients/mushroom_texture.png");
        resources.put(208, "data/models/ingredients/mushroom_texture.png");
        resources.put(209, "data/models/ingredients/mushroom_texture.png");
        resources.put(210, "data/models/ingredients/mushroom_texture.png");
        resources.put(211, "data/models/ingredients/mushroom_texture.png");
        resources.put(212, "data/models/ingredients/mushroom_texture.png");
        resources.put(214, "data/models/ingredients/mushroom_texture.png");
        resources.put(215, "data/models/ingredients/mushroom_texture.png");
        resources.put(217, "data/models/ingredients/mushroom_texture.png");
        resources.put(218, "data/models/ingredients/mushroom_texture.png");

        return super.loadDemo();
    }

    @Override
    protected Ingredients selectIngredientsById(int id) {
        Ingredients ingredients = new Ingredients(id);
        /*
         * Select all rows with the same id_ingredients from ingredients table
         */
        Cursor cIngredients = database.query(DAOFactory.TABLE_INGREDIENTS, DAOFactory.COLUMNS_NAME_INGREDIENTS,
                DAOFactory.COLUMNS_NAME_INGREDIENTS[0] + "=" + id, null, null, null, null);
        int i = 0;
        while (i < cIngredients.getCount()) {
            cIngredients.move(i);
            /*
             * Select all rows with the same id_ingredient from ingredient table
             * and put in the map
             */
            Cursor cIngredient = database.query(DAOFactory.TABLE_INGREDIENT, COLUMNS_NAME_INGREDIENT,
                    DAOFactory.COLUMNS_NAME_INGREDIENT[0] + "=" + cIngredients.getInt(1), null, null, null, null,
                    null);
            int j = 0;
            while (j < cIngredient.getCount()) {
                cIngredient.move(j);
                Ingredient ingredient = new Ingredient(cIngredient.getInt(0), cIngredient.getString(1),
                        cIngredient.getInt(2), cIngredient.getInt(3), cIngredient.getInt(4), cIngredient.getInt(5));
                ingredients.put(ingredient, cIngredient.getInt(2));
                j++;
            }
            cIngredient.close();
            i++;
        }
        cIngredients.close();
        return ingredients;
    }

    @Override
    protected List<Product> selectProductsOffersById(int id) {
        List<Product> productList = new ArrayList<Product>();
        // Select from offers products table the offers with the same id
        Cursor cOffersProduct = database.query(DAOFactory.TABLE_OFFERS_PRODUCTS,
                DAOFactory.COLUMNS_NAME_OFFERS_PRODUCTS, DAOFactory.COLUMNS_NAME_OFFERS_PRODUCTS[0] + "=" + id,
                null, null, null, null);
        int i = 0;
        while (i < cOffersProduct.getCount()) {
            cOffersProduct.move(i);
            // Product can be a pizza product or drink product
            // Select pizza with the same id as product.
            Cursor cPizza = database.query(DAOFactory.TABLE_PIZZAS, DAOFactory.COLUMNS_NAME_PIZZAS,
                    DAOFactory.COLUMNS_NAME_PIZZAS[0] + " = " + cOffersProduct.getInt(1), null, null, null, null);
            if (cPizza != null) {
                cPizza.moveToFirst();
                Pizza pizza = new Pizza(cPizza.getInt(0), cPizza.getString(1), cPizza.getFloat(2), cPizza.getInt(3),
                        cPizza.getFloat(4), cPizza.getString(5), cPizza.getString(6), cPizza.getInt(7));
                Ingredients ingredients = selectIngredientsById(cPizza.getInt(8));
                pizza.setIngredients(ingredients);
                productList.add(pizza);
            }
            // Select drink with the same id as product.
            Cursor cDrink = database.query(DAOFactory.TABLE_DRINKS, DAOFactory.COLUMNS_NAME_DRINKS,
                    DAOFactory.COLUMNS_NAME_DRINKS[0] + " = " + cOffersProduct.getInt(1), null, null, null, null);
            if (cDrink != null) {
                cDrink.moveToFirst();
                Drink drink = new Drink(cDrink.getInt(0), cDrink.getString(1), cDrink.getFloat(2), cDrink.getInt(3),
                        cDrink.getFloat(4), cDrink.getInt(5));
                productList.add(drink);
            }
            i++;
            cPizza.close();
            cDrink.close();
        }
        cOffersProduct.close();
        return productList;
    }

    @Override
    protected List<Product> selectShoppingCartProductsById(int id) {
        List<Product> productsList = new ArrayList<Product>();
        // Select all rows
        Cursor cShoppingCartsProducts = database.query(DAOFactory.TABLE_SHOPPINGCART_PRODUCTS,
                DAOFactory.COLUMNS_NAME_SHOPPINGCART_PRODUCTS,
                DAOFactory.COLUMNS_NAME_SHOPPINGCART_PRODUCTS[0] + "=" + id, null, null, null, null);
        int i = 0;
        while (i < cShoppingCartsProducts.getCount()) {
            cShoppingCartsProducts.move(i);
            // Product can be a pizza product, drink or offer
            // Select pizza with the same id as product.
            Cursor cPizza = database.query(DAOFactory.TABLE_PIZZAS, DAOFactory.COLUMNS_NAME_PIZZAS,
                    DAOFactory.COLUMNS_NAME_PIZZAS[0] + " = " + cShoppingCartsProducts.getInt(1), null, null, null,
                    null);
            if (cPizza != null) {
                cPizza.moveToFirst();
                Pizza pizza = new Pizza(cPizza.getInt(0), cPizza.getString(1), cPizza.getFloat(2), cPizza.getInt(3),
                        cPizza.getFloat(4), cPizza.getString(5), cPizza.getString(6), cPizza.getInt(7));
                productsList.add(pizza);
            }
            // Select drink with the same id as product.
            Cursor cDrink = database.query(DAOFactory.TABLE_DRINKS, DAOFactory.COLUMNS_NAME_DRINKS,
                    DAOFactory.COLUMNS_NAME_DRINKS[0] + " = " + cShoppingCartsProducts.getInt(1), null, null, null,
                    null);
            if (cDrink != null) {
                cDrink.moveToFirst();
                Drink drink = new Drink(cDrink.getInt(0), cDrink.getString(1), cDrink.getFloat(2), cDrink.getInt(3),
                        cDrink.getFloat(4), cDrink.getInt(5));
                productsList.add(drink);

            }
            // Select offer with the same id as product.
            Cursor cOffer = database.query(DAOFactory.TABLE_OFFERS, DAOFactory.COLUMNS_NAME_OFFERS,
                    DAOFactory.COLUMNS_NAME_OFFERS[0] + " = " + cShoppingCartsProducts.getInt(1), null, null, null,
                    null);
            if (cOffer != null) {
                cOffer.moveToFirst();
                Offer offer = new Offer(cOffer.getInt(0), cOffer.getString(1), cOffer.getFloat(2), cOffer.getInt(3),
                        cOffer.getFloat(4));
                List<Product> productOfferList = selectProductsOffersById(cOffer.getInt(0));
                offer.setProductList(productOfferList);
                productsList.add(offer);
            }
            cOffer.close();
            cDrink.close();
            cPizza.close();
            i++;
        }
        cShoppingCartsProducts.close();
        return productsList;
    }

    @Override
    protected Set<Ingredient> readIngredient() {
        Set<Ingredient> ingredients = new HashSet<Ingredient>();
        Cursor cIngredient = database.query(DAOFactory.TABLE_INGREDIENT, DAOFactory.COLUMNS_NAME_INGREDIENT, null,
                null, null, null, null);
        int i = 0;
        while (i < cIngredient.getCount()) {
            cIngredient.move(i);
            Ingredient ingredient = new Ingredient(cIngredient.getInt(0), cIngredient.getString(1),
                    cIngredient.getInt(2), cIngredient.getInt(3), cIngredient.getInt(4), cIngredient.getInt(5));
            ingredients.add(ingredient);
            i++;
        }
        cIngredient.close();
        return ingredients;
    }

    @Override
    protected Set<Pizza> readPizza() {
        Set<Pizza> pizzas = new HashSet<Pizza>();
        /* Select all rows from pizzas table */
        Cursor cPizzas = database.query(DAOFactory.TABLE_PIZZAS, DAOFactory.COLUMNS_NAME_PIZZAS, null, null, null,
                null, null);
        int i = 0;
        while (i < cPizzas.getCount()) {
            cPizzas.move(i);
            Pizza pizza = new Pizza(cPizzas.getInt(0), cPizzas.getString(1), cPizzas.getFloat(2), cPizzas.getInt(3),
                    cPizzas.getFloat(4), cPizzas.getString(5), cPizzas.getString(6), cPizzas.getInt(7));
            Ingredients ingredients = selectIngredientsById(cPizzas.getInt(8));
            pizza.setIngredients(ingredients);
            pizzas.add(pizza);
            i++;
        }
        cPizzas.close();
        return pizzas;
    }

    @Override
    protected Set<Offer> readOffer() {
        Set<Offer> offers = new HashSet<Offer>();
        Cursor cOffer = database.query(DAOFactory.TABLE_OFFERS, DAOFactory.COLUMNS_NAME_OFFERS, null, null, null,
                null, null);
        int i = 0;
        while (i < cOffer.getCount()) {
            cOffer.move(i);
            Offer offer = new Offer(cOffer.getInt(0), cOffer.getString(1), cOffer.getFloat(2), cOffer.getInt(3),
                    cOffer.getFloat(4));
            List<Product> productList = selectProductsOffersById(cOffer.getInt(5));
            offer.setProductList(productList);
            i++;
        }
        cOffer.close();
        return offers;
    }

    @Override
    protected Set<Drink> readDrink() {
        Set<Drink> drinks = new HashSet<Drink>();
        Cursor cDrinks = database.query(DAOFactory.TABLE_DRINKS, DAOFactory.COLUMNS_NAME_DRINKS, null, null, null,
                null, null);
        int i = 0;
        while (i < cDrinks.getCount()) {
            cDrinks.move(i);
            Drink drink = new Drink(cDrinks.getInt(0), cDrinks.getString(1), cDrinks.getFloat(2), cDrinks.getInt(3),
                    cDrinks.getFloat(4), cDrinks.getInt(5));
            drinks.add(drink);
            i++;
        }
        cDrinks.close();
        return drinks;
    }

    @Override
    protected ShoppingCart readShoppingCart(int idShoppingCart) {
        Cursor cShoppingCarts = database.query(DAOFactory.TABLE_SHOPPINGCARTS,
                DAOFactory.COLUMNS_NAME_SHOPPINGCARTS,
                DAOFactory.COLUMNS_NAME_SHOPPINGCARTS[0] + "=" + idShoppingCart, null, null, null, null);
        ShoppingCart shoppingCart = null;
        cShoppingCarts.moveToFirst();
        if (cShoppingCarts != null) {
            shoppingCart = new ShoppingCart(cShoppingCarts.getInt(0));
            List<Product> productsList = selectShoppingCartProductsById(cShoppingCarts.getInt(1));
            shoppingCart.setProducts(productsList);
        }
        cShoppingCarts.close();
        return shoppingCart;
    }

    @Override
    protected Set<Order> readOrder() {
        Set<Order> orders = new HashSet<Order>();
        Cursor cOrder = database.query(DAOFactory.TABLE_ORDERS, DAOFactory.COLUMNS_NAME_ORDERS, null, null, null,
                null, null);
        int i = 0;
        while (i < cOrder.getCount()) {
            cOrder.move(i);
            DateTime dateTime = DateTime.parse(cOrder.getString(3));
            Address address = readAddressById(cOrder.getInt(5));
            ShoppingCart shoppingCart = readShoppingCart(cOrder.getInt(6));
            Order order = new Order(cOrder.getInt(0), cOrder.getString(1), cOrder.getString(2), dateTime,
                    cOrder.getString(4), address, shoppingCart);
            orders.add(order);
            i++;
        }
        cOrder.close();
        return orders;
    }

    @Override
    protected Address readAddressById(int idAddress) {
        Cursor cAddress = database.query(DAOFactory.TABLE_ADDRESS, DAOFactory.COLUMNS_NAME_ADDRESS, null, null,
                null, null, null);
        Address address = null;
        int i = 0;
        while (i < cAddress.getCount()) {
            cAddress.move(i);
            if (cAddress.getInt(0) == idAddress) {
                address = new Address(cAddress.getInt(0), cAddress.getString(1), cAddress.getString(2),
                        cAddress.getString(3), cAddress.getString(4), cAddress.getString(5), cAddress.getString(6));
                i = cAddress.getCount();
            }
            i++;
        }
        cAddress.close();
        return address;
    }

    @Override
    protected Map<String, String> readPreferences() {
        Map<String, String> preferences = new HashMap<String, String>();
        Cursor cPreferences = database.query(DAOFactory.TABLE_PREFERENCES, DAOFactory.COLUMNS_NAME_PREFERENCES,
                null, null, null, null, null);
        int i = 0;
        while (i < cPreferences.getCount()) {
            cPreferences.move(i);
            preferences.put(cPreferences.getString(0), cPreferences.getString(1));
            i++;
        }
        cPreferences.close();
        return preferences;
    }

    @Override
    protected Map<Integer, String> readResources() {
        Map<Integer, String> resources = new HashMap<Integer, String>();
        Cursor cResources = database.query(DAOFactory.TABLE_RESOURCES, DAOFactory.COLUMNS_NAME_RESOURCES, null,
                null, null, null, null);
        int i = 0;
        while (i < cResources.getCount()) {
            cResources.move(i);
            resources.put(cResources.getInt(0), cResources.getString(1));
            i++;
        }
        cResources.close();
        return resources;
    }

    @Override
    protected void writeIngredients(Set<Ingredient> ingredients) {

        for (Ingredient ingredient : ingredients) {
            ContentValues values = new ContentValues();

            values.put(DAOFactory.COLUMNS_NAME_INGREDIENT[0], ingredient.getId());
            values.put(DAOFactory.COLUMNS_NAME_INGREDIENT[1], ingredient.getName());
            values.put(DAOFactory.COLUMNS_NAME_INGREDIENT[2], ingredient.getIcon());
            values.put(DAOFactory.COLUMNS_NAME_INGREDIENT[3], ingredient.getModel());
            values.put(DAOFactory.COLUMNS_NAME_INGREDIENT[4], ingredient.getPrice());
            values.put(DAOFactory.COLUMNS_NAME_INGREDIENT[5], ingredient.getTexture());

            database.insert(DAOFactory.TABLE_INGREDIENT, null, values);
        }
    }

    @Override
    protected void writePizzas(Set<Pizza> pizzas) {
        for (Pizza pizza : pizzas) {
            ContentValues values = new ContentValues();
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[0], pizza.getId());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[1], pizza.getName());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[2], pizza.getPrice());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[3], pizza.getIcon());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[4], pizza.getMassType());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[5], pizza.getType());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[6], pizza.getSize());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[7], pizza.getDiscount());
            values.put(DAOFactory.COLUMNS_NAME_PIZZAS[8], pizza.getIngredients().getId());

            database.insert(DAOFactory.TABLE_PIZZAS, null, values);
            writeProduct(pizza.getId());
            values.clear();
            for (Ingredient ingredient : pizza.getIngredientsSet()) {
                values.put(DAOFactory.COLUMNS_NAME_INGREDIENTS[0], pizza.getIngredients().getId());
                values.put(DAOFactory.COLUMNS_NAME_INGREDIENTS[1], ingredient.getId());
                values.put(DAOFactory.COLUMNS_NAME_INGREDIENTS[2], pizza.getIngredients().get(ingredient));
                database.insert(DAOFactory.TABLE_INGREDIENTS, null, values);
            }
        }

    }

    @Override
    protected void writeOffers(Set<Offer> offers) {
        for (Offer offer : offers) {
            ContentValues values = new ContentValues();
            values.put(DAOFactory.COLUMNS_NAME_OFFERS[0], offer.getId());
            values.put(DAOFactory.COLUMNS_NAME_OFFERS[1], offer.getName());
            values.put(DAOFactory.COLUMNS_NAME_OFFERS[2], offer.getPrice());
            values.put(DAOFactory.COLUMNS_NAME_OFFERS[3], offer.getIcon());
            values.put(DAOFactory.COLUMNS_NAME_OFFERS[4], offer.getDiscount());

            database.insert(DAOFactory.TABLE_OFFERS, null, values);
            writeProduct(offer.getId());
            values.clear();
            for (Product product : offer.getProduct()) {
                values.put(DAOFactory.COLUMNS_NAME_OFFERS_PRODUCTS[0], offer.getId());
                values.put(DAOFactory.COLUMNS_NAME_OFFERS_PRODUCTS[1], product.getId());

                database.insert(DAOFactory.TABLE_OFFERS_PRODUCTS, null, values);
            }
        }

    }

    @Override
    protected void writeDrinks(Set<Drink> drinks) {
        for (Drink drink : drinks) {
            ContentValues values = new ContentValues();
            values.put(DAOFactory.COLUMNS_NAME_DRINKS[0], drink.getId());
            values.put(DAOFactory.COLUMNS_NAME_DRINKS[1], drink.getName());
            values.put(DAOFactory.COLUMNS_NAME_DRINKS[2], drink.getPrice());
            values.put(DAOFactory.COLUMNS_NAME_DRINKS[3], drink.getIcon());
            values.put(DAOFactory.COLUMNS_NAME_DRINKS[4], drink.getDiscount());
            values.put(DAOFactory.COLUMNS_NAME_DRINKS[5], drink.getSize());

            database.insert(DAOFactory.TABLE_DRINKS, null, values);
            writeProduct(drink.getId());

        }
    }

    @Override
    protected void writeShoppingCarts(ShoppingCart shoppingCart) {
        ContentValues values = new ContentValues();
        values.put(DAOFactory.COLUMNS_NAME_SHOPPINGCARTS[0], shoppingCart.getId());
        database.insert(DAOFactory.TABLE_SHOPPINGCARTS, null, values);
        values.clear();
        for (Product product : shoppingCart.getProducts()) {
            values.put(DAOFactory.COLUMNS_NAME_SHOPPINGCART_PRODUCTS[0], shoppingCart.getId());
            values.put(COLUMNS_NAME_SHOPPINGCART_PRODUCTS[1], product.getId());
            database.insert(DAOFactory.TABLE_SHOPPINGCART_PRODUCTS, null, values);
        }
    }

    @Override
    protected void writeOrders(Set<Order> orders) {
        for (Order order : orders) {
            ContentValues values = new ContentValues();
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[0], order.getId());
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[1], order.getEmail());
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[2], order.getPhone());
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault());
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[3], dateFormat.format(order.getDateTime()));
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[4], order.getPaymentMethod());
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[5], order.getAddress().getId());
            values.put(DAOFactory.COLUMNS_NAME_ORDERS[6], order.getShoppingCart().getId());
            writeShoppingCarts(order.getShoppingCart());
            writeAddresses(order.getAddress());
            database.insert(DAOFactory.TABLE_ORDERS, null, values);
        }

    }

    @Override
    protected void writeAddresses(Address address) {
        ContentValues values = new ContentValues();
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[0], address.getId());
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[1], address.getStreet());
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[2], address.getNumber());
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[3], address.getPostCode());
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[4], address.getFloor());
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[5], address.getStair());
        values.put(DAOFactory.COLUMNS_NAME_ADDRESS[6], address.getFloor());

        database.insert(DAOFactory.TABLE_ADDRESS, null, values);
    }

    @Override
    protected void writePreferences(Map<String, String> preferences) {
        for (Map.Entry<String, String> entry : preferences.entrySet()) {
            ContentValues values = new ContentValues();
            values.put(DAOFactory.COLUMNS_NAME_PREFERENCES[0], entry.getKey());
            values.put(DAOFactory.COLUMNS_NAME_PREFERENCES[1], entry.getValue());
            database.insert(DAOFactory.TABLE_PREFERENCES, null, values);
        }
    }

    @Override
    protected void writeProduct(int idProduct) {
        ContentValues values = new ContentValues();
        values.put(DAOFactory.COLUMNS_NAME_PRODUCTS[0], idProduct);
        database.insert(DAOFactory.CREATE_TABLE_PRODUCTS, null, values);

    }

    @Override
    protected void writeResources(Map<Integer, String> resources) {
        for (Map.Entry<Integer, String> entry : resources.entrySet()) {
            ContentValues values = new ContentValues();
            values.put(DAOFactory.COLUMNS_NAME_RESOURCES[0], entry.getKey());
            values.put(DAOFactory.COLUMNS_NAME_RESOURCES[1], entry.getValue());
            database.insert(DAOFactory.TABLE_RESOURCES, null, values);
        }

    }

    // ====================
    // GETTERS & SETTERS
    // ====================
}