package org.openlca.core.model;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "tbl_project_variants")
public class ProjectVariant extends AbstractEntity {
@Column(name = "name")
private String name;
@OneToOne
@JoinColumn(name = "f_product_system")
private ProductSystem productSystem;
@OneToOne
@JoinColumn(name = "f_unit")
private Unit unit;
@OneToOne
@JoinColumn(name = "f_flow_property_factor")
private FlowPropertyFactor flowPropertyFactor;
@Column(name = "amount")
private double amount;
@Column(name = "allocation_method")
@Enumerated(EnumType.STRING)
private AllocationMethod allocationMethod;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "f_owner")
private List<ParameterRedef> parameterRedefs = new ArrayList<>();
@Override
public ProjectVariant clone() {
ProjectVariant clone = new ProjectVariant();
clone.setName(getName());
clone.setProductSystem(getProductSystem());
clone.setUnit(getUnit());
clone.setFlowPropertyFactor(getFlowPropertyFactor());
clone.setAmount(getAmount());
clone.setAllocationMethod(getAllocationMethod());
for (ParameterRedef redef : getParameterRedefs())
clone.getParameterRedefs().add(redef.clone());
return clone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ProductSystem getProductSystem() {
return productSystem;
}
public void setProductSystem(ProductSystem productSystem) {
this.productSystem = productSystem;
}
public List<ParameterRedef> getParameterRedefs() {
return parameterRedefs;
}
public Unit getUnit() {
return unit;
}
public void setUnit(Unit unit) {
this.unit = unit;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public FlowPropertyFactor getFlowPropertyFactor() {
return flowPropertyFactor;
}
public void setFlowPropertyFactor(FlowPropertyFactor flowPropertyFactor) {
this.flowPropertyFactor = flowPropertyFactor;
}
public AllocationMethod getAllocationMethod() {
return allocationMethod;
}
public void setAllocationMethod(AllocationMethod allocationMethod) {
this.allocationMethod = allocationMethod;
}
}