Package hellowicket

Source Code of hellowicket.HelloDbResponse

package hellowicket;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.concurrent.ThreadLocalRandom;

import javax.sql.DataSource;

import org.apache.wicket.request.resource.AbstractResource;
import org.apache.wicket.util.string.StringValue;

import com.fasterxml.jackson.databind.ObjectMapper;

public class HelloDbResponse extends AbstractResource
{
  private static final long serialVersionUID = 1L;

  private static final int DB_ROWS = 10000;

  private static final String CONTENT_TYPE = "application/json";
  private static final ObjectMapper mapper = new ObjectMapper();

  protected ResourceResponse newResourceResponse(Attributes attributes)
  {
    final StringValue queriesParam = attributes.getRequest().getQueryParameters().getParameterValue("queries");
    int qs = queriesParam.toInt(1);
    if (qs < 1)
    {
      qs = 1;
    }
    else if (qs > 500)
    {
      qs = 500;
    }
    final int queries = qs;

    final ResourceResponse response = new ResourceResponse();
    response.setContentType(CONTENT_TYPE);

    response.setWriteCallback(new WriteCallback()
    {
      public void writeData(Attributes attributes)
      {
        try
        {
          final ThreadLocalRandom random = ThreadLocalRandom.current();
          DataSource dataSource = WicketApplication.get().getDataSource();
          World[] worlds = new World[queries];
          try (Connection connection = dataSource.getConnection())
          {
            try (PreparedStatement statement = connection.prepareStatement(
                       "SELECT * FROM World WHERE id = ?",
                       ResultSet.TYPE_FORWARD_ONLY,
                       ResultSet.CONCUR_READ_ONLY))
            {
              for (int i = 0; i < queries; i++)
              {
                  statement.setInt(1, random.nextInt(DB_ROWS) + 1);
                  try (ResultSet resultSet = statement.executeQuery())
                  {
                      resultSet.next();
                      worlds[i] = new World(
                              resultSet.getInt("id"),
                              resultSet.getInt("randomNumber"));
                  }
              }
            }
          }

          String data;
          if (queriesParam.isNull())
          {
              // request to /db should return JSON object
              data = HelloDbResponse.mapper.writeValueAsString(worlds[0]);
          }
          else
          {
              // request to /db?queries=xyz should return JSON array (issue #648)
              data = HelloDbResponse.mapper.writeValueAsString(worlds);
          }
          attributes.getResponse().write(data);
        }
        catch (Exception ex)
        {
          // do nothing
        }
      }
    });
    return response;
  }
}
TOP

Related Classes of hellowicket.HelloDbResponse

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.