content: /**
   *  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.Table;
  import javax.persistence.TableGenerator;
  import javax.persistence.Transient;
  
  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.QuoteDataBean;
  import org.apache.aries.samples.ariestrader.util.Log;
  import org.apache.aries.samples.ariestrader.util.TradeConfig;
  
  @Entity(name = "holdingejb")
  @Table(name = "holdingejb")
  @NamedQueries( {
  		@NamedQuery(name = "holdingejb.findByPurchaseprice", query = "SELECT h FROM holdingejb h WHERE h.purchasePrice = :purchaseprice"),
  		@NamedQuery(name = "holdingejb.findByHoldingid", query = "SELECT h FROM holdingejb h WHERE h.holdingID = :holdingid"),
  		@NamedQuery(name = "holdingejb.findByQuantity", query = "SELECT h FROM holdingejb h WHERE h.quantity = :quantity"),
  		@NamedQuery(name = "holdingejb.findByPurchasedate", query = "SELECT h FROM holdingejb h WHERE h.purchaseDate = :purchasedate"),
  		@NamedQuery(name = "holdingejb.holdingsByUserID", query = "SELECT h FROM holdingejb h where h.account.profile.userID = :userID") })
  public class HoldingDataBeanImpl implements HoldingDataBean, Serializable {
  
  	/* persistent/relationship fields */
  
  	@TableGenerator(name = "holdingIdGen", table = "KEYGENEJB", pkColumnName = "KEYNAME", valueColumnName = "KEYVAL", pkColumnValue = "holding", allocationSize = 1000)
  	@Id
  	@GeneratedValue(strategy = GenerationType.TABLE, generator = "holdingIdGen")
  	@Column(name = "HOLDINGID", nullable = false)
  	private Integer holdingID; /* holdingID */
  
  	@Column(name = "QUANTITY", nullable = false)
  	private double quantity; /* quantity */
  
  	@Column(name = "PURCHASEPRICE")
  	private BigDecimal purchasePrice; /* purchasePrice */
  
  	@Column(name = "PURCHASEDATE")
  	private Date purchaseDate; /* purchaseDate */
  	@Transient
  	private String quoteID; /* Holding() ---> Quote(1) */
  
  	@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;
  
  	public HoldingDataBeanImpl() {
  	}
  
  	public HoldingDataBeanImpl(Integer holdingID, double quantity,
  			BigDecimal purchasePrice, Date purchaseDate, String quoteID) {
  		setHoldingID(holdingID);
  		setQuantity(quantity);
  		setPurchasePrice(purchasePrice);
  		setPurchaseDate(purchaseDate);
  		setQuoteID(quoteID);
  	}
  
  	public HoldingDataBeanImpl(double quantity, BigDecimal purchasePrice,
  			Date purchaseDate, AccountDataBean account, QuoteDataBean quote) {
  		setQuantity(quantity);
  		setPurchasePrice(purchasePrice);
  		setPurchaseDate(purchaseDate);
  		setAccount(account);
  		setQuote(quote);
  	}
  
  	public static HoldingDataBean getRandomInstance() {
  		return new HoldingDataBeanImpl(new Integer(TradeConfig.rndInt(100000)), // holdingID
  				TradeConfig.rndQuantity(), // quantity
  				TradeConfig.rndBigDecimal(1000.0f), // purchasePrice
  				new java.util.Date(TradeConfig.rndInt(Integer.MAX_VALUE)), // purchaseDate
  				TradeConfig.rndSymbol() // symbol
  		);
  	}
  
  	public String toString() {
  		return "\n\tHolding Data for holding: " + getHoldingID()
  				+ "\n\t\t      quantity:" + getQuantity()
  				+ "\n\t\t purchasePrice:" + getPurchasePrice()
  				+ "\n\t\t  purchaseDate:" + getPurchaseDate()
  				+ "\n\t\t       quoteID:" + getQuoteID();
  	}
  
  	public String toHTML() {
  		return "<BR>Holding Data for holding: " + getHoldingID() + "</B>"
  				+ "<LI>      quantity:" + getQuantity() + "</LI>"
  				+ "<LI> purchasePrice:" + getPurchasePrice() + "</LI>"
  				+ "<LI>  purchaseDate:" + getPurchaseDate() + "</LI>"
  				+ "<LI>       quoteID:" + getQuoteID() + "</LI>";
  	}
  
  	public void print() {
  		Log.log(this.toString());
  	}
  
  	public Integer getHoldingID() {
  		return holdingID;
  	}
  
  	public void setHoldingID(Integer holdingID) {
  		this.holdingID = holdingID;
  	}
  
  	public double getQuantity() {
  		return quantity;
  	}
  
  	public void setQuantity(double quantity) {
  		this.quantity = quantity;
  	}
  
  	public BigDecimal getPurchasePrice() {
  		return purchasePrice;
  	}
  
  	public void setPurchasePrice(BigDecimal purchasePrice) {
  		this.purchasePrice = purchasePrice;
  	}
  
  	public Date getPurchaseDate() {
  		return purchaseDate;
  	}
  
  	public void setPurchaseDate(Date purchaseDate) {
  		this.purchaseDate = purchaseDate;
  	}
  
  	public String getQuoteID() {
  		if (quote != null) {
  			return quote.getSymbol();
  		}
  		return quoteID;
  	}
  
  	public void setQuoteID(String quoteID) {
  		this.quoteID = quoteID;
  	}
  
  	public AccountDataBean getAccount() {
  		return account;
  	}
  
  	public void setAccount(AccountDataBean account) {
  		this.account = (AccountDataBeanImpl) account;
  	}
  
  	/*
  	 * Disabled for D185273 public String getSymbol() { return getQuoteID(); }
  	 */
  
  	public QuoteDataBean getQuote() {
  		return quote;
  	}
  
  	public void setQuote(QuoteDataBean quote) {
  		this.quote = (QuoteDataBeanImpl) quote;
  	}
  
  	@Override
  	public int hashCode() {
  		int hash = 0;
  		hash += (this.holdingID != null ? this.holdingID.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 HoldingDataBeanImpl)) {
  			return false;
  		}
  		HoldingDataBeanImpl other = (HoldingDataBeanImpl) object;
  		if (this.holdingID != other.holdingID
  				&& (this.holdingID == null || !this.holdingID
  						.equals(other.holdingID)))
  			return false;
  		return true;
  	}
  }
  