/*
 * Copyright 2013 Oracle and/or its affiliates.
 * All rights reserved.  You may not modify, use,
 * reproduce, or distribute this software except in
 * compliance with  the terms of the License at:
 * http://developers.sun.com/license/berkeley_license.html
 */


package com.forest.web.util;

import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.model.SelectItem;


public final class JsfUtil {
    private JsfUtil() {
    }

    public static String getStringFromBundle(
        String bundle,
        String message) {
        return ResourceBundle.getBundle(bundle)
                             .getString(message);
    }

    public static SelectItem[] getSelectItems(
        List<?> entities,
        boolean selectOne) {
        int size = selectOne ? (entities.size() + 1) : entities.size();
        SelectItem[] items = new SelectItem[size];
        int i = 0;

        if (selectOne) {
            items[0] = new SelectItem("", "---");
            i++;
        }

        for (Object x : entities) {
            items[i++] = new SelectItem(
                    x,
                    x.toString());
        }

        return items;
    }

    public static void addErrorMessage(
        Exception ex,
        String defaultMsg) {
        String msg = ex.getLocalizedMessage();

        if ((msg != null) && (msg.length() > 0)) {
            addErrorMessage(msg);
        } else {
            addErrorMessage(defaultMsg);
        }
    }

    public static void addErrorMessages(List<String> messages) {
        for (String message : messages) {
            addErrorMessage(message);
        }
    }

    public static void addErrorMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(
                    FacesMessage.SEVERITY_ERROR,
                    msg,
                    msg);
        FacesContext.getCurrentInstance()
                    .addMessage(null, facesMsg);
    }

    public static void addErrorMessage(
        FacesContext context,
        String msg) {
        FacesMessage facesMsg = new FacesMessage(
                    FacesMessage.SEVERITY_ERROR,
                    msg,
                    msg);
        context.addMessage(null, facesMsg);
    }

    public static void addSuccessMessage(String msg) {
        FacesMessage facesMsg = new FacesMessage(
                    FacesMessage.SEVERITY_INFO,
                    msg,
                    msg);
        // FacesContext.getCurrentInstance().getMessageList().clear();
        FacesContext.getCurrentInstance()
                    .addMessage("successInfo", facesMsg);
    }

    public static String getRequestParameter(String key) {
        return FacesContext.getCurrentInstance()
                           .getExternalContext()
                           .getRequestParameterMap()
                           .get(key);
    }

    public static Object getObjectFromRequestParameter(
        String requestParameterName,
        Converter converter,
        UIComponent component) {
        String theId = JsfUtil.getRequestParameter(requestParameterName);

        return converter.getAsObject(
                FacesContext.getCurrentInstance(),
                component,
                theId);
    }
}
