/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.aries.samples.ariestrader.entities; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import org.apache.aries.samples.ariestrader.util.Log; import org.apache.aries.samples.ariestrader.util.TradeConfig; import org.apache.aries.samples.ariestrader.api.persistence.AccountDataBean; import org.apache.aries.samples.ariestrader.api.persistence.HoldingDataBean; import org.apache.aries.samples.ariestrader.api.persistence.OrderDataBean; import org.apache.aries.samples.ariestrader.api.persistence.QuoteDataBean; @Entity(name = "orderejb") @Table(name = "orderejb") @NamedQueries( { @NamedQuery(name = "orderejb.findByOrderfee", query = "SELECT o FROM orderejb o WHERE o.orderFee = :orderfee"), @NamedQuery(name = "orderejb.findByCompletiondate", query = "SELECT o FROM orderejb o WHERE o.completionDate = :completiondate"), @NamedQuery(name = "orderejb.findByOrdertype", query = "SELECT o FROM orderejb o WHERE o.orderType = :ordertype"), @NamedQuery(name = "orderejb.findByOrderstatus", query = "SELECT o FROM orderejb o WHERE o.orderStatus = :orderstatus"), @NamedQuery(name = "orderejb.findByPrice", query = "SELECT o FROM orderejb o WHERE o.price = :price"), @NamedQuery(name = "orderejb.findByQuantity", query = "SELECT o FROM orderejb o WHERE o.quantity = :quantity"), @NamedQuery(name = "orderejb.findByOpendate", query = "SELECT o FROM orderejb o WHERE o.openDate = :opendate"), @NamedQuery(name = "orderejb.findByOrderid", query = "SELECT o FROM orderejb o WHERE o.orderID = :orderid"), @NamedQuery(name = "orderejb.findByAccountAccountid", query = "SELECT o FROM orderejb o WHERE o.account.accountID = :accountAccountid"), @NamedQuery(name = "orderejb.findByQuoteSymbol", query = "SELECT o FROM orderejb o WHERE o.quote.symbol = :quoteSymbol"), @NamedQuery(name = "orderejb.findByHoldingHoldingid", query = "SELECT o FROM orderejb o WHERE o.holding.holdingID = :holdingHoldingid"), @NamedQuery(name = "orderejb.closedOrders", query = "SELECT o FROM orderejb o WHERE o.orderStatus = 'closed' AND o.account.profile.userID = :userID"), @NamedQuery(name = "orderejb.completeClosedOrders", query = "UPDATE orderejb o SET o.orderStatus = 'completed' WHERE o.orderStatus = 'closed' AND o.account.profile.userID = :userID") }) public class OrderDataBeanImpl implements OrderDataBean, Serializable { @TableGenerator(name = "orderIdGen", table = "KEYGENEJB", pkColumnName = "KEYNAME", valueColumnName = "KEYVAL", pkColumnValue = "order", allocationSize = 1000) @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "orderIdGen") @Column(name = "ORDERID", nullable = false) private Integer orderID; /* orderID */ @Column(name = "ORDERTYPE", length = 255) private String orderType; /* orderType (buy, sell, etc.) */ @Column(name = "ORDERSTATUS", length = 255) private String orderStatus; /* * orderStatus (open, processing, completed, * closed, canceled) */ @Column(name = "OPENDATE") @Temporal(TemporalType.TIMESTAMP) private Date openDate; /* openDate (when the order was entered) */ @Column(name = "COMPLETIONDATE") @Temporal(TemporalType.TIMESTAMP) private Date completionDate; /* completionDate */ @Column(name = "QUANTITY", nullable = false) private double quantity; /* quantity */ @Column(name = "PRICE") private BigDecimal price; /* price */ @Column(name = "ORDERFEE") private BigDecimal orderFee; /* price */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ACCOUNT_ACCOUNTID") private AccountDataBeanImpl account; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "QUOTE_SYMBOL", columnDefinition="VARCHAR(255)") private QuoteDataBeanImpl quote; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "HOLDING_HOLDINGID") private HoldingDataBeanImpl holding; @Transient private String symbol; public OrderDataBeanImpl() { } public OrderDataBeanImpl(Integer orderID, String orderType, String orderStatus, Date openDate, Date completionDate, double quantity, BigDecimal price, BigDecimal orderFee, String symbol) { setOrderID(orderID); setOrderType(orderType); setOrderStatus(orderStatus); setOpenDate(openDate); setCompletionDate(completionDate); setQuantity(quantity); setPrice(price); setOrderFee(orderFee); setSymbol(symbol); } public OrderDataBeanImpl(String orderType, String orderStatus, Date openDate, Date completionDate, double quantity, BigDecimal price, BigDecimal orderFee, AccountDataBean account, QuoteDataBean quote, HoldingDataBean holding) { setOrderType(orderType); setOrderStatus(orderStatus); setOpenDate(openDate); setCompletionDate(completionDate); setQuantity(quantity); setPrice(price); setOrderFee(orderFee); setAccount(account); setQuote(quote); setHolding(holding); } public static OrderDataBean getRandomInstance() { return new OrderDataBeanImpl(new Integer(TradeConfig.rndInt(100000)), TradeConfig.rndBoolean() ? "buy" : "sell", "open", new java.util.Date(TradeConfig.rndInt(Integer.MAX_VALUE)), new java.util.Date(TradeConfig.rndInt(Integer.MAX_VALUE)), TradeConfig.rndQuantity(), TradeConfig.rndBigDecimal(1000.0f), TradeConfig.rndBigDecimal(1000.0f), TradeConfig.rndSymbol()); } public String toString() { return "Order " + getOrderID() + "\n\t orderType: " + getOrderType() + "\n\t orderStatus: " + getOrderStatus() + "\n\t openDate: " + getOpenDate() + "\n\t completionDate: " + getCompletionDate() + "\n\t quantity: " + getQuantity() + "\n\t price: " + getPrice() + "\n\t orderFee: " + getOrderFee() + "\n\t symbol: " + getSymbol(); } public String toHTML() { return "<BR>Order <B>" + getOrderID() + "</B>" + "<LI> orderType: " + getOrderType() + "</LI>" + "<LI> orderStatus: " + getOrderStatus() + "</LI>" + "<LI> openDate: " + getOpenDate() + "</LI>" + "<LI> completionDate: " + getCompletionDate() + "</LI>" + "<LI> quantity: " + getQuantity() + "</LI>" + "<LI> price: " + getPrice() + "</LI>" + "<LI> orderFee: " + getOrderFee() + "</LI>" + "<LI> symbol: " + getSymbol() + "</LI>"; } public void print() { Log.log(this.toString()); } public Integer getOrderID() { return orderID; } public void setOrderID(Integer orderID) { this.orderID = orderID; } public String getOrderType() { return orderType; } public void setOrderType(String orderType) { this.orderType = orderType; } public String getOrderStatus() { return orderStatus; } public void setOrderStatus(String orderStatus) { this.orderStatus = orderStatus; } public Date getOpenDate() { return openDate; } public void setOpenDate(Date openDate) { this.openDate = openDate; } public Date getCompletionDate() { return completionDate; } public void setCompletionDate(Date completionDate) { this.completionDate = completionDate; } public double getQuantity() { return quantity; } public void setQuantity(double quantity) { this.quantity = quantity; } public BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } public BigDecimal getOrderFee() { return orderFee; } public void setOrderFee(BigDecimal orderFee) { this.orderFee = orderFee; } public String getSymbol() { if (quote != null) { return quote.getSymbol(); } return symbol; } public void setSymbol(String symbol) { this.symbol = symbol; } public AccountDataBean getAccount() { return account; } public void setAccount(AccountDataBean account) { this.account = (AccountDataBeanImpl) account; } public QuoteDataBean getQuote() { return quote; } public void setQuote(QuoteDataBean quote) { this.quote = (QuoteDataBeanImpl) quote; } public HoldingDataBean getHolding() { return holding; } public void setHolding(HoldingDataBean holding) { this.holding = (HoldingDataBeanImpl) holding; } public boolean isBuy() { String orderType = getOrderType(); if (orderType.compareToIgnoreCase("buy") == 0) return true; return false; } public boolean isSell() { String orderType = getOrderType(); if (orderType.compareToIgnoreCase("sell") == 0) return true; return false; } public boolean isOpen() { String orderStatus = getOrderStatus(); if ((orderStatus.compareToIgnoreCase("open") == 0) || (orderStatus.compareToIgnoreCase("processing") == 0)) return true; return false; } public boolean isCompleted() { String orderStatus = getOrderStatus(); if ((orderStatus.compareToIgnoreCase("completed") == 0) || (orderStatus.compareToIgnoreCase("alertcompleted") == 0) || (orderStatus.compareToIgnoreCase("cancelled") == 0)) return true; return false; } public boolean isCancelled() { String orderStatus = getOrderStatus(); if (orderStatus.compareToIgnoreCase("cancelled") == 0) return true; return false; } public void cancel() { setOrderStatus("cancelled"); } @Override public int hashCode() { int hash = 0; hash += (this.orderID != null ? this.orderID.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are // not set if (!(object instanceof OrderDataBeanImpl)) { return false; } OrderDataBeanImpl other = (OrderDataBeanImpl) object; if (this.orderID != other.orderID && (this.orderID == null || !this.orderID.equals(other.orderID))) return false; return true; } }