예제 #1
0
파일: Page.java 프로젝트: mwringe/gatein-pc
  Page(PortletInvoker invoker, String s) throws ServletException {
    LinkedHashMap<String, Window> windows = new LinkedHashMap<String, Window>();
    int count = 0;
    Map<String, String[]> parameters;

    //
    if (s == null || s.length() == 0 || (s.length() == 1 && s.charAt(0) == '/')) {
      parameters = null;
    } else {
      Segment segments = (Segment) Chunk.parse(s);

      // Skip context path
      segments = (Segment) segments.next;

      // Servlet parameter
      parameters = segments.parameters;

      //
      for (Segment segment : (Segment) segments.next) {
        Portlet found = null;
        if (invoker != null) {
          try {
            for (Portlet portlet : invoker.getPortlets()) {
              if (portlet.getInfo().getName().equals(segment.value)) {
                found = portlet;
                break;
              }
            }
          } catch (PortletInvokerException e) {
            // ?
          }
        }

        //
        LinkedHashMap<String, String[]> windowParameters;
        Mode windowMode;
        WindowState windowState;
        if (segment.parameters != null) {
          windowParameters = new LinkedHashMap<String, String[]>(segment.parameters);
          String[] modeParameter = windowParameters.remove("javax.portlet.portlet_mode");
          String[] windowStateParameter = windowParameters.remove("javax.portlet.window_state");
          windowMode = modeParameter != null ? Mode.create(modeParameter[0]) : null;
          windowState =
              windowStateParameter != null ? WindowState.create(windowStateParameter[0]) : null;
        } else {
          windowParameters = null;
          windowMode = null;
          windowState = null;
        }

        //
        Window context =
            new Window(
                "" + count++, found, segment.value, windowMode, windowState, windowParameters);

        //
        windows.put(context.id, context);
      }
    }

    //
    this.windows = windows;
    this.parameters = parameters;
  }