Package net.tinyportal.servlet

Source Code of net.tinyportal.servlet.Portlet2Servlet

/*
    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.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.UnavailableException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.tinyportal.Constant;
import net.tinyportal.bean.PortletHolder;
import net.tinyportal.javax.portlet.TpPortletContext;
import net.tinyportal.javax.portlet.TpPortletURL;
import net.tinyportal.javax.portlet.TpRenderRequest;
import net.tinyportal.javax.portlet.TpRenderResponse;

public class Portlet2Servlet extends HttpServlet  {
  /**
   *
   */
  private static final long serialVersionUID = 7934374005770615573L;
 
  /**
   * Jsp du portail, définie dans le web.xml
   */
  private String portalJsp;

  /**
   * A l'initialisation de la servlet, on va initialiser les différents portlets présent<br/>
   * <br/>
   * Pour cela, on va parcourir le répertoire des portlets, les initialiser un a un
   */
  public void init(ServletConfig config) {
    try {
      super.init(config);
      /*
       * On va charger les portlets disponibles
       */
      ServletContext context = getServletContext();

      /*
       * On charge la valeur de la jsp
       */
      portalJsp = context.getInitParameter("JSPPortal");
     
      /*
       * On va charger les portlets présent dans le répertoire indiqué
       */
      PortletLoader pLoader = new PortletLoader(context);
      String portlets_real_Path = context.getRealPath(Constant.portlets_path);
      File portletsPathFile = new File(portlets_real_Path);
      File[] portletList = portletsPathFile.listFiles();
      for (File portlet_directory : portletList) {
        try {
          Portal.addPortlets(pLoader.load(portlet_directory));
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    } catch (ServletException e) {
      e.printStackTrace();
    }
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
      /*
       * On commence par créer/récupérer la session de l'utilisateur,
       * dans le cas d'un utilisateur non authentifié, on crée simplement une session anonyme
       */

      /*
       * Map des portlets passé a la jsp pour l'affichage du portail
       */
      Map<String, PortletHolder> portletsMap = new HashMap<String, PortletHolder>();

      /*
       * Affichage
       * On va parcourir les portlets présent dans l'objet portal
       * et s'en occuper
       */
      for(String portletName: Portal.getPortletSet()) {
        /*
         * Si le portlet n'est pas actif, on continue
         */
        if (!Portal.isActivePortlet(portletName)) continue;

        /*
         * On récupère le bean associé au portlet
         */
        PortletHolder portletHolder = Portal.getPortlet(request, portletName);
        GenericPortlet portlet = portletHolder.getPortlet();

        /*
         * DOGET
         */
        String portletId = TpPortletURL.getPortletId(portletHolder);

        TpPortletContext TpPortletContext = (TpPortletContext) portlet.getPortletContext();
        TpRenderRequest TPrequest = new TpRenderRequest(portletHolder, request, TpPortletContext);
        TpRenderResponse TPresponse = new TpRenderResponse(response, portletId);

        /*
         * On positionne le bean portlet dans la requête pour pouvoir y accéder depuis les taglibs
         */
        TPrequest.setAttribute(Constant.session_portlet_bean,portletHolder);

        portletHolder.setRenderRequest(TPrequest);
        portletHolder.setRenderResponse(TPresponse);
        portletHolder.setPortletConfig(portlet.getPortletConfig());

        try {
          /*
           * On effectue les taches d'ACTION
           */
          StringBuffer sb = new StringBuffer(portletId).append("_").append("action");
          String action = request.getParameter(sb.toString());
          if ("action".equalsIgnoreCase(action)) {
            Portal.doAction(request, response, portletHolder, portlet);
          } else if ("render".equalsIgnoreCase(action)) {
            Portal.doRender(request, response, portletHolder, portlet);
          } else {
            Portal.setWindowState(request, portletHolder);
            Portal.setPortletMode(request, portletHolder);
          }
          /*
           * de RENDU
           */
          Portal.doRender(request, response, portletHolder, portlet);

          /*
           *
           */
          try {
            Portal.doRefresh(request, response, portletHolder, portlet);
          } catch (PortletException e) {
            log(e.getMessage());
            portletHolder.setTitle("Erreur sur le portlet");
            portletHolder.setContent("/!\\ Erreur !!" + e.getMessage());
          }
          /*
           * Enfin, on place le portletHolder dans la map des portlets
           * disponible
           */
          portletsMap.put(portletName, portletHolder);
        } catch (UnavailableException ue) {
          portlet.destroy();
          Portal.addDisabledPortlet(portletName);

        } catch (PortletException e) {
          log(e.getMessage());
          portletHolder.setTitle("Erreur sur le portlet");
          portletHolder.setContent("/!\\ Erreur !!" + e.getMessage());
        }
      }

      /*
       * On fait le rendu du portail
       */
      RequestDispatcher servletDispatcher;

      request.setAttribute(Constant.session_portlet_bean_map, portletsMap);
      //      request.setAttribute(Constant.session_portlet_bean_list, portletsBean);
      response.setHeader("Content-Type", "text/html");

      ServletContext context = getServletContext();
      servletDispatcher = context.getRequestDispatcher(portalJsp);
      servletDispatcher.include(request, response);

    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
  }
}
TOP

Related Classes of net.tinyportal.servlet.Portlet2Servlet

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.