/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dhaval.web.vaadin.simple.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author dhaval
 */
public class FormsContainer implements Serializable{

    private List<Form> formList = new ArrayList<Form>();
    private List<FormListener> listeners = new ArrayList<FormListener>();
    private Map<String, List<Map<String, Object>>> formDataList = new HashMap<String, List<Map<String, Object>>>();

    public FormsContainer() {
        {
            Form bookmarkForm = new Form("Contacts", "list of contact details");
            Set<FormField> bookmarkFields = new HashSet<FormField>();
            bookmarkFields.add(new FormField("name", "string"));
            bookmarkFields.add(new FormField("phone", "string"));
            bookmarkForm.setFields(bookmarkFields);
            formList.add(bookmarkForm);
        }
    }

    public List<Form> getAvailableForms() {
        return formList;
    }

    public void addListener(FormListener listener) {
        listeners.add(listener);
        if (!formList.isEmpty()) {
            listener.changed();
        }
    }

    public void addForm(Form form) {
        formList.add(form);
        if (!listeners.isEmpty()) {
            for (FormListener listener : listeners) {
                listener.changed();
            }
        }
    }

    public void addData(String name, Map<String, Object> map) {
        if(!formDataList.containsKey(name)){
            formDataList.put(name, new ArrayList<Map<String, Object>>());
        }

        formDataList.get(name).add(map);
    }

    public List<Map<String, Object>> getFormData(String name) {
        return formDataList.get(name);
    }

    public interface FormListener extends Serializable{
        void changed();
    }
}
