Saturday 31 May 2014

Installing JDK 8 & JRE 8 In Linux.

Hi java & ADF fellas,
today i'm writing a post to how to install Java 8 and JRE 8 in linux.

1. Fisrt download it from oracle web-site
JDK 8  & JRE 8

2. Extract them to a specified folder.
    ex:- myApps in home

3. open terminal and type the code gedit .bashrc
4. go to the end of the file and make two variables.
    a.) JAVA_HOME b.) JRE_HOME.
5. and provide them the exact location of the files in the directory structure
as depicted in the figure.

6. Append it to the path, i.e. the exixting path.
just copy and paste the following code to .bashrc

PATH=.:$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export PATH

7. Reload the file.
 source .bashrc

8. check the version of java and jre version.

javac -verion
java -version


thank you :)

Sunday 18 May 2014

ADFUtil

import com.sun.faces.mgbean.ManagedBeanCreationException;

import java.util.HashMap;
import java.util.Map;

import javax.el.ELContext;
import javax.el.Expression;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.el.ValueExpression;

import javax.faces.application.FacesMessage;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

import javax.faces.event.PhaseId;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import oracle.adf.model.BindingContext;
import oracle.adf.model.DataControlFrame;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCDataControl;
import oracle.adf.view.rich.component.rich.RichPopup;
import oracle.adf.view.rich.component.rich.fragment.RichRegion;
import oracle.adf.view.rich.component.rich.layout.RichPanelSplitter;
import oracle.adf.view.rich.context.AdfFacesContext;

import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
import org.apache.myfaces.trinidad.util.Service;

/**
 * Provides various utility methods that are handy to
 * have around when working with ADF.
 */
public class ADFUtil {
    /**
     * When a bounded task flow manages a transaction (marked as
     * requires-transaction, requires-new-transaction, or requires-
     * existing-transaction), then the task flow must issue any
     * commits or rollbacks that are needed.
     * This is essentially to keep the state of the transaction that
     * the task flow understands in synch with the state of the
     * transaction in the ADFbc layer.
     * Use this method to issue a commit in the middle of a task flow
     * while staying in the task flow.
     */
    public static void saveAndContinue() {
        Map sessionMap =
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        BindingContext context =
            (BindingContext)sessionMap.get(BindingContext.CONTEXT_ID);
        String currentFrameName = context.getCurrentDataControlFrame();
        DataControlFrame dcFrame =
            context.findDataControlFrame(currentFrameName);
        dcFrame.commit();
        dcFrame.beginTransaction(null);
    }

    /**
     * Programmatic evaluation of EL.
     *
     * @param el EL to evaluate
     * @return Result of the evaluation
     */
    public static Object evaluateEL(String el) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ELContext elContext = facesContext.getELContext();
        ExpressionFactory expressionFactory =
            facesContext.getApplication().getExpressionFactory();
        ValueExpression exp =
            expressionFactory.createValueExpression(elContext, el,
                                                    Object.class);
        if(exp == null || elContext == null){
            return null;
        }
        Object obj = null;
        try{
            obj = exp.getValue(elContext);
        }catch(ManagedBeanCreationException ex){
           
        }
        return obj;
    }

    public static String getLocaleValue(String el,String code){
            Map map = (Map)evaluateEL(el);
            if(map != null){
                if(map.get(code) != null)
                    return (String)map.get(code);
                else
                    return code;
            }
            return "";
        }
    /**
     * Programmatic invocation of a method that an EL evaluates to.
     * The method must not take any parameters.
     * @param el EL of the method to invoke
     * @return Object that the method returns
     */
    public static Object invokeEL(String el) {
        return invokeEL(el, new Class[0], new Object[0]);
    }

    /**
     * Programmatic invocation of a method that an EL evaluates to.
     *
     * @param el EL of the method to invoke
     * @param paramType Class defining the type of the
     * parameter
     * @param param Object defining the value of the
     * parameter
     * @return Object that the method returns
     */
    public static Object invokeEL(String el, Class paramType, Object param) {
        return invokeEL(el, new Class[] { paramType }, new Object[] { param });
    }


    /**
     * Programmatic invocation of a method that an EL evaluates to.
     *
     * @param el EL of the method to invoke
     * @param paramTypes Array of Class defining the types of the
     * parameters
     * @param params Array of Object defining the values of the
     * parametrs
     * @return Object that the method returns
     */
    public static Object invokeEL(String el, Class[] paramTypes,
                                  Object[] params) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ELContext elContext = facesContext.getELContext();
        ExpressionFactory expressionFactory =
            facesContext.getApplication().getExpressionFactory();
        MethodExpression exp =
            expressionFactory.createMethodExpression(elContext, el,
                                                     Object.class, paramTypes);
        return exp.invoke(elContext, params);
    }


    /**
     * Sets a value into an EL object. Provides similar
     * functionality to
     * the <af:setActionListener> tag, except the
     * <code>from</code> is
     * not an EL. You can get similar behavior by using the
     * following...<br>
     * <code>setEL(<b>to</b>, evaluateEL(<b>from</b>))</code>
     *
     * @param el EL object to assign a value
     * @param val Value to assign
     */
    public static void setEL(String el, Object val) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ELContext elContext = facesContext.getELContext();
        ExpressionFactory expressionFactory =
            facesContext.getApplication().getExpressionFactory();
        ValueExpression exp =
            expressionFactory.createValueExpression(elContext, el,
                                                    Object.class);
        exp.setValue(elContext, val);
    }
   
    public static String errorDialog(String errorMessage)
    {      
        FacesContext context = FacesContext.getCurrentInstance();
        ((HttpSession)context.getExternalContext().getSession(false)).setAttribute("errorMessage", errorMessage);
        ViewHandler viewHandler = context.getApplication().getViewHandler();
        UIViewRoot dialog = viewHandler.createView(context, "/Error.jspx");        
        HashMap properties = new HashMap();
        properties.put("width", new Integer(250));
        properties.put("height", new Integer(150));    
        AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();      
        afContext.launchDialog(dialog,
                null, // not launched from any component
                    null, // no particular parameters                                      
                        true,properties); // show it in a dialog
        context.renderResponse();
        return "";
    }
   
    /**
     *Get the ADF datacontrol reference given the control name
     * @param controlName data control name as given in data bindings file
     * @return
     */
    public static DCDataControl findDataControl(String controlName){
        DCBindingContainer context = (DCBindingContainer)ADFUtil.evaluateEL("#{bindings}");
        DCDataControl dcf = context.findDataControl(controlName);
        return dcf;
    }  
   
    /**
     * Initiates control flow in a task flow region.
     * @param region - RichRegion that represents taskflow.
     * @param outComeEl - action outcome, based on whic control flows
     */
    public static void performControlFlow(RichRegion region, String outComeEl){
        FacesContext ctx = FacesContext.getCurrentInstance();
        ExpressionFactory f = ctx.getApplication().getExpressionFactory();
        ELContext elctx = ctx.getELContext();
        MethodExpression m = f.createMethodExpression(elctx,outComeEl, String.class, new Class[]{});          
        region.queueActionEventInRegion(m,null,null,false,-1,-1,PhaseId.ANY_PHASE);
    }  
   
    public static HttpServletRequest getHttpServletRequest(){
        return ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest());
    }
   
    public static HttpSession getHttpSession(){
        return ((HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false));
    }
   
    /**
     * Returns the Binding Container
     * @return
     */
    public static DCBindingContainer getBindingContainer(){
        return (DCBindingContainer)evaluateEL("#{bindings}");
    }
   
    /**
     * Renders Faces message showing some validation error message.
     * @param id
     * @param message
     */
    public static void addFacesMessage(String id, FacesMessage message){
        FacesContext.getCurrentInstance().addMessage(id, message);
        FacesContext.getCurrentInstance().renderResponse();
    }
   
    public static void addFacesMessage(String clientId,javax.faces.application.FacesMessage.Severity severity,String localizedText){
        FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(severity, "",localizedText));
        FacesContext.getCurrentInstance().renderResponse();
    }
   
    public static String showError(String clientId,String errorMessage) {      
       
        FacesContext ctx = FacesContext.getCurrentInstance();      
        StringBuilder javaScriptPopup =
            new StringBuilder("var popObj=AdfPage.PAGE.findComponent('" +
                              clientId + "');");
        javaScriptPopup.append("if(popObj != null){var errorField = popObj.findComponent('errorMessage');if(errorField != null)");
        javaScriptPopup.append("{errorField.setValue('");      
        javaScriptPopup.append(errorMessage);              
        javaScriptPopup.append("')}");
        javaScriptPopup.append("popObj.show();}");      
       
        ExtendedRenderKitService erks =
            Service.getRenderKitService(ctx, ExtendedRenderKitService.class);
        erks.addScript(ctx, javaScriptPopup.toString());
        ctx.renderResponse();
        return "";
    }
   
    public static void showPopup(String clientId){
        FacesContext ctx = FacesContext.getCurrentInstance();
        StringBuilder javaScriptPopup =
            new StringBuilder("var popObj=AdfPage.PAGE.findComponent('" +
                              clientId + "');");      
        javaScriptPopup.append("popObj.show();");      
       
        ExtendedRenderKitService erks =
            Service.getRenderKitService(ctx, ExtendedRenderKitService.class);
        erks.addScript(ctx, javaScriptPopup.toString());
        ctx.renderResponse();
    }
   
    public static void expandSpilter(RichPanelSplitter splitter){
        String clientId =splitter.getClientId(FacesContext.getCurrentInstance());
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExtendedRenderKitService service = org.apache.myfaces.trinidad.util.Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);
        StringBuilder script = new StringBuilder();      
        script.append("var panelSpliter = AdfPage.PAGE.findComponent('").append(clientId).append("');\n");      
        script.append("panelSpliter.setCollapsed('');\n");      
        service.addScript(facesContext, script.toString());
    }
   
    public static void collapseSplitter(RichPanelSplitter splitter){
        String clientId =splitter.getClientId(FacesContext.getCurrentInstance());
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExtendedRenderKitService service = org.apache.myfaces.trinidad.util.Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);
        StringBuilder script = new StringBuilder();      
        script.append("var panelSpliter = AdfPage.PAGE.findComponent('").append(clientId).append("');\n");      
        script.append("panelSpliter.setCollapsed(true);\n");      
        service.addScript(facesContext, script.toString());
    }
   
    public static void closwBrowser(){
        FacesContext facesContext = FacesContext.getCurrentInstance();          
        ExtendedRenderKitService erks = Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);
        StringBuilder sb=new StringBuilder("window.close();");
        erks.addScript(facesContext,sb.toString());
        facesContext.renderResponse();
    }
   
}

JSFUtils

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.model.SelectItem;

import javax.servlet.http.HttpServletResponse;

import oracle.adf.model.binding.DCIteratorBinding;

import oracle.binding.BindingContainer;

import oracle.jbo.Row;
import oracle.jbo.ViewObject;


/**
 * Utils for webpages.
 *
 */
public class JSFUtils {

    private static final String NO_RESOURCE_FOUND = "Missing resource: ";

    private static Map<String, SelectItem> selectItems =
        new HashMap<String, SelectItem>();

    /**
     * Method for taking a reference to a JSF binding expression and returning
     * the matching object (or creating it).
     * @param expression
     * @return Managed object
     */
    public static Object resolveExpression(String expression) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        Application app = ctx.getApplication();
        ValueBinding bind = app.createValueBinding(expression);
        return bind.getValue(ctx);
    }

    /**
     * Convenience method for resolving a reference to a managed bean by name
     * rather than by expression.
     * @param beanName
     * @return Managed object
     */
    public static Object getManagedBeanValue(String beanName) {
        StringBuffer buff = new StringBuffer("#{");
        buff.append(beanName);
        buff.append("}");
        return resolveExpression(buff.toString());
    }

    /**
     * Method for setting a new object into a JSF managed bean.
     * Note: will fail silently if the supplied object does
     * not match the type of the managed bean
     * @param expression
     * @param newValue
     */
    public static void setExpressionValue(String expression, Object newValue) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        Application app = ctx.getApplication();
        ValueBinding bind = app.createValueBinding(expression);
        Class bindClass = bind.getType(ctx);
        if (bindClass.isPrimitive() || bindClass.isInstance(newValue)) {
            bind.setValue(ctx, newValue);
        }
    }

    public static void setManagedBeanValue(String beanName, Object newValue) {
        StringBuffer buff = new StringBuffer("#{");
        buff.append(beanName);
        buff.append("}");
        setExpressionValue(buff.toString(), newValue);
    }


    public static void storeOnSession(String key, Object object) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        Map sessionState = ctx.getExternalContext().getSessionMap();
        sessionState.put(key, object);
    }

    public static Object getFromSession(String key) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        Map sessionState = ctx.getExternalContext().getSessionMap();
        return sessionState.get(key);
    }

    public static Object getSession() {
        return FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    }

    public static Object getFromRequest(String key) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        Map reqMap = ctx.getExternalContext().getRequestMap();
        return reqMap.get(key);
    }


    public static String getStringFromBundle(String key) {
        ResourceBundle bundle = getBundle();
        return getStringSafely(bundle, key, null);
    }


    public static FacesMessage getMessageFromBundle(String key,
                                                    FacesMessage.Severity severity) {
        ResourceBundle bundle = getBundle();
        String summary = getStringSafely(bundle, key, null);
        String detail = getStringSafely(bundle, key + "_detail", summary);
        FacesMessage message = new FacesMessage(summary, detail);
        message.setSeverity(severity);
        return message;
    }

    public static void addFacesErrorMessage(String msg) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        FacesMessage fm =
            new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, "");
        ctx.addMessage(getRootViewComponentId(), fm);
    }

    public static void addFacesInfoMessage(String msg) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        FacesMessage fm =
            new FacesMessage(FacesMessage.SEVERITY_INFO, msg, "");
        ctx.addMessage(getRootViewComponentId(), fm);
    }

    public static void addFacesErrorMessage(String attrName, String msg) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        FacesMessage fm =
            new FacesMessage(FacesMessage.SEVERITY_ERROR, attrName, msg);
        ctx.addMessage(getRootViewComponentId(), fm);
    }

    public static String getRootViewId() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        return ctx.getViewRoot().getViewId();
    }

    public static String getRootViewComponentId() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        return ctx.getViewRoot().getId();
    }

    private static ResourceBundle getBundle() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        UIViewRoot uiRoot = ctx.getViewRoot();
        Locale locale = uiRoot.getLocale();
        ClassLoader ldr = Thread.currentThread().getContextClassLoader();
        return ResourceBundle.getBundle(ctx.getApplication().getMessageBundle(),
                                        locale, ldr);
    }

    private static String getStringSafely(ResourceBundle bundle, String key,
                                          String defaultValue) {
        String resource = null;
        try {
            resource = bundle.getString(key);
        } catch (MissingResourceException mrex) {
            if (defaultValue != null) {
                resource = defaultValue;
            } else {
                resource = NO_RESOURCE_FOUND + key;
            }
        }
        return resource;
    }

    public static SelectItem getSelectItem(String value) {
        SelectItem item = selectItems.get(value);
        if (item == null) {
            item = createNewSelectItem(value, value);
            selectItems.put(value, item);
        }
        return item;
    }

    public static SelectItem createNewSelectItem(String label, String value) {
        return new SelectItem(value, label);
    }

    public static HttpServletResponse getResponse() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        HttpServletResponse response =
            (HttpServletResponse)ctx.getExternalContext().getResponse();
        return response;

    }

    public static BindingContainer getBindingContainer() {
        return (BindingContainer)JSFUtils.resolveExpression("#{bindings}");
    }

    public static boolean hasRecords(String iteratorName) {
        Row[] rows = getAllRows(iteratorName);
        if ((rows == null) || (rows.length == 0)) {
            return false;
        }
        return true;
    }


    public static void setIteratorPosition(String iteratorName,
                                           String whereClause) throws Exception {
        ViewObject viewObject = getViewObject(iteratorName);
        if (viewObject.getWhereClause() != null) {
            viewObject.setWhereClauseParams(null);
            viewObject.executeQuery();

        }
        viewObject.setWhereClause(whereClause);
        //        viewObject.defineNamedWhereClauseParam(param, null, null);
        //        viewObject.setNamedWhereClauseParam(param, value);
        viewObject.executeQuery();
    }


    public static ViewObject getViewObject(String iteratorName) {
        ViewObject viewObject = null;
        BindingContainer bindings = JSFUtils.getBindingContainer();
        if (bindings != null) {
            DCIteratorBinding iter =
                (DCIteratorBinding)bindings.get(iteratorName);
            viewObject = iter.getViewObject();
        }
        return viewObject;
    }

    public static Row[] getAllRows(String iteratorName) {
        ViewObject vObject = getViewObject(iteratorName);
        vObject.executeQuery();
        Row[] rows = vObject.getAllRowsInRange();
        return rows;
    }

    public static ViewObject executeViewObject(String iteratorName) {
        ViewObject vObject = getViewObject(iteratorName);
        vObject.executeQuery();
        System.out.println("....Total rows..." + vObject.getRowCount());
        return vObject;
    }


    public static Row getCurrentRow(String iteratorName) {
        BindingContainer bindings = getBindingContainer();
        Row currentRow = null;
        if (bindings != null) {

            DCIteratorBinding iter =
                (DCIteratorBinding)bindings.get(iteratorName);
            ViewObject vObject = iter.getViewObject();
            currentRow = vObject.getCurrentRow();
        }
        return currentRow;
    }

    public static void executeIterator(String iteratorName) {
        BindingContainer bindings = getBindingContainer();
        if (bindings != null) {
            DCIteratorBinding iter =
                (DCIteratorBinding)bindings.get(iteratorName);
            ViewObject vObject = iter.getViewObject();
            vObject.executeQuery();
        }
    }

    public static Object getCurrentRowAttribute(String iteratorName,
                                                String attributeName) {
        Row row = getCurrentRow(iteratorName);
        return row.getAttribute(attributeName);
    }

    public static Object getFromRequestParameterMap(String key) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        return ctx.getExternalContext().getRequestParameterMap().get(key);

    }

    public static FacesContext getFacesContext() {
        return FacesContext.getCurrentInstance();
    }

    public static void postMessageToFacesContext(FacesMessage.Severity severity,
                                                 String summary,
                                                 String detail) {
        postMessage(null, severity, summary, detail);
    }

    public static void postMessage(String componentId,
                                   FacesMessage.Severity severity,
                                   String summary, String detail) {
        getFacesContext().addMessage(componentId,
                                     new FacesMessage(severity, summary,
                                                      detail));
    }

}

ADFUtils

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

import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.el.ValueExpression;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import oracle.adf.controller.ControllerContext;
import oracle.adf.controller.TaskFlowId;
import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;
import oracle.adf.model.binding.DCParameter;
import oracle.adf.share.logging.ADFLogger;
import oracle.adf.view.rich.component.rich.data.RichTable;
import oracle.adf.view.rich.component.rich.input.RichInputText;
import oracle.adf.view.rich.component.rich.layout.RichPanelTabbed;
import oracle.adf.view.rich.component.rich.layout.RichShowDetailItem;
import oracle.adf.view.rich.context.AdfFacesContext;

import oracle.binding.AttributeBinding;
import oracle.binding.BindingContainer;
import oracle.binding.ControlBinding;
import oracle.binding.OperationBinding;

import oracle.jbo.ApplicationModule;
import oracle.jbo.Key;
import oracle.jbo.Row;
import oracle.jbo.uicli.binding.JUCtrlValueBinding;

import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
import org.apache.myfaces.trinidad.util.Service;


/**
 * A series of convenience functions for dealing with ADF Bindings.
 * Note: Updated for JDeveloper 11
 *
 * @author Duncan Mills
 * @author Steve Muench
 * @author Ric Smith
 *
 * $Id: ADFUtils.java 2513 2007-09-20 20:39:13Z ralsmith $.
 */
public class ADFUtils {

    public static final ADFLogger LOGGER =
        ADFLogger.createADFLogger(ADFUtils.class);

    /**
     * Get application module for an application module data control by name.
     * @param name application module data control name
     * @return ApplicationModule
     */
    public static ApplicationModule getApplicationModuleForDataControl(String name) {
        return (ApplicationModule)JSFUtils.resolveExpression("#{data." + name +
                                                             ".dataProvider}");
    }

    /**
     * A convenience method for getting the value of a bound attribute in the
     * current page context programatically.
     * @param attributeName of the bound value in the pageDef
     * @return value of the attribute
     */
    public static Object getBoundAttributeValue(String attributeName) {
        return findControlBinding(attributeName).getInputValue();
    }

    /**
     * A convenience method for setting the value of a bound attribute in the
     * context of the current page.
     * @param attributeName of the bound value in the pageDef
     * @param value to set
     */
    public static void setBoundAttributeValue(String attributeName,
                                              Object value) {
        findControlBinding(attributeName).setInputValue(value);
    }

    /**
     * Returns the evaluated value of a pageDef parameter.
     * @param pageDefName reference to the page definition file of the page with the parameter
     * @param parameterName name of the pagedef parameter
     * @return evaluated value of the parameter as a String
     */
    public static Object getPageDefParameterValue(String pageDefName,
                                                  String parameterName) {
        BindingContainer bindings = findBindingContainer(pageDefName);
        DCParameter param =
            ((DCBindingContainer)bindings).findParameter(parameterName);
        return param.getValue();
    }

    /**
     * Convenience method to find a DCControlBinding as an AttributeBinding
     * to get able to then call getInputValue() or setInputValue() on it.
     * @param bindingContainer binding container
     * @param attributeName name of the attribute binding.
     * @return the control value binding with the name passed in.
     *
     */
    public static AttributeBinding findControlBinding(BindingContainer bindingContainer,
                                                      String attributeName) {
        if (attributeName != null) {
            if (bindingContainer != null) {
                ControlBinding ctrlBinding =
                    bindingContainer.getControlBinding(attributeName);
                if (ctrlBinding instanceof AttributeBinding) {
                    return (AttributeBinding)ctrlBinding;
                }
            }
        }
        return null;
    }

    /**
     * Convenience method to find a DCControlBinding as a JUCtrlValueBinding
     * to get able to then call getInputValue() or setInputValue() on it.
     * @param attributeName name of the attribute binding.
     * @return the control value binding with the name passed in.
     *
     */
    public static AttributeBinding findControlBinding(String attributeName) {
        return findControlBinding(getBindingContainer(), attributeName);
    }

    /**
     * Return the current page's binding container.
     * @return the current page's binding container
     */
    public static BindingContainer getBindingContainer() {
        // return (BindingContainer)JSFUtils.resolveExpression("#{bindings}");
        FacesContext fc = FacesContext.getCurrentInstance();
        BindingContainer bindings =
            (BindingContainer)fc.getApplication().evaluateExpressionGet(fc,
                                                                        "#{bindings}",
                                                                        BindingContainer.class);
        return bindings;
    }

    /**
     * Return the Binding Container as a DCBindingContainer.
     * @return current binding container as a DCBindingContainer
     */
    public static DCBindingContainer getDCBindingContainer() {
        return (DCBindingContainer)getBindingContainer();
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding.
     *
     * Uses the value of the 'valueAttrName' attribute as the key for
     * the SelectItem key.
     *
     * @param iteratorName ADF iterator binding name
     * @param valueAttrName name of the value attribute to use
     * @param displayAttrName name of the attribute from iterator rows to display
     * @return ADF Faces SelectItem for an iterator binding
     */
    public static List<SelectItem> selectItemsForIterator(String iteratorName,
                                                          String valueAttrName,
                                                          String displayAttrName) {
        return selectItemsForIterator(findIterator(iteratorName),
                                      valueAttrName, displayAttrName);
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding.
     *
     * Uses the value of the 'valueAttrName' attribute as the key for
     * the SelectItem key.
     *
     * @param iteratorName ADF iterator binding name
     * @param valueAttrName name of the value attribute to use
     * @param displayAttrNames array of attribute names from iterator rows to display
     * @return ADF Faces SelectItem for an iterator binding
     */
    public static List<SelectItem> selectItemsForIterator(String iteratorName,
                                                          String valueAttrName,
                                                          String[] displayAttrNames)  {
        return selectItemsForIterator(findIterator(iteratorName),
                                      valueAttrName, displayAttrNames);
    }

    /**
     * Get a List of attributes as a Map (of name, value) for an iterator.
     * @param iter iterator binding
     * @param attrNames array of attribute names for attributes to be retrieved
     * @return List of attribute values
     */
    public static List<Map<String, Object>> attributesListForIterator(DCIteratorBinding iter,
                                                                      String[] attrNames) {
        List<Map<String, Object>> attributeList =
            new ArrayList<Map<String, Object>>();
        for (Row r : iter.getAllRowsInRange()) {
            Map<String, Object> alist = new HashMap<String, Object>();
            for (String aName : attrNames) {
                alist.put(aName, r.getAttribute(aName));
            }
            attributeList.add(alist);
        }
        return attributeList;
    }

    /**
     * Get a List of attributes as a Map (of name, value) for an iterator.
     * @param iteratorName ADF iterator binding name
     * @param attrNames array of attribute names for attributes to be retrieved
     * @return List of attribute values for an iterator
     */
    public static List<Map<String, Object>> attributeListForIterator(String iteratorName,
                                                                     String[] attrNames) {
        return attributesListForIterator(findIterator(iteratorName),
                                         attrNames);
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding with description.
     *
     * Uses the value of the 'valueAttrName' attribute as the key for
     * the SelectItem key.
     *
     * @param iteratorName ADF iterator binding name
     * @param valueAttrName name of the value attribute to use
     * @param displayAttrName name of the attribute from iterator rows to display
     * @param descriptionAttrName name of the attribute to use for description
     * @return ADF Faces SelectItem for an iterator binding with description
     */
    public static List<SelectItem> selectItemsForIterator(String iteratorName,
                                                          String valueAttrName,
                                                          String displayAttrName,
                                                          String descriptionAttrName)  {
        return selectItemsForIterator(findIterator(iteratorName),
                                      valueAttrName, displayAttrName,
                                      descriptionAttrName);
    }

    /**
     * Get List of attribute values for an iterator.
     * @param iteratorName ADF iterator binding name
     * @param valueAttrName value attribute to use
     * @return List of attribute values for an iterator
     */
    public static List attributeListForIterator(String iteratorName,
                                                String valueAttrName) {
        return attributeListForIterator(findIterator(iteratorName),
                                        valueAttrName);
    }

    /**
     * Get List of Key objects for rows in an iterator.
     * @param iteratorName iterabot binding name
     * @return List of Key objects for rows
     */
    public static List<Key> keyListForIterator(String iteratorName)  {
        return keyListForIterator(findIterator(iteratorName));
    }

    /**
     * Get List of Key objects for rows in an iterator.
     * @param iter iterator binding
     * @return List of Key objects for rows
     */
    public static List<Key> keyListForIterator(DCIteratorBinding iter) {
        List<Key> attributeList = new ArrayList<Key>();
        for (Row r : iter.getAllRowsInRange()) {
            attributeList.add(r.getKey());
        }
        return attributeList;
    }

    /**
     * Get List of Key objects for rows in an iterator using key attribute.
     * @param iteratorName iterator binding name
     * @param keyAttrName name of key attribute to use
     * @return List of Key objects for rows
     */
    public static List<Key> keyAttrListForIterator(String iteratorName,
                                                   String keyAttrName) {
        return keyAttrListForIterator(findIterator(iteratorName), keyAttrName);
    }

    /**
     * Get List of Key objects for rows in an iterator using key attribute.
     *
     * @param iter iterator binding
     * @param keyAttrName name of key attribute to use
     * @return List of Key objects for rows
     */
    public static List<Key> keyAttrListForIterator(DCIteratorBinding iter,
                                                   String keyAttrName) {
        List<Key> attributeList = new ArrayList<Key>();
        for (Row r : iter.getAllRowsInRange()) {
            attributeList.add(new Key(new Object[] { r.getAttribute(keyAttrName) }));
        }
        return attributeList;
    }

    /**
     * Get a List of attribute values for an iterator.
     *
     * @param iter iterator binding
     * @param valueAttrName name of value attribute to use
     * @return List of attribute values
     */
    public static List attributeListForIterator(DCIteratorBinding iter,
                                                String valueAttrName) {
        List attributeList = new ArrayList();
        for (Row r : iter.getAllRowsInRange()) {
            attributeList.add(r.getAttribute(valueAttrName));
        }
        return attributeList;
    }

    /**
     * Find an iterator binding in the current binding container by name.
     *
     * @param name iterator binding name
     * @return iterator binding
     */
    public static DCIteratorBinding findIterator(String name) {
        DCIteratorBinding iter =
            getDCBindingContainer().findIteratorBinding(name);
        if (iter == null) {
           // throw new IteratorNotFound("Iterator '" + name + "' not found");
        }
        return iter;
    }

    public static DCIteratorBinding findIterator(String bindingContainer,
                                                 String iterator) {
        DCBindingContainer bindings =
            (DCBindingContainer)JSFUtils.resolveExpression("#{" +
                                                           bindingContainer +
                                                           "}");
        if (bindings == null) {
            throw new RuntimeException("Binding container '" +
                                       bindingContainer + "' not found");
        }
        DCIteratorBinding iter = bindings.findIteratorBinding(iterator);
        if (iter == null) {
            throw new RuntimeException("Iterator '" + iterator +
                                       "' not found");
        }
        return iter;
    }

    public static JUCtrlValueBinding findCtrlBinding(String name) {
        JUCtrlValueBinding rowBinding =
            (JUCtrlValueBinding)getDCBindingContainer().findCtrlBinding(name);
        if (rowBinding == null) {
            throw new RuntimeException("CtrlBinding " + name + "' not found");
        }
        return rowBinding;
    }

    /**
     * Find an operation binding in the current binding container by name.
     *
     * @param name operation binding name
     * @return operation binding
     */
    public static OperationBinding findOperation(String name) {
        OperationBinding op =
            getDCBindingContainer().getOperationBinding(name);
        if (op == null) {
            throw new RuntimeException("Operation '" + name + "' not found");
        }
        return op;
    }

    /**
     * Find an operation binding in the current binding container by name.
     *
     * @param bindingContianer binding container name
     * @param opName operation binding name
     * @return operation binding
     */
    public static OperationBinding findOperation(String bindingContianer,
                                                 String opName) {
        DCBindingContainer bindings =
            (DCBindingContainer)JSFUtils.resolveExpression("#{" +
                                                           bindingContianer +
                                                           "}");
        if (bindings == null) {
            throw new RuntimeException("Binding container '" +
                                       bindingContianer + "' not found");
        }
        OperationBinding op = bindings.getOperationBinding(opName);
        if (op == null) {
            throw new RuntimeException("Operation '" + opName + "' not found");
        }
        return op;
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding with description.
     *
     * Uses the value of the 'valueAttrName' attribute as the key for
     * the SelectItem key.
     *
     * @param iter ADF iterator binding
     * @param valueAttrName name of value attribute to use for key
     * @param displayAttrName name of the attribute from iterator rows to display
     * @param descriptionAttrName name of the attribute for description
     * @return ADF Faces SelectItem for an iterator binding with description
     */
    public static List<SelectItem> selectItemsForIterator(DCIteratorBinding iter,
                                                          String valueAttrName,
                                                          String displayAttrName,
                                                          String descriptionAttrName) {
        List<SelectItem> selectItems = new ArrayList<SelectItem>();
        for (Row r : iter.getAllRowsInRange()) {
            selectItems.add(new SelectItem(r.getAttribute(valueAttrName),
                                           (String)r.getAttribute(displayAttrName),
                                           (String)r.getAttribute(descriptionAttrName)));
        }
        return selectItems;
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding.
     *
     * Uses the value of the 'valueAttrName' attribute as the key for
     * the SelectItem key.
     *
     * @param iter ADF iterator binding
     * @param valueAttrName name of value attribute to use for key
     * @param displayAttrName name of the attribute from iterator rows to display
     * @return ADF Faces SelectItem for an iterator binding
     */
    public static List<SelectItem> selectItemsForIterator(DCIteratorBinding iter,
                                                          String valueAttrName,
                                                          String displayAttrName) {
        List<SelectItem> selectItems = new ArrayList<SelectItem>();
        for (Row r : iter.getAllRowsInRange()) {
            selectItems.add(new SelectItem(r.getAttribute(valueAttrName),
                                           (String)r.getAttribute(displayAttrName)));
        }
        return selectItems;
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding.
     *
     * Uses the value of the 'valueAttrName' attribute as the key for
     * the SelectItem key.
     *
     * @param iter ADF iterator binding
     * @param valueAttrName name of value attribute to use for key
     * @param displayAttrNames array of attribute names from iterator rows to display
     * @return ADF Faces SelectItem for an iterator binding
     */
    public static List<SelectItem> selectItemsForIterator(DCIteratorBinding iter,
                                                          String valueAttrName,
                                                          String[] displayAttrNames) {
        List<SelectItem> selectItems = new ArrayList<SelectItem>();
        for (Row r : iter.getAllRowsInRange()) {
            StringBuilder buf = new StringBuilder();
            for (int idx = 0; idx < displayAttrNames.length; idx++) {
                buf.append((String)r.getAttribute(displayAttrNames[idx]));
                if (idx < (displayAttrNames.length - 1)) {
                    buf.append("-");
                }
            }
            selectItems.add(new SelectItem(r.getAttribute(valueAttrName),
                                           buf.toString()));
        }
        return selectItems;
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding.
     *
     * Uses the rowKey of each row as the SelectItem key.
     *
     * @param iteratorName ADF iterator binding name
     * @param displayAttrName name of the attribute from iterator rows to display
     * @return ADF Faces SelectItem for an iterator binding
     */
    public static List<SelectItem> selectItemsByKeyForIterator(String iteratorName,
                                                               String displayAttrName)  {
        return selectItemsByKeyForIterator(findIterator(iteratorName),
                                           displayAttrName);
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding with discription.
     *
     * Uses the rowKey of each row as the SelectItem key.
     *
     * @param iteratorName ADF iterator binding name
     * @param displayAttrName name of the attribute from iterator rows to display
     * @param descriptionAttrName name of the attribute for description
     * @return ADF Faces SelectItem for an iterator binding with discription
     */
    public static List<SelectItem> selectItemsByKeyForIterator(String iteratorName,
                                                               String displayAttrName,
                                                               String descriptionAttrName)  {
        return selectItemsByKeyForIterator(findIterator(iteratorName),
                                           displayAttrName,
                                           descriptionAttrName);
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding with discription.
     *
     * Uses the rowKey of each row as the SelectItem key.
     *
     * @param iter ADF iterator binding
     * @param displayAttrName name of the attribute from iterator rows to display
     * @param descriptionAttrName name of the attribute for description
     * @return ADF Faces SelectItem for an iterator binding with discription
     */
    public static List<SelectItem> selectItemsByKeyForIterator(DCIteratorBinding iter,
                                                               String displayAttrName,
                                                               String descriptionAttrName) {
        List<SelectItem> selectItems = new ArrayList<SelectItem>();
        for (Row r : iter.getAllRowsInRange()) {
            selectItems.add(new SelectItem(r.getKey(),
                                           (String)r.getAttribute(displayAttrName),
                                           (String)r.getAttribute(descriptionAttrName)));
        }
        return selectItems;
    }

    /**
     * Get List of ADF Faces SelectItem for an iterator binding.
     *
     * Uses the rowKey of each row as the SelectItem key.
     *
     * @param iter ADF iterator binding
     * @param displayAttrName name of the attribute from iterator rows to display
     * @return List of ADF Faces SelectItem for an iterator binding
     */
    public static List<SelectItem> selectItemsByKeyForIterator(DCIteratorBinding iter,
                                                               String displayAttrName) {
        List<SelectItem> selectItems = new ArrayList<SelectItem>();
        for (Row r : iter.getAllRowsInRange()) {
            selectItems.add(new SelectItem(r.getKey(),
                                           (String)r.getAttribute(displayAttrName)));
        }
        return selectItems;
    }

    /**
     * Find the BindingContainer for a page definition by name.
     *
     * Typically used to refer eagerly to page definition parameters. It is
     * not best practice to reference or set bindings in binding containers
     * that are not the one for the current page.
     *
     * @param pageDefName name of the page defintion XML file to use
     * @return BindingContainer ref for the named definition
     */
    private static BindingContainer findBindingContainer(String pageDefName) {
        BindingContext bctx = getDCBindingContainer().getBindingContext();
        BindingContainer foundContainer =
            bctx.findBindingContainer(pageDefName);
        return foundContainer;
    }

    public static void printOperationBindingExceptions(List opList) {
        if (opList != null && !opList.isEmpty()) {
            for (Object error : opList) {
                LOGGER.severe(error.toString());
            }
        }
    }

    /**
     * Get the page flow scope
     * @return
     */
    public static Map getPageFlowScope() {
        return AdfFacesContext.getCurrentInstance().getPageFlowScope();
    }

    /**
     * Open a new browser tab/window starting a new bounded task flow.
     *
     * @param taskFlowId - id of bounded task flow to show in new window
     * @param taskFlowParams - params for the task flow (if any)
     * @param windowName - name of browser tab/window (window.name)
     * @param openInWindow - true will open a browser window (if settings of the browser
     *     allow this), false will open a new browser tab.
     */
    public static void launchTaskFlowInNewWindow(TaskFlowId taskFlowId,
                                                 Map taskFlowParams,
                                                 String windowName,
                                                 boolean openInWindow) {
        launchTaskFlowInNewWindow(taskFlowId, taskFlowParams, windowName,
                                  openInWindow, 1000, 750);

    }


    /**
     * Open a new browser tab/window starting a new bounded task flow.
     *
     * @param taskFlowId - id of bounded task flow to show in new window
     * @param taskFlowParams - params for the task flow (if any)
     * @param windowName - name of browser tab/window (window.name)
     * @param openInWindow - true will open a browser window (if settings of the browser
     *     allow this), false will open a new browser tab.
     * @param width
     * @param height
     */

    public static void launchTaskFlowInNewWindow(TaskFlowId taskFlowId,
                                                 Map taskFlowParams,
                                                 String windowName,
                                                 boolean openInWindow,
                                                 int width, int height) {

        String url =
            ControllerContext.getInstance().getTaskFlowURL(false, taskFlowId,
                                                           taskFlowParams);

        if (url == null) {
            throw new Error("Unable to launch window for task flow id " +
                            taskFlowId);
        }

        FacesContext context = FacesContext.getCurrentInstance();
        ExtendedRenderKitService extendedRenderKitService =
            Service.getService(context.getRenderKit(),
                               ExtendedRenderKitService.class);

        // Build javascript to open a new browser tab/window
        StringBuilder script = new StringBuilder();

        // Unable to get a named firefox tab to gain focus.  To workaround
        // issue we close the tab first, then open it.
        if (!openInWindow && windowName != null) {

            script.append("var hWinx = window.open(\"");
            script.append("about:blank"); // the URL
            script.append("\",\"");
            script.append(windowName);
            script.append("\"");
            script.append(");");
            script.append("\n");
            script.append("hWinx.close();\n");
        }

        // Set a variable with the window properties
        script.append("var winProps = \"status=yes,toolbar=no,copyhistory=no,width=" +
                      width + ",height=" + height + "\";");
        // If we aren't going to open in a new window, then clear the window properties
        if (!openInWindow) {
            script.append("winProps = '';");
        }
        // Set isOpenerValid to true if window.opener (a parent window) is defined and open
        script.append("var isOpenerValid = (typeof(window.opener) != 'undefined' && window.opener != undefined && !window.opener.closed);");
        // Set useProps to true if openInWindow is true or isOpenerValid is true
        script.append("var useProps = (" + openInWindow +
                      " || isOpenerValid);");
        // Set win to the current window, unless we need to use the parent, then set to window.opener (the parent window)
        script.append("var win = window; if (typeof(isChildWindow) != 'undefined' && isChildWindow != undefined && isChildWindow == true && isOpenerValid) {win = window.opener;}");
        // Set hWin to the window returned by calling open on win
        script.append("var hWin = win.open(\"");
        script.append(url); // the URL
        script.append("\",\"");
        script.append(windowName);
        script.append("\"");
        script.append(", winProps");
        script.append(");");
        // Set focus to the window opened.
        script.append("hWin.focus();");

        extendedRenderKitService.addScript(context, script.toString());
    }

    public static void executeClientSideScript(String script) {
        FacesContext context = FacesContext.getCurrentInstance();
        ExtendedRenderKitService extendedRenderKitService =
            Service.getService(context.getRenderKit(),
                               ExtendedRenderKitService.class);

        extendedRenderKitService.addScript(context, script);
    }


    /**
     * Get the id of the RichShowDetailItem which is currently disclosed within the
     * RichPanelTabbed or null if no children disclosed.
     *
     * @param panelTabbed
     * @return
     */
    public static String getDisclosedDetailItemId(RichPanelTabbed panelTabbed) {
        RichShowDetailItem item = getDisclosedDetailItem(panelTabbed);
        if (item != null) {
            return item.getId();
        }
        return null;
    }

    /**
     * Get the RichShowDetailItem which is currently disclosed within the
     * RichPanelTabbed or null if no children disclosed.
     *
     * @param panelTabbed
     * @return
     */
    public static RichShowDetailItem getDisclosedDetailItem(RichPanelTabbed panelTabbed) {
        if (panelTabbed != null) {
            Iterator iter = panelTabbed.getChildren().iterator();
            // Loop through all the child components
            while (iter.hasNext()) {
                UIComponent component = (UIComponent)iter.next();
                // Make sure we only check components that are detailItems
                if (component instanceof RichShowDetailItem) {
                    RichShowDetailItem detailItem =
                        (RichShowDetailItem)component;
                    if (detailItem.isDisclosed()) {
                        return detailItem;
                    }
                }
            }
        }
        return null;
    }

    /**
     * Helper method to check if a UI component value
     * is null or empty.
     * @param component UIComponent
     * @return true / false
     */
    public static boolean isEmpty(UIComponent component) {
        boolean isEmpty = false;
        if (component == null) {
            isEmpty = true;
        } else {
            // for a text field, check the value as a String
            if (component instanceof RichInputText) {
                RichInputText textField = (RichInputText)component;
                if (textField.getValue() == null ||
                    ((String)textField.getValue()).length() <= 0) {
                    isEmpty = true;
                }
            }

        }
        return isEmpty;
    }

    /**
     * Get the list containging the selected rows for the given table <br/>
     * Make sure the ADF table definition does not have the selection listener
     * and the make current set.
     * @param table
     * @return
     */
    public static List<Row> getSelectedRows(RichTable table) {
        List<Row> rows = new ArrayList<Row>();

        // get the selected row keys (iterator)
        Iterator keyIter = table.getSelectedRowKeys().iterator();
        // remember selected row keys
        Object oldKey = table.getRowKey();
        // loop for each selection
        while (keyIter.hasNext()) {
            
        }
        // restore originally selected rows
        table.setRowKey(oldKey);
        return rows;
    }

    public static void printRow(Row row) {
        System.out.println("\nSTART " + row.getKey() +
                           " *********************");
        for (int i = 0; i < row.getAttributeCount(); i++) {
            System.out.println("row[" + row.getAttributeNames()[i] + "]:[" +
                               row.getAttribute(i) + "]");

        }
        System.out.println("END   " + row.getKey() +
                           "*********************\n");
    }


    /**
     * Get a List of attributes as a Map (of name, value) for an iterator.
     * @param iter iterator binding
     * @param keyAttrName attribut name for the key of the map
     * @param valueAttrName attribut name for the value
     * @return Map of attribute values
     */
    public static Map<Object, Object> attributesMapForIterator(DCIteratorBinding iter,
                                                               String keyAttrName,
                                                               String valueAttrName) {
        Map<Object, Object> amap = new HashMap<Object, Object>();
        for (Row r : iter.getAllRowsInRange()) {
            amap.put(r.getAttribute(keyAttrName),
                     r.getAttribute(valueAttrName));
        }
        return amap;
    }

    /**
     * Get a List of attributes as a Map (of name, value) for an iterator.
     * @param iteratorName ADF iterator binding name
     * @param keyAttrName attribut name for the key of the map
     * @param valueAttrName attribut name for the value
     * @return Map of attribute values
     */
    public static Map<Object, Object> attributeMapForIterator(String iteratorName,
                                                              String keyAttrName,
                                                              String valueAttrName) {
        return attributesMapForIterator(findIterator(iteratorName),
                                        keyAttrName, valueAttrName);
    }

    public static Object invokeMethodExpression(String expr, Class returnType,
                                                Class[] argTypes,
                                                Object[] args) {
        FacesContext fc = FacesContext.getCurrentInstance();
        ELContext elctx = fc.getELContext();
        ExpressionFactory elFactory =
            fc.getApplication().getExpressionFactory();
        MethodExpression methodExpr =
            elFactory.createMethodExpression(elctx, expr, returnType,
                                             argTypes);
        return methodExpr.invoke(elctx, args);
    }

    public static Object invokeMethodExpression(String expr, Class returnType,
                                                Class argType,
                                                Object argument) {
        return invokeMethodExpression(expr, returnType,
                                      new Class[] { argType },
                                      new Object[] { argument });
    }
    /**
    * Programmatic evaluation of EL.
    *
    * @param el EL to evaluate
    * @return Result of the evaluation
    */
    public static Object evaluateEL(String el) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ELContext elContext = facesContext.getELContext();
    ExpressionFactory expressionFactory =
    facesContext.getApplication().getExpressionFactory();
    ValueExpression exp =
    expressionFactory.createValueExpression(elContext, el,
    Object.class);

    return exp.getValue(elContext);
    }

    /**
    * Programmatic invocation of a method that an EL evaluates to.
    * The method must not take any parameters.
    *
    * @param el EL of the method to invoke
    * @return Object that the method returns
    */
    public static Object invokeEL(String el) {
    return invokeEL(el, new Class[0], new Object[0]);
    }

    /**
    * Programmatic invocation of a method that an EL evaluates to.
    *
    * @param el EL of the method to invoke
    * @param paramTypes Array of Class defining the types of the parameters
    * @param params Array of Object defining the values of the parametrs
    * @return Object that the method returns
    */
    public static Object invokeEL(String el, Class[] paramTypes,
    Object[] params) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ELContext elContext = facesContext.getELContext();
    ExpressionFactory expressionFactory =
    facesContext.getApplication().getExpressionFactory();
    MethodExpression exp =
    expressionFactory.createMethodExpression(elContext, el,
    Object.class, paramTypes);

    return exp.invoke(elContext, params);
    }

}

A Guide to Installing Oracle HR Schema on an Existing Docker Container

  Hi Reader, Today I want to share my learning on how to install Oracle HR schema on a existing docker container. Step 1: Download the verif...