blob: 4e98d34b7de604f1d09dd566917e55583547fdfb [file] [log] [blame]
/**
* 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.openjpa.integration.daytrader;
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.geronimo.samples.daytrader.util.Log;
// import org.apache.geronimo.samples.daytrader.util.TradeConfig;
@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"),
// Never used query related to FK constraint on holdingejb. the FK constraint will cause EJB3 runtime mode failure. So comment it.
//@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 OrderDataBean implements Serializable
{
private static final long serialVersionUID = 7374883697399608766L;
@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")
private String orderType; /* orderType (buy, sell, etc.) */
@Column(name = "ORDERSTATUS")
private String orderStatus; /* orderStatus (open, processing, completed, closed, cancelled) */
@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 AccountDataBean account;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="QUOTE_SYMBOL")
private QuoteDataBean quote;
// Cause sell operation failed, see JIRA DAYTRADER-63 for details.
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "HOLDING_HOLDINGID")
// Cause sell operation failed, see JIRA DAYTRADER-63 for details.
//@Transient
private HoldingDataBean holding;
// @Version
// private Integer optLock;
/* Fields for relationship fields are not kept in the Data Bean */
@Transient
private String symbol;
public OrderDataBean() {
}
public OrderDataBean(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 OrderDataBean(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 OrderDataBean(
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()
);
}
@Override
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 = account;
}
public QuoteDataBean getQuote() {
return quote;
}
public void setQuote(QuoteDataBean quote) {
this.quote = quote;
}
public HoldingDataBean getHolding() {
return holding;
}
public void setHolding(HoldingDataBean holding) {
this.holding = 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 OrderDataBean)) {
return false;
}
OrderDataBean other = (OrderDataBean)object;
if (this.orderID != other.orderID && (this.orderID == null || !this.orderID.equals(other.orderID))) return false;
return true;
}
}