/******************************************************************************* | |
* Copyright (c) 2012 Oracle. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial impl | |
******************************************************************************/ | |
package model; | |
import java.io.Serializable; | |
import java.util.ArrayList; | |
import java.util.List; | |
import javax.persistence.Basic; | |
import javax.persistence.ElementCollection; | |
import javax.persistence.Embedded; | |
import javax.persistence.Entity; | |
import javax.persistence.FetchType; | |
import javax.persistence.GeneratedValue; | |
import javax.persistence.Id; | |
import javax.persistence.ManyToOne; | |
import javax.persistence.Version; | |
import org.eclipse.persistence.nosql.annotations.DataFormatType; | |
import org.eclipse.persistence.nosql.annotations.Field; | |
import org.eclipse.persistence.nosql.annotations.NoSql; | |
/** | |
* Order, stored as a root JSON object, nesting its order lines in the sane document. | |
* @author James Sutherland | |
*/ | |
@Entity | |
@NoSql(dataFormat=DataFormatType.MAPPED) | |
public class Order implements Serializable { | |
/* The id uses the generated OID (UUID) from Mongo. */ | |
@Id | |
@GeneratedValue | |
@Field(name="_id") | |
private String id; | |
/* Optimistic locking is supported. */ | |
@Version | |
private long version; | |
@Basic | |
private String description; | |
@Basic | |
private double totalCost = 0; | |
/* A nested embeddable value is stored as Embedded. */ | |
@Embedded | |
private Address billingAddress; | |
@Embedded | |
private Address shippingAddress; | |
/* Nested embeddable values are stored as ElementCollection. */ | |
@ElementCollection | |
private List<OrderLine> orderLines = new ArrayList<OrderLine>(); | |
/* Relationships are supported, the id is stored as a foreign key, for OneToMany a collection of ids would be stored. */ | |
@ManyToOne(fetch=FetchType.LAZY) | |
private Customer customer; | |
public Order() { | |
} | |
public String getId() { | |
return id; | |
} | |
public void setId(String id) { | |
this.id = id; | |
} | |
public long getVersion() { | |
return version; | |
} | |
public void setVersion(long version) { | |
this.version = version; | |
} | |
public String getDescription() { | |
return description; | |
} | |
public void setDescription(String description) { | |
this.description = description; | |
} | |
public double getTotalCost() { | |
return totalCost; | |
} | |
public void setTotalCost(double totalCost) { | |
this.totalCost = totalCost; | |
} | |
public List<OrderLine> getOrderLines() { | |
return orderLines; | |
} | |
public void setOrderLines(List<OrderLine> orderLines) { | |
this.orderLines = orderLines; | |
} | |
public Customer getCustomer() { | |
return customer; | |
} | |
public void setCustomer(Customer customer) { | |
this.customer = customer; | |
} | |
public Address getBillingAddress() { | |
return billingAddress; | |
} | |
public void setBillingAddress(Address billingAddress) { | |
this.billingAddress = billingAddress; | |
} | |
public Address getShippingAddress() { | |
return shippingAddress; | |
} | |
public void setShippingAddress(Address shippingAddress) { | |
this.shippingAddress = shippingAddress; | |
} | |
/** | |
* Add the order line to the order, and set the back reference and update the order cost. | |
*/ | |
public void addOrderLine(OrderLine orderLine) { | |
getOrderLines().add(orderLine); | |
orderLine.setLineNumber(getOrderLines().size()); | |
setTotalCost(getTotalCost() + orderLine.getCost()); | |
} | |
public String toString() { | |
return "Order(" + description + ", " + totalCost + ")"; | |
} | |
} |