Example usage for com.google.gson JsonArray size

List of usage examples for com.google.gson JsonArray size

Introduction

In this page you can find the example usage for com.google.gson JsonArray size.

Prototype

public int size() 

Source Link

Document

Returns the number of elements in the array.

Usage

From source file:com.bios.controller.services.BidStatusService.java

/**
 * Handles the HTTP <code>GET</code> method to determine whether currently
 * placed bids will be successful at the end of the round. A json object
 * that contains the live bidding data relating to the bid will be created.
 *
 * @param request servlet request//  w ww .ja v  a 2s  . co  m
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 *
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    ConnectionManager manager = new ConnectionManager();
    String requestObject = request.getParameter("r");
    String token = request.getParameter("token");
    ArrayList<String> errorList = new ArrayList<String>();

    JsonObject responseObject = new JsonObject();
    JsonArray allErrors = new JsonArray();

    if (requestObject == null) {
        errorList.add("missing r");
    } else if (requestObject.length() == 0) {
        errorList.add("blank r");
    }

    if (token == null) {
        errorList.add("missing token");
    } else if (token.length() == 0) {
        errorList.add("blank token");
    } else {
        try {
            String result = JWTUtility.verify(token, "abcdefgh12345678");
            if (!result.equals("admin")) {
                errorList.add("invalid token");
            }
        } catch (JWTException e) { // do we need this?
            // This means not an admin, or token expired
            errorList.add("invalid username/token");
        }
    }

    JsonElement jelementRequest = new JsonParser().parse(requestObject);
    JsonObject json = jelementRequest.getAsJsonObject();

    JsonElement crse = json.get("course");
    JsonElement sec = json.get("section");

    if (crse == null) {
        errorList.add("missing course");
    } else if (crse.getAsString().length() == 0) {
        errorList.add("blank course");
    }

    if (sec == null) {
        errorList.add("missing section");
    } else if (sec.getAsString().length() == 0) {
        errorList.add("blank section");
    }

    if (errorList.size() > 0) {
        errorList.sort(new ErrorMsgComparator());
        for (String s : errorList) {
            allErrors.add(new JsonPrimitive(s));
        }
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    String courseID = crse.getAsString();
    String sectionID = sec.getAsString();

    int round = manager.getBiddingRound();
    String status = manager.getBiddingRoundStatus();

    // Section that user has selected
    Section section = SectionDAO.getInstance().findSection(courseID, sectionID);

    Course course = CourseDAO.getInstance().findCourse(courseID);
    if (course == null) {
        allErrors.add(new JsonPrimitive("invalid course"));
    } else if (course != null && section == null) {
        allErrors.add(new JsonPrimitive("invalid section"));
    }

    if (allErrors.size() > 0) {
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    // How many students have already been enrolled in the section successfully
    ArrayList<SectionStudent> sectionStudentList = SectionStudentDAO.getInstance()
            .getSectionStudentListWithID(courseID, sectionID);

    // Size of the class minus the already enrolled number, which essentially means vacancy
    int vacancy = section.getSize() - sectionStudentList.size();

    // Minimum bid value that has to be shown to user, default is 10
    double minBidValue = 10;

    // This lists the bids that are still pending approval in round 2, and contains the bids
    // that user has selected, and these bids are sorted from highest to lowest
    ArrayList<Bid> allBids = BidDAO.getInstance().getPendingBidsWithID(courseID, sectionID);
    //        ArrayList<Bid> allBids= null;
    //        if (round == 1 && status.equals("started")){
    //            allBids = BidDAO.getInstance().getBidList();
    //        } else if (status.equals("stopped") && round == 1){
    //            allBids = RoundOneBidDAO.getInstance().getBidList();
    //        } else if(round == 2 && status.equals("started")){
    //            allBids = BidDAO.getInstance().getPendingBids();
    //        } else{
    //            allBids = RoundTwoBidDAO.getInstance().getBidList();
    //        }
    allBids.sort(new BidComparator());

    // This JsonObject is to be used as the reponse to the user
    JsonObject object = new JsonObject();

    object.addProperty("status", "success");
    DecimalFormat df = new DecimalFormat("0.00");
    JsonArray arrayOfBids = new JsonArray();
    if (round == 1 && status.equals("started")) {
        object.addProperty("vacancy", section.getSize());
        if (section.getSize() > allBids.size() && allBids.size() > 0) {
            minBidValue = allBids.get(allBids.size() - 1).getAmount();
        } else if (allBids.size() >= section.getSize()) {
            minBidValue = allBids.get(section.getSize() - 1).getAmount();
        }
        object.addProperty("min-bid-amount", minBidValue);
        for (Bid bid : allBids) {
            JsonObject innerObject = new JsonObject();
            Student stud = StudentDAO.getInstance().retrieve(bid.getUserID());
            innerObject.add("userid", new JsonPrimitive(bid.getUserID()));
            innerObject.add("amount", new JsonPrimitive(bid.getAmount()));
            String result = df.format(stud.geteDollar());
            double eDollar = Double.parseDouble(result);
            innerObject.add("balance", new JsonPrimitive(eDollar));
            innerObject.add("status", new JsonPrimitive("pending"));
            arrayOfBids.add(innerObject);
        }

    } else if (round == 1 && status.equals("stopped")) {
        object.addProperty("vacancy",
                section.getSize() - BidDAO.getInstance().getSuccessfulBidsWithID(courseID, sectionID).size());

        allBids = BidDAO.getInstance().getBids(courseID, sectionID);
        if (allBids.size() >= vacancy && vacancy != 0) { // should this be >=? wha if vacancy==0?
            minBidValue = allBids.get(vacancy - 1).getAmount();
        } else if (allBids.size() < vacancy && allBids.size() > 0) {
            minBidValue = allBids.get(allBids.size() - 1).getAmount();
        }
        object.addProperty("min-bid-amount", minBidValue);
        allBids = BidDAO.getInstance().getBids(courseID, sectionID);

        for (Bid bid : allBids) {
            JsonObject innerObject = new JsonObject();
            Student stud = StudentDAO.getInstance().retrieve(bid.getUserID());
            innerObject.add("userid", new JsonPrimitive(bid.getUserID()));
            innerObject.add("amount", new JsonPrimitive(bid.getAmount()));
            String result = df.format(stud.geteDollar());
            double eDollar = Double.parseDouble(result);
            innerObject.add("balance", new JsonPrimitive(eDollar));
            innerObject.add("status", new JsonPrimitive(bid.getStatus()));
            arrayOfBids.add(innerObject);
        }
    } else if (round == 2 && status.equals("started")) {
        object.addProperty("vacancy", vacancy);

        // This is to re-compute the minimum bid value
        //            if (allBids.size() >= vacancy && vacancy != 0) { // should this be >=? wha if vacancy==0?
        //                minBidValue = allBids.get(vacancy - 1).getAmount() + 1;
        //            }
        // This allows us to store the minimum bids, and also to persist the bids such that it stores the min bid amount

        if (MinBidDAO.getInstance().updateMinBid(courseID + "-" + sectionID, minBidValue)) {
            // Bid was updated successfully
            object.addProperty("min-bid-amount", minBidValue);
        } else {
            object.addProperty("min-bid-amount", MinBidDAO.getInstance().getValue(courseID + "-" + sectionID));
        }

        for (int i = 0; i < allBids.size(); i++) {
            Bid bid = allBids.get(i);
            JsonObject innerObject = new JsonObject();

            Student stud = StudentDAO.getInstance().retrieve(bid.getUserID());
            innerObject.add("userid", new JsonPrimitive(bid.getUserID()));
            innerObject.add("amount", new JsonPrimitive(bid.getAmount()));
            String result = df.format(stud.geteDollar());
            double eDollar = Double.parseDouble(result);
            innerObject.add("balance", new JsonPrimitive(eDollar));

            // If there are vacancies still
            if (vacancy >= allBids.size()) {
                innerObject.add("status", new JsonPrimitive("success"));
            } else if (allBids.size() > vacancy) {
                // If this bid is still within the vacancy requirements
                if (i <= vacancy) {
                    Bid firstFailedBid = allBids.get(vacancy);

                    if (bid.getAmount() == firstFailedBid.getAmount()) {
                        innerObject.add("status", new JsonPrimitive("fail"));
                    } else {
                        innerObject.add("status", new JsonPrimitive("success"));
                    }
                } else if (i > vacancy) { //what if vacancy+1's bid amout
                    innerObject.add("status", new JsonPrimitive("fail"));
                }
            }
            arrayOfBids.add(innerObject);
        }

    } else {
        object.addProperty("vacancy",
                section.getSize() - BidDAO.getInstance().getSuccessfulBidsWithID(courseID, sectionID).size());
        allBids = BidDAO.getInstance().getSuccessfulBidsWithID(courseID, sectionID);
        allBids.sort(new BidComparator());
        minBidValue = allBids.get(allBids.size() - 1).getAmount();
        object.addProperty("min-bid-amount", minBidValue);
        for (Bid bid : allBids) {
            JsonObject innerObject = new JsonObject();
            Student stud = StudentDAO.getInstance().retrieve(bid.getUserID());
            innerObject.add("userid", new JsonPrimitive(bid.getUserID()));
            innerObject.add("amount", new JsonPrimitive(bid.getAmount()));
            String result = df.format(stud.geteDollar());
            double eDollar = Double.parseDouble(result);
            innerObject.add("balance", new JsonPrimitive(eDollar));
            innerObject.add("status", new JsonPrimitive(bid.getStatus()));
            arrayOfBids.add(innerObject);
        }
    }

    object.add("students", arrayOfBids);

    response.setContentType("application/json");

    response.getWriter().write(object.toString());
}

From source file:com.bios.controller.services.BootstrapService.java

/**
* Handles the HTTP <code>POST</code> method to perform the bootstrap function.
* Firstly, the method checks for a valid token. If there are any errors such
* as an valid token or a missing bootstrap file, a json object with the status
* "error" is created together with a json array of the errors that caused it.
* Else if the token is valid and there are no errors, the method then
* then unzips the zip file and reads the csv files to upload the relevant data
* into the respective DAOs and database. While it does this, ArrayLists are used
* to keep track of the errors such as invalid inputs or bids that cannot be bidded
* for in round 1. If these errors exist, then the json object would contain the
* status "error" and store the errors. Otherwise, the json object will have the
* status "success" to signifiy that the bootstrap was successful with no errors.
 * @param request servlet request/*from w w  w.  ja va 2s .  co m*/
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String token = request.getParameter("token");

    Part filePart = request.getPart("bootstrap-file"); // Retrieves <input type="file" name="file">

    JsonObject responseObject = new JsonObject();
    JsonArray allErrorsArr = new JsonArray();

    if (token == null) {
        allErrorsArr.add(new JsonPrimitive("missing token"));
    }

    if (filePart == null) {
        allErrorsArr.add(new JsonPrimitive("missing bootstrap-file"));
    }

    if (allErrorsArr.size() > 0) {
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrorsArr);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    if (token.length() == 0) {
        allErrorsArr.add(new JsonPrimitive("blank token"));
    }

    if (filePart.getSize() == 0) {
        allErrorsArr.add(new JsonPrimitive("blank bootstrap-file"));
    }

    if (allErrorsArr.size() > 0) {
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrorsArr);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    try {
        String result = JWTUtility.verify(token, "abcdefgh12345678");
        if (!result.equals("admin")) {
            JsonPrimitive value = new JsonPrimitive("invalid token");
            allErrorsArr.add(value);
            responseObject.addProperty("status", "error");
            responseObject.add("message", allErrorsArr);
            response.setContentType("application/json");
            response.getWriter().write(responseObject.toString());
            return;
        }
    } catch (JWTException e) {
        // This means not an admin, or token expired
        JsonPrimitive value = new JsonPrimitive("invalid username/token");
        allErrorsArr.add(value);
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrorsArr);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    InputStream inputStream = filePart.getInputStream();
    ServletContext context = getServletContext();

    //Uploaded to a file called bootstrap.zip
    File f = new File(context.getRealPath("/WEB-INF") + "/bootstrap.zip");
    OutputStream outputStream = new FileOutputStream(f);

    int read = 0;
    byte[] bytes = new byte[1024];
    //the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached
    //
    while ((read = inputStream.read(bytes)) != -1) {
        outputStream.write(bytes, 0, read);
    }

    if (inputStream != null) {
        try {
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (outputStream != null) {
        try {
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //TODO if the folder structure is invalid, let user know that nothing was uploaded
    //BootstrapValidator validator = new BootstrapValidator();
    ConnectionManager manager = new ConnectionManager();
    manager.deleteAllTables();

    BootstrapUnzipper unzipper = new BootstrapUnzipper();
    unzipper.unzip(context);

    BootstrapCSVReader csvReader = new BootstrapCSVReader();

    ArrayList<DataError> allCourses = csvReader.retrieveCourses(context);
    ArrayList<DataError> allSections = csvReader.retrieveSections(context);
    ArrayList<DataError> allStudents = csvReader.retrieveStudents(context);
    ArrayList<DataError> allPrerequisites = csvReader.retrievePrerequisites(context);
    ArrayList<DataError> allCompletedCourses = csvReader.retrieveCompletedCourses(context);
    ArrayList<DataError> allBids = csvReader.retrieveBids(context);
    ArrayList<ArrayList<DataError>> listOfErrors = new ArrayList<>();
    listOfErrors.add(allBids);
    listOfErrors.add(allCourses);
    listOfErrors.add(allCompletedCourses);
    listOfErrors.add(allPrerequisites);
    listOfErrors.add(allSections);
    listOfErrors.add(allStudents);

    JsonObject object = new JsonObject();

    if (!allCourses.isEmpty() || !allSections.isEmpty() || !allStudents.isEmpty() || !allBids.isEmpty()
            || !allPrerequisites.isEmpty() || !allCompletedCourses.isEmpty()) {
        object.add("status", new JsonPrimitive("error"));
    } else {
        object.add("status", new JsonPrimitive("success"));
    }

    int[] totalLines = csvReader.getTotalLines();
    int[] totalErrorLines = csvReader.getTotalErrorLines();
    String[] allHeaders = new String[] { "bid.csv", "course.csv", "course_completed.csv", "prerequisite.csv",
            "section.csv", "student.csv" };

    JsonObject item = new JsonObject();
    JsonArray itemArr = new JsonArray();

    item.add("bid.csv", new JsonPrimitive(totalLines[3] - totalErrorLines[3]));
    itemArr.add(item);
    item = new JsonObject();
    item.add("course.csv", new JsonPrimitive(totalLines[0] - totalErrorLines[0]));
    itemArr.add(item);
    item = new JsonObject();
    item.add("course_completed.csv", new JsonPrimitive(totalLines[5] - totalErrorLines[5]));
    itemArr.add(item);
    item = new JsonObject();
    item.add("prerequisite.csv", new JsonPrimitive(totalLines[4] - totalErrorLines[4]));
    itemArr.add(item);
    item = new JsonObject();
    item.add("section.csv", new JsonPrimitive(totalLines[1] - totalErrorLines[1]));
    itemArr.add(item);
    item = new JsonObject();
    item.add("student.csv", new JsonPrimitive(totalLines[2] - totalErrorLines[2]));
    itemArr.add(item);

    object.add("num-record-loaded", itemArr);

    LinkedHashMap<String, ArrayList<DataError>> allErrorMsgs = new LinkedHashMap<>();
    ArrayList<JsonObject> allErrorsArrList = new ArrayList<>();

    JsonArray allErrors = new JsonArray();
    //System.out.println(object.get("status").getAsString().equals("error"));
    if (object.get("status").getAsString().equals("error")) {

        for (int i = 0; i < allHeaders.length; i++) {

            ArrayList<DataError> list = listOfErrors.get(i);
            for (int j = 0; j < list.size(); j++) {
                DataError de = list.get(j);

                if (!allErrorMsgs.containsKey(de.getLineNum() + "")) {
                    ArrayList<DataError> l = new ArrayList<>();
                    l.add(de);
                    allErrorMsgs.put(de.getLineNum() + "", l);
                } else {
                    allErrorMsgs.get(de.getLineNum() + "").add(de);
                }
            }

            Iterator<Entry<String, ArrayList<DataError>>> iter = allErrorMsgs.entrySet().iterator();
            while (iter.hasNext()) {
                Entry<String, ArrayList<DataError>> m = iter.next();
                ArrayList<DataError> errorList = m.getValue();
                JsonObject error = new JsonObject();

                error.add("file", new JsonPrimitive(allHeaders[i]));

                JsonArray errMsgs = new JsonArray();

                for (DataError err : errorList) {
                    error.add("line", new JsonPrimitive(err.getLineNum()));
                    errMsgs.add(new JsonPrimitive(err.getDescription()));
                }

                error.add("message", errMsgs);
                allErrors.add(error);
            }
            allErrorMsgs = new LinkedHashMap<>();

        }

    }

    if (allErrors.size() > 0) {
        object.add("error", allErrors);
    }
    MinBidDAO.getInstance().drop();
    MinBidDAO.getInstance().refresh();

    response.setContentType("application/json");
    response.getWriter().write(object.toString());
}

From source file:com.bios.controller.services.DeleteBidService.java

/**
 * Handles the HTTP <code>GET</code> method and deletes the bid. It retrieves the userID, courseID, section ID, and amount bidded to verify the bid.
 * Upon verification, the bid will be deleted from bidDAO and database. Upon successful deletion, a json object is created with the
 * status "success". If the bid deletion is unsuccessful, a json object with the status "error" is created together with a
 * json array of the errors that caused the unsuccessful deletion.
 *
 * @param request servlet request/*from  w  w  w. j av  a 2  s .c  om*/
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    ConnectionManager manager = new ConnectionManager();
    String requestObject = request.getParameter("r");
    String token = request.getParameter("token");
    ArrayList<String> errorList = new ArrayList<String>();

    JsonObject responseObject = new JsonObject();
    JsonArray allErrors = new JsonArray();

    if (requestObject == null) {
        errorList.add("missing r");
    } else if (requestObject.length() == 0) {
        errorList.add("blank r");
    }

    if (token == null) {
        errorList.add("missing token");
    } else if (token.length() == 0) {
        errorList.add("blank token");
    } else {
        try {
            String result = JWTUtility.verify(token, "abcdefgh12345678");
            if (!result.equals("admin")) {
                errorList.add("invalid token");
            }
        } catch (JWTException e) { // do we need this?
            // This means not an admin, or token expired
            errorList.add("invalid username/token");
        }
    }

    JsonElement jelementRequest = new JsonParser().parse(requestObject);
    JsonObject json = jelementRequest.getAsJsonObject();

    JsonElement crse = json.get("course");
    JsonElement sec = json.get("section");
    JsonElement user = json.get("userid");

    if (crse == null) {
        errorList.add("missing course");
    } else if (crse.getAsString().length() == 0) {
        errorList.add("blank course");
    }

    if (sec == null) {
        errorList.add("missing section");
    } else if (sec.getAsString().length() == 0) {
        errorList.add("blank section");
    }

    if (user == null) {
        errorList.add("missing userid");
    } else if (user.getAsString().length() == 0) {
        errorList.add("blank userid");
    }

    if (errorList.size() > 0) {
        errorList.sort(new ErrorMsgComparator());
        for (String s : errorList) {
            allErrors.add(new JsonPrimitive(s));
        }
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    String courseID = crse.getAsString();
    String sectionID = sec.getAsString();
    String userID = user.getAsString();

    BidDAO bidDAO = BidDAO.getInstance();
    CourseDAO courseDAO = CourseDAO.getInstance();
    SectionDAO sectionDAO = SectionDAO.getInstance();
    StudentDAO studentDAO = StudentDAO.getInstance();

    String roundStatus = manager.getBiddingRoundStatus();
    Bid bid = bidDAO.getBid(userID, courseID, sectionID);

    if (roundStatus.equals("stopped") || !bidDAO.deleteBid(userID, courseID, sectionID)) {
        responseObject.addProperty("status", "error");
        if (courseDAO.findCourse(courseID) == null) {
            allErrors.add(new JsonPrimitive("invalid course"));
        }
        if (sectionDAO.findSection(courseID, sectionID) == null) {
            allErrors.add(new JsonPrimitive("invalid section"));
        }
        if (studentDAO.findStudent(userID) == null) {
            allErrors.add(new JsonPrimitive("invalid userid"));
        }
        if (roundStatus.equals("stopped")) {
            allErrors.add(new JsonPrimitive("round ended"));
        }

        if (roundStatus.equals("started") && allErrors.size() == 0) {
            allErrors.add(new JsonPrimitive("no such bid"));
        }
        responseObject.add("message", allErrors);

        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    } else {
        // no errors detected in the deletion of bids
        MinBidDAO.getInstance().getMinBidList().remove(courseID + "-" + sectionID);
        MinBidDAO.getInstance().refresh();
        responseObject.addProperty("status", "success");
        Student stud = studentDAO.retrieve(userID);
        stud.seteDollar(stud.geteDollar() + bid.getAmount());
        manager.refundEDollar(userID, bid.getAmount());
        bidDAO.deleteBidFromDB(userID, courseID, sectionID);
    }

    response.setContentType("application/json");
    response.getWriter().write(responseObject.toString());
}

From source file:com.bios.controller.services.DumpSectionService.java

/**
   * Handles the HTTP <code>GET</code> method which uses the courseid, a sectionid and  token of an administrator. After the
   * courseid, sectionid and token of the administrator is obtained, the method first verifies that the token is valid and present in the session
   * object. Subsequently, if  the token is valid, the method checks the respective DAOs and retrieves the respective information of the bids of
   * that particular courses section and places it in a json object. If an error occurs, such as a missing input, a json object will be created
   * with the status "error" and will reflect the errors in a json array within the object.
   * @param request servlet request/*  w  w w .java  2s . c  o  m*/
   * @param response servlet response
   * @throws ServletException if a servlet-specific error occurs
   * @throws IOException if an I/O error occurs
   */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    ConnectionManager manager = new ConnectionManager();
    String requestObject = request.getParameter("r");
    String token = request.getParameter("token");
    ArrayList<String> errorList = new ArrayList<String>();

    JsonObject responseObject = new JsonObject();
    JsonArray allErrors = new JsonArray();

    if (requestObject == null) {
        errorList.add("missing r");
    } else if (requestObject.length() == 0) {
        errorList.add("blank r");
    }

    if (token == null) {
        errorList.add("missing token");
    } else if (token.length() == 0) {
        errorList.add("blank token");
    } else {
        try {
            String result = JWTUtility.verify(token, "abcdefgh12345678");
            if (!result.equals("admin")) {
                errorList.add("invalid token");
            }
        } catch (JWTException e) { // do we need this?
            // This means not an admin, or token expired
            errorList.add("invalid username/token");
        }
    }

    JsonElement jelementRequest = new JsonParser().parse(requestObject);
    JsonObject json = jelementRequest.getAsJsonObject();

    JsonElement crse = json.get("course");
    JsonElement sec = json.get("section");

    if (crse == null) {
        errorList.add("missing course");
    } else if (crse.getAsString().length() == 0) {
        errorList.add("blank course");
    }

    if (sec == null) {
        errorList.add("missing section");
    } else if (sec.getAsString().length() == 0) {
        errorList.add("blank section");
    }

    if (errorList.size() > 0) {
        errorList.sort(new ErrorMsgComparator());
        for (String s : errorList) {
            allErrors.add(new JsonPrimitive(s));
        }
        responseObject.addProperty("status", "error");
        responseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    String courseID = crse.getAsString();
    String sectionID = sec.getAsString();

    int round = manager.getBiddingRound();
    String status = manager.getBiddingRoundStatus();

    // Will now check to see if there are any errors here
    Course course = CourseDAO.getInstance().findCourse(crse.getAsString());
    Section section = null;
    if (course == null) {
        allErrors.add(new JsonPrimitive("invalid course"));
    } else {
        section = SectionDAO.getInstance().findSection(course.getCourseID(), sec.getAsString());
        if (section == null) {
            allErrors.add(new JsonPrimitive("invalid section"));
        }
    }

    if (allErrors.size() != 0) {
        responseObject.add("status", new JsonPrimitive("error"));
        responseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(responseObject.toString());
        return;
    }

    JsonArray allResults = new JsonArray();
    ArrayList<SectionStudent> allSecStudList = SectionStudentDAO.getInstance()
            .getSectionStudentListWithID(crse.getAsString(), sec.getAsString());
    ArrayList<SectionStudent> secStudList = new ArrayList<>();

    for (SectionStudent secStud : allSecStudList) {
        if (secStud.getCourseID().equals(courseID) && secStud.getSectionID().equals(sectionID)) {
            secStudList.add(secStud);
        }
        //            String cID = secStud.getCourseID();
        //            String sID = secStud.getSectionID();
        //
        //            ArrayList<Bid> halfBids = new ArrayList<>();
        //            if (round == 1 || round == 2 && status.equals("started")) {
        //                halfBids = BidDAO.getInstance().getSuccessfulBidsWithID(cID, sID);
        //            } else if (round == 2 && status.equals("stopped")) {
        //                halfBids = BidDAO.getInstance().getBids(sID, sID);
        //            }
        //            allBids.addAll(halfBids);
    }

    secStudList.sort(new SectionStudentComparator());
    for (SectionStudent secStud : secStudList) {
        JsonObject obj = new JsonObject();
        obj.addProperty("userid", secStud.getUserID());
        obj.addProperty("amount", secStud.getAmount());
        allResults.add(obj);
    }

    //        // After we sort all the bids, then we shall add them to be responded to
    //        allBids.sort(new BidUserComparator());
    //        for (Bid bid : allBids) {
    //            JsonObject obj = new JsonObject();
    //            obj.add("userid", new JsonPrimitive(bid.getUserID()));
    //            obj.add("amount", new JsonPrimitive(bid.getAmount()));
    //            allResults.add(obj);
    //        }

    responseObject.add("status", new JsonPrimitive("success"));
    responseObject.add("students", allResults);

    response.setContentType("application/json");
    response.getWriter().write(responseObject.toString());
}

From source file:com.bios.controller.services.UpdateBidService.java

/**
* Handles the HTTP <code>GET</code> method which updates a bid. Firstly, the token
* is checked for its validity. If the token is valid, the method then goes into the
* respective DAOs to look for the bid. If the bid is valid and can be deleted, the
* bid is then deleted from the DAO and the database. Subsequentyly, a json object
* with the status "success" will be created. If any errors occur such as an
* invalid course or missing token is detected, a json object with the status "error"
* will be created with a json array of the erros that caused the failure to update.
* @param request servlet request/*from   www.j a v  a  2  s . co  m*/
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    ConnectionManager manager = new ConnectionManager();
    String requestObject = request.getParameter("r");
    String token = request.getParameter("token");
    ArrayList<String> errorList = new ArrayList<String>();

    JsonObject reponseObject = new JsonObject();
    JsonArray allErrors = new JsonArray();

    if (requestObject == null) {
        errorList.add("missing r");
    } else if (requestObject.length() == 0) {
        errorList.add("blank r");
    }

    if (token == null) {
        errorList.add("missing token");
    } else if (token.length() == 0) {
        errorList.add("blank token");
    } else {
        try {
            String result = JWTUtility.verify(token, "abcdefgh12345678");
            if (!result.equals("admin")) {
                errorList.add("invalid token");
            }
        } catch (JWTException e) { // do we need this?
            // This means not an admin, or token expired
            errorList.add("invalid username/token");
        }
    }

    JsonElement jelement = new JsonParser().parse(requestObject);
    JsonObject json = jelement.getAsJsonObject();
    Bid existingBid = null;

    JsonElement amt = json.get("amount");
    JsonElement crse = json.get("course");
    JsonElement sec = json.get("section");
    JsonElement user = json.get("userid");

    if (amt == null) {
        errorList.add("missing amount");
    } else if (amt.getAsString().length() == 0) {
        errorList.add("blank amount");
    }

    if (crse == null) {
        errorList.add("missing course");
    } else if (crse.getAsString().length() == 0) {
        errorList.add("blank course");
    }

    if (sec == null) {
        errorList.add("missing section");
    } else if (sec.getAsString().length() == 0) {
        errorList.add("blank section");
    }

    if (user == null) {
        errorList.add("missing userid");
    } else if (user.getAsString().length() == 0) {
        errorList.add("blank userid");
    }

    if (errorList.size() > 0) {
        errorList.sort(new ErrorMsgComparator());
        for (String s : errorList) {
            allErrors.add(new JsonPrimitive(s));
        }
        reponseObject.addProperty("status", "error");
        reponseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(reponseObject.toString());
        return;
    }

    // There may be type errors for the double here
    double amount = amt.getAsDouble();
    String courseID = crse.getAsString();
    String sectionID = sec.getAsString();
    String userID = user.getAsString();

    Course course = CourseDAO.getInstance().findCourse(courseID);
    Section section = SectionDAO.getInstance().findSection(courseID, sectionID);
    Student student = StudentDAO.retrieve(userID);

    int round = manager.getBiddingRound();
    BootstrapValidator bv = new BootstrapValidator();
    if (bv.parseBidAmount(amt.getAsString()) != null) {
        allErrors.add(new JsonPrimitive("invalid amount"));
    }

    if (course == null) {
        allErrors.add(new JsonPrimitive("invalid course"));
    }

    // only check if course code is valid
    if (course != null && section == null) {
        allErrors.add(new JsonPrimitive("invalid section"));
    }

    if (student == null) {
        allErrors.add(new JsonPrimitive("invalid userid"));
    }

    if (allErrors.size() > 0) {
        reponseObject.addProperty("status", "error");
        reponseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(reponseObject.toString());
        return;
    }

    if (manager.getBiddingRoundStatus().equals("started")) {
        if (round == 2) {
            double minBidAmt = MinBidDAO.getInstance().getValue(courseID + "-" + sectionID);
            System.out.println(courseID + "-" + sectionID);
            System.out.println("UPDATE amount: " + amount);
            System.out.println("UPDATE min bid: " + minBidAmt);
            if (amount < minBidAmt) {
                errorList.add("bid too low");
            }
        } else if (round == 1) {
            if (amount < 10) {
                errorList.add("bid too low");
            }
        }

        existingBid = BidDAO.getInstance().getStudentBidWithCourseID(userID, courseID);
        //no existing bid
        if (existingBid == null) {
            if (bv.parseEDollarEnough(userID, courseID, sectionID, amt.getAsString()) != null) {
                errorList.add("insufficient e$");
            }
        } else if (existingBid.getStatus().equals("pending")) {
            if (bv.parseEDollarEnoughExistingBid(userID, courseID, sectionID, amt.getAsString()) != null) {
                // Think too much alr, this line is not needed
                //                    errorList.add("insufficient e$");
            }
        } else if (existingBid.getStatus().equals("success")) {
            errorList.add("course enrolled");
        }

        if (bv.parseClassTimeTableClash(userID, courseID, sectionID) != null) {
            errorList.add("class timetable clash");
        }

        if (bv.parseExamTimeTableClash(userID, courseID, sectionID) != null) {
            errorList.add("exam timetable clash");
        }

        if (bv.parseIncompletePrerequisite(userID, courseID) != null) {
            errorList.add("incomplete prerequisites");
        }

        if (bv.parseAlreadyComplete(userID, courseID) != null) {
            errorList.add("course completed");
        }

        if (bv.parseSectionLimit(userID, courseID, sectionID) != null) {
            errorList.add("section limit reached");
        }

        if (bv.parseNotOwnSchoolCourse(userID, courseID) != null) {
            errorList.add("not own school course");
        }

        ArrayList<SectionStudent> sectionStudentList = SectionStudentDAO.getInstance()
                .getSectionStudentListWithID(courseID, sectionID);
        int vacancy = section.getSize() - sectionStudentList.size();
        if (vacancy <= 0) {
            errorList.add("no vacancy");
        }
    } else {
        errorList.add("round ended");
    }

    if (errorList.size() > 0) {
        Collections.sort(errorList);
        for (String s : errorList) {
            allErrors.add(new JsonPrimitive(s));
        }
        reponseObject.addProperty("status", "error");
        reponseObject.add("message", allErrors);
        response.setContentType("application/json");
        response.getWriter().write(reponseObject.toString());
        return;
    } else { //success state
        Bid newBid = new Bid(userID, amount, courseID, sectionID, "pending");
        if (existingBid != null) { //there is an existing bid
            MinBidDAO.getInstance().getMinBidList().remove(courseID + "-" + sectionID);
            MinBidDAO.getInstance().refresh();
            BidPlacementServlet.updateCurrentBid(userID, courseID, sectionID, amount, student);
        } else {
            student.seteDollar(student.geteDollar() - amount);
            manager.setEDollar(userID, student.geteDollar());
            BidDAO.getInstance().addBid(newBid);
            manager.addBid(newBid);
            //dk if this is needed
            if (round == 1) {
                RoundOneBidDAO.getInstance().addBid(newBid);
            } else if (round == 2) {
                RoundTwoBidDAO.getInstance().addBid(newBid);
            }
        }
        MinBidDAO.getInstance().refresh();
        reponseObject.addProperty("status", "success");
    }

    response.setContentType("application/json");
    response.getWriter().write(reponseObject.toString());
    return;
}

From source file:com.birbit.jsonapi.JsonApiDeserializer.java

License:Apache License

private List<JsonApiError> parserErrors(JsonDeserializationContext context, JsonObject jsonObject) {
    JsonElement errors = jsonObject.get("errors");
    if (errors == null || !errors.isJsonArray()) {
        return null;
    }/*from w  w w.jav  a2 s.co m*/
    JsonArray asJsonArray = errors.getAsJsonArray();
    int size = asJsonArray.size();
    List<JsonApiError> result = new ArrayList<JsonApiError>(size);
    for (int i = 0; i < size; i++) {
        result.add(context.<JsonApiError>deserialize(asJsonArray.get(i), JsonApiError.class));
    }
    return result;
}

From source file:com.birbit.jsonapi.JsonApiDeserializer.java

License:Apache License

private Map<String, Map<String, Object>> parseIncluded(JsonDeserializationContext context,
        JsonObject jsonObject) {/*from   ww w  . jav  a  2 s  .  c o m*/
    JsonElement includedElm = jsonObject.get("included");
    Map<String, Map<String, Object>> included;
    if (includedElm != null && includedElm.isJsonArray()) {
        included = new HashMap<String, Map<String, Object>>();
        JsonArray includedArray = includedElm.getAsJsonArray();
        final int size = includedArray.size();
        for (int i = 0; i < size; i++) {
            ResourceWithIdAndType parsed = parseResource(includedArray.get(i), context);
            if (parsed.resource != null) {
                Map<String, Object> itemMap = included.get(parsed.apiType);
                if (itemMap == null) {
                    itemMap = new HashMap<String, Object>();
                    included.put(parsed.apiType, itemMap);
                }
                itemMap.put(parsed.id, parsed.resource);
            }
        }
    } else {
        included = Collections.emptyMap();
    }
    return included;
}

From source file:com.birbit.jsonapi.JsonApiDeserializer.java

License:Apache License

private T[] parseData(JsonDeserializationContext context, ParameterizedType parameterizedType,
        JsonObject jsonObject) {//from w ww.  jav  a2  s  .c  o m
    JsonElement dataElm = jsonObject.get("data");
    if (dataElm != null) {
        Type typeArg = parameterizedType.getActualTypeArguments()[0];
        if (dataElm.isJsonArray()) {
            JsonArray jsonArray = dataElm.getAsJsonArray();
            final int size = jsonArray.size();
            //                boolean isArray = typeArg instanceof GenericArrayType;
            //                if (isArray) {
            TypeToken<?> typeToken = TypeToken.get(typeArg);
            T[] result = (T[]) Array.newInstance(typeToken.getRawType().getComponentType(), size);
            for (int i = 0; i < size; i++) {
                ResourceWithIdAndType<T> resourceWithIdAndType = parseResource(jsonArray.get(i), context);
                result[i] = resourceWithIdAndType.resource;
            }
            return result;
            //                } else {
            //                    TypeToken<?> typeToken = TypeToken.get(typeArg);
            //                    T[] result = (T[]) Array.newInstance(typeToken.getRawType().getComponentType(), size);
            //                    for (int i = 0; i < size; i ++) {
            //                        ResourceWithIdAndType<T> resourceWithIdAndType = parseResource(jsonArray.get(i), context);
            //                        //noinspection unchecked
            //                        result[i] = resourceWithIdAndType.resource;
            //                    }
            //                    return result;
            //                }
        } else if (dataElm.isJsonObject()) {
            T resource = parseResource(dataElm, context).resource;
            Object[] result = (Object[]) Array.newInstance(resource.getClass(), 1);
            result[0] = resource;
            return (T[]) result;
        }
    }
    return null;
}

From source file:com.birbit.jsonapi.JsonApiResourceDeserializer.java

License:Apache License

private List<String> parseIds(JsonArray jsonArray) {
    List<String> result = new ArrayList<String>(jsonArray.size());
    for (int i = 0; i < jsonArray.size(); i++) {
        JsonElement item = jsonArray.get(i);
        if (item.isJsonObject()) {
            JsonElement idField = item.getAsJsonObject().get("id");
            if (idField != null && idField.isJsonPrimitive()) {
                result.add(idField.getAsString());
            }//w  w  w.  ja  v  a2s  .  co  m
        }
    }
    return result;
}

From source file:com.bizosys.dataservice.sql.SqlSensorInputParser.java

License:Apache License

private static void addQuery(List<UnitStep> queryUnits, JsonObject queryObj, String queryId)
        throws ErrorCodeExp {

    AppConfig queryObject = QueryDefinationFactory.queryM.get(queryId);

    if (queryObject == null) {
        QueryDefinationFactory.refreshQueries();
        queryObject = QueryDefinationFactory.queryM.get(queryId);
    }//w w  w. j  av  a  2 s  .  com

    if (queryObject == null) {
        throw new ErrorCodeExp(queryId, ErrorCodes.QUERY_NOT_FOUND,
                "Query Id " + queryId + " is not configured.", ErrorCodes.QUERY_KEY);

    }

    queryObject = queryObject.clone();

    /**
     * Parameters
     */
    List<Object> paramL = new ArrayList<Object>();
    if (queryObj.has("params")) {
        JsonArray paramsArray = queryObj.get("params").getAsJsonArray();
        int totalParam = paramsArray.size();
        for (int i = 0; i < totalParam; i++) {
            String paramVal = paramsArray.get(i).getAsString();
            if (paramVal.length() > 0) {
                if (paramVal.equals("__null") || paramVal.equals("null"))
                    paramVal = null;
            }
            paramL.add(paramVal);
        }
    }

    /**
     * where, sort, offset, limit
     */
    String where = (queryObj.has("where")) ? queryObj.get("where").getAsString() : null;
    String sort = (queryObj.has("sort")) ? queryObj.get("sort").getAsString() : null;
    int offset = (queryObj.has("offset")) ? queryObj.get("offset").getAsInt() : -1;
    int limit = (queryObj.has("limit")) ? queryObj.get("limit").getAsInt() : -1;

    /**
     * If there are any sequence ids to be generated then generate the ids 
     * and add the generated sequenceids to the variables string.
     */
    String variables = (queryObj.has("variables"))
            ? "{variables:" + queryObj.get("variables").getAsJsonArray().toString() + "}"
            : null;

    if (DEBUG_ENABLED && variables != null)
        LOG.debug("String variables are : " + variables);

    Boolean isRecursive = (queryObj.has("isRecursive")) ? queryObj.get("isRecursive").getAsBoolean() : false;

    /**
     * Single Expression
     */
    UnitExpr expr = extractExpr(queryObj);

    /**
     * Boolean Expression
     */
    List<UnitExpr> andExprs = booleanExprs(queryObj, true);
    List<UnitExpr> orExprs = booleanExprs(queryObj, false);

    JsonElement sequenceElem = null;
    if (queryObj.has("sequences"))
        sequenceElem = queryObj.get("sequences");

    UnitQuery uq = new UnitQuery(queryObject, paramL, expr, andExprs, orExprs, where, sort, offset, limit,
            variables, isRecursive, sequenceElem);
    uq.isFunc = false;
    uq.stepId = queryId;
    queryUnits.add(uq);
}