Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ page import="java.sql.*, javax.sql.*, javax.naming.*"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <%!
- private final int MAX_ROWS = 20;
- private final int MAX_COLS = 10;
- // set value of option and set selected if value == data from POST
- public static String selected (String name, String value) {
- String val = "value=\""+value+"\"";
- if (value.equals(name)) {return val+" selected";}
- else {return val;}
- }
- private final boolean DEBUG = false;
- // logging
- private final boolean LOGGING = true;
- private long start, used;
- %>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
- <title>CSE135 Project</title>
- </head>
- <body>
- <%@ page import="com.srk.pkg.Constants"%>
- <%
- Connection conn = null;
- PreparedStatement pstmt = null;
- Statement stmt = null;
- ResultSet rs = null;
- try {
- Class.forName("org.postgresql.Driver");
- String url = "jdbc:postgresql:sample_db";
- String admin = "postgres";
- String password = "";
- conn = DriverManager.getConnection(url, admin, password);
- }
- catch (Exception e) {}
- %>
- <%-------------- Initialization -------------%>
- <%
- if (LOGGING) start = System.currentTimeMillis();
- String action = request.getParameter("action");
- String row, cid, state;
- int poffset = 0;
- int roffset = 0;
- if (request.getParameter("row") != null) {
- row = request.getParameter("row");
- cid = request.getParameter("cid");
- state = "all";
- }
- else {
- row = "Customers";
- cid = "all";
- state = "all";
- }
- // next access
- if (action != null) {
- poffset = Integer.parseInt(request.getParameter("poffset"));
- roffset = Integer.parseInt(request.getParameter("roffset"));
- if (action.equals("nextP"))
- poffset += MAX_COLS;
- else // nextR
- roffset += MAX_ROWS;
- }
- // create statement
- stmt = conn.createStatement();
- %>
- <%------------ Building Queries --------------%>
- <%
- String stateFilter, catFilter;
- // statefilter
- stateFilter = "state>0";
- // category filter
- catFilter = cid.equals("all") ? "p.category_id>0" : "p.category_id="+cid;
- // after filtering catgory the orders' user, price, quantity
- String salesWCatFilter = "(SELECT orders.user_id, orders.price, orders.quantity"
- +" FROM orders JOIN products p ON orders.product_id=p.id AND "+catFilter+") s";
- // ----------------------------------------------------------------
- // PRODUCTS TEMP TABLE
- String productsTBSQL = "CREATE TEMP TABLE temp_products AS ("
- + "SELECT * FROM products p WHERE "+catFilter
- + " LIMIT "+(MAX_COLS+1)+" OFFSET "+poffset+");";
- stmt.executeUpdate("DROP TABLE IF EXISTS temp_products");
- stmt.executeUpdate(productsTBSQL);
- // ----------------------------------------------------------------
- // FULL TABLE QUERIES
- String productsInfoSQL, // product headers query
- rowsInfoSQL, // row headers query
- salesInfoSQL; // sale query with products x rows
- // product
- productsInfoSQL = "SELECT p.name, COALESCE(SUM(s.price*s.quantity), 0) AS sum"
- + " FROM temp_products p LEFT OUTER JOIN orders s ON p.id=s.product_id"
- + " LEFT OUTER JOIN users u ON u.id=s.user_id"
- + " GROUP BY p.name ORDER BY p.name;";
- // states
- if (row.equals("States")) {
- String usersTBSQL;
- stmt.executeUpdate("DROP TABLE IF EXISTS temp_users");
- // temp table sql
- usersTBSQL = "CREATE TEMP TABLE temp_users AS ("
- + "SELECT * FROM users LIMIT "+(MAX_ROWS+1)+" OFFSET "+roffset+");";
- stmt.executeUpdate(usersTBSQL);
- // new statefilter for states
- stateFilter = "LIMIT "+(MAX_ROWS+1)+" OFFSET "+roffset;
- if(!cid.equals("all")){
- rowsInfoSQL = "SELECT users.state AS name, users.id, COALESCE(SUM(orders.price),0) AS sum "
- +" FROM users "
- +" LEFT JOIN orders "
- +" ON users.id = orders.user_id "
- +" INNER JOIN products "
- +" ON orders.product_id = products.id "
- +" INNER JOIN categories "
- +" ON products.category_id = categories.id "
- +" WHERE categories.id = '"+cid+"'"
- +" GROUP BY users.id, users.state ORDER BY users.state";
- salesInfoSQL = "SELECT u.id, COALESCE(SUM(p.price*o.quantity), 0) AS sum "
- +" FROM users u "
- +" LEFT JOIN orders o ON u.id = o.user_id "
- +" INNER JOIN products p ON o.product_id = p.id "
- +" INNER JOIN categories c ON p.category_id = c.id "
- +" WHERE c.id = '" +cid+ "'"
- +" GROUP BY u.id, p.name ORDER BY u.state, p.name ";
- }
- //ALLL
- else {
- //rn gets the states and their sum totals but user id is ????? makes it skip
- rowsInfoSQL = "SELECT users.state AS name, users.id, SUM(orders.price) AS sum "
- +" FROM users "
- +" LEFT JOIN orders "
- +" ON users.id = orders.user_id "
- +" GROUP BY users.state, users.id ORDER BY users.state";
- //should print out everything for all products
- salesInfoSQL = "SELECT u.id, COALESCE(SUM(p.price*o.quantity), 0) AS sum "
- +" FROM users u "
- +" LEFT JOIN orders o ON u.id = o.user_id "
- +" INNER JOIN products p ON o.product_id = p.id "
- +" INNER JOIN categories c ON p.category_id = c.id "
- +" GROUP BY u.id, p.name ORDER BY u.state, p.name ";
- }
- }
- // customers
- else {
- String usersTBSQL;
- stmt.executeUpdate("DROP TABLE IF EXISTS temp_users");
- // temp table sql
- usersTBSQL = "CREATE TEMP TABLE temp_users AS ("
- + "SELECT * FROM users LIMIT "+(MAX_ROWS+1)+" OFFSET "+roffset+");";
- stmt.executeUpdate(usersTBSQL);
- rowsInfoSQL = "SELECT u.id, u.name, COALESCE(SUM(s.price*s.quantity), 0) AS sum"
- + " FROM temp_users u "
- + " LEFT OUTER JOIN "+salesWCatFilter+" ON u.id=s.user_id"
- + " GROUP BY u.id, u.name ORDER BY u.name";
- salesInfoSQL = "SELECT u.id, COALESCE(SUM(s.price*s.quantity), 0) AS sum"
- + " FROM temp_users u"
- + " CROSS JOIN temp_products p"
- + " LEFT OUTER JOIN orders s ON s.product_id=p.id AND s.user_id=u.id"
- + " GROUP BY u.id, u.name, p.name"
- + " ORDER BY u.name, p.name;";
- }
- %>
- <%
- if (action == null) {
- %>
- <!-------------- Menu ------------->
- <div class="collapse navbar-collapse">
- <ul class="nav navbar-nav">
- <li><a href="index.jsp">Home</a></li>
- <li><a href="categories.jsp">Categories</a></li>
- <li><a href="products.jsp">Products</a></li>
- <li><a href="orders.jsp">Orders</a></li>
- <li><a href="login.jsp">Logout</a></li>
- </ul>
- </div>
- <!------------ Filter -------------->
- <form action="" method="GET">
- <table class="table table-striped">
- <tr>
- <th>Row</th>
- <th>Order</th>
- <th>Category</th>
- <th> </th>
- </tr>
- <tr>
- <!-- Rows dropdown -->
- <td><select name="row">
- <option <%=selected(row, "Customers")%>>Customers</option>
- <option <%=selected(row, "States")%>>States</option>
- </select></td>
- <!-- Order dropdown -->
- <td><select name="order">
- <option value="a">Alphabetical</option>
- <option value="t">Top-K</option>
- </select></td>
- <!-- Product category dropdown -->
- <td><select name="cid">
- <option value="all">All categories</option>
- <%
- rs = stmt.executeQuery("SELECT * FROM categories");
- while(rs.next()) {
- %><option <%=selected(cid, rs.getString("id"))%>>
- <%=rs.getString("name")%></option><%
- }
- %>
- </select></td>
- <!-- Submit query button -->
- <td><input class="btn btn-primary btn-block"
- type="submit" value="Run query" /></td>
- </tr>
- </table>
- </form>
- <%
- }
- %>
- <%--------------- Next Button -----------------%>
- <%
- String btnDBName, btnAction, btnItemName;
- int btnLimit, btnOffset;
- // next rows button
- btnDBName = "temp_users";
- btnAction = "nextR";
- btnItemName = row;
- btnLimit = MAX_ROWS;
- %>
- <%
- rs = stmt.executeQuery("SELECT count(*) AS cnt FROM "+btnDBName);
- if (rs.next() && rs.getInt("cnt") == btnLimit + 1) {
- %>
- <form action="" method="POST">
- <input type="hidden" name="action" value="<%=btnAction %>" />
- <input type="hidden" name="row" value="<%=row %>"/>
- <input type="hidden" name="state" value="<%=state %>"/>
- <input type="hidden" name="cid" value="<%=cid %>"/>
- <input type="hidden" name="poffset" value="<%=poffset %>"/>
- <input type="hidden" name="roffset" value="<%=roffset %>"/>
- <input class="btn btn-default btn-sm" type="submit" value="Next <%=btnLimit %> <%=btnItemName %> >>" />
- </form>
- <%
- // remove the last row
- stmt.executeUpdate("DELETE FROM "+btnDBName
- +" WHERE id IN (SELECT MAX(id) FROM "+btnDBName+");");
- }
- %>
- <%
- // next products button
- btnDBName = "temp_products";
- btnAction = "nextP";
- btnItemName = "Products";
- btnLimit = MAX_COLS;
- %>
- <%
- rs = stmt.executeQuery("SELECT count(*) AS cnt FROM "+btnDBName);
- if (rs.next() && rs.getInt("cnt") == btnLimit + 1) {
- %>
- <form action="" method="POST">
- <input type="hidden" name="action" value="<%=btnAction %>" />
- <input type="hidden" name="row" value="<%=row %>"/>
- <input type="hidden" name="state" value="<%=state %>"/>
- <input type="hidden" name="cid" value="<%=cid %>"/>
- <input type="hidden" name="poffset" value="<%=poffset %>"/>
- <input type="hidden" name="roffset" value="<%=roffset %>"/>
- <input class="btn btn-default btn-sm" type="submit" value="Next <%=btnLimit %> <%=btnItemName %> >>" />
- </form>
- <%
- // remove the last row
- stmt.executeUpdate("DELETE FROM "+btnDBName
- +" WHERE id IN (SELECT MAX(id) FROM "+btnDBName+");");
- }
- %>
- <!---------------- Table --------------->
- <table class="table table-striped">
- <!-- Prooduct header row -->
- <tr>
- <th> </th>
- <%
- rs = stmt.executeQuery(productsInfoSQL);
- String tempName; // for truncation
- for (int i=0; i<MAX_COLS; ++i) {
- if (!rs.next()) break;
- tempName = rs.getString("name");
- tempName = tempName.substring(0, Math.min(tempName.length(), 10));
- out.println("<th>"+tempName+"<br>($"+rs.getInt("sum")+")</th>");
- }
- %>
- </tr>
- <!-------------- Price ---------------->
- <%
- Statement salesStmt = conn.createStatement();
- ResultSet salesRs = null;
- rs = stmt.executeQuery(rowsInfoSQL);
- salesRs = salesStmt.executeQuery(salesInfoSQL);
- int tempId = -1; // used to insert first data after a row return
- for (int i=0; i<MAX_ROWS; ++i) {
- if (!rs.next()) break;
- out.println("<tr>");
- out.println("<th>"+rs.getString("name")+"<br>($"+rs.getInt("sum")+")</th>");
- if (tempId == rs.getInt("id")) {
- out.println("<td>"+salesRs.getString("sum")+"</td>");
- }
- while(salesRs.next()) {
- if ((tempId=salesRs.getInt("id")) != rs.getInt("id")) {
- break;
- }
- out.println("<td>$"+salesRs.getString("sum")+"</td>");
- }
- out.println("</tr>");
- }
- salesRs.close();
- salesStmt.close();
- if (LOGGING) {
- used = System.currentTimeMillis() - start;
- System.out.println("\nUsed " + used + " ms");
- System.out.println("Which is " + used/1000 + "sec\n");
- }
- %>
- </table>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement