コード例 #1
0
  @Override
  public boolean handleRequest(
      VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException {
    String pathInfo = request.getPathInfo();
    if (pathInfo == null) {
      return false;
    }

    Matcher matcher = pattern.matcher(pathInfo);
    if (!matcher.matches()) {
      return false;
    }

    String uiid = matcher.group(1);
    String type = matcher.group(3);
    String key = matcher.group(2);

    if (key == null) {
      return error(request, response, pathInfo + " is not a valid global resource path");
    }

    UI ui = session.getUIById(Integer.parseInt(uiid));
    if (ui == null) {
      return error(request, response, "No UI found for id  " + uiid);
    }
    UI.setCurrent(ui);

    ConnectorResource resource;
    if (LEGACY_TYPE.equals(type)) {
      resource = legacyResources.get(key);
    } else {
      return error(
          request,
          response,
          "Unknown global resource type " + type + " in requested path " + pathInfo);
    }

    if (resource == null) {
      return error(request, response, "Global resource " + key + " not found");
    }

    DownloadStream stream = resource.getStream();
    if (stream == null) {
      return error(request, response, "Resource " + resource + " didn't produce any stream.");
    }

    stream.writeResponse(request, response);
    return true;
  }
コード例 #2
0
 /**
  * Registers a resource to be served with a global URL.
  *
  * <p>A {@link ConnectorResource} registered for a {@link LegacyComponent} will be set to be
  * served with a global URL. Other resource types will be ignored and thus not served by this
  * handler.
  *
  * @param resource the resource to register
  * @param ownerConnector the connector to which the resource belongs
  */
 public void register(Resource resource, ClientConnector ownerConnector) {
   if (resource instanceof ConnectorResource) {
     if (!(ownerConnector instanceof LegacyComponent)) {
       throw new IllegalArgumentException(
           "A normal ConnectorResource can only be registered for legacy components.");
     }
     ConnectorResource connectorResource = (ConnectorResource) resource;
     if (!legacyResourceKeys.containsKey(resource)) {
       String uri = LEGACY_TYPE + '/' + Integer.toString(nextLegacyId++);
       String filename = connectorResource.getFilename();
       if (filename != null && !filename.isEmpty()) {
         uri += '/' + filename;
       }
       legacyResourceKeys.put(connectorResource, uri);
       legacyResources.put(uri, connectorResource);
       registerResourceUsage(connectorResource, ownerConnector);
     }
   }
 }
コード例 #3
0
  @Override
  public boolean handleConnectorRequest(VaadinRequest request, VaadinResponse response, String path)
      throws IOException {
    DownloadStream stream = null;
    String[] parts = path.split("/", 2);
    String key = parts[0];

    VaadinSession session = getSession();
    session.lock();
    try {
      ConnectorResource resource = (ConnectorResource) getResource(key);
      if (resource == null) {
        return false;
      }
      stream = resource.getStream();
    } finally {
      session.unlock();
    }
    stream.writeResponse(request, response);
    return true;
  }