/*
* Copyright 2012 Ixonos Plc, Finland. All rights reserved.
*
* This file is part of Kohti kumppanuutta.
*
* This file is licensed under GNU LGPL version 3.
* Please see the 'license.txt' file in the root directory of the package you received.
* If you did not receive a license, please contact the copyright holder
* (http://www.ixonos.com/).
*
*/
package fi.koku.services.entity.kks.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.persistence.Version;
/**
* Entity for single KKS entry
*
* @author Ixonos / tuomape
*
*/
@Entity
@NamedQueries({
@NamedQuery(name = KksEntry.NAMED_QUERY_GET_ENTRIES_BY_IDS, query = "FROM KksEntry k WHERE k.customer =:customer AND k.id IN (:ids)"),
@NamedQuery(name = KksEntry.NAMED_QUERY_GET_ENTRIES_BY_IDS_WITH_COLLECTIONS, query = "FROM KksEntry k WHERE k.customer =:customer AND k.id IN (:ids) AND k.kksCollection.id IN (:cIds)"),
@NamedQuery(name = KksEntry.NAMED_QUERY_DELETE_ENTRIES_BY_IDS, query = "DELETE FROM KksEntry k WHERE k.id IN (:ids)"),
@NamedQuery(name = KksEntry.NAMED_QUERY_GET_ENTRY_BY_CLASS_AND_COLLECTION, query = "FROM KksEntry k WHERE k.entryClassId =:entryClassId AND k.kksCollection.id =:collectionId") })
@Table(name = "kks_entry")
public class KksEntry implements Serializable {
public static final String NAMED_QUERY_GET_ENTRIES_BY_IDS = "getAllEntriesByIds";
public static final String NAMED_QUERY_GET_ENTRIES_BY_IDS_WITH_COLLECTIONS = "getAllEntriesByIdsWithCollections";
public static final String NAMED_QUERY_DELETE_ENTRIES_BY_IDS = "deleteAllEntriesByIds";
public static final String NAMED_QUERY_GET_ENTRY_BY_CLASS_AND_COLLECTION = "getEntryByClassAndCollection";
private static final long serialVersionUID = -4758238731645701773L;
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date modified;
@Column(nullable = false)
private String creator;
@Version
private int version;
@Column(name = "entry_class_id", nullable = false)
private Integer entryClassId;
@OneToMany(mappedBy = "entry", cascade = CascadeType.ALL)
private List<KksValue> values;
@Column(nullable = false)
private String customer;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "collection_id")
private KksCollection kksCollection;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "kks_entry_tags", joinColumns = @JoinColumn(name = "entry_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "tag_id", referencedColumnName = "tag_id"))
private List<KksTag> tags;
@Transient
private List<Integer> tagIds;
public KksEntry() {
values = new ArrayList<KksValue>();
tags = new ArrayList<KksTag>();
tagIds = new ArrayList<Integer>();
}
public KksEntry(KksEntry e, KksCollection c) {
values = new ArrayList<KksValue>();
tags = new ArrayList<KksTag>();
tagIds = new ArrayList<Integer>();
id = e.getId();
modified = e.getModified();
creator = e.getCreator();
version = e.getVersion();
entryClassId = e.getEntryClassId();
customer = e.getCustomer();
kksCollection = c;
for (KksValue v : e.getValues()) {
values.add(new KksValue(v, this));
}
for (KksTag t : e.getTags()) {
tags.add(new KksTag(t));
}
tagIds = e.getTagIds();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
public Integer getEntryClassId() {
return entryClassId;
}
public void setEntryClassId(Integer entryClassId) {
this.entryClassId = entryClassId;
}
public List<KksValue> getValues() {
return values;
}
public void setValues(List<KksValue> values) {
this.values = values;
}
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public Date getModified() {
return modified;
}
public void setModified(Date modified) {
this.modified = modified;
}
public KksCollection getKksCollection() {
return kksCollection;
}
public void setKksCollection(KksCollection kksCollection) {
this.kksCollection = kksCollection;
}
public List<KksTag> getTags() {
return tags;
}
public void setTags(List<KksTag> tags) {
this.tags = tags;
}
public void addKksTag(KksTag tag) {
this.tags.add(tag);
}
public void removeKksTag(KksTag tag) {
List<KksTag> tmp = new ArrayList<KksTag>(tags);
for (int i = 0; i < tmp.size(); i++) {
KksTag t = tmp.get(i);
if (t.getId().equals(tag.getId())) {
tags.remove(i);
break;
}
}
}
public void addKksValue(KksValue val) {
this.values.add(val);
}
public void removeKksValue(KksValue val) {
List<KksValue> tmp = new ArrayList<KksValue>(values);
for (int i = 0; i < tmp.size(); i++) {
KksValue t = tmp.get(i);
if (t != null && t.getId().equals(val.getId())) {
values.remove(i);
break;
}
}
}
public void addTag(KksTag t) {
tags.add(t);
}
public List<Integer> getTagIds() {
return tagIds;
}
public void setTagIds(List<Integer> tagIds) {
this.tagIds = tagIds;
}
public void clearTags() {
tags.clear();
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("id: ").append(getId()).append(" classId: ").append(getEntryClassId()).append(" values: ")
.append(getValues());
return sb.toString();
}
}