Package net.tinyportal.servlet

Source Code of net.tinyportal.servlet.TckServlet

/*
    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.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.UnavailableException;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;
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 javax.servlet.http.HttpSession;

import net.tinyportal.Constant;
import net.tinyportal.bean.PortletHolder;
import net.tinyportal.javax.portlet.TpActionRequest;
import net.tinyportal.javax.portlet.TpActionResponse;
import net.tinyportal.javax.portlet.TpPortletConfig;
import net.tinyportal.javax.portlet.TpPortletContext;
import net.tinyportal.javax.portlet.TpPortletPreference;
import net.tinyportal.javax.portlet.TpPortletURL;
import net.tinyportal.javax.portlet.TpRenderRequest;
import net.tinyportal.javax.portlet.TpRenderResponse;
import net.tinyportal.tools.FictiveHttpServletResponse;
import net.tinyportal.tools.ParsePortletXML;
import net.tinyportal.tools.PortletXML;
import net.tinyportal.tools.TpPortletSessionConfig;
import net.tinyportal.tools.ZipUtils;

public class TckServlet extends HttpServlet  {

  /**
   *
   */
  private static final long serialVersionUID = 2259753044074747050L;

  ServletConfig config;
  public void init(ServletConfig config) {
    try {
      super.init(config);
      this.config = config;
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    HttpSession session = request.getSession(true);

    ServletContext context = getServletContext();

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

    Map<String, TpPortletContext> portletsContext = new HashMap<String, TpPortletContext>();

    String[] portletsNameRequest = request.getParameterValues("portletName");
    if (portletsNameRequest!=null) {
      /*
       * On va charger les portlets présent dans le répertoire indiqué
       */

      Portal.resetOnlyPortlet(); // dans le cas du tck, on vide la liste a chaque appel..
      PortletLoader pLoader = new PortletLoader(context);
      for(String portletNameRequest:portletsNameRequest) {

        String portletWar = portletNameRequest.split("/")[0]; // répertoire
        String portletName = null;
        if (portletNameRequest.split("/").length == 2) {
          portletName = portletNameRequest.split("/")[1];// nom du portlet
          Portal.addOnlyPortlet(portletName);
        }

        String portlets_real_Path = context.getRealPath(Constant.portlets_path);
        File portletsPathFile = new File(portlets_real_Path + "/" + portletWar);
        String portlet_directory = portletsPathFile.getAbsolutePath();
        if (!(portletsPathFile.exists() & portletsPathFile.isDirectory())) {
          ZipUtils.unzip(portlet_directory+".war",portlet_directory+"/");
        }

        try {
          /*
           * Le loader va charger les portlets et alimenter l'objet Portal
           */
          StringBuffer portlet_path = new StringBuffer(portlet_directory); //.append("/").append(portlet_directory);
          Portal.addPortlets(
              pLoader.load(new File(portlet_path.toString()), portletName)
              );
         
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }

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

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


      String portletId = TpPortletURL.getPortletId(bean);

      TpPortletContext TpPortletContext = (TpPortletContext) portlet.getPortletContext();
      TpRenderRequest TPrequest = new TpRenderRequest(bean, 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,bean);

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

      try

        StringBuffer sb = new StringBuffer(portletId).append("_").append("action");
        String action = request.getParameter(sb.toString());
        if ("action".equalsIgnoreCase(action)) {

          Portal.doAction(request, response, bean, portlet);
        } else if ("render".equalsIgnoreCase(action)) {
          Portal.doRender(request, response, bean, portlet);
        } else {
          sb = new StringBuffer(portletId).append("_").append("mode");
          String mode = request.getParameter(sb.toString());
          if (null != mode) {
            bean.setPortletMode(new PortletMode(mode));
          }
          sb = new StringBuffer(portletId).append("_").append("state");
          String state = request.getParameter(sb.toString());
          if (null != state) {
            bean.setWindowState(new WindowState(state));
          }
        }
        Portal.doRender(request, response, bean, portlet);
        Portal.doRefresh(request, response, bean, portlet);
        portletsMap.put(bean.getPortletName(), bean);
      } catch (UnavailableException ue) {
        portlet.destroy();
        Portal.addDisabledPortlet(portletName);

      } catch (Exception e) {
        e.printStackTrace();
        bean.setTitle("Erreur sur le portlet");
        bean.setContent("/!\\ Erreur !!" + e.getMessage());
        portletsMap.put(bean.getPortletName(), bean);
      }
      //            portletsBean.add(portletBean);
    }
    /*
     * 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");
    servletDispatcher = context.getRequestDispatcher("/WEB-INF/jsp/tck.jsp");
    servletDispatcher.include(request, response);



  }



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


}
TOP

Related Classes of net.tinyportal.servlet.TckServlet

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.