/** * 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( 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 = 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; } }