@Override
 public boolean registerBid(double value, int uniqueUserId, int auctionId) throws RemoteException {
   RMIClientIntf clientIntf = registeredUsers.get(uniqueUserId);
   Bid bid = new Bid(value, uniqueUserId);
   if (!liveAuctionItems.containsKey(auctionId)) {
     clientIntf.callBack("Auction item id does not exist\n");
     return false;
   }
   if (uniqueUserId == liveAuctionItems.get(auctionId).getCreator_id()) {
     clientIntf.callBack("Not able to register bid - bidder is the creator of this auction\n");
     return false;
   } else {
     if (liveAuctionItems.get(auctionId).addBidder(bid)) {
       clientIntf.callBack(
           "Bid registered to auction with id "
               + auctionId
               + " and amount "
               + bid.getBid()
               + "\n");
       return true;
     } else {
       clientIntf.callBack(
           "Bid rejected, user has already placed a bid for this auction, can only place higher bids\n");
       return false;
     }
   }
 }
  @Override
  public void notifyResult(AuctionItem item) {
    if (registeredUsers.containsKey(item.getCreator_id())) {
      RMIClientIntf creator = registeredUsers.get(item.getCreator_id());
      try {
        creator.callBack("Your Auction has produced the following results :\n ");
        creator.callBack(item.getResult());
      } catch (RemoteException e) {
        System.out.println("Creator no longer online\n");
      }
    } else {
      System.out.println("Creator id does not exist\n");
    } // Normally an auction with no creator registered should not exist but since this is a
    // simplified implementation
    // We allow bids on auctions with no creator (usually the initialised ones) for testing
    // purposes.
    if (item.numberOfBids() != 0) {
      System.out.println("Notifying bidders");
      Iterator<Bid> it = item.getBidders();
      while (it.hasNext()) {
        Bid bidder = it.next();
        if (registeredUsers.containsKey(bidder.getUserId())) {
          RMIClientIntf client = registeredUsers.get(bidder.getUserId());
          try {
            client.callBack(item.getResult());
          } catch (RemoteException e) {
            System.out.println("Bidder with id " + bidder.getUserId() + " no longer online\n");
          }

        } else {
          System.out.println("User id does not exist\n");
        }
      }
    }
  }
  protected void receiveInfo(GameInfo info) {
    // TODO Auto-generated method stub
    Bid bid = DudoState.currentBid;
    if (info instanceof NotYourTurnInfo) return;

    // get the dice of the normal player
    // compare to most recent bid
    int currentVal = bid.currentVal;
    int currentFrequency = bid.currentFreq;
    // if it was a "not your turn" message, just ignore it
    if (info instanceof NotYourTurnInfo) return;

    // have a small chance that Dudo will be called
    double chance = Math.random();
    if (chance < .1) {
      // must send in the game action
      // game.sendAction)(new DudoMoveAction())

    }
    // increases the frequency not the value
    bid.setLastBidVal(currentVal);
    bid.setLastFreq(currentFrequency);
    int increase = (int) Math.random() * 2;
    currentFrequency = currentFrequency + increase;
    currentVal = currentVal + 1;
    bid.setBidFreq(currentFrequency);
    bid.setBidVal(currentVal);
    // if bid has values that are not probable call Dudo on recent player

    // game.sendAction(new DudoMoveAction(this, ,));
    // if not then, make a guess within a range of two
    game.sendAction(new DudoMoveAction(this, currentVal, currentFrequency));
  }
 private int amountOfBidsFrom(User user) {
   int total = 0;
   for (Bid l : bids) {
     if (l.getUser().equals(user)) total++;
   }
   return total;
 }
 public static void verifyOrderedList(SortedSet<Bid> bids) {
   if (bids.size() > 0) {
     double firstPrice = bids.first().getPrice();
     double lastPrice = bids.last().getPrice();
     for (Bid bid : bids) {
       MatcherAssert.assertThat(bid.getPrice(), greaterThanOrEqualTo(firstPrice));
       MatcherAssert.assertThat(bid.getPrice(), lessThanOrEqualTo(lastPrice));
     }
   }
 }
Exemple #6
0
  /**
   * build BidWin from scratch
   *
   * @param bid value of the winning bid
   * @param fine fine in case of transaction failure
   * @return
   */
  @Override
  public Packet buildBidWin(Bid bid, int fine) {

    int transactionID = bid.getTransactionID();
    Inet4Address winnerIP = bid.getSourceIP();
    int winningBid = bid.getBid();
    BidWin bidWin = new BidWin(transactionID, winnerIP, winningBid, fine);
    bidWin.setSourceIP(this.deviceIP);
    bidWin.setDestinationIP(this.broadcastAddr);
    return bidWin;
  }
  @Test
  public void placeBid_should_return_the_bid_back_with_id_set_from_database() {
    Bid incoming = new Bid(0, 1, 3, 15000, "User3");
    dbHandler.setReturnBid(1);
    initProvider();
    String json = jsonHandler.bidToJSON(incoming);
    Bid result = provider.placeBid(json);

    assertNotNull(result);
    assertEquals(1, result.getBidID());
  }
Exemple #8
0
  /**
   * build Bid from scratch
   *
   * @param advert the Advert to which the Bid repsonds
   * @param bid value of the bid
   * @return Bid built from given data
   * @throws NegativeBidException
   */
  @Override
  public Packet buildBid(Advert advert, int bid) throws NegativeBidException {
    assert advert != null : "Bids can only be made for valid Advert packets!";

    int transactionID = advert.transactionID;

    Bid bidPkt = new Bid(transactionID, bid);
    bidPkt.setSourceIP(this.deviceIP);
    bidPkt.setDestinationIP(this.broadcastAddr);
    return bidPkt;
  }
Exemple #9
0
 /**
  * Builds a dummy Bid in case no Bid was received
  *
  * @param TransactionID
  * @param bid
  * @return dummy Bid
  * @throws NegativeBidException
  */
 @Override
 public Packet buildDummyBid(int transactionID, int bid) throws NegativeBidException {
   Bid bidPkt = new Bid(transactionID, bid);
   Inet4Address backboneIP = (Inet4Address) NetworkManager.getInstance().getMyOwnBackbone();
   if (backboneIP == null) {
     return null;
   }
   bidPkt.setSourceIP(backboneIP);
   bidPkt.setDestinationIP(this.broadcastAddr);
   return bidPkt;
 }
 @Override
 public boolean equals(Object obj) {
   if (obj instanceof Bid) {
     Bid b = (Bid) obj;
     return (this.name.equals(b.getBidder()) && this.value == b.getBid());
   } else if (obj instanceof String) {
     String str = (String) obj;
     return str.equals(name + value);
   } else {
     return false;
   }
 }
  @Test
  public void acceptBid() throws Exception {

    Stock myStock = new Stock("ABC", "AB Corp");
    Bid b1 = exchange.buy(traderA, myStock, 12);
    Bid b2 = exchange.sell(traderB, myStock, 10);

    assertThat(b1.getId(), is(1L));
    assertThat(b2.getId(), is(2L));
    assertThat(exchange.getTransactions().size(), is(1));
    assertThat(exchange.getTransactions().poll(), is(new Transaction(b1, b2, 12)));
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bidding);

    Intent intent = getIntent();

    if (intent.hasExtra("myUsername")) {
      myUsername = intent.getStringExtra("myUsername");
    }

    ListView allBidsList = (ListView) findViewById(R.id.listView);
    allBidsList.setOnItemClickListener(onItemClickListener);

    ArrayList<Bid> allBids = new ArrayList<>();

    ElasticSearchAppController.GetBidsTask getBidsTask =
        new ElasticSearchAppController.GetBidsTask();
    getBidsTask.execute();

    try {
      allBids.addAll(getBidsTask.get());
    } catch (InterruptedException e) {
      e.printStackTrace();
    } catch (ExecutionException e) {
      e.printStackTrace();
    }

    System.out.println("NUMBER OF FOUND BIDS FOR THIS USER");
    System.out.printf("%d\n", NavigationMainActivity.allBids.size());

    myBids.clear();

    for (Bid bid : allBids) {
      System.out.printf("%s\n", bid.getBidder());
      System.out.printf("%s\n", myUsername);

      if ((bid.getBidder()).equals(myUsername)) {
        System.out.printf("%s\n", bid.getItem());
        myBids.add(bid);
      }
    }

    System.out.println("NUMBER OF FOUND BIDS FOR THIS USER");
    System.out.printf("%d\n", myBids.size());

    for (int x = 0; x < myBids.size(); x++) {
      System.out.println(myBids.get(x).getItem());
    }
    adapter = new ArrayAdapter<>(this, R.layout.list_item, myBids);
    allBidsList.setAdapter(adapter);
  }
Exemple #13
0
 public void Close() {
   for (Lot lot : lots) {
     System.out.println(lot.toString());
     Bid highestBid = lot.getHighestBid();
     if (highestBid != null) {
       Person winner = highestBid.getBidder();
       System.out.println("Sold to: " + winner.getName());
     } else {
       System.out.println("Not sold!");
     }
     // I'd assume it quits from here
   }
 }
Exemple #14
0
 /**
  * Make a bid for a lot. A message is printed indicating whether the bid is successful or not.
  *
  * @param lotNumber The lot being bid for.
  * @param bidder The person bidding for the lot.
  * @param value The value of the bid.
  */
 public void makeABid(int lotNumber, Person bidder, long value) {
   Lot selectedLot = getLot(lotNumber);
   if (selectedLot != null) {
     Bid bid = new Bid(bidder, value);
     boolean successful = selectedLot.bidFor(bid);
     if (successful) {
       System.out.println("The bid for lot number " + lotNumber + " was successful.");
     } else {
       // Report which bid is higher.
       Bid highestBid = selectedLot.getHighestBid();
       System.out.println(
           "Lot number: " + lotNumber + " already has a bid of: " + highestBid.getValue());
     }
   }
 }
 public Double getHighBidAmount() {
   ArrayList<Bid> bidResults = new ArrayList<Bid>();
   Double result = 0.00;
   ElasticSearchCtr.GetBid getBid = new ElasticSearchCtr.GetBid();
   getBid.execute(new String[] {"bidStallID", this.getStallID()});
   try {
     bidResults = getBid.get();
   } catch (InterruptedException | ExecutionException e) {
     e.printStackTrace();
   }
   for (Bid b : bidResults) {
     result = Math.max(result, b.BidAmount());
   }
   return result;
 }
  @Test
  public void unacceptableBids() throws Exception {

    Stock myStock = new Stock("ABC", "AB Corp");
    Bid b1 = exchange.buy(traderA, myStock, 10);
    Bid s1 = exchange.sell(traderB, myStock, 12);

    assertThat(s1.getId(), not(b1.getId()));

    assertThat(exchange.getTransactions().size(), is(0));

    Bid s2 = exchange.sell(traderB, myStock, 9);
    Bid s3 = exchange.sell(traderB, myStock, 15);
    assertThat(exchange.getTransactions().size(), is(1));
    assertThat(exchange.getTransactions().peek(), is(new Transaction(b1, s2, 10)));

    assertThat(
        exchange.getTransactions().peek().toString(),
        is(
            "Transaction{buy=Bid{id=1, trader=Trader{name='Al'}, stock=Stock{name='AB Corp', ticker='ABC'}, price=10.0}, sell=Bid{id=3, trader=Trader{name='Ben'}, stock=Stock{name='AB Corp', ticker='ABC'}, price=9.0}, price=10.0}"));
  }
Exemple #17
0
  public static void newBids(Long id) {
    // count new bids
    long newBids =
        Bid.count(
            "from AuctionItem a join a.bids as b " + "where a.id = ? AND b.date > ?",
            id,
            request.date);

    // wait if needed
    if (newBids == 0) {
      await("1s");
    }

    // return the JSON output of the new bids
    AuctionItem item = AuctionItem.findById(id);

    JsonObject json = new JsonObject();
    json.addProperty("next", item.getNextBidPrice());
    json.addProperty("top", item.getCurrentTopBid());
    renderJSON(json.toString());
  }
  public static void main(java.lang.String[] args) {

    try {
      authorizationData = new AuthorizationData();
      authorizationData.setDeveloperToken(DeveloperToken);
      authorizationData.setAuthentication(new PasswordAuthentication(UserName, Password));
      authorizationData.setCustomerId(CustomerId);
      authorizationData.setAccountId(AccountId);

      CampaignService =
          new ServiceClient<ICampaignManagementService>(
              authorizationData, ICampaignManagementService.class);

      // Get the user's list of Bing Merchant Center (BMC) stores.

      final ArrayOfBMCStore stores = getBMCStoresByCustomerId();

      if (stores == null) {
        outputStatusMessage(
            String.format(
                "Customer %d does not have any regeistered BMC stores.\n\n",
                authorizationData.getCustomerId()));
        return;
      }

      // Create a Bing Shopping campaign using the ID of the first store in the list.

      Campaign campaign = new Campaign();
      campaign.setName("Bing Shopping Campaign " + System.currentTimeMillis());
      campaign.setDescription("Bing Shopping Campaign Example.");
      campaign.setBudgetType(BudgetLimitType.MONTHLY_BUDGET_SPEND_UNTIL_DEPLETED);
      campaign.setMonthlyBudget(1000.00);
      campaign.setTimeZone("PacificTimeUSCanadaTijuana");
      ArrayList<CampaignType> campaignTypes = new ArrayList<CampaignType>();
      campaignTypes.add(CampaignType.SHOPPING);
      ArrayOfSetting settings = new ArrayOfSetting();
      ShoppingSetting shoppingSetting = new ShoppingSetting();
      shoppingSetting.setPriority(0);
      shoppingSetting.setSalesCountryCode("US");
      shoppingSetting.setStoreId(stores.getBMCStores().get(0).getId());
      settings.getSettings().add(shoppingSetting);
      campaign.setSettings(settings);
      campaign.setCampaignType(campaignTypes);
      campaign.setDaylightSaving(true);

      ArrayOfCampaign campaigns = new ArrayOfCampaign();
      campaigns.getCampaigns().add(campaign);
      AddCampaignsResponse addCampaignsResponse = addCampaigns(AccountId, campaigns);
      ArrayOfNullableOflong campaignIds = addCampaignsResponse.getCampaignIds();
      ArrayOfBatchError campaignErrors = addCampaignsResponse.getPartialErrors();
      outputCampaignsWithPartialErrors(campaigns, campaignIds, campaignErrors);

      ArrayOfAdGroup adGroups = new ArrayOfAdGroup();
      AdGroup adGroup = new AdGroup();
      adGroup.setName("Product Categories");
      ArrayList<AdDistribution> adDistribution = new ArrayList<AdDistribution>();
      adDistribution.add(AdDistribution.SEARCH);
      adGroup.setAdDistribution(adDistribution);
      adGroup.setBiddingModel(BiddingModel.KEYWORD);
      adGroup.setPricingModel(PricingModel.CPC);
      adGroup.setStartDate(null);
      adGroup.setEndDate(new com.microsoft.bingads.v10.campaignmanagement.Date());
      adGroup.getEndDate().setDay(31);
      adGroup.getEndDate().setMonth(12);
      adGroup.getEndDate().setYear(2016);
      Bid searchBid = new Bid();
      searchBid.setAmount(0.09);
      adGroup.setSearchBid(searchBid);
      adGroup.setLanguage("English");
      adGroups.getAdGroups().add(adGroup);

      AddAdGroupsResponse addAdGroupsResponse =
          addAdGroups(campaignIds.getLongs().get(0), adGroups);
      ArrayOfNullableOflong adGroupIds = addAdGroupsResponse.getAdGroupIds();
      ArrayOfBatchError adGroupErrors = addAdGroupsResponse.getPartialErrors();
      outputAdGroupsWithPartialErrors(adGroups, adGroupIds, adGroupErrors);

      ArrayOfAd ads = new ArrayOfAd();
      ProductAd productAd =
          new ProductAd() {
            {
              promotionalText = "Free shipping on $99 purchases.";
            }
          };
      ads.getAds().add(productAd);

      AddAdsResponse addAdsResponse = addAds(adGroupIds.getLongs().get(0), ads);
      ArrayOfNullableOflong adIds = addAdsResponse.getAdIds();
      ArrayOfBatchError adErrors = addAdsResponse.getPartialErrors();
      outputAdsWithPartialErrors(ads, adIds, adErrors);

      // Add criterion to the campaign. The criterion is used to limit the campaign to a subset of
      // your product catalog.

      AddCampaignCriterionsResponse addCriterionResponse =
          addCampaignCriterion(campaignIds.getLongs().get(0));
      printCampaignCriterionIdentifiers(
          addCriterionResponse.getCampaignCriterionIds(),
          addCriterionResponse.getNestedPartialErrors());

      addAndUpdateAdGroupCriterion(adGroupIds.getLongs().get(0));
      ApplyProductPartitionActionsResponse applyPartitionActionsResponse =
          addBranchAndLeafCriterion(adGroupIds.getLongs().get(0));

      long rootId = applyPartitionActionsResponse.getAdGroupCriterionIds().getLongs().get(1);
      long electronicsCriterionId =
          applyPartitionActionsResponse.getAdGroupCriterionIds().getLongs().get(8);
      updateBranchAndLeafCriterion(adGroupIds.getLongs().get(0), rootId, electronicsCriterionId);

      // Delete the campaign from the account.

      ArrayOflong deleteCampaignIds = new ArrayOflong();
      deleteCampaignIds.getLongs().add(campaignIds.getLongs().get(0));
      deleteCampaigns(AccountId, deleteCampaignIds);
      outputStatusMessage(String.format("Deleted CampaignId %d\n", campaignIds.getLongs().get(0)));

      // Campaign Management service operations can throw AdApiFaultDetail.
    } catch (AdApiFaultDetail_Exception ex) {
      outputStatusMessage("The operation failed with the following faults:\n");

      for (AdApiError error : ex.getFaultInfo().getErrors().getAdApiErrors()) {
        outputStatusMessage("AdApiError\n");
        outputStatusMessage(
            String.format(
                "Code: %d\nError Code: %s\nMessage: %s\n\n",
                error.getCode(), error.getErrorCode(), error.getMessage()));
      }

      // Campaign Management service operations can throw ApiFaultDetail.
    } catch (ApiFaultDetail_Exception ex) {
      outputStatusMessage("The operation failed with the following faults:\n");

      for (BatchError error : ex.getFaultInfo().getBatchErrors().getBatchErrors()) {
        outputStatusMessage(String.format("BatchError at Index: %d\n", error.getIndex()));
        outputStatusMessage(
            String.format("Code: %d\nMessage: %s\n\n", error.getCode(), error.getMessage()));
      }

      for (OperationError error : ex.getFaultInfo().getOperationErrors().getOperationErrors()) {
        outputStatusMessage("OperationError\n");
        outputStatusMessage(
            String.format("Code: %d\nMessage: %s\n\n", error.getCode(), error.getMessage()));
      }

      // Some Campaign Management service operations such as SetAdExtensionsAssociations can throw
      // EditorialApiFaultDetail.
    } catch (EditorialApiFaultDetail_Exception ex) {
      outputStatusMessage("The operation failed with the following faults:\n");

      for (BatchError error : ex.getFaultInfo().getBatchErrors().getBatchErrors()) {
        outputStatusMessage(String.format("BatchError at Index: %d\n", error.getIndex()));
        outputStatusMessage(
            String.format("Code: %d\nMessage: %s\n\n", error.getCode(), error.getMessage()));
      }

      for (EditorialError error : ex.getFaultInfo().getEditorialErrors().getEditorialErrors()) {
        outputStatusMessage(String.format("EditorialError at Index: %d\n\n", error.getIndex()));
        outputStatusMessage(
            String.format("Code: %d\nMessage: %s\n\n", error.getCode(), error.getMessage()));
        outputStatusMessage(
            String.format(
                "Appealable: %s\nDisapproved Text: %s\nCountry: %s\n\n",
                error.getAppealable(), error.getDisapprovedText(), error.getPublisherCountry()));
      }

      for (OperationError error : ex.getFaultInfo().getOperationErrors().getOperationErrors()) {
        outputStatusMessage("OperationError\n");
        outputStatusMessage(
            String.format("Code: %d\nMessage: %s\n\n", error.getCode(), error.getMessage()));
      }
    } catch (RemoteException ex) {
      outputStatusMessage("Service communication error encountered: ");
      outputStatusMessage(ex.getMessage());
      ex.printStackTrace();
    } catch (Exception ex) {
      outputStatusMessage("Error encountered: ");
      outputStatusMessage(ex.getMessage());
      ex.printStackTrace();
    }
  }
Exemple #19
0
 /**
  * Goes trough the table auction and checks which auctions are over. If the auction is over, finds
  * all bids for that auction, selects the highest bid and sends winning message, also sends to all
  * other users message that auction is over.
  */
 public static void checkAuctionOutcome() {
   // Declaring list of all auctions.
   List<Auction> auctions = finder.all();
   // Declaring variable that represents current date.
   Date currentDate = new Date();
   // Going trough all auctions.
   for (int i = 0; i < auctions.size(); i++) {
     // Declaring variable that represents auction ending date.
     Date auctionEndingDate = auctions.get(i).endingDate;
     // Checking if the auction is active and if the auction ending date is before current date.
     if (auctions.get(i).isActive && auctionEndingDate.before(currentDate)) {
       // Finding all auction bids.
       List<Bid> bids = Bid.getAuctionBids(auctions.get(i));
       // Declaring variable that represents highest bid.
       Bid highestBid = bids.get(0);
       // Declaring string variable that represents winning message.
       String winningMessage =
           "Congratulations!!! You won bitBay auction for item #"
               + auctions.get(i).product.id
               + " - "
               + auctions.get(i).product.name
               + ".\n\r \n\r To proceed with transaction please contact: "
               + auctions.get(i).product.user.email;
       // Declaring and saving winning message.
       Message message =
           new Message(
               CommonHelpers.serviceUser(), highestBid.user, "Auction Winning", winningMessage);
       message.save();
       // Sending SMS notification to auction winner.
       String sms =
           "Congratulations!!! You won bitBay auction for item #"
               + auctions.get(i).product.id
               + " - "
               + auctions.get(i).product.name
               + ". "
               + "This product has been sent to your cart";
       if (highestBid.user.phoneNumber != null) {
         SmsHelper.sendSms(sms, highestBid.user.phoneNumber);
       }
       // After user won on auction create new cart if user don't have one, and put auction item to
       // his cart
       Cart cart = Cart.findCartByUser(highestBid.user);
       if (cart == null) {
         Cart newCart = new Cart();
         newCart.user = highestBid.user;
         newCart.save();
         CartItem cartItem = new CartItem(auctions.get(i).product, highestBid.user, newCart);
         cartItem.save();
       } else {
         CartItem cartItem = new CartItem(auctions.get(i).product, highestBid.user, cart);
         cartItem.save();
       }
       // Declaring string set that will contain emails of all users that have not had highest bid.
       Set<String> bidUsers = new HashSet<>();
       // Adding all user emails to the set.
       for (int j = 0; j < bids.size(); j++) {
         bidUsers.add(bids.get(j).user.email);
       }
       // Removing email of highest bit user from the set.
       bidUsers.remove(highestBid.user.email);
       // Declaring string variable that represents losing message.
       String losingMessage =
           "Biding for item #"
               + auctions.get(i).product.id
               + " - "
               + auctions.get(i).product.name
               + " is over.\n\r \n\r We are sorry to inform you that your bid was not enough.";
       // Declaring iterator list of all user emails.
       Iterator<String> iter = bidUsers.iterator();
       // Going trough all emails and sending message.
       while (iter.hasNext()) {
         User receiver = User.getUserByEmail(iter.next());
         Message msg =
             new Message(CommonHelpers.serviceUser(), receiver, "Auction results", losingMessage);
         msg.save();
       }
       // Setting auction status to inactive.
       auctions.get(i).isActive = false;
       auctions.get(i).update();
     }
   }
 }
  public void testJoinFetch() {
    Session s = openSession();
    Transaction t = s.beginTransaction();
    s.createQuery("delete from Bid").executeUpdate();
    s.createQuery("delete from Comment").executeUpdate();
    s.createQuery("delete from Item").executeUpdate();
    t.commit();
    s.close();

    Category cat = new Category("Photography");
    Item i = new Item(cat, "Camera");
    Bid b = new Bid(i, 100.0f);
    new Bid(i, 105.0f);
    new Comment(i, "This looks like a really good deal");
    new Comment(i, "Is it the latest version?");
    new Comment(i, "<comment deleted>");
    System.out.println(b.getTimestamp());

    s = openSession();
    t = s.beginTransaction();
    s.persist(cat);
    s.persist(i);
    t.commit();
    s.close();

    getSessions().evict(Item.class);

    s = openSession();
    t = s.beginTransaction();
    i = (Item) s.get(Item.class, i.getId());
    assertTrue(Hibernate.isInitialized(i.getBids()));
    assertEquals(i.getBids().size(), 2);
    assertTrue(Hibernate.isInitialized(i.getComments()));
    assertEquals(i.getComments().size(), 3);
    t.commit();
    s.close();

    getSessions().evict(Bid.class);

    s = openSession();
    t = s.beginTransaction();
    b = (Bid) s.get(Bid.class, b.getId());
    assertTrue(Hibernate.isInitialized(b.getItem()));
    assertTrue(Hibernate.isInitialized(b.getItem().getComments()));
    assertEquals(b.getItem().getComments().size(), 3);
    System.out.println(b.getTimestamp());
    t.commit();
    s.close();

    getSessions().evictCollection(Item.class.getName() + ".bids");

    s = openSession();
    t = s.beginTransaction();
    i =
        (Item)
            s.createCriteria(Item.class)
                .setFetchMode("bids", FetchMode.SELECT)
                .setFetchMode("comments", FetchMode.SELECT)
                .uniqueResult();
    assertFalse(Hibernate.isInitialized(i.getBids()));
    assertFalse(Hibernate.isInitialized(i.getComments()));
    b = (Bid) i.getBids().iterator().next();
    assertTrue(Hibernate.isInitialized(b.getItem()));
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    i =
        (Item)
            s.createQuery("from Item i left join fetch i.bids left join fetch i.comments")
                .uniqueResult();
    assertTrue(Hibernate.isInitialized(i.getBids()));
    assertTrue(Hibernate.isInitialized(i.getComments()));
    assertEquals(i.getComments().size(), 3);
    assertEquals(i.getBids().size(), 2);
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    Object[] row = (Object[]) s.getNamedQuery(Item.class.getName() + ".all").list().get(0);
    i = (Item) row[0];
    assertTrue(Hibernate.isInitialized(i.getBids()));
    assertTrue(Hibernate.isInitialized(i.getComments()));
    assertEquals(i.getComments().size(), 3);
    assertEquals(i.getBids().size(), 2);
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    i = (Item) s.createCriteria(Item.class).uniqueResult();
    assertTrue(Hibernate.isInitialized(i.getBids()));
    assertTrue(Hibernate.isInitialized(i.getComments()));
    assertEquals(i.getComments().size(), 3);
    assertEquals(i.getBids().size(), 2);
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    List bids =
        s.createQuery("from Bid b left join fetch b.item i left join fetch i.category").list();
    Bid bid = (Bid) bids.get(0);
    assertTrue(Hibernate.isInitialized(bid.getItem()));
    assertTrue(Hibernate.isInitialized(bid.getItem().getCategory()));
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    List pairs = s.createQuery("from Item i left join i.bids b left join fetch i.category").list();
    Item item = (Item) ((Object[]) pairs.get(0))[0];
    assertFalse(Hibernate.isInitialized(item.getBids()));
    assertTrue(Hibernate.isInitialized(item.getCategory()));
    s.clear();
    pairs = s.createQuery("from Item i left join i.bids b left join i.category").list();
    item = (Item) ((Object[]) pairs.get(0))[0];
    assertFalse(Hibernate.isInitialized(item.getBids()));
    assertTrue(Hibernate.isInitialized(item.getCategory()));
    s.clear();
    pairs = s.createQuery("from Bid b left join b.item i left join fetch i.category").list();
    bid = (Bid) ((Object[]) pairs.get(0))[0];
    assertTrue(Hibernate.isInitialized(bid.getItem()));
    assertTrue(Hibernate.isInitialized(bid.getItem().getCategory()));
    s.clear();
    pairs = s.createQuery("from Bid b left join b.item i left join i.category").list();
    bid = (Bid) ((Object[]) pairs.get(0))[0];
    assertTrue(Hibernate.isInitialized(bid.getItem()));
    assertTrue(Hibernate.isInitialized(bid.getItem().getCategory()));
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    s.createQuery("delete from Bid").executeUpdate();
    s.createQuery("delete from Comment").executeUpdate();
    s.createQuery("delete from Item").executeUpdate();
    s.createQuery("delete from Category").executeUpdate();
    t.commit();
    s.close();
  }
 public void take(Bid bid) {
   if (bids.isEmpty() || canTakeBidFrom(bid.getUser())) {
     bids.add(bid);
   }
 }
  @Test
  @SuppressWarnings({"unchecked"})
  @SkipForDialect(
      value = {PostgreSQL81Dialect.class},
      comment = "doesn't like boolean=1")
  public void testLazy() {
    Session s = openSession();
    Transaction t = s.beginTransaction();
    Auction a = new Auction();
    a.setDescription("an auction for something");
    a.setEnd(new Date());
    Bid b = new Bid();
    b.setAmount(new BigDecimal(123.34).setScale(19, BigDecimal.ROUND_DOWN));
    b.setSuccessful(true);
    b.setDatetime(new Date());
    b.setItem(a);
    a.getBids().add(b);
    a.setSuccessfulBid(b);
    s.persist(b);
    t.commit();
    s.close();

    Long aid = a.getId();
    Long bid = b.getId();

    s = openSession();
    t = s.beginTransaction();
    b = (Bid) s.load(Bid.class, bid);
    assertFalse(Hibernate.isInitialized(b));
    a = (Auction) s.get(Auction.class, aid);
    assertFalse(Hibernate.isInitialized(a.getBids()));
    assertTrue(Hibernate.isInitialized(a.getSuccessfulBid()));
    assertSame(a.getBids().iterator().next(), b);
    assertSame(b, a.getSuccessfulBid());
    assertTrue(Hibernate.isInitialized(b));
    assertTrue(b.isSuccessful());
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    b = (Bid) s.load(Bid.class, bid);
    assertFalse(Hibernate.isInitialized(b));
    a = (Auction) s.createQuery("from Auction a left join fetch a.bids").uniqueResult();
    assertTrue(Hibernate.isInitialized(b));
    assertTrue(Hibernate.isInitialized(a.getBids()));
    assertSame(b, a.getSuccessfulBid());
    assertSame(a.getBids().iterator().next(), b);
    assertTrue(b.isSuccessful());
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    b = (Bid) s.load(Bid.class, bid);
    a = (Auction) s.load(Auction.class, aid);
    assertFalse(Hibernate.isInitialized(b));
    assertFalse(Hibernate.isInitialized(a));
    s.createQuery("from Auction a left join fetch a.successfulBid").list();
    assertTrue(Hibernate.isInitialized(b));
    assertTrue(Hibernate.isInitialized(a));
    assertSame(b, a.getSuccessfulBid());
    assertFalse(Hibernate.isInitialized(a.getBids()));
    assertSame(a.getBids().iterator().next(), b);
    assertTrue(b.isSuccessful());
    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    b = (Bid) s.load(Bid.class, bid);
    a = (Auction) s.load(Auction.class, aid);
    assertFalse(Hibernate.isInitialized(b));
    assertFalse(Hibernate.isInitialized(a));
    assertSame(s.get(Bid.class, bid), b);
    assertTrue(Hibernate.isInitialized(b));
    assertSame(s.get(Auction.class, aid), a);
    assertTrue(Hibernate.isInitialized(a));
    assertSame(b, a.getSuccessfulBid());
    assertFalse(Hibernate.isInitialized(a.getBids()));
    assertSame(a.getBids().iterator().next(), b);
    assertTrue(b.isSuccessful());
    t.commit();
    s.close();
  }
 public void loadWithBids(List<Bid> bids) {
   if (bidding == null) return;
   bidding.loadWithBids(bids);
 }