package org.openlca.core.model; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name = "tbl_product_systems") public class ProductSystem extends CategorizedEntity { @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name = "f_owner") private final List<ParameterRedef> parameterRedefs = new ArrayList<>(); @ElementCollection @CollectionTable(name = "tbl_process_links", joinColumns = @JoinColumn(name = "f_product_system")) private final List<ProcessLink> processLinks = new ArrayList<>(); @OneToOne @JoinColumn(name = "f_reference_exchange") private Exchange referenceExchange; @OneToOne @JoinColumn(name = "f_reference_process") private Process referenceProcess; @Column(name = "target_amount") private double targetAmount; @OneToOne @JoinColumn(name = "f_target_flow_property_factor") private FlowPropertyFactor targetFlowPropertyFactor; @OneToOne @JoinColumn(name = "f_target_unit") private Unit targetUnit; @ElementCollection @Column(name = "f_process") @CollectionTable(name = "tbl_product_system_processes", joinColumns = { @JoinColumn(name = "f_product_system") }) private final Set<Long> processes = new HashSet<>(); @Column public Double cutoff; @Override public ProductSystem clone() { ProductSystem clone = new ProductSystem(); Util.cloneRootFields(this, clone); clone.setCategory(getCategory()); clone.setReferenceExchange(getReferenceExchange()); clone.setReferenceProcess(getReferenceProcess()); clone.setTargetAmount(getTargetAmount()); clone.getProcesses().addAll(getProcesses()); for (ProcessLink processLink : getProcessLinks()) clone.getProcessLinks().add(processLink.clone()); for (ParameterRedef redef : getParameterRedefs()) clone.getParameterRedefs().add(redef.clone()); clone.setTargetFlowPropertyFactor(getTargetFlowPropertyFactor()); clone.setTargetUnit(getTargetUnit()); return clone; } public Exchange getReferenceExchange() { return referenceExchange; } public Process getReferenceProcess() { return referenceProcess; } public double getTargetAmount() { return targetAmount; } public FlowPropertyFactor getTargetFlowPropertyFactor() { return targetFlowPropertyFactor; } public Unit getTargetUnit() { return targetUnit; } public List<ParameterRedef> getParameterRedefs() { return parameterRedefs; } public Set<Long> getProcesses() { return processes; } public List<ProcessLink> getProcessLinks() { return processLinks; } public void setReferenceExchange(Exchange referenceExchange) { this.referenceExchange = referenceExchange; } public void setReferenceProcess(Process referenceProcess) { this.referenceProcess = referenceProcess; } public void setTargetAmount(double targetAmount) { this.targetAmount = targetAmount; } public void setTargetFlowPropertyFactor( FlowPropertyFactor targetFlowPropertyFactor) { this.targetFlowPropertyFactor = targetFlowPropertyFactor; } public void setTargetUnit(Unit targetUnit) { this.targetUnit = targetUnit; } }