Package net.tinyportal.servlet

Source Code of net.tinyportal.servlet.Portal

/*
    This file is part of tPortal.

    tPortal 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.

    tPortal 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 tPortal.  If not, see <http://www.gnu.org/licenses/>.

    The original code was written by Sebastien Bettinger <sebastien.bettinger@gmail.com>

*/

package net.tinyportal.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.tinyportal.bean.PortletHolder;
import net.tinyportal.javax.portlet.TpActionRequest;
import net.tinyportal.javax.portlet.TpActionResponse;
import net.tinyportal.javax.portlet.TpPortletContext;
import net.tinyportal.javax.portlet.TpPortletRequest;
import net.tinyportal.javax.portlet.TpRenderRequest;
import net.tinyportal.javax.portlet.TpRenderResponse;
import net.tinyportal.tools.FictiveHttpServletResponse;

public class Portal {
  /*
   * Gestion des portlets a ne pas prendre en compte
   */
  private static List<String> onlyThesesPortlets = new ArrayList<String>();
  private static List<String> disabledPortlet = new ArrayList<String>()
  public static List<String> getDisabledPortlet() {
    return disabledPortlet;
  }
 
  public static void addDisabledPortlet(String porletName) {
    disabledPortlet.add(porletName);
  }
 
  public static void addOnlyPortlet(String porletName) {
    onlyThesesPortlets.add(porletName);
  }
 
  public static void resetOnlyPortlet() {
    onlyThesesPortlets = new ArrayList<String>();
  }
 
  public static boolean isActivePortlet(String portletName) {
    if (!onlyThesesPortlets.isEmpty())
      return onlyThesesPortlets.contains(portletName);
    else
      return (!disabledPortlet.contains(portletName));
  }

  private static Map<String, PortletHolder> portletPool = new HashMap<String, PortletHolder>();
 
  public static void addPortlet(String portletName, PortletHolder portlet) {
    portletPool.put(portletName, portlet);
  }
 
  public static void addPortlets(Map<String, PortletHolder> portletsMap) {
    portletPool.putAll(portletsMap);
  }
 
  public static PortletHolder getPortlet(String portletName) {
    return portletPool.get(portletName);
  }
 
  public static Set<String> getPortletSet() {
    return portletPool.keySet();
  }
 
  /*
   * On recupere soit le portlet de la session, soit un nouveau portlet qui est alors mis en session
   */
  public static PortletHolder getPortlet(HttpServletRequest request, String portletName) {
    HttpSession session = request.getSession(true);
    PortletHolder bean = (PortletHolder)session.getAttribute(portletName);
    if (bean == null) {
      PortletHolder legacy = portletPool.get(portletName);
      session.setAttribute(portletName, bean = legacy.clone());
    }
   
    return bean;
  }
 
 
  /**
   * Map stockant les contexts des portlets connus du portail
   */
  private static Map<String, TpPortletContext> portletsContextPool = new HashMap<String, TpPortletContext>();
 
  /**
   * Ajoute un context de portlet dans le conteneur
   * @param contextPath
   * @param context
   */
  public static void addContext(TpPortletContext context) {
    portletsContextPool.put(context.getPortletXml().getPortletPath(), context);
  }
  public static TpPortletContext getContext(String contextPath) {
    return portletsContextPool.get(contextPath);
  }
  public static boolean isContextExist(String contextPath) {
    return portletsContextPool.containsKey(contextPath);
  }
  public static boolean isContextExist(TpPortletContext context) {
    return portletsContextPool.containsValue(context);
  }
 
 
  static void doAction(HttpServletRequest request, HttpServletResponse response, PortletHolder portletHolder, GenericPortlet portlet)
      throws WindowStateException, PortletModeException, PortletException, IOException {

    TpPortletContext TpPortletContext = (TpPortletContext) portlet.getPortletContext();
    TpActionRequest actionRequest = new TpActionRequest(portletHolder,request,TpPortletContext);
    TpActionResponse actionResponse = new TpActionResponse(portletHolder,response);

    setWindowState(request, portletHolder);
    setPortletMode(request, portletHolder);
    setPortletParameters(request, portletHolder, actionRequest);
   
    try {
      portlet.processAction(actionRequest, actionResponse);
      if (actionResponse.isRedirected())
        response.sendRedirect(actionResponse.getRedirection());
    } catch (IllegalStateException ise) {
      actionResponse.cancelRedirected();
    }
    portletHolder.setActionResponse(actionResponse);

  }


  static void doRefresh(HttpServletRequest request, HttpServletResponse response, PortletHolder portletHolder, GenericPortlet portlet) throws PortletException, IOException, ServletException {
    //Si une redirection est a faire, on ne fait pas de rendu
    if (portletHolder.getActionResponse()!=null && portletHolder.getActionResponse().isRedirected()) return;
    /*
     * Calcul du portlet
     */
    TpRenderRequest TPrequest = (TpRenderRequest)portletHolder.getRenderRequest();
    TpRenderResponse TPresponse = (TpRenderResponse)portletHolder.getRenderResponse();

    RequestDispatcher servletDispatcher;
    portlet.render(TPrequest,TPresponse);
    if (TPresponse.getDispatcher() != null) {

      Enumeration eAttribute = TPrequest.getAttributeNames();
      while (eAttribute.hasMoreElements()) {
        String attribute = (String) eAttribute.nextElement();
        Object value = TPrequest.getAttribute(attribute);
        request.setAttribute(attribute, value);
      }
      servletDispatcher = TPresponse.getDispatcher();
      HttpServletResponse newResponse = new FictiveHttpServletResponse((HttpServletResponse) response, TPresponse);       
      servletDispatcher.include(request, newResponse);
      portletHolder.setContent(newResponse.toString());
    } else {
      portletHolder.setContent(TPresponse.getStringContent());
    }

    try {
      if (portlet.getPortletConfig().getResourceBundle(request.getLocale()).containsKey("javax.portlet.title"))
        portletHolder.setTitle(TPresponse.getTitle());
    } catch (Exception e) {
      //
    }
  }

  static void doRender(HttpServletRequest request, HttpServletResponse response, PortletHolder portletHolder, GenericPortlet portlet) {
    TpRenderRequest TPrequest = (TpRenderRequest)portletHolder.getRenderRequest();
    if (portletHolder.getActionResponse()!=null)
      TPrequest.getParameterMap().putAll(portletHolder.getActionResponse().getRenderParametersMap());
    setWindowState(request, portletHolder);
    setPortletMode(request, portletHolder);
    setPortletParameters(request, portletHolder, TPrequest);
  }

  private static void setPortletParameters(HttpServletRequest httpRequest, PortletHolder portletHolder, TpPortletRequest portletRequest) {
    String portletId = portletHolder.getPortletId();
    StringBuffer sbParam = new StringBuffer(portletId).append("_param_");
    Enumeration<String> parameterEnum = httpRequest.getParameterNames();
    while (parameterEnum.hasMoreElements()) {
      String parameters = (String) parameterEnum.nextElement();
      if (parameters.startsWith(sbParam.toString())) {
        String value = httpRequest.getParameter(parameters);
        String parameter = parameters.substring(sbParam.length());
        portletRequest.setParameter(parameter, value);
      }             
    }
  }

  /**
   * Positionne le mode du portlet en fonction
   * des paramètres de la requête
   * @param request
   * @param portletHolder
   */
  public static void setPortletMode(HttpServletRequest request,PortletHolder portletHolder) {
    String portletId = portletHolder.getPortletId();
    StringBuffer sb = new StringBuffer(portletId).append("_").append("mode");
    String mode = request.getParameter(sb.toString());
    if (mode != null) {
      try {
        PortletMode portletMode = new PortletMode(mode);
        portletHolder.setPortletMode(portletMode);
      } catch (PortletModeException pme) {
        pme.printStackTrace();
      }
    }
  }

  /**
   * Positionne le mode du portlet en fonction
   * des paramètres de la requête
   * @param request
   * @param portletHolder
   */
  public static void setWindowState(HttpServletRequest request, PortletHolder portletHolder) {
    String portletId = portletHolder.getPortletId();
    StringBuffer sb = new StringBuffer(portletId).append("_").append("state");
    String state = request.getParameter(sb.toString());
    if (state != null) {
      try {
        WindowState windowState = new WindowState(state);
        portletHolder.setWindowState(windowState);
      } catch (WindowStateException wse){
        wse.printStackTrace();
      }
    }
  }

}
TOP

Related Classes of net.tinyportal.servlet.Portal

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.