Package juzu.impl.request

Examples of juzu.impl.request.ControllerHandler


    return null;
  }

  public ControllerHandler getMethodById(String methodId) {
    for (int i = 0;i < handlers.size();i++) {
      ControllerHandler cm = handlers.get(i);
      if (cm.getId().equals(methodId)) {
        return cm;
      }
    }
    return null;
  }
View Full Code Here


    //
    String requestPath = bridge.getRequestContext().getRequestPath();

    // Determine first a possible match from the root route from the request path
    ControllerHandler requestTarget = null;
    RouteMatch requestMatch = null;
    Map<String, RequestParameter> requestParameters = Collections.emptyMap();
    if (requestPath.startsWith(bridge.getRequestContext().getPath())) {

      //
      HttpMethod requestMethod = bridge.getHttpContext().getMethod();
      Iterator<RouteMatch> matches = root.matcher(requestPath.substring(bridge.getRequestContext().getPath().length()), Collections.<String, String[]>emptyMap());

      // Determine a method
      while (matches.hasNext()) {
        RouteMatch match = matches.next();
        RouteDescriptor routeDesc = getMethods(match.getRoute());
        if (routeDesc != null) {
          ControllerHandler target = this.bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getMethodByHandle(routeDesc.handle);
          if (target.getPhase() == Phase.VIEW) {
            if (requestMethod == HttpMethod.POST) {
              requestTarget =  target;
              requestMatch = match;
            } else if (requestMethod == HttpMethod.GET) {
              requestTarget =  target;
              requestMatch = match;
              break;
            }
          } else if (target.getPhase() == Phase.ACTION) {
            if (requestMethod == HttpMethod.GET) {
              requestTarget =  target;
              requestMatch = match;
            } else if (requestMethod == HttpMethod.POST) {
              requestTarget =  target;
              requestMatch = match;
              break;
            }
          } else if (target.getPhase() == Phase.RESOURCE) {
            if (Arrays.asList(target.getMethod().getAnnotation(Resource.class).method()).contains(requestMethod)) {
              requestTarget =  target;
              requestMatch = match;
              break;
            }
          }
View Full Code Here

        if (resp instanceof MimeResponse) {
          MimeResponse mimeResp = (MimeResponse)resp;

          //
          ControllerHandler handler = bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getMethodByHandle(target);

          //
          BaseURL url;
          if (handler.getPhase() == Phase.ACTION) {
            url = mimeResp.createActionURL();
          } else if (handler.getPhase() == Phase.VIEW) {
            url = mimeResp.createRenderURL();
          } else if (handler.getPhase() == Phase.RESOURCE) {
            url = mimeResp.createResourceURL();
          } else {
            throw new AssertionError();
          }

          // Set generic parameters
          for (ResponseParameter parameter : parameters.values()) {
            url.setParameter(parameter.getName(), parameter.toArray());
          }

          //
          boolean escapeXML = false;
          if (properties != null) {
            Boolean escapeXMLProperty = properties.getValue(PropertyType.ESCAPE_XML);
            if (escapeXMLProperty != null && Boolean.TRUE.equals(escapeXMLProperty)) {
              escapeXML = true;
            }

            // Handle portlet mode
            PortletMode portletModeProperty = properties.getValue(JuzuPortlet.PORTLET_MODE);
            if (portletModeProperty != null) {
              if (url instanceof PortletURL) {
                try {
                  ((PortletURL)url).setPortletMode(portletModeProperty);
                }
                catch (PortletModeException e) {
                  throw new IllegalArgumentException(e);
                }
              }
              else {
                throw new IllegalArgumentException();
              }
            }

            // Handle window state
            WindowState windowStateProperty = properties.getValue(JuzuPortlet.WINDOW_STATE);
            if (windowStateProperty != null) {
              if (url instanceof PortletURL) {
                try {
                  ((PortletURL)url).setWindowState(windowStateProperty);
                }
                catch (WindowStateException e) {
                  throw new IllegalArgumentException(e);
                }
              }
              else {
                throw new IllegalArgumentException();
              }
            }

            // Set method id
            url.setParameter("juzu.op", handler.getId());
          }

          //
          if (escapeXML) {
            StringWriter writer = new StringWriter();
View Full Code Here

    }
    return context;
  }

  public final DispatchBridge createDispatch(Phase phase, final MethodHandle target, final Map<String, ResponseParameter> parameters) {
    ControllerHandler handler = bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getMethodByHandle(target);

    //
    Route route = this.handler.getRoute(handler.getHandle());
    if (route == null) {
      if (bridge.getApplication().resolveBean(ControllerService.class).getResolver().isIndex(handler)) {
        route = this.handler.getRoot();
      }
    }

    //
    if (route != null) {
      Map<String, String> params;
      if (parameters.isEmpty()) {
        params = Collections.emptyMap();
      } else {
        params = new HashMap<String, String>(parameters.size());
        for (ResponseParameter parameter : parameters.values()) {
          params.put(parameter.getName(), parameter.get(0));
        }
      }

      //
      final RouteMatch match = route.matches(params);
      if (match != null) {
        return new DispatchBridge() {

          public MethodHandle getTarget() {
            return target;
          }

          public Map<String, ResponseParameter> getParameters() {
            return parameters;
          }

          public <T> String checkPropertyValidity(PropertyType<T> propertyType, T propertyValue) {
            // For now we don't validate anything
            return null;
          }

          public void renderURL(PropertyMap properties, MimeType mimeType, Appendable appendable) throws IOException {

            // Render base URL
            http.renderRequestURL(appendable);

            // Render path
            UriBuilder writer = new UriBuilder(appendable, mimeType);
            match.render(writer);

            // Retain matched parameters for filtering later
            Set<String> matched = match.getMatched().isEmpty() ? Collections.<String>emptySet() : new HashSet<String>(match.getMatched().size());
            for (PathParam param : match.getMatched().keySet()) {
              matched.add(param.getName());
            }

            // Render remaining parameters which have not been rendered yet
            for (ResponseParameter parameter : parameters.values()) {
              if (!matched.contains(parameter.getName())) {
                for (int i = 0;i < parameter.size();i++) {
                  writer.appendQueryParameter(parameter.getEncoding(), parameter.getName(), parameter.get(i));
                }
              }
            }
          }
        };
      } else {
        throw new IllegalArgumentException("The parameters " + parameters + " are not valid");
      }
    } else {
      throw new UnsupportedOperationException("handle me gracefully method not mapped " + handler.getHandle());
    }
  }
View Full Code Here

      for (ResponseParameter entry : parameters.values()) {
        super.resp.setRenderParameter(entry.getName(), entry.toArray());
      }

      //
      ControllerHandler handler = bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getMethodByHandle(update.getTarget());

      // Method id
      super.resp.setRenderParameter("juzu.op", handler.getId());

      //
      PortletMode portletMode = update.getProperties().getValue(JuzuPortlet.PORTLET_MODE);
      if (portletMode != null) {
        try {
View Full Code Here

  public void processEvent(EventRequest request, EventResponse response) throws PortletException, IOException {
    ControllerResolver<ControllerHandler> resolver = bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getResolver();
    List<ControllerHandler> handlers = resolver.resolveMethods(Phase.EVENT, null, request.getParameterMap().keySet());

    //
    ControllerHandler target = null;
    for (ControllerHandler handler : handlers) {
      Consumes consumes = handler.getMethod().getAnnotation(Consumes.class);
      if (consumes.value().equals("")) {
        target = handler;
        // we don't break here on purpose because having empty match is less important
View Full Code Here

  /** . */
  private ControllersDescriptor controllerDescriptor;

  @Test
  public void testNoArg() throws Exception {
    ControllerHandler cm = controllerDescriptor.getHandler(aClass, "noArg");
    assertEquals("noArg", cm.getName());
    assertEquals(Phase.RESOURCE, cm.getPhase());
    assertEquals(Collections.<ControlParameter>emptyList(), cm.getParameters());
  }
View Full Code Here

    assertEquals(Collections.<ControlParameter>emptyList(), cm.getParameters());
  }

  @Test
  public void testStringArg() throws Exception {
    ControllerHandler cm = controllerDescriptor.getHandler(aClass, "oneArg", String.class);
    assertEquals("oneArg", cm.getName());
    assertEquals(Phase.RESOURCE, cm.getPhase());
    assertEquals(Arrays.asList(new PhaseParameter("foo", null, null, Cardinality.SINGLE, null)), cm.getParameters());
  }
View Full Code Here

  /** . */
  private ControllersDescriptor controllerDescriptor;

  @Test
  public void testNoArg() throws Exception {
    ControllerHandler cm = controllerDescriptor.getHandler(aClass, "noArg");
    assertEquals("noArg", cm.getName());
    assertEquals(Phase.VIEW, cm.getPhase());
    assertEquals(Collections.<ControlParameter>emptyList(), cm.getParameters());
  }
View Full Code Here

    assertEquals(Collections.<ControlParameter>emptyList(), cm.getParameters());
  }

  @Test
  public void testStringArg() throws Exception {
    ControllerHandler cm = controllerDescriptor.getHandler(aClass, "oneArg", String.class);
    assertEquals("oneArg", cm.getName());
    assertEquals(Phase.VIEW, cm.getPhase());
    assertEquals(Arrays.asList(new PhaseParameter("foo", null, null, Cardinality.SINGLE, null)), cm.getParameters());
  }
View Full Code Here

TOP

Related Classes of juzu.impl.request.ControllerHandler

Copyright © 2018 www.massapicom. 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.