Example usage for com.liferay.portal.kernel.portlet PortletBag getPortletInstance

List of usage examples for com.liferay.portal.kernel.portlet PortletBag getPortletInstance

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.portlet PortletBag getPortletInstance.

Prototype

public Portlet getPortletInstance();

Source Link

Usage

From source file:com.liferay.portlet.PortletInstanceFactoryImpl.java

License:Open Source License

public InvokerPortlet create(Portlet portlet, ServletContext servletContext) throws PortletException {

    boolean instanceable = false;

    if ((portlet.isInstanceable()) && (PortletConstants.getInstanceId(portlet.getPortletId()) != null)) {

        instanceable = true;//from w w  w.j  a  v a  2  s.  c  om
    }

    Map<String, InvokerPortlet> portletInstances = _pool.get(portlet.getRootPortletId());

    if (portletInstances == null) {
        portletInstances = new ConcurrentHashMap<String, InvokerPortlet>();

        _pool.put(portlet.getRootPortletId(), portletInstances);
    }

    InvokerPortlet instanceInvokerPortletInstance = null;

    if (instanceable) {
        instanceInvokerPortletInstance = portletInstances.get(portlet.getPortletId());
    }

    InvokerPortlet rootInvokerPortletInstance = null;

    if (instanceInvokerPortletInstance == null) {
        rootInvokerPortletInstance = portletInstances.get(portlet.getRootPortletId());

        if (rootInvokerPortletInstance == null) {
            PortletBag portletBag = PortletBagPool.get(portlet.getRootPortletId());

            // Portlet bag should never be null unless the portlet has been
            // undeployed

            if (portletBag == null) {
                PortletBagFactory portletBagFactory = new PortletBagFactory();

                portletBagFactory.setClassLoader(PortalClassLoaderUtil.getClassLoader());
                portletBagFactory.setServletContext(servletContext);
                portletBagFactory.setWARFile(false);

                try {
                    portletBag = portletBagFactory.create(portlet);
                } catch (Exception e) {
                    throw new PortletException(e);
                }
            }

            PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext);

            rootInvokerPortletInstance = init(portlet, portletConfig, portletBag.getPortletInstance());

            portletInstances.put(portlet.getRootPortletId(), rootInvokerPortletInstance);
        }
    }

    if (instanceable) {
        if (instanceInvokerPortletInstance == null) {
            javax.portlet.Portlet portletInstance = rootInvokerPortletInstance.getPortletInstance();

            PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext);

            PortletContext portletContext = portletConfig.getPortletContext();
            boolean checkAuthToken = rootInvokerPortletInstance.isCheckAuthToken();
            boolean facesPortlet = rootInvokerPortletInstance.isFacesPortlet();
            boolean strutsPortlet = rootInvokerPortletInstance.isStrutsPortlet();
            boolean strutsBridgePortlet = rootInvokerPortletInstance.isStrutsBridgePortlet();

            instanceInvokerPortletInstance = _internalInvokerPortletPrototype.create(portlet, portletInstance,
                    portletConfig, portletContext, checkAuthToken, facesPortlet, strutsPortlet,
                    strutsBridgePortlet);

            portletInstances.put(portlet.getPortletId(), instanceInvokerPortletInstance);
        }
    } else {
        if (rootInvokerPortletInstance != null) {
            instanceInvokerPortletInstance = rootInvokerPortletInstance;
        }
    }

    return instanceInvokerPortletInstance;
}