Package com.quickwebframework.viewrender.jsp.service.impl

Source Code of com.quickwebframework.viewrender.jsp.service.impl.ViewRenderServiceImpl

package com.quickwebframework.viewrender.jsp.service.impl;

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

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;

import com.quickwebframework.framework.OsgiContext;
import com.quickwebframework.framework.WebContext;
import com.quickwebframework.viewrender.ViewRenderService;
import com.quickwebframework.viewrender.jsp.servlet.PluginJspDispatchServlet;
import com.quickwebframework.viewrender.jsp.support.Activator;

public class ViewRenderServiceImpl extends ViewRenderService {

  private Map<String, PluginJspDispatchServlet> pluginNameServletMap = new HashMap<String, PluginJspDispatchServlet>();

  public String getBundleName() {
    return Activator.BUNDLE_NAME;
  }

  public void bundleChanged(BundleEvent event) {
    if (BundleEvent.STOPPING == event.getType()
        || BundleEvent.STOPPED == event.getType()) {
      String pluginName = event.getBundle().getSymbolicName();
      if (pluginNameServletMap.containsKey(pluginName)) {
        pluginNameServletMap.remove(pluginName);
      }
    }
  }

  public void renderView(HttpServletRequest request,
      HttpServletResponse response, String viewName,
      Map<String, Object> model) {

    String[] tmpArray = viewName.split(this
        .getPluginNameAndPathSplitString());
    if (tmpArray.length < 2) {
      throw new RuntimeException("视图名称[" + viewName + "]不符合规则:“[插件名]"
          + this.getPluginNameAndPathSplitString() + "[路径]”");
    }
    String pluginName = tmpArray[0];
    String path = tmpArray[1];
    // 对视图名称进行处理(添加前后缀)
    // path = this.getViewNamePrefix() + path + this.getViewNameSuffix();
    request.setAttribute(WebContext.CONST_PATH_NAME, path);

    PluginJspDispatchServlet pluginJspDispatchServlet = pluginNameServletMap
        .get(pluginName);
    if (pluginJspDispatchServlet == null) {
      Bundle bundle = OsgiContext.getBundleByName(pluginName);
      pluginJspDispatchServlet = createNewPluginJspDispatchServlet(bundle);
      pluginNameServletMap.put(pluginName, pluginJspDispatchServlet);
    }
    try {
      pluginJspDispatchServlet.service(request, response);
    } catch (Exception ex) {
      throw new RuntimeException(ex);
    }
  }

  private PluginJspDispatchServlet createNewPluginJspDispatchServlet(
      Bundle bundle) {
    PluginJspDispatchServlet servlet = new PluginJspDispatchServlet(bundle);
    final String bundleName = bundle.getSymbolicName();
    try {
      servlet.init(new ServletConfig() {

        public String getServletName() {
          return bundleName;
        }

        public ServletContext getServletContext() {
          return WebContext.getServletContext();
        }

        public Enumeration<String> getInitParameterNames() {
          return getServletContext().getInitParameterNames();
        }

        public String getInitParameter(String arg0) {
          return getServletContext().getInitParameter(arg0);
        }
      });
    } catch (ServletException e) {
      throw new RuntimeException(e);
    }
    return servlet;
  }
}
TOP

Related Classes of com.quickwebframework.viewrender.jsp.service.impl.ViewRenderServiceImpl

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.